Current outcome of an accepted command
Reads the current outcome of a command by the receipt_id its response returned: accepted while it is in progress, then succeeded, failed (with error) or unknown (nobody can say; error explains). Poll until it leaves accepted. result depends on operation:
create_session,append_message: the acceptance response exactly as first returned, never rewritten. The turn's outcome is read fromGET /v1/sessions/{session_id}/turns/{turn_id}usingtarget_ref.interrupt:{turn_id, terminal, no_op}once settled.pause,resume:{resulting_admission_state, checkpoint_revision, queued_turn_count}.close:{resulting_admission_state, checkpoint_revision, cancelled_turn_count};checkpoint_revisionis null only for a session that never ran a turn.terminate:{execution_gone, checkpoint_revision, unconfirmed_turn_id, external_effects_reverted}.recovery_decision:{resulting_admission_state, checkpoint_revision, resumable}.answer: null; onlystatusanderrorchange.request_push,resolve_push,push:{push_request_id, action, verdict, refusal, repository_id, checkpoint_revision, git_commit, target_branch};verdictisalloworrefuse, a refused attempt isfailedwith the reason inrefusalanderror, and fields the attempt never read are null.actornames who made it. Receipts written before the rename saydecide_push,decision,already_decidedandPUSH_REQUEST_DECIDEDinstead.open_pull_request,update_pull_request,comment_pull_request:{push_request_id, verdict, refusal, repository_id, number, url, head, base, created}, and for a comment also{comment_id, comment_url, marker}, and for an open or update whose body came from structured fields alsotemplate({commit, path?, blob_sha?, skipped?}: the default branch's commit read, the template used or the reason one was passed over; never its text);createdis false when the call answered an open pull request, edited the marked comment, or (always, forupdate_pull_request) changed the title or body of the pull request with the built-ingithubMCP server'supdate_pull_request.close_pull_request,reopen_pull_request: the same fields plus{state, changed}, written when the session's agent closes or reopens the pull request of its push request with the built-ingithubMCP server's tools of those names;stateis the pull request's state after the call andchangedis false when it was already in that state. A merged pull request is refused withpull_request_merged(PULL_REQUEST_MERGED).merge_pull_request: the same fields asclose_pull_requestplus{merged, changed, head_sha, merge_commit_sha, method}, written when the session's agent squash-merges the pull request of its push request with the built-ingithubMCP server'smerge_pull_request;methodissquash, or null when the pull request was already merged on the pushed commit (changedfalse). A refusal isfailedwithreason_codemerge_off(the workspace has not allowed merging;GITHUB_REFUSED) before GitHub is called, ormerge_blocked(PULL_REQUEST_MERGE_BLOCKED),head_movedorpull_request_closed(PULL_REQUEST_CLOSED). A receipt refused withmerge_offnames no connection, App or role.attach_repository:{session_id, attempt_id, agent_id, agent_release_id, repository_id, branch, commit, failure, reason_code}, written when the session's agent attaches a repository with the built-ingithubMCP server'sattach_repository. It isaccepteduntil the worker reports the fetch, thensucceededwithcommitorfailedwithfailure(fetch_timeout,fetch_too_large,fetch_failed). A refused call isfailedat once withreason_coderepository_not_allowed(not on the release's list, not allowed for the profile, or the agent's GitHub off;error.codeGITHUB_REFUSED),allowed_in_newer_release(off the session's release but allowed by the agent's active release: the session keeps the release it started with, and a new session can attach it;GITHUB_REFUSED) orattempt_ended(STALE_EPOCH).agent_release_idis the release whose list allowed it.set_slack_secret,delete_slack_secret:{purpose, last4}; the value itself is never in a receipt.set_github_app,delete_github_app:{app_id}; the private key is never in a receipt.
Any credential of the same owner can read a receipt, except that a receipt about a session needs that session to be visible to the caller, and one that changed an agent's settings (target_ref.resource an agent or one of its Slack bindings, other than a refused create_session) is read only by those who read the agent's settings: its workspace's owners and admins, its admins, the live members of its managing team, and their personal keys; anyone else gets 403. A receipt that names an agent or a release of one (agent_id, agent_ids, release_id, agent_release_id, or the agent as target_ref or actor.agent_id) is shown only with those ids to a reader who may use that agent (GET /v1/usable-agents); for anyone else a private agent's ids are left out (a list loses them, a single field is null) and a receipt whose target is that agent or one of its releases answers 404, as a receipt that does not exist does. It changes nothing.
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 receipt'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 receipt 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)$uuidoperation*string"create_session""append_message""answer""interrupt""pause""close""terminate""resume""recovery_decision""change_profile""revoke_execution""issue_password_reset""reset_password""recover_owner""takeover""link_account""unlink_account""invite_member""accept_invite""revoke_invite""change_member_role""disable_member""enable_member""disable_user""enable_user""create_agent""update_agent""create_agent_release""activate_agent""create_api_key""revoke_api_key""create_team""rename_team""delete_team""add_team_member""remove_team_member""set_team_member_role""set_agent_managing_team""set_agent_usage""set_agent_caller_limits""set_agent_access_settings""add_agent_admin""remove_agent_admin""bind_credential""unbind_credential""link_agent_identity""revoke_agent_identity""set_surface_binding""request_surface_binding""resolve_surface_binding""share_session""request_push""resolve_push""decide_push""push""open_pull_request""update_pull_request""comment_pull_request""close_pull_request""reopen_pull_request""merge_pull_request""call_mcp""set_slack_secret""delete_slack_secret""set_github_app""delete_github_app""mint_github_token""set_github_ceiling""set_github_pull_request_settings""set_agent_pull_request_settings""add_repository""set_repository_branch""remove_repository""import_repository""import_connection""import_mcp_server""create_connection""create_mcp_server""set_settings_credential""set_connection_auto_mode""disable_connection""enable_connection""disable_mcp_server""set_mcp_server_workspaces""resolve_repository""set_agent_github""set_agent_mcp""set_repository_github_app""review_pull_request""dispatch_workflow""rerun_workflow""attach_repository""set_github_packages_token""delete_github_packages_token""set_github_packages_allowlist""fetch_github_package""create_workspace_profile""retire_workspace_profile""create_installation_profile""retire_installation_profile""block_installation_profile""unblock_installation_profile""create_achievement_category""update_achievement_category""archive_achievement_category""create_achievement_type""update_achievement_type""archive_achievement_type""create_achievement_rule""update_achievement_rule""disable_achievement_rule""enable_achievement_rule""set_achievement_judge""rejudge_session""review_achievement""set_env_variable""delete_env_variable""set_env_variable_grants""resolve_session_env""reject_session_env""resolve_session_engine_settings""set_workspace_engine_settings""set_agent_engine_settings""register_extension""approve_extension""attach_extension""detach_extension"target_ref*||actor?status*string"accepted""succeeded""failed""unknown"result*|For create_session and append_message: the acceptance response exactly as first returned, never rewritten; its receipt_status and status are acceptance-time values. The current outcome is this receipt's status and error; the turn's result is read from GET /v1/sessions/{session_id}/turns/{turn_id} using target_ref. For interrupt: {turn_id, terminal, no_op} once settled, where no_op: true means the turn reached terminal on its own and the interrupt did nothing.
error*|nullcreated_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-timeupdated_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-timecurl -X GET 'https://example.com/v1/receipts/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "id": "c4a1e9d2-7b3f-4e8a-a6c5-1d2e3f4a5b6c", "operation": "pause", "target_ref": { "session_id": "0f8b6a52-3d1e-4c7a-9b2f-5e6d7c8a9b01", "turn_id": null, "request_id": null }, "status": "succeeded", "result": { "resulting_admission_state": "paused", "checkpoint_revision": 3, "queued_turn_count": 1 }, "error": null, "created_at": "2026-10-11T08:20:00Z", "updated_at": "2026-10-11T08:20:09Z"}