Skip to Content
ConceptsReceipts

Receipts

A receipt is an append-only, signed audit record created for every call to the Relynt gateway. Receipts provide a tamper-evident trail of every action your agents attempt — whether allowed, denied, or pending approval.

Design principles

  • Append-only — receipts are never updated or deleted
  • Signed — every receipt includes an HMAC-SHA256 signature for tamper detection
  • Complete — every gateway call produces at least one receipt
  • Verifiable — receipts can be verified via the dashboard or API

Receipt fields

Every receipt contains:

FieldDescription
receipt_idUnique identifier
created_atTimestamp of creation
organization_idTenant the receipt belongs to
agent_idAgent that made the request
instance_idRun identifier for the agent execution
actionOperation string (e.g., update_deal)
resourceTarget identifier (e.g., crm:deal:123)
policy_versionWhich policy version was evaluated
decisionallow, deny, pending_approval, or error
risk_levellow, medium, or high
request_hashSHA-256 over canonical JSON of the request body
response_hashSHA-256 over the connector response (when available)
signatureHMAC-SHA256 for tamper detection

Additional fields when applicable:

FieldDescription
approval_idLinks to the approval record
idempotency_keyThe client-provided idempotency key
approverIdentity of the human who approved/denied

Approval flow receipts

When a request triggers an approval flow, two receipts are created:

  1. Initial receiptdecision: "pending_approval", created when the approval request is sent to Slack
  2. Final receiptdecision: "allow" or decision: "deny", created when the approver responds

Both receipts share the same approval_id for correlation.

Verification

Every receipt can be verified to detect tampering:

  • Dashboard — click the Verify button on any receipt detail page
  • API — call GET /v1/receipts/:id/verify

Verification recomputes the HMAC-SHA256 signature and compares it to the stored value. If they match, the receipt has not been tampered with.

{ "valid": true }

Relynt uses HMAC-SHA256 for signing in v0. The signing key is managed server-side and is never exposed to clients.

Security

Receipts follow strict security rules:

  • Raw connector secrets and Authorization headers are never stored
  • Sensitive payload fields are redacted or hashed
  • The dashboard and logs never display secrets
  • Request and response hashes allow integrity verification without storing raw data

Querying receipts

Receipts can be queried via the dashboard or API with filters:

  • Decision — filter by allow, deny, pending_approval, error
  • Risk level — filter by low, medium, high
  • Agent — filter by agent_id
  • Time range — filter by date range
  • Search — full-text search across action, resource, and receipt ID
Last updated on