Docs

Reliability

Timeouts, retries and idempotency, what each plan offers for availability, and how to diagnose an incident.

Updated Oct 17, 2026

Retries and idempotency

Networks fail. Retry safe requests (reads) freely and writes only with an idempotency key, so a write the server already did isn't done twice.

  • The SDKs retry failed requests with backoff and give every write one Idempotency-Key from its first attempt, so a retried write is applied once.
  • From your own HTTP client, send Idempotency-Key: <unique id per operation> on writes you may retry. A retry while the first is still running gets 409 IDEMPOTENCY_IN_PROGRESS: wait and retry with the same key.
  • The server keeps a successful write's answer for an hour and returns it (with X-Idempotency-Replayed: 1) to a retry with the same key; the same key with a different body gets 409 IDEMPOTENCY_PAYLOAD_MISMATCH. Failed writes and answers over 256 KB are not kept, so their retry runs again. Answers that carry credentials (sign-in tokens, a new API key, a client secret) are kept for two minutes only: long enough for retries.
  • Honour Retry-After on 429 and 503; back off exponentially otherwise.
  • Function triggers retry failed runs and keep the ones that keep failing in a dead-letter queue (Event triggers); make handlers safe to run twice.

Timeouts

WhereLimitSet it in
A SQL statementYour statement timeoutPooling and timeouts
A function runThe function's timeout, up to your plan's maximumFunction memory, timeout and limits
A workflow step's sleepPlan maximumDurable workflows

Availability by plan

FreeProUltraTeamEnterprise
Uptime SLABest effortBest effort99.599.999.99
High-availability failover———✓✓
Read replicas——AddonNativeNative
Isolated compute cluster———✓✓
Days without requests before the database is paused (0 = never); the next request resumes it7 daysNeverNeverNeverNever
Support channelCommunityEmailPriorityDedicatedTam

Free databases pause after 7 days without requests and start again on the next one, which then takes a few seconds. Paid plans don't pause unless you turn idle pause on.

When something goes wrong

  1. Read the error

    The status code and detail.code usually say what happened — see the table in HTTP API.

  2. Find the request

    Search the X-Request-ID or trace_id in Logs & Audit to see where it stopped.

  3. Check what changed

    A recent deploy, migration or policy change? Version history: see, undo and restore changes shows it and can roll it back.

  4. Check limits

    Plan & usage shows whether a quota ran out.

  5. Contact support

    Include the trace id, the time and your project URL.

Something unclear or missing on this page?Tell us