Receipt verification tools arranged on a violet-lit desk.

Build or buy a receipt verification API? A practical architecture guide

Compare building and buying receipt extraction, quality checks, duplicate controls, review operations, webhooks, and loyalty delivery.

The first version of receipt scanning looks small: accept an image, read a date and total, return JSON. A production promotion adds the work hidden behind that diagram. Customers upload bad photos. Retailers abbreviate products differently. The same purchase arrives from another account. Ambiguous evidence needs a reviewer. Webhooks fail and retry. Someone must explain why a genuine customer was rejected.

The build-or-buy decision is not “can our team call an OCR model?” It is “which parts of the verification operation create an advantage for us, and which parts do we want to own for years?”

Map the full system before estimating it

A production path normally needs:

  1. upload sessions and file validation
  2. image normalization and a capture-quality gate
  3. field and line-item extraction
  4. product-catalogue matching
  5. configured eligibility and consistency rules
  6. visual and purchase duplicate checks
  7. an exception queue with evidence and reasons
  8. signed events, idempotent delivery and retries
  9. retention, audit history and access controls
  10. a downstream loyalty or promotion decision

The last item deserves emphasis. Verification should produce trusted evidence and a decision against its configured evidence rules. The loyalty engine owns earning, limits, challenges, tiers and rewards. In the native Steve–Open Loyalty integration, approved receipts become transactions; Open Loyalty then applies campaign and earning rules.

When building is reasonable

Building can make sense when the workflow is narrow, stable and strategically distinctive. You may have one retailer feed with clean identifiers, an existing internal review tool, and engineers who already operate image pipelines and event delivery. You may also need controls so specific that a general service would require more adaptation than it saves.

Estimate the ongoing system, not the prototype. New receipt layouts and product descriptions appear. Fraud patterns change. Review policies need versioning. Customer support needs reasons. Operations need replay and audit tools. Security teams need key rotation and retention controls.

When buying is reasonable

A managed verification layer is attractive when the campaign spans retailers, evidence quality varies, launch dates matter, or several clients need different rules. It can also remove the need to join separate OCR, duplicate, queue and delivery products.

Buying does not remove design work. You still own the campaign brief, product reference data, participant experience, downstream integration and acceptance test. Steve exposes configured fields with per-field confidence, rule reasons and event history; matching arbitrary catalogue records to receipt lines remains a workflow to design and validate rather than an automatic consequence of providing a catalogue.

Compare the real options

Area Build Buy Hybrid question
Capture UX Full control Reuse hosted/API capture Keep app UX, call verification API?
Extraction Tune and operate models Configure required schema Keep proprietary catalogue matching?
Duplicates Build history and matching Configure workflow scope Share only identity keys?
Review Build queue and permissions Use provider queue/API Review in existing case tool?
Delivery Own signing, replay, ledger Use signed webhooks/connector Which system is source of truth?
Loyalty Build campaign engine Integrate one Let Open Loyalty own earning?

Test failure paths through the API

A technical evaluation should include more than a successful request. Retry the same client submission identifier. Deliver the same webhook twice. Reject a bad signature. Simulate a downstream outage and confirm delivery can be retried without creating two loyalty transactions. Submit an unreadable image and verify the response distinguishes “cannot assess” from “ineligible.”

Steve’s delivery API uses short-lived upload sessions, client submission identifiers, HMAC-signed webhooks and a delivery ledger. The typed client covers the API and signature verification. Approved evidence can be delivered as Open Loyalty transactions or custom events. These controls are part of the product boundary; points calculation remains in Open Loyalty.

A build-or-buy checklist

  • Can every decision be traced to evidence and a rule?
  • What is the duplicate scope: participant, campaign, client or full history?
  • What happens when a field or product match is uncertain?
  • Can reviewers override a decision, and is the action logged?
  • Are gated uploads billed?
  • Are events signed, deduplicated and replayable?
  • Can rules and schemas change without rewriting historical results?
  • Who owns reward qualification and member balance changes?
  • What format and page limits apply?
  • Can you evaluate the system on your own labelled sample?

If you are deciding whether to assemble this stack or use a managed layer, book a technical demo. Bring a sample payload, several difficult receipts and the system that should receive the result. We will map the responsibilities before discussing implementation.

Stop sampling.
Start proving.

Bring a source. Tell us the fields you need. Let’s extract the data and verify what matters.

Book a demo 30 minutes. Your use case. Real possibilities.