Actual Capture Paper Receipts: Scan API Developer Guide

This guide covers server-side receipt processing via the Scan API. Use this when you need to process receipt images without a mobile SDK, such as from a web app, file transfer, or batch pipeline.

How It Works

  1. Submit — Send receipt images to the Scan API as file uploads or publicly accessible URLs.
  2. Extract — The API processes the image and returns structured JSON with merchant, date, total, line items, payment method, and more.
  3. Enrich (optional) — If Product Intelligence is enabled, extracted line items are matched against the product catalog for UPC, brand, category, and normalized product names.

Authentication

Every request requires your license_key in the request body. Obtain your key from your Actual account manager or via the Developer Hub.

Single-Frame Requests

Send one receipt image with frame_idx=1 and last_frame=true. The API returns structured JSON with all extracted data.

Image upload (multipart form-data):

curl -X POST "https://api.blinkreceipt.com/v14" \
  -H "Content-Type: multipart/form-data" \
  -F "license_key=your_license_key" \
  -F "image=@receipt.jpg" \
  -F "frame_idx=1" \
  -F "last_frame=true"

Image URL (application/x-www-form-urlencoded):

curl -X POST "https://api.blinkreceipt.com/v14" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "license_key=your_license_key" \
  -d "image_urls[0]=https://example.com/receipt.jpg" \
  -d "detect_duplicates=true"

Multi-Frame Requests (Long Receipts)

For receipts that span multiple images:

  1. Submit the first frame with frame_idx=1 and last_frame=false.
  2. Save the blink_receipt_id from the response.
  3. Submit subsequent frames with the same blink_receipt_id, incrementing frame_idx.
  4. Set last_frame=true on the final frame.

Frames must be submitted in order. If you don’t know the last frame during real-time processing, make a final call with just the license_keyblink_receipt_id, and last_frame=true.

Request Parameters

Image Upload (multipart/form-data)

ParameterTypeRequiredDescription
license_keystringYesYour Scan API license key
imagebinaryYesPNG or JPEG image (max 10 MB)
frame_idxintegerYesFrame index, starting at 1
last_framebooleanYestrue for single-frame or final frame
blink_receipt_idstringFor frames 2+Returned from the first frame response

Image URL (application/x-www-form-urlencoded)

ParameterTypeRequiredDescription
license_keystringYesYour Scan API license key
image_urls[0]stringYesPublicly accessible URL of the receipt image
detect_duplicatesbooleanNoEnable duplicate detection

Duplicate Detection

Enable detect_duplicates=true in your request to check whether a receipt has been submitted before. The response includes isDuplicate and duplicateBlinkReceiptIds if a match is found. Duplicate detection uses trip and basket data and checks within a 2-week window across your instance.

Image Requirements

  • Formats: PNG or JPEG
  • Maximum size: 10 MB per image
  • Higher quality images (good lighting, minimal blur, flat receipt) produce better results

Response

The API returns a JSON object with:

  • Trip-level fields: merchant name, date, time, total, subtotal, tax, payment method, store location, transaction ID, cashier, register
  • Basket-level fields: product descriptions, quantities, prices, UPCs (with Product Intelligence)
  • Confidence scores: trip_confidenceitem_confidenceocr_confidence
  • Quality indicators: is_receiptis_blurryis_screenis_fraudulentis_duplicate

Scan API Reference (SwaggerHub)

Receipt Quality & Feedback

FieldWhat it tells you
is_receiptWhether the image appears to be a valid receipt
is_blurryWhether the image is too blurry to extract reliably
is_screenWhether the image appears to be a photo of a screen
is_fraudulentWhether the receipt appears manipulated or counterfeit (US only, select banners)
is_duplicateWhether this receipt has been submitted before (2-week window, within your instance)
ocr_confidenceAverage OCR confidence score across all characters

Testing Recommendations

  • Test with both high-quality and low-quality images to understand accuracy thresholds
  • Test multi-frame submissions with long receipts
  • Test duplicate detection by submitting the same receipt twice
  • Test with various receipt types: thermal, inkjet, laser-printed

Implementation Timeline

ScopeEstimated Dev Time
Web API integration~1 week + QA

Related

Let’s Turn Proof Into Action 

Your next move should be backed by proof, and we’re here to help you leverage real data for real results. Start turning verified insights into measurable impact today.