Skip to main content
A retried search or feed request runs again and is billed again. Send an Idempotency-Key header, and a retry with the same key returns the stored result at no extra charge.

How it works

Send Idempotency-Key on any POST, PUT, PATCH, or DELETE. Generate one UUID v4 per logical operation before the first attempt, and reuse it for every retry of that operation. A retry with a new key runs and is billed again. The header covers every write route outside /api/auto-apply/*: POST /api/jobs/search and the feed endpoints POST /api/jobs/feed, POST /api/jobs/feed/managed, and POST /api/jobs/feed/{feed_id}. Auto Apply keeps its own records; see the Auto Apply exception.

What gets stored, and for how long

On the feed, use a new key for each new cursor. Reusing the previous page’s key returns that stale page.

What a replay returns

A replay returns the original status code and body, plus X-Idempotent-Replay: true. It is not billed again and does not count toward your rate limits. The original’s other headers, such as X-Has-More, X-Credits-Deducted, and X-RateLimit-*, are not replayed. On a feed replay, read has_more and next_cursor from the body. See Response headers.
A result is stored only once the original request completes. A retry sent while the original is still running executes again and is billed again. Give feed requests a client timeout of at least 120 seconds, so you retry only after the server answers.

Worked example: retry after a dropped connection

The server completes attempt 1, but the connection drops before the response arrives. The client retries with the same key and body:
Attempt 2 returns attempt 1’s page. It does no new work and is not billed.

The Auto Apply exception

/api/auto-apply/* routes skip the shared cache. POST /api/auto-apply/applications requires an Idempotency-Key and keeps its own durable 24-hour record. It returns explicit errors instead of a silent replay: Create blocks until the first fields are discovered. Repeating it with the same key and body re-attaches to the in-flight application and resumes the same wait, so it is also the recovery path. See Recovery. POST /api/auto-apply/applications/{id}/answers is accepted once per correction round, so a duplicate post attaches to the in-flight wait instead of submitting twice. A key used on a live-key create cannot be reused on a sandbox-key create, or the other way round. That returns 409 idempotency_key_reuse.
Auto Apply keys also expire after 24 hours, and replaying a create after that can create a second application. Persist the key before you send the request, and the application ID as soon as you have it.