Skip to content

Supabase Auth errorSupabase: AuthRetryableFetchError

Sign-up, the password reset email or every login suddenly fails with AuthRetryableFetchError, often with a status of 0, 500 or 503. supabase-js uses this one error for any Auth request that got no answer or a server error, so the name alone doesn’t say what broke. The status code does. Here is what each one means, from Supabase’s docs and source code, or hand it over at a fixed price.

Short answer

Log error.status. A 0 means no response reached the app: a device offline, a wrong project URL, a paused project or a cancelled request. A 500 on sign-up or password reset usually means the email failed to send through your SMTP settings, or a database trigger failed. A 503 on every Auth request means the Auth service can’t load its configuration, most often an invalid session timebox. Retrying won’t fix a 500 or 503 until the SMTP setting, trigger or Auth setting is fixed.

What each status code means, and the fix

  1. 01

    Read the status code first

    In supabase-js, an Auth request that throws before any response, or that comes back with status 500 to 504 or a Cloudflare 520 to 530, becomes AuthRetryableFetchError. The status is 0 when nothing came back. Log error.status and error.message next to the call that failed, whether sign-up, reset or sign-in, before changing anything. In Flutter, AuthRetryableFetchException covers requests that got no response, and recent supabase_flutter versions report server errors of 500 and above as AuthRetryableApiException.

  2. 02

    500 on sign-up or password reset: the email didn’t send

    “The signup confirmation and password reset flows require an SMTP server to send emails.” Supabase, Password-based Auth

    Confirmation and reset emails go out through the SMTP server in your project’s Auth settings. When the send fails, for example because of a wrong SMTP password, host or port, or a sender address your email provider hasn’t verified, Supabase Auth answers with status 500 and the message Error sending confirmation email or Error sending recovery email. Auth also uses those messages when it can’t save the token, so check the Auth logs in the dashboard for the error behind it. Fix the settings, then send a test reset to an address outside your team.

  3. 03

    500 elsewhere: a database trigger failed

    “Most often it points to issues in your database setup such as a misbehaving trigger on a schema, function, view or other database object.” Supabase, Error codes

    If sign-up fails with the message Database error saving new user, look at triggers on auth.users, such as one that creates a profile row. An error inside the trigger fails the whole sign-up, and the client sees it as this error.

  4. 04

    503 on every Auth request: the Auth service can’t start

    “A 503 status code accompanied by an AuthRetryableFetchError typically indicates that the Auth (GoTrue) service is failing to initialize because it cannot load its configuration.” Supabase, Auth error: 503 AuthRetryableFetchError

    When every sign-in, sign-up and session refresh fails with 503, Supabase names the usual cause: an invalid Timebox duration under User Sessions in the Auth Sessions settings, such as a value far too large or in an unsupported unit. Set a smaller valid duration, or the default of 4320 hours, and save. Saving reloads the configuration and Auth starts again.

  5. 05

    Status 0: nothing reached the app

    Check the project URL the app was built with and that the device is online, and rule out a paused project. In a browser, a CORS block or a request cancelled by a page navigation gives status 0 too, and so can an extension that blocks requests. If it only happens in the published app, compare the URL and key in its environment with your local ones.

  6. 06

    Show users the right message

    Catch this error apart from AuthApiError, so a user sees “couldn’t reach the server, try again” rather than “wrong password”. Keep the retry to one tap: a broken SMTP setting, trigger or Auth setting fails every time until it is fixed.

Checked against the vendor’s docs on : Supabase troubleshooting: Auth error: 503 AuthRetryableFetchError; Supabase docs: Auth error codes and HTTP status codes; Supabase docs: Send emails with custom SMTP; supabase-js source: which responses become AuthRetryableFetchError; supabase_flutter source: AuthRetryableFetchException and AuthRetryableApiException; Supabase Auth source: the email send errors.

Rather hand it over?

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

Related: Supabase auth emails going to spam · Supabase “Database error saving new user” · Supabase project paused · Supabase “Failed to fetch” in the published app

Questions

More on this error

Why is it called retryable if retrying doesn’t help?

supabase-js labels every missing response and server error as retryable, because some are brief outages. A wrong SMTP password, a failing trigger or a bad Auth setting fails every retry until it is fixed.

Was the email sent if I got this error on password reset?

Not necessarily. Supabase Auth uses that message when the send fails, and also when it can’t save the reset token. Check the Auth logs for the real cause, fix it, then ask the user to request a new link.

Can you fix it for me?

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

A different error?

Describe it and get a written quote

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.