Read one push request
One push request: what it pinned, its state (requested, approved, rejected, then pushing, pushed or failed once the platform pushes an approved one), and who resolved it (resolved_by).
The API pushes an approved request within seconds: exactly the pinned commit, to refs/heads/agent/<session-id> on the repository the request pinned, never by force. It refuses, as failed, when the catalog entry for the repository changed after the request, the target is the repository's default branch, or the remote branch holds a commit the pinned one does not build on. finished_at and push_receipt_id are set once it ends; that push receipt (GET /v1/receipts/{receipt_id}) names the remote, the ref, the commit it replaced, the approver, and on failure the refusal.
Scope: sessions:read (API key or cookie session).
AuthorizationBearer <token>For servers and scripts: an API key sent as an HTTP bearer token, Bearer <key>. It holds exactly the scopes it was issued with; a key issued before scopes existed holds none. It never needs the CSRF header, and it cannot manage agents, members, teams or API keys. Issue one in the web console under Settings → API keys; each operation names the scope it needs.
Scope: sessions:read
id*stringThe session's id.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidpush_request_id*stringThe push request's id.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidThe push request as it stands now.
application/json- response
id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidsession_id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidrepository_id*string1 <= lengthcheckpoint_revision*integer0 <= value <= 2147483647git_commit*string^[0-9a-f]{40}$target_branch*string1 <= lengthstate*string"requested""approved""rejected""pushing""pushed""failed"requested_by*requested_at*string^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$date-timeresolved_by*||nullresolved_at*|nullresolution_reason*string|nullrequest_receipt_id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidresolution_receipt_id*|nullfinished_at*|nullpush_receipt_id*|nullorigin*string"direct""direct""intent"flow*string"legacy""legacy""actions"pr_state*|nullpr_error*|nullpr_number*|nullpr_url*|nullapprovability?Whether an approval would pass the server's decision check now, and if not why (presentPushRequest). A hint for what to offer; the approval is judged again.
curl -X GET 'https://example.com/v1/sessions/497f6eca-6276-4993-bfeb-53cbbbba6f08/push-requests/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "id": "5b9e2c17-4f3a-4d6e-8a1b-7c0d9e2f3a41", "session_id": "0f8b6a52-3d1e-4c7a-9b2f-5e6d7c8a9b01", "repository_id": "sample-app", "checkpoint_revision": 3, "git_commit": "4f2a9c1e7b3d5a8f0c6e2b9d1a4f7c3e5b8d0a2c", "target_branch": "agent/0f8b6a52-3d1e-4c7a-9b2f-5e6d7c8a9b01", "state": "requested", "requested_by": { "principal": { "kind": "user", "id": "3e7f1a90-5c2d-4b8e-8f61-2a9d0c4b7e35" }, "actor_user_id": "3e7f1a90-5c2d-4b8e-8f61-2a9d0c4b7e35", "agent_id": null }, "requested_at": "2026-10-11T08:30:00Z", "resolved_by": null, "resolved_at": null, "resolution_reason": null, "request_receipt_id": "c4a1e9d2-7b3f-4e8a-a6c5-1d2e3f4a5b6c", "resolution_receipt_id": null, "finished_at": null, "push_receipt_id": null}