Reference

idempotency_in_progress

A request with this `Idempotency-Key` is running right now. The API is refusing to start a second one.

409HTTP 409 · Idempotency In Progress

What it means

A request with this `Idempotency-Key` is running right now. The API is refusing to start a second one.

Retry with backoff

Transient. Retry with exponential backoff and jitter, not a fixed interval.

What causes it

  • A client retried before the first attempt returned.
  • Two workers picked up the same job.
  • A previous attempt is still holding the lock and has not yet timed out.

How to fix it

  • Wait `details.retry_after_seconds` and retry the identical request. You will get the original response, replayed.
  • A replayed response carries `Idempotent-Replay: true`, which is how you tell a fresh result from a cached one — worth checking on a create, where a 201 with an id is otherwise ambiguous.

The details object

This code carries a details object with more than the message can say:

`{ retry_after_seconds }` — how long to wait before retrying.

What the response looks like

409 application/problem+json
{
  "error": {
    "code": "idempotency_in_progress",
    "message": "A request with this `Idempotency-Key` is running right now. The API is refusing to start a second one",
    "details": { ... },
    "request_id": "7cb7f7862a82425d8e4c3fb8a497dfe6"
  },
  "type": "https://integrable.cloud/docs/errors/idempotency_in_progress",
  "title": "Idempotency In Progress",
  "status": 409,
  "detail": "A request with this `Idempotency-Key` is running right now. The API is refusing to start a second one",
  "instance": "/api/bots/01a0652b-3713-7ea1-a6c9-2e895389ec34"
}

Branch on error.code, not on the message — the code is stable, the sentence is not. Log request_id either way.

Still stuck

Quote the request_id from the response — hello@integrable.cloud. It is what lets us find the exact request. The full list of codes is at Error codes, and the conventions every endpoint shares are in Retries, versioning and limits.

Something here wrong or missing? Tell us — the documentation and the API are maintained by the same person, so a correction is a fix rather than a ticket.

Building on it? Start on the free plan — no card — and call the same API the dashboard uses.

Start free