Skip to main content
Customer API guides

Safe retries & idempotency

An idempotency key lets you retry a write without applying the same operation twice.

Idempotent writes

Every published POST and PATCH customer API mutation requires an Idempotency-Key header. Use a new value of 8 to 128 characters containing only letters, digits, periods (.), underscores (_), colons (:) or hyphens (-). Do not include spaces.

Retry with the same API credential, method, endpoint, key and body to retrieve the original successful result. Reusing that key for a different operation, resource or body with the same credential returns 409 Conflict.

Resume downloads and ordinary read requests do not require an idempotency key. Upload-plan endpoints are not currently published.

Keys are scoped to an API credential. Switching to a new or rotated credential does not replay a receipt created with the previous credential and can repeat the operation. Reconcile an uncertain write before changing credentials.

Example header

Idempotency-Key: cvviz-create-job-20260911-001

Generate your own unique value for each logical operation. Do not reuse this documentation example across unrelated requests.

If a request times out

  1. Keep the original API credential, method, URL, body and idempotency key.

  2. Retry with bounded exponential backoff and jitter.

  3. For 429 or 503, respect Retry-After when supplied.

  4. If you receive 409, read the details. Do not generate a new key merely to work around a conflict; that can create a second operation.

A successful creation replay returns the original creation result, not a fresh view of the job. Read the job to obtain its current state. To change a draft to active later, use the status endpoint with a new key.

Reads and usage

GET requests do not need an idempotency key. Retry transient failures with a bounded backoff; do not repeatedly retry 400, 401 or 403 without correcting the cause. Each admitted retry still counts toward metered usage, even if its write result is replayed.

Was this helpful?

Still need help? Ask the team