Skip to main content
GET
Error

Authorizations

Authorization
string
header
required

The control surface credential. Send Authorization: Bearer <token>.

Two kinds of token are accepted and they are told apart by shape, not by a separate header. A token beginning pbk_ is an org scoped API key, whose public half and secret half are generated together and of which only a hash of the secret is ever stored; anything else is treated as an OAuth 2.1 access token and verified against the authorization server's keys.

Both resolve to the same context: an org, a principal and a set of scopes. Nothing downstream branches on which channel you used, with one deliberate exception, key management, which requires a signed-in person so that a key can never mint another key.

Scopes are enforced when MCP tools are REGISTERED rather than when they are called, so a tool your credential cannot use is absent from tools/list rather than refused mid gesture.

Path Parameters

idempotencyKey
string
required

The key you sent with the action, percent encoded. 1 to 128 printable ASCII characters.

Query Parameters

deviceId
string

Which device's receipt, when the same key was used on more than one. Omit it unless the response asks for it.

Response

The receipt.

One recorded action, and who took it. actor names a person or a key by id, so a receipt can be attributed to the particular credential that made the call.

THE LEASE THE ACTION RAN UNDER IS NOT PART OF THIS SHAPE. A receipt used to carry leaseId and fencingToken, and both are gone as of 2026-09-12. They are credentials: a lease id is what releases a lease and a fencing token is what orders writes under it, which is why the get_receipt tool already withheld both and why GET /v1/leases names no lease id either. Reading receipts needs only devices:read, so publishing them here let a read-only credential lift a live lease off the newest receipt and hand it to one that can act. Nothing replaces them on this face.

principalKind and apiKeyId beside it say the same thing in a flatter shape. They are not new: this endpoint has returned them since attribution was added, without declaring them here, and declaring them is part of the same change that added actor. New code should read actor, which is the only one of the two that can name a person.

orgId
string
required
deviceId
string
required
idempotencyKey
string
required

The key the caller supplied, which is what makes a retry a replay.

backendKind
string
required
action
string
required

Which action was attempted.

argsSummary
object
required

A summary of the arguments, not the raw input. Text is bounded and never echoed wholesale.

status
enum<string>
required

Where this action ended up.

Available options:
pending,
committed,
failed
requestedAt
string<date-time>
required
actor
object
required

WHO. The same shape answers three questions: who took an action (Receipt.actor), who is holding a device (Lease.holder), and who started a run (RunView.initiator). One shape on purpose, so the three can never disagree about what a given credential is called.

principalKind
enum<string>
required

SUPERSEDED by actor.kind, and identical to it. Read actor in new code; this stays because a consumer already reads it.

Available options:
api_key,
oauth,
dev_token,
system,
unattributed
committedAt
string<date-time> | null
failedAt
string<date-time> | null
observedFrame
string

The frame this action was bound to, when it was bound to one.

error
object

Present on a failed receipt.

reason
string

Why a failure was recorded, where the failure had a classified cause.

requiresManualReview
boolean

The physical outcome is unknown (a crash or a lost transport) and needs reconciliation.

apiKeyId
string

SUPERSEDED by actor.apiKeyId, and identical to it. Read actor in new code.

reviewedAt
string<date-time>

When a person opened this receipt. Absent until one does, and fixed once set: the first instant is the answer to how long it waited. It records that somebody LOOKED, and not that the action was correct or accepted.

reviewedBy
string

Who looked. A subject id, never a name, and set together with reviewedAt or not at all.