List a pull request's activity timeline
GET/api/repos/{owner}/{repo}/pulls/{number}/timeline
listPullRequestTimeline
The pull request's activity, oldest first: opened, each push, each review, the merge, and the recorded transitions — closed, reopened (mirrors), draft and ready-for-review, title and base changes, auto-merge enabled and disabled (with the reason when it was not the user's own). Comments are listed by the comments endpoint; interleave the two by timestamp. Transitions older than their recording are absent; opened, pushes, reviews and the merge are present for every pull request.
Authentication is not described for this operation in the spec — that does not mean it is public. Check tokens and scopes.
curl
curl -X GET 'https://neosource.dev/api/repos/OWNER/REPO/pulls/NUMBER/timeline'fetch
fetch("https://neosource.dev/api/repos/OWNER/REPO/pulls/NUMBER/timeline", {
method: "GET",
});Path parameters
ownerrequiredRepository owner or organization slug.
reporequiredRepository name.
numberrequiredChange request number.
Responses
200Timeline
application/json
Standard errors
Bodies documented once for the whole API — see standard errors.
- 400Bad Request — one of: invalid_input
- 403Forbidden — one of: forbidden
- 404Not Found — one of: not_found
- 423Locked — one of: busy
- 429Rate limited — retry after the `Retry-After` header
- 500Internal server error
- 503Service temporarily unavailable / at capacity — retry after the `Retry-After` header
- 504Gateway timeout — the request exceeded the server's handling budget
Schemas
Referenced above. Listed here rather than expanded inline, so the same definition is not repeated at every level.
AccountKind
Rust mirror of the Pg `account_kind` enum (`accounts.kind`). `Ghost` rows are imported-author placeholders (GitHub metadata import, plans/github-metadata-import.md §6): `handle = gh-<github-id>`, `personal_workspace_id` NULL, no password, no sessions. They must never flow through `get_account*` (`AccountRow::into_record` CorruptData-errors on the NULL workspace) — author rendering goes through `PgGithubImportStore::authors_projection`, and claim-by-proof later promotes or merges them.
"human""bot""service""runner""ghost"
PrTimelineEvent
What happened, discriminated by `kind`.
kindrequired"opened"
A new head: the first revision, or a later push / force-push.
base_commitThe diff base captured for this revision, when one was.
head_commitrequired40-char Git OID hex.
kindrequired"pushed"previous_base_commitThe previous revision's captured base. A base that differs from it means the push rebased onto a new target.
previous_head_commitThe previous revision's head; absent on the first revision.
revision_numberrequired
decisionrequiredkindrequired"reviewed"review_idrequiredsummaryrequired
kindrequired"merged"merge_commitmerge_method- one of
merged_viarequired
kindrequired"closed"
kindrequired"reopened"
kindrequired"converted_to_draft"
kindrequired"ready_for_review"
fromrequiredkindrequired"title_changed"torequired
The target branch moved: a stack collapse retargeted this pull request.
fromrequiredkindrequired"base_changed"torequired
kindrequired"auto_merge_enabled"
Auto-merge was turned off; `reason` is set when it was not the user's own request (a push, or a merge-queue refusal).
kindrequired"auto_merge_disabled"reason
A merge requested by hand left the merge queue without merging; `reason` is the refusal the queue recorded (open vocabulary). An auto-merge's ejection is its `auto_merge_disabled` instead.
kindrequired"merge_queue_ejected"reason