Skip to main content

ReceiptSummary Payload Samples

These are the JSON payloads a client will receive for all supported variations of the ReceiptSummary webhook.


1. Scan — Immediate resolution

Receipt accepted or rejected immediately without entering review.

{
"id": "051748df-36f2-4a70-ac67-0d00faf1b84f",
"timestamp": 1776744008355,
"payload_data": {
"blink_receipt_id": "954d737a-c813-4249-8fab-428338abecff",
"receipt_type": "paper",
"status": "[accepted|rejected]",
"merchant_name": "Walmart",
"purchase_date": "2026-04-15 00:00:00",
"total": 5,
"item_count": 6,
"reason": "[DUPLICATE_RECEIPT|INVALID_RECEIPT|RECEIPT_TOO_OLD|USER_CAP]",
"client_user_id": "test_user_123"
},
"payload_type": "ReceiptSummary",
"version": 1
}
  • reason is present only when status = rejected; omitted for accepted.

2. Scan — Pending (enters error review)

Receipt requires manual review. A follow-up ReceiptSummary webhook will be sent once the review concludes.

{
"id": "a3c9e21f-88b4-4d7a-b531-6f902e4c1d88",
"timestamp": 1776744009100,
"payload_data": {
"blink_receipt_id": "954d737a-c813-4249-8fab-428338abecff",
"receipt_type": "paper",
"status": "pending",
"merchant_name": "Walmart",
"purchase_date": "2026-04-15 00:00:00",
"total": 5,
"item_count": 6,
"reason": "[DUPLICATE_RECEIPT|INVALID_RECEIPT|RECEIPT_TOO_OLD|USER_CAP|MISSING_INFORMATION]",
"client_user_id": "test_user_123"
},
"payload_type": "ReceiptSummary",
"version": 1
}
  • reason identifies the type of review underway and is always present when status = pending.
  • When review concludes, a second ReceiptSummary is sent: status = accepted (no reason) or status = rejected (with a reason).

The receipt status follows this lifecycle: Receipt Status State diagram


Field Reference

FieldTypeDescription
versionnumberTop-level payload schema version.
idstring (UUID)Unique ID for this webhook delivery.
timestampnumberUnix timestamp in milliseconds.
payload_typestringPayload event type. Always "ReceiptSummary"
payload_dataobjectContainer for the webhook payload data.
payload_data.blink_receipt_idstringUUID — Primary Blink Receipt ID.
payload_data.receipt_typestringType of receipt (example - "paper")
payload_data.merchant_namestringMerchant or store name.
payload_data.purchase_datestringDate the purchase was made.
payload_data.totalnumberTotal amount charged.
payload_data.item_countnumberNumber of items purchased in the receipt.
payload_data.client_user_idstringYour user ID that is passed to Actual via the SDK for you to match to users on your end.
payload_data.statusstringpending, accepted, or rejected.
payload_data.reasonstringPresent when status = pending or status = rejected; omitted for accepted. See reason codes below.

Reason Codes

ReasonApplicable statusDescription
DUPLICATE_RECEIPTpending, rejectedReceipt was determined to be a duplicate.
INVALID_RECEIPTpending, rejectedImage was determined to be an invalid receipt (not a receipt / fraudulent).
RECEIPT_TOO_OLDpending, rejectedReceipt is older than the allowable threshold (default 14 days).
USER_CAPpending, rejectedUser exceeded one or more submission thresholds.
MISSING_INFORMATIONpending, rejectedReceipt is missing data required to complete processing.
note

ReceiptSummary fires for all receipt scans regardless of content of scan data.