Requesting fields
fields takes dot-paths. Omit it to get the full record.
meta.completeness meaningful —
completeness is measured against what you asked for, so a full-record request will almost always
report less than 1 for reasons you do not care about.
Joining results back
Setref on every input. Unif echoes it untouched, and results arrive in the order sent.
result["data"]["id"] on your row the first time. Every later refresh is then a direct
lookup by ID, which is cheaper than resolving a URL again and immune to the entity being renamed.
Handling each status
One input failing never fails the batch, so every result needs a branch.enriched
enriched
Everything you asked for came back.
data is populated.partial
partial
Resolved, but some requested fields were unavailable.
data is populated and
meta.missing_fields names the gaps. Usually a coverage limit in
that market rather than a problem with the row.not_found
not_found
The cascade ran to the end and no source verified a match — a dead
listing, a typo, or an entity outside your enabled markets. Every step missed, so the row cost
nothing. Retrying will not help; route it to a human or drop it.
ambiguous
ambiguous
Several entities matched.
candidates lists them. Pick one with your own rule and store the
decision, or the same input stays ambiguous forever.unsupported
unsupported
The channel or entity type is not enabled for your workspace. An entitlement problem, not a
data problem — check
GET /channels.Refreshing on a schedule
Enrichment is not a one-time step. Metrics move, so a row enriched last month is stale.Scheduled re-enrichment
Re-enrich by stored ID on your own cadence. Cheapest for a set you want a fresh number on
every day regardless of whether it moved.
Trackers
Let Unif watch the set and post a webhook only when a metric crosses your threshold. Cheapest
when you only care about change.
GET /lists/{id}/items with the period you want, rather than a batch you have to rebuild
each time.
Idempotency
Enrich accepts anIdempotency-Key header. Retrying with the same key returns the original
response instead of doing — and charging for — the work twice.