Single changes: observations
One or more entities, up to 500 per request, toPOST /internal/v1/connections/{connection_id}/observations. Each one carries
upsert or delete, and a delete carries no document.
How you learn about a change
CrossUp doesn’t dictate how you find out. It gives you two ways to deliver, and you pick based on what your system has:Resending is safe
Each entity is identified by itsexternal_id, the id it has in your system.
It can also carry a revision: an integer that only grows, such as an
updated_at in epoch or a sequence number.
- With
revision: it’s applied only if it’s greater than the last one. An equal or lower one answersstaleand overwrites nothing. - Without
revision: CrossUp assigns the next one and compares the content. If it matches the last one, it answersunchangedand creates no work.
revision out.
What was deleted silently: snapshots
If your system doesn’t report deletions, a periodic snapshot finds them. It’s the same process as the initial sync. On close, whatever of that type didn’t come is removed.What doesn’t validate: quarantine
An entity that doesn’t meet the contract comes backquarantined. Its reason
names the field: document.quantity: required. The rest of the
batch goes in. Fix that entity and resend it alone.
Whatever comes back accepted belongs to CrossUp. It’s archived and reaches
the catalog even if something on the other side is down. Your
connector doesn’t need to retry it.
Glossary
- Connection: your store in CrossUp. Its id is the
connection_id(cn_…). - Observation: an entity that changed, with
upsertordelete. - Snapshot: “here’s everything” for one entity type. When you close it, what didn’t come is removed.
- Run: an open snapshot (
snp_…). Left unclosed, it expires after 24 hours. - Revision: an integer that only grows and says which version is newest.
- Quarantine: what didn’t validate;
reasonsays why.
What you’ll see
Every change you send comes backaccepted. A retry comes back unchanged or
stale, and your catalog keeps the newest version.
If you don’t see it
The canonical model
Which fields each entity carries and which ones are omitted.
Connector SDK and protocol
The contract, and how to speak it in your language.