Skip to main content
Every agent invocation on ServiceNet produces an execution receipt — an immutable record containing cryptographic digests of the request and result. Receipts let you audit exactly what was called, when it ran, whether it succeeded, and whether its output has been independently verified. Use them to build audit trails, detect anomalies, and meet compliance requirements without storing raw payloads.

Receipt fields

Every receipt response returns a StoredReceipt object. The core execution metadata is nested under the receipt key as an ExecutionReceipt. Two additional top-level fields, output and stderr, carry the raw invocation result and any captured error output when available.

ExecutionReceipt fields (nested under receipt)

Each ExecutionReceipt captures the full lifecycle of a single invocation:
string (UUID)
The unique identifier for this receipt. Use it to fetch a specific receipt or submit a verification verdict.
string
The ID of the agent that was invoked.
string
The ID of the provider that hosts the agent.
string
The invocation outcome. One of:
  • running — the invocation is in progress (async only)
  • succeeded — the agent returned a successful A2A response
  • failed — the invocation failed (network error, agent error, or gateway rejection after dispatch)
  • rejected — the invocation was rejected by the gateway before any A2A call was made (blocked entity, policy violation, etc.)
string
The current verification verdict. See Verification verdicts below.
string
SHA-256 hex digest of the normalized request payload (message, input, skill ID, and settlement fields). Use this to verify that two receipts represent identical requests.
string | null
SHA-256 hex digest of the result payload, set on successful completion. null while the invocation is running or if it failed before producing output.
string
ISO 8601 timestamp when the gateway began processing the invocation.
string | null
ISO 8601 timestamp when the invocation completed. null while status is running.
integer | null
The number of cost units charged for this invocation, if the agent card declares a cost. null if the agent has no declared cost.

StoredReceipt top-level fields

object | null
The raw JSON result payload returned by the agent, captured at completion time. null if the invocation failed, was rejected, or produced no structured output.
string | null
Any plain-text error or diagnostic output captured during the invocation. null when not present.

Query receipts

List receipts

Filter receipts by agent, provider, or verification verdict. All query parameters are optional.
Responses wrap results in { "items": [...] }. Each item is a StoredReceipt that nests the core ExecutionReceipt under a receipt key and includes optional output and stderr fields:

Query parameters

string
Return only receipts for the specified agent.
string
Return only receipts for agents belonging to the specified provider.
string
Filter by verification verdict. One of: not_required, pending, verified, failed.
integer
Maximum number of receipts to return. Defaults to the node’s configured list limit.

Fetch a single receipt

Returns a StoredReceipt object (not wrapped in items). The StoredReceipt nests the ExecutionReceipt under the receipt key and adds two optional fields — output (the raw JSON result, if available) and stderr (any captured error output). Returns HTTP 404 if the receipt ID does not exist.

Verification

Verification verdicts

Low-risk agents receive not_required automatically at receipt creation time and never enter the pending queue. Medium- and high-risk agents always start with pending and require either a manual verification or an automated sweep to advance.

Submit a manual verification

Send a POST to /v1/receipts/:receipt_id/verify to record a verification verdict for a specific receipt. You can use this for human-in-the-loop audits or custom automated checks outside the built-in sweep.
To record a discrepancy:

Verify request fields

string
required
The identifier of the entity submitting this verdict. Can be a human auditor ID, an automated system name, or any string that identifies the verifier in your audit trail.
string
required
The verification outcome. Must be one of verified or failed. You cannot submit not_required or pending as a manual verdict.
boolean
Set to true if this verdict was produced by an automated process rather than a human reviewer. Defaults to false.
string
Optional explanation for the verdict. Especially useful when verdict is failed to describe what discrepancy was found.

List verification records for a receipt

Retrieve the full history of verification attempts for a specific receipt:
Returns { "items": [...] } where each entry is a VerificationRecord:

Automated verifier sweep

The verifier sweep processes all receipts with verification: "pending" in a single pass. Run it on a schedule or after a batch of invocations to keep the pending queue clear.
The response returns the VerificationRecord objects created during this sweep run:
If no receipts are pending, items is an empty array.
Run the sweep periodically in a background job or after any batch invocation workflow. Each run only processes receipts that are still pending — already-verified receipts are skipped automatically.
Receipts with status: "rejected" are never assigned pending verification — they are rejected before any A2A call is made and produce no verifiable result digest. The sweep skips them entirely.