diff --git a/apps/docs/content/guides/api/automatic-retries-in-supabase-js.mdx b/apps/docs/content/guides/api/automatic-retries-in-supabase-js.mdx index 81a47dd1d6e..0c806ece434 100644 --- a/apps/docs/content/guides/api/automatic-retries-in-supabase-js.mdx +++ b/apps/docs/content/guides/api/automatic-retries-in-supabase-js.mdx @@ -12,9 +12,11 @@ You should only enable retries if your requests fail with network errors (e.g. 5 ## Built-in retries for PostgREST queries -Starting with `supabase-js` v2.102.0, PostgREST queries (`.from()`, `.rpc()`) include built-in automatic retries for transient errors. Retries are **enabled by default** and use exponential backoff with jitter. +Starting with `supabase-js` v2.102.0, PostgREST queries (`.from()`, `.rpc()`) include built-in automatic retries for transient errors. Retries are **enabled by default** and use exponential backoff. -Retryable errors include HTTP status codes 408 (Request Timeout), 409 (Conflict), 503 (Service Unavailable), and 504 (Gateway Timeout), as well as network failures. Only idempotent HTTP methods (GET, HEAD, OPTIONS) and POST requests (used by PostgREST) are retried. +`supabase-js` retries only idempotent HTTP methods: GET, HEAD, and OPTIONS. It doesn't retry POST, PATCH, PUT, or DELETE, so a write is never sent twice. For the methods it does retry, it retries on HTTP status codes 503 Service Unavailable and 520 Unknown Error, and on network failures. + +Because `.rpc()` sends POST by default, RPC calls aren't retried. Call them with `{ get: true }` if you want the built-in retries to apply. ### Disable built-in retries