Skip to main content

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
}
note

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.

Receipt Status State diagram

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

FieldTypeRequiredNullableNotes
blink_receipt_idstringAlwaysNo
receipt_typestringAlwaysNoCurrently always paper.
statuspending | accepted | rejectedAlwaysNopending means the receipt is under review; a follow-up ReceiptSummary will be sent when resolved.
merchant_namestringAlwaysYesnull when not extracted from the receipt.
purchase_datestringAlwaysYesFormat yyyy-mm-dd hh:mm:ss; null when both scan date and time are missing.
totalnumberAlwaysYesnull when not extracted from the receipt.
item_countnumberAlwaysNo
reasonstringOptionalNoPresent when status = pending or status = rejected; omitted for accepted. One of: DUPLICATE_RECEIPT, INVALID_RECEIPT, USER_CAP, RECEIPT_TOO_OLD, MISSING_INFORMATION.
client_user_idstringOptionalNoOmitted when not provided.