Only sync completed transactions to Omneo. Do not sync draft, partially paid, or otherwise incomplete records. Omneo transactions are immutable records of what occurred.
Before you start
- Review Authentication to get a bearer token
- Plan your data mapping: decide which transaction fields from your source system map to Omneo fields
- Determine whether you’ll look up profiles by Omneo ID, email, or an external identity handle
Transaction anatomy
A transaction has two levels:- Header: overall transaction details: total, date, location, staff, receipt ref, payments, tags
- Items: individual line items with product, price, and quantity
Resolving the profile ID
You don’t need to know the Omneo profile ID up front. Useprofile_id_handle to tell Omneo how to interpret the profile_id field:
Creating a transaction
Upsert (create or update)
Use the sync endpoint when you have a reliableexternal_id and want to avoid duplicate transactions:
external_id. If found, it updates it. If not found, it creates a new one.
Updating a transaction
Voiding a transaction
Prefer voiding over deletion. Setis_void: true on the transaction to mark it as voided without removing it from history:
Bulk / queued transactions
For historical imports or high-volume ingestion, use the queue endpoint rather than the standard create endpoint. This places each transaction into a batch processing queue rather than processing it synchronously:transaction.created webhook fires as each one processes.
Adding line items after creation
total. Update the header separately if needed.
Attaching custom fields
All transaction intake endpoints (create, upsert, update, mock) accept acustom_fields array. Use this to attach structured, typed metadata to a transaction at write time rather than storing arbitrary data in meta.
Each entry in custom_fields requires four fields: