ReceiptProcessed Payload Samples
These are the JSON payloads a client will receive for all supported variations of the ReceiptProcessed webhook. The blink_receipt_id appears both at the top level (for easy correlation) and inside payload_data.
1. Scan (complete)
Triggered when a new receipt is successfully scanned and processed.
{
"id": "051748df-36f2-4a70-ac67-0d00faf1b84f",
"timestamp": 1776744008355,
"payload_data": {
"receipt_metadata": {
"receipt_type": "paper",
"global_receipt_id": "GR-20240315-8842910",
"blink_receipt_id": "f3a91c2d-7b4e-4f88-bc13-9e0d5a72c441",
"original_blink_receipt_id": null,
"email_metadata": {
"email_timestamp": null,
"email_id": null,
"email_client": null,
"email_sender": null,
"email_subject": null
},
"parse_metadata": {
"parse_method": "ocr_parser",
"parse_timestamp": "2024-03-15T14:23:07Z",
"country_code": "US",
"parser_version": "4.11.2"
},
"flags": {
"is_receipt": true,
"is_instacart_shopper": false,
"fraud_detected": false,
"fraud_reason": null,
"is_duplicate": false,
"duplicate_blink_receipt_ids": []
},
"client_user_id": null,
"version": "2.3.0"
},
"merchant": {
"name": "Whole Foods Market",
"client_name": "whole_foods",
"sub_merchant": null,
"mall_name": null,
"tax_id": "04-3234660",
"channel": "grocery",
"location": {
"address": "1765 California St",
"city": "San Francisco",
"state": "CA",
"zip_code": "94109",
"store_phone_number": "(415) 674-0500",
"store_number": 10294
}
},
"payment": {
"method": "credit_card",
"card_type": "Visa",
"card_issuer": "Chase",
"last_4_digits": "4821",
"terminal_id": "TRM-07",
"cashback": "0"
},
"charges": {
"totals": {
"subtotal": 47.93,
"discount_total": 3.5,
"rounding_adjustment": 0,
"total": 46.56,
"taxes": 2.13,
"fees": 0.1,
"tip": 0
},
"fees": [
{
"type": "bag_fee",
"description": "BAG FEE",
"amount": 0.1,
"scope": "order"
}
],
"currency_code": "USD"
},
"purchase": {
"order_number": "WF-20240315-00447",
"status": "completed",
"purchase_date": "2024-03-15 00:00:00",
"purchase_time": "14:11:03",
"transaction_id": "881920347",
"long_transaction_id": "WF-CA-10294-20240315-881920347",
"cashier_id": "C-0428",
"register_id": "3",
"loyalty_number": "WFM-7734829103",
"purchase_time_string": "2:11 PM",
"purchase_time_hh_mm": "14:11",
"loyalty_program": true,
"unqualified_promotions": [
"PROMO-WF-BAKERY10"
],
"qualified_promotions": [
"PROMO-WF-SPRING24-DAIRY"
],
"type": "in-store"
},
"products": [
{
"name": "ORGANIC WHOLE MILK 1GAL",
"number": "0002201550000",
"name_normalized": "Organic Valley Whole Milk",
"quantity": 1,
"unit_price": 5.99,
"regular_price": 7.99,
"purchased_price": 5.99,
"purchase_status": "completed",
"is_sensitive": false,
"qualified_promotions": [
"PROMO-WF-SPRING24-DAIRY"
],
"category": "Dairy",
"size": "1 gal",
"brand": "Organic Valley",
"upc": "093966000052",
"subproducts": []
},
{
"name": "MULTIGRAIN BREAD",
"number": "0004963100891",
"name_normalized": "Dave's Killer Bread 21 Whole Grains",
"quantity": 1,
"unit_price": 5.49,
"regular_price": 5.49,
"purchased_price": 5.49,
"purchase_status": "completed",
"is_sensitive": false,
"qualified_promotions": null,
"category": "Bakery",
"size": "27 oz",
"brand": "Dave's Killer Bread",
"upc": "013764010012",
"subproducts": []
},
{
"name": "ORG BABY SPINACH 5OZ",
"number": "0003338813401",
"name_normalized": "365 Organic Baby Spinach",
"quantity": 2,
"unit_price": 3.99,
"regular_price": 3.99,
"purchased_price": 3.99,
"purchase_status": "completed",
"is_sensitive": false,
"qualified_promotions": null,
"category": "Produce",
"size": "5 oz",
"brand": "365 by Whole Foods Market",
"upc": "099482443016",
"subproducts": []
},
{
"name": "FREE RANGE EGGS LG DZ",
"number": "0002244700218",
"name_normalized": "Vital Farms Pasture-Raised Eggs Large",
"quantity": 1,
"unit_price": 7.49,
"regular_price": 8.99,
"purchased_price": 7.49,
"purchase_status": "completed",
"is_sensitive": false,
"qualified_promotions": [
"PROMO-WF-SPRING24-DAIRY"
],
"category": "Dairy & Eggs",
"size": "12 ct",
"brand": "Vital Farms",
"upc": "855105003021",
"subproducts": []
},
{
"name": "COLD BREW COFFEE 32OZ",
"number": "0006724892110",
"name_normalized": "Chameleon Organic Cold Brew Coffee",
"quantity": 1,
"unit_price": 9.49,
"regular_price": 9.49,
"purchased_price": 9.49,
"purchase_status": "completed",
"is_sensitive": false,
"qualified_promotions": null,
"category": "Beverages",
"size": "32 fl oz",
"brand": "Chameleon",
"upc": "857810004078",
"subproducts": []
}
],
"discounts": [
{
"type": "loyalty_discount",
"description": "PRIME MEMBER DAIRY DEAL",
"amount": 2,
"scope": "item",
"product_ids": [
0
]
},
{
"type": "loyalty_discount",
"description": "PRIME MEMBER EGG SAVINGS",
"amount": 1.5,
"scope": "item",
"product_ids": [
3
]
}
]
},
"payload_type": "ReceiptProcessed",
"version": 1
}
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 "ReceiptProcessed" |
payload_data | object | Container for the webhook payload data. |
| receipt_metadata | ||
payload_data.receipt_metadata | object | Receipt-level metadata. |
payload_data.receipt_metadata.receipt_type | string | Type of receipt format (e.g., digital, paper). |
payload_data.receipt_metadata.global_receipt_id | string | Global unique identifier for the receipt. |
payload_data.receipt_metadata.blink_receipt_id | string | UUID — Primary Blink Receipt ID. |
payload_data.receipt_metadata.original_blink_receipt_id | string | Original Blink Receipt ID if duplicated. |
| receipt_metadata.email_metadata | ||
payload_data.receipt_metadata.email_metadata | object | Email metadata for digital receipt ingestion. |
payload_data.receipt_metadata.email_metadata.email_timestamp | string | Timestamp email was received. |
payload_data.receipt_metadata.email_metadata.email_id | string | Email unique ID. |
payload_data.receipt_metadata.email_metadata.email_client | string | Email client used to send the message. |
payload_data.receipt_metadata.email_metadata.email_sender | string | Email sender address. |
payload_data.receipt_metadata.email_metadata.email_subject | string | Email subject line. |
| receipt_metadata.parse_metadata | ||
payload_data.receipt_metadata.parse_metadata | object | Receipt parsing metadata. |
payload_data.receipt_metadata.parse_metadata.parse_method | string | How the receipt was parsed. |
payload_data.receipt_metadata.parse_metadata.parse_timestamp | string | Timestamp when the receipt was parsed. |
payload_data.receipt_metadata.parse_metadata.country_code | string | Country code (e.g., US). |
payload_data.receipt_metadata.parse_metadata.parser_version | string | Internal version of the parser used. |
| receipt_metadata.flags | ||
payload_data.receipt_metadata.flags | object | Classification and fraud/duplicate flags. |
payload_data.receipt_metadata.flags.is_receipt | boolean | Whether this was successfully classified as a receipt. |
payload_data.receipt_metadata.flags.is_instacart_shopper | boolean | Flag indicating if an Instacart shopper submitted the receipt. |
payload_data.receipt_metadata.flags.fraud_detected | boolean | Flag for internal fraud detection. |
payload_data.receipt_metadata.flags.fraud_reason | string | Optional reason for fraud flag. |
payload_data.receipt_metadata.flags.is_duplicate | boolean | Flag to indicate if this is a duplicate receipt. |
payload_data.receipt_metadata.flags.duplicate_blink_receipt_ids | string[] | Array of UUIDs for duplicate receipts. |
payload_data.receipt_metadata.client_user_id | string | The client-specific user identifier, if provided during registration. Omitted when not set. |
payload_data.receipt_metadata.version | string | API response schema version used for this payload. |
| merchant | ||
payload_data.merchant | object | Merchant information. |
payload_data.merchant.name | string | Merchant or store name. |
payload_data.merchant.client_name | string | Normalized merchant name used by client. |
payload_data.merchant.sub_merchant | string | In case of delivery platforms (e.g., DoorDash > Chipotle). |
payload_data.merchant.mall_name | string | If inside a mall, the name of mall. |
payload_data.merchant.tax_id | string | Taxpayer ID of the merchant. |
payload_data.merchant.channel | string | Merchant channel (grocery, mass, qsr, etc.). |
| merchant.location | ||
payload_data.merchant.location | object | Merchant location details. |
payload_data.merchant.location.address | string | Street address of the store. |
payload_data.merchant.location.city | string | City where the store is located. |
payload_data.merchant.location.state | string | State where the store is located. |
payload_data.merchant.location.zip_code | string | ZIP or postal code. |
payload_data.merchant.location.store_phone_number | string | Merchant's store location phone number. |
payload_data.merchant.location.store_number | number | Store number or ID. |
| payment | ||
payload_data.payment | object | Payment information. |
payload_data.payment.method | string | Method of payment (e.g., credit_card, cash). |
payload_data.payment.card_type | string | Type of card used (e.g., Visa, MasterCard). |
payload_data.payment.card_issuer | string | Issuer of the payment card. |
payload_data.payment.last_4_digits | string | Last 4 digits of the card. |
payload_data.payment.terminal_id | string | Terminal ID (if available). |
payload_data.payment.cashback | string | Cashback earned or redeemed. |
| charges | ||
payload_data.charges | object | Charge and currency information. |
payload_data.charges.totals | object | Aggregated totals for the transaction. |
payload_data.charges.totals.subtotal | number | Subtotal amount before tax and discounts. |
payload_data.charges.totals.discount_total | number | Total discount amount. |
payload_data.charges.totals.rounding_adjustment | number | Rounding adjustment amount if applicable. |
payload_data.charges.totals.total | number | Total amount charged. |
payload_data.charges.totals.taxes | number | Total taxes applied to purchase. |
payload_data.charges.totals.fees | number | Total fees applied to purchase. |
payload_data.charges.totals.tip | number | Tip amount. |
payload_data.charges.fees | object[] | Fee line items. |
payload_data.charges.fees[].type | string | Type of fee (e.g., bag_fee, delivery_fee). |
payload_data.charges.fees[].description | string | Description of fee, extracted from receipt. |
payload_data.charges.fees[].amount | number | Fee amount. |
payload_data.charges.fees[].scope | string | Scope of fee: order or item. |
payload_data.charges.currency_code | string | Currency code. |
| purchase | ||
payload_data.purchase | object | Purchase and transaction details. |
payload_data.purchase.order_number | string | Merchant-issued order number. |
payload_data.purchase.status | string | ordered, shipped, refunded, returned, etc. |
payload_data.purchase.purchase_date | string | Date the purchase was made. |
payload_data.purchase.purchase_time | string | Time the purchase was made. |
payload_data.purchase.transaction_id | string | Primary transaction ID. |
payload_data.purchase.long_transaction_id | string | Extended transaction ID. |
payload_data.purchase.cashier_id | string | Cashier or operator ID. |
payload_data.purchase.register_id | string | Register ID. |
payload_data.purchase.loyalty_number | string | Loyalty program member number. |
payload_data.purchase.purchase_time_string | string | Purchase time formatted as string. |
payload_data.purchase.purchase_time_hh_mm | string | Purchase time formatted to HH:MM. |
payload_data.purchase.loyalty_program | boolean | Whether this is a loyalty purchase. |
payload_data.purchase.unqualified_promotions | string[] | Promotion IDs that did not qualify. |
payload_data.purchase.qualified_promotions | string[] | Promotion IDs that qualified. |
payload_data.purchase.type | string | Purchase type: in-store, delivery, pickup, digital, etc. |
| products | ||
payload_data.products | object[] | Purchased product line items. |
payload_data.products[].name | string | Product description, as extracted from the receipt. |
payload_data.products[].number | string | Product SKU or internal merchant ID, as extracted from receipt. |
payload_data.products[].name_normalized | string | Product name, as associated with the UPC. |
payload_data.products[].quantity | number | Quantity purchased. |
payload_data.products[].unit_price | number | Price per unit. |
payload_data.products[].regular_price | number | Regular (non-discounted) price. |
payload_data.products[].purchased_price | number | Final purchase price, after any discounts/coupons. |
payload_data.products[].purchase_status | string | ordered, completed, shipped, out for delivery. |
payload_data.products[].is_sensitive | boolean | Whether the product is considered sensitive. |
payload_data.products[].qualified_promotions | string[] | Whether this specific product index qualified for promo. |
payload_data.products[].category | string | Product category. |
payload_data.products[].size | string | Size or weight of the product. |
payload_data.products[].brand | string | Brand of the product. |
payload_data.products[].upc | string | Universal Product Code. |
payload_data.products[].subproducts | object[] | Nested subproducts, if present. |
| discounts | ||
payload_data.discounts | object[] | Discount line items. |
payload_data.discounts[].type | string | Type of discount (e.g., manufacturer_coupon). |
payload_data.discounts[].description | string | Discount text, as extracted from the receipt. |
payload_data.discounts[].amount | number | Amount of discount applied. |
payload_data.discounts[].scope | string | Scope of discount (order or item level). |
payload_data.discounts[].product_ids | string[] | Reference to product IDs if item level. |
note
email_metadata is included in the payload only when the receipt is an email receipt and not for paper or account-linking receipts.
note
ReceiptProcessed fires for all receipt scans regardless of content of scan data.
note
The ReceiptProcessed event contains PVP data but this is not where the client should be looking for the amount to reward. Use the other event type RewardUpdated instead.