Skip to main content

Status codes

Errors carry a human-readable detail:

404 is deliberately ambiguous

A tenant that belongs to another partner and a tenant that does not exist both return 404. A 403 would confirm the id is real, which would let anyone enumerate a competitor’s customer list one guess at a time. Do not infer existence from the status code.

Retries and idempotency

Tenant provisioning is idempotent on (you, external_ref) — retry it freely after a timeout. Knowledge sync is a full replace, so re-sending the same set converges rather than duplicating. For everything else, retry 429 and 5xx with exponential backoff. Do not auto-retry a 400.

Async work

Document upload and website crawl return before the work is done. Poll the job before telling a merchant their knowledge is ready.

Versioning

The surface is /api/v1/. Additive changes — new optional fields, new endpoints — can arrive without notice, so parse defensively and ignore fields you do not recognise. Removals and type changes will not happen inside v1 without notice to you first.