hannd.

HANND merchant integration

Endpoint

POST https://hannd-receipts.ryguyhannicus.chatgpt.site/api/v1/receipts

Call only from your merchant server. Keep the API key in its secret store. The public customer browser must not receive it. While the Site is owner-private, an external integration additionally needs a supported Site service-access header, OAI-Sites-Authorization: Bearer <service token>. This is a server credential, not a receipt token; never send it to the browser. Public rollout removes the private gateway requirement, not the merchant API key requirement.

Request

Authorization: Bearer YOUR_MERCHANT_KEY
Content-Type: application/json
{
  "token": "SINGLE_USE_TOKEN_FROM_CUSTOMER_HANND_ID",
  "transactionId": "store-01:order-1001",
  "receipt": {
    "purchasedAt": "2026-10-17T16:30:00-07:00",
    "items": [{"name": "Oat latte", "quantity": 1, "unitPrice": 600}],
    "tax": 50,
    "tip": 0,
    "total": 650,
    "currency": "USD",
    "category": "Food & drink",
    "last4": "4242"
  }
}

Do not send a full card number or customer email. last4 is optional. Merchant name is taken from the authenticated merchant record, regardless of submitted merchant text.

Contract

Responses and retry rules

StatusMeaningMerchant behavior
201New receipt deliveredShow success
200Same transaction and payload already acceptedShow success using returned ID
400Invalid totals, malformed payload or expired codeCorrect payload or request a fresh code
401Missing or revoked merchant keyStop and repair authentication
403Sandbox destination mismatch or inactive live entitlementUse own test inbox or restore subscription
409Token used, duplicate transaction race, or changed retry payloadRetry identical transaction once after a race; otherwise investigate conflict
429Key rate limitBack off with jitter
500Transient server failureRetry exact transaction and payload with backoff

A successful response is { "id": "receipt-id", "delivered": true, "mode": "sandbox" }. Replays include replayed: true.

Network failures are ambiguous: never invent a new transaction ID just because the first call timed out. The supplied SDK retries network failures, 429 and server errors, while keeping the same JSON payload. Once a receipt is intentionally deleted by its owner, idempotency is not guaranteed indefinitely; its original destination is invalidated and cannot resurrect the deleted receipt.

POS adapter responsibilities

  1. Complete payment in the existing POS. HANND does not process the retail purchase.
  2. Offer Print / Email / Send to HANND.
  3. If HANND is selected, use the POS-supported reader to capture the fresh QR token.
  4. Normalize completed transaction lines and amounts into the contract above.
  5. Queue and send to HANND server-to-server; expose a truthful delivery status.
  6. On an expired code, ask for a fresh code; never silently redirect to someone else's account.
  7. Keep a bounded retry queue and give the customer an existing receipt fallback if delivery fails.

Universal NFC/wallet compatibility is not provided by this adapter. See launch documentation for the separate hardware integration path.

Back to your HANND