Manifest
GET /v1/manifest is a cheap state fingerprint: a hash, the latest run, freshness markers, and source health.Changes
GET /v1/observations/changes returns only observations that became known since a knowledge-time bound.Snapshot
GET /v1/snapshot returns the current public observation set plus the matching manifest hash.Source health
GET /v1/source-health reports per-connector freshness so you can detect silently-frozen feeds.The sync loop
Seed once with a snapshot
Pull
GET /v1/snapshot to load the current public observation set, and store the manifestHash and asOf it returns.Poll the manifest
On a schedule, call
GET /v1/manifest. If manifestHash is unchanged from your stored value, nothing moved and you can stop early.Pull only changes
When the hash changes, call
GET /v1/observations/changes?start_date=<your last sync date> to fetch only observations that became known on or after that date. Page through with the cursor.1. Check the manifest
The manifest is the cheapest way to ask “did anything change?”. Compare the returnedmanifestHash to the one you stored last; if it matches, you are up to date.
Scope health and freshness to one source.
Scope health and freshness to one provider.
Response
Fingerprint of current state. Store it; an unchanged hash means nothing moved.
Timestamp the manifest was generated (ISO). Record it so you know the date to pass as
start_date on your next incremental pull.Id of the most recent ingestion run. May be null.
Total observations in scope.
Most recent
observedAt (when a value became known) across the set.Most recent ingestion timestamp across the set.
Per-connector health summaries (same shape as
/v1/source-health).Full snapshot
GET /v1/snapshot returns the current public observation set together with the manifest hash that describes it. Use it to seed a fresh downstream copy, or to reconcile if you suspect drift.
Response
When the snapshot was generated (ISO).
Hash describing exactly this snapshot. Store it as your sync baseline.
The public observation set in scope. Each observation carries attribution, freshness, and rights metadata.
Per-connector health summaries.
The snapshot returns only redistribution-safe public observations. Licensed vendor data is never included. Filter the scope with the standard observation filters (for example
country, indicator_id).3. Sync incrementally
GET /v1/observations/changes returns only observations whose knowledge time falls on or after a start_date bound, newest first. Pass the date of your last successful sync to fetch just the delta.
Knowledge-time lower bound (date,
YYYY-MM-DD). Returns observations whose observedAt is on or after this date. as_of is also accepted to retrieve the latest vintage known on or before a timestamp.Scope to one country (ISO 3).
Scope to one or more canonical indicators (comma-separated).
Page size, 1 to 500.
Opaque pagination cursor from
meta.pagination.next_cursor.Honest caveat on knowledge time:
as_of currently approximates the ingestion timestamp rather than full provider-vintage reconstruction. The changes feed reflects when Conduit learned of a value, which is the right basis for incremental sync.Monitor source health
GET /v1/source-health reports per-connector status and freshness so you can detect a feed that has gone stale or started failing, before it shows up downstream as quietly missing data.
Filter to one source.
Filter to one provider.
Page size, 1 to 500.
Response
Connector identifier.
Connector status, e.g.
healthy, degraded, stale, disabled, never_run, unknown.Per-frequency freshness verdict for the feed:
fresh, stale, or unknown.When the last run finished (ISO). May be null.
When the connector last succeeded. Null if it has not succeeded recently.
Machine-readable issue codes, e.g.
stale_source, connector_errors, connector_warnings.Most recent error message, when present.
Newest knowledge-time the connector has produced.
Newest period the connector has covered.
When the connector is next scheduled to run. May be null.
Putting it together
Recommended cadence
Recommended cadence
Seed with one snapshot. Poll the manifest on your refresh interval. When the hash changes, pull
observations/changes?start_date=<last sync date> and upsert by observationId. Read source health on a slower cadence (for example hourly) to catch stalled feeds.Idempotent upserts
Idempotent upserts
Always key your store by
observationId. The changes feed can re-deliver an observation (for example after a revision), so upsert rather than insert, and never assume a value is final.Rights stay enforced
Rights stay enforced
Snapshot and changes return only redistribution-safe public observations. Licensed vendor data never appears, so a synced copy inherits the same redistribution-safe boundary.
Pagination
Pagination
Every list response carries
meta.pagination. Follow next_cursor while has_more is true. The TypeScript SDK does this for you via async iteration.Related
Derived analytics
Derived datasets sync alongside raw observations and carry their own provenance.
SEC fundamentals
Keep a downstream copy of company fundamentals fresh the same way.