Skip to main content
Four endpoints start work that takes longer than a request should be held open. They all answer immediately with 202 Accepted and tell you where to poll, rather than making you wait on a connection that a proxy, a client timeout, or a gateway may close first.
A closed connection does not cancel the work. If your client gives up early, the run still finishes and still writes its result. Treat a timeout as “check the result”, not as “nothing happened”, and never retry blindly: a second call is a second full run.

Status polling

The first three return an id and a poll path. Fetch that path and read status.
Terminal states are complete and failed for an audit report, and brief_ready, ready and failed for a generation. A failed audit report carries the reason in error.

Watermark polling

POST /v1/brands/{id}/recommendations/generate has no row of its own to poll, because it refreshes a whole set of recommendations rather than creating one object. It returns a poll_after timestamp instead:
A run refreshes last_seen_at on every recommendation it finds, not only the new ones. So the run has finished once any recommendation’s last_seen_at is later than poll_after. That distinction matters: a run that turns up nothing new still updates last_seen_at, so this tells you the run is done rather than leaving you unable to separate “still working” from “finished with no changes”.
poll_after is read from the database clock, the same clock that stamps last_seen_at, so you are never comparing two different clocks. Pass it back exactly as received.

Cost and rate limits

Every endpoint on this page runs a model and costs money, and POST /v1/brands/{id}/recommendations/generate is the most expensive call in the API: it crawls your site’s pages to check coverage. They carry their own per-endpoint limits on top of the plan rate limit. Poll on an interval of 15 seconds or more rather than in a tight loop, and let a run finish before starting another for the same brand.

Next steps

Rate limits

Per-endpoint ceilings

Errors

Handling failures