ReceiptSummary
Description: A summary of data extracted from a physical receipt.
When to use: Subscribe to this event if you want to receive paper receipt data as soon as it's processed.
Sources:
- Paper receipt scanning (mobile SDK)
Payload Structure:
{
"id": "UUID for webhook message",
"timestamp": 1778077677000,
"payload_data": {
"blink_receipt_id": "UUID - Primary Blink Receipt ID",
"receipt_type": "paper",
"status": "[pending|accepted|rejected]",
"merchant_name": "Merchant or store name, or null",
"purchase_date": "yyyy-mm-dd hh:mm:ss, or null",
"total": 1.00,
"item_count": 1,
"reason": "DUPLICATE_RECEIPT | INVALID_RECEIPT | USER_CAP | RECEIPT_TOO_OLD | MISSING_INFORMATION",
"client_user_id": "Your user ID that is passed to Actual via the SDK for you to match to users on your end."
},
"payload_type": "ReceiptSummary",
"version": 1
}
merchant_name, purchase_date, and total are always present as keys but their values may be null when the data could not be extracted from the receipt. All other fields are either always non-null or omitted entirely when not applicable.
Receipt Lifecycle
Most receipts resolve immediately to accepted or rejected. Receipts that require manual review enter a pending state first — a follow-up ReceiptSummary webhook is sent once the review concludes.

When status = pending, the reason field identifies the type of review underway. When the review resolves, a second ReceiptSummary webhook is sent: accepted (no reason) or rejected (with a reason).
Field Reference
payload_data fields
| Field | Type | Required | Nullable | Notes |
|---|---|---|---|---|
blink_receipt_id | string | Always | No | |
receipt_type | string | Always | No | Currently always paper. |
status | pending | accepted | rejected | Always | No | pending means the receipt is under review; a follow-up ReceiptSummary will be sent when resolved. |
merchant_name | string | Always | Yes | null when not extracted from the receipt. |
purchase_date | string | Always | Yes | Format yyyy-mm-dd hh:mm:ss; null when both scan date and time are missing. |
total | number | Always | Yes | null when not extracted from the receipt. |
item_count | number | Always | No | |
reason | string | Optional | No | Present when status = pending or status = rejected; omitted for accepted. One of: DUPLICATE_RECEIPT, INVALID_RECEIPT, USER_CAP, RECEIPT_TOO_OLD, MISSING_INFORMATION. |
client_user_id | string | Optional | No | Omitted when not provided. |