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
}
reasonis present only whenstatus = rejected; omitted foraccepted.
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
}
reasonidentifies the type of review underway and is always present whenstatus = pending.- When review concludes, a second
ReceiptSummaryis sent:status = accepted(noreason) orstatus = rejected(with areason).
The receipt status follows this lifecycle:

Field Reference
| Field | Type | Description |
|---|---|---|
version | number | Top-level payload schema version. |
id | string (UUID) | Unique ID for this webhook delivery. |
timestamp | number | Unix timestamp in milliseconds. |
payload_type | string | Payload event type. Always "ReceiptSummary" |
payload_data | object | Container for the webhook payload data. |
payload_data.blink_receipt_id | string | UUID — Primary Blink Receipt ID. |
payload_data.receipt_type | string | Type of receipt (example - "paper") |
payload_data.merchant_name | string | Merchant or store name. |
payload_data.purchase_date | string | Date the purchase was made. |
payload_data.total | number | Total amount charged. |
payload_data.item_count | number | Number of items purchased in the receipt. |
payload_data.client_user_id | string | Your user ID that is passed to Actual via the SDK for you to match to users on your end. |
payload_data.status | string | pending, accepted, or rejected. |
payload_data.reason | string | Present when status = pending or status = rejected; omitted for accepted. See reason codes below. |
Reason Codes
| Reason | Applicable status | Description |
|---|---|---|
DUPLICATE_RECEIPT | pending, rejected | Receipt was determined to be a duplicate. |
INVALID_RECEIPT | pending, rejected | Image was determined to be an invalid receipt (not a receipt / fraudulent). |
RECEIPT_TOO_OLD | pending, rejected | Receipt is older than the allowable threshold (default 14 days). |
USER_CAP | pending, rejected | User exceeded one or more submission thresholds. |
MISSING_INFORMATION | pending, rejected | Receipt is missing data required to complete processing. |
note
ReceiptSummary fires for all receipt scans regardless of content of scan data.