Skip to main content
A receipt is the gateway’s signed record of one request. It is an ordered event log that captures what the gateway received, which upstream it selected and verified, what it forwarded, and what it returned, with a hash at each step. The gateway signs the receipt with a key published in its attestation report, so a verified receipt proves the response came from the attested workload and was not altered. Every inference response includes the receipt id in the x-receipt-id header. Fetch the receipt:
{id} accepts the receipt id (rcpt-…) or the response id (chat id). See GET /v1/aci/receipts/{id} for the response shape.

What a receipt commits to

GET /v1/aci/receipts/{id} returns the receipt directly, signed by a key from the attested keyset: The event_log carries the two hashes that matter most: request.received.body_hash (the request the gateway observed) and response.returned.wire_hash (the response it returned). Comparing these to the bytes you sent and received proves the receipt covers your exact exchange.
The legacy alias GET /v1/signature/{id} returns the same receipt wrapped in a compatibility envelope that adds a text field ("<request body hash>:<response hash>"), a top-level signature, and signing_address, for earlier API clients. New integrations should use the canonical /v1/aci/receipts/{id} response above.

The transparency event log

The event_log records the request’s path through the gateway. Each event carries a hash or a fact, never your prompt text. The request.received.body_hash and response.returned.wire_hash are the two values combined into the signed text. That is what lets you prove the signature covers the exact bytes you sent and received.

The upstream.verified event

This event tells you whether the model that ran your prompt was itself attested:
  • For a confidential model, result is verified, required is true, and session_id references the attested session the channel was bound to.
  • For a routed model, result is failed, required is false, and there is no session_id. The gateway still served the request, but the upstream provider was not attested.

Why hashes, not bodies

The gateway does not store your request or response. Receipts hold hashes, so they prove integrity without warehousing your data. If the response was modified in transit, a transparency.*_modified event records that the forwarded bytes differed, again by hash.

Streaming

For streaming responses the gateway can return x-receipt-id early, but the signed receipt is complete only after the stream finishes, because response.returned.wire_hash covers the full streamed body. Fetch the receipt after the stream ends.

Next

Attested sessions

Follow session_id to the verified security context behind a confidential response.

Verify a response

Check a receipt signature and hashes yourself.