Skip to content

Verification Endpoint

GET /v1/verify/{receipt_id}

Verify a previously issued receipt. Returns the verification result, the original receipt, and the attestation status.


Request

GET /v1/verify/{receipt_id}
Authorization: Bearer YOUR_API_KEY

Path Parameters

Parameter Type Description
receipt_id string The receipt ID returned from the inference (e.g., rcpt_f8c505ce3a...)

Response Format

{
  "receipt_id": "rcpt_f8c505ce3a7b4d2e9f1a...",
  "status": "verified",
  "receipt": {
    "receipt_id": "rcpt_f8c505ce3a7b4d2e9f1a...",
    "routing": "sovereign",
    "commitment": "04a7f3c2d8e6b5a9...e9b1d0f",
    "signature": "0x69c8a3f7...f98c8",
    "verified": true
  },
  "attestation": {
    "integrity": "valid",
    "timestamp": "2025-01-15T14:32:00Z",
    "settlement": "anchored"
  },
  "verified_at": "2025-01-15T14:32:05Z"
}

Top-Level Fields

Field Type Description
receipt_id string The receipt that was verified
status string Verification result (see below)
receipt object The original receipt object
attestation object Attestation verification details
verified_at string ISO 8601 timestamp of this verification

Status Values

Status Meaning
verified All checks passed -- commitment valid, signature valid, attestation intact
invalid One or more checks failed -- receipt may have been tampered with
not_found No receipt exists with this ID
expired Receipt exists but has exceeded the verification window

Attestation Object

Field Type Description
integrity string Attestation integrity status: valid or tampered
timestamp string When the attestation was generated (ISO 8601)
settlement string Ledger settlement status: anchored, pending, or unsettled

Examples

curl https://six-sov.com/v1/verify/rcpt_f8c505ce3a7b4d2e9f1a \
  -H "Authorization: Bearer $SIX_API_KEY"
import requests

receipt_id = "rcpt_f8c505ce3a7b4d2e9f1a"

response = requests.get(
    f"https://six-sov.com/v1/verify/{receipt_id}",
    headers={"Authorization": f"Bearer {SIX_API_KEY}"}
)

result = response.json()

if result["status"] == "verified":
    print("Receipt is valid and independently verified.")
    print(f"Settlement: {result['attestation']['settlement']}")
else:
    print(f"Verification failed: {result['status']}")
import requests

# The OpenAI client doesn't have a verify method,
# so use requests directly for verification.
response = requests.get(
    f"https://six-sov.com/v1/verify/{receipt_id}",
    headers={"Authorization": f"Bearer {SIX_API_KEY}"}
)

Verification Flow

You                          SIX
 |                            |
 |-- GET /v1/verify/rcpt_... |
 |                            |
 |      Retrieve receipt      |
 |      Recompute commitment  |
 |      Validate signature    |
 |      Check attestation     |
 |      Check settlement      |
 |                            |
 |<--- verification result ---|

What is being verified?

The verification endpoint recomputes the cryptographic commitment from the stored receipt fields and validates the signature. If any field was modified after issuance, the recomputed commitment will not match, and verification will fail.


Error Responses

Code Cause Response
401 Missing or invalid API key {"error": {"type": "unauthorized"}}
404 Receipt ID does not exist {"receipt_id": "...", "status": "not_found"}
429 Rate limit exceeded Standard rate limit response

Audit Trail Usage

For compliance purposes, the verification response is designed to be stored as an audit record:

{
  "audit_record": {
    "action": "inference_verification",
    "receipt_id": "rcpt_f8c505ce3a...",
    "status": "verified",
    "verified_at": "2025-01-15T14:32:05Z",
    "verified_by": "your-system-identifier",
    "attestation_integrity": "valid",
    "settlement_status": "anchored"
  }
}

Compliance Best Practice

Store verification results in your own audit system. This creates an independent record that your organization verified the receipt, not just that SIX claimed it was valid.


Next Steps