# Supabase Auth: sms_send_failed

> Supabase phone sign-in fails with sms_send_failed: the SMS provider refused the message. Check the provider keys, sender, number format and trial limits.

Canonical: https://app369.com/fix/supabase-sms-send-failed/
Last updated: 2026-11-09

sms_send_failed is the Supabase Auth error when the SMS provider fails to send the one-time code. Supabase hands the message to Twilio, MessageBird, Vonage or TextLocal, so the cause is almost always in that provider’s settings or account.

**Short answer**

Open the SMS provider’s message log and read its error for the failed send. Fix the credentials or sender in Supabase Auth settings, send numbers in international format with the country code, and check that the provider account can send to that country. For testing, use test phone numbers with fixed codes.

Rather not fix it yourself? [**App Fix Ticket**](https://app369.com/fixed-price/flutter-firebase-bug-fix/) starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

## **Why the SMS doesn’t send, and the fix**

1. 01 ### **The provider credentials or sender are wrong**
  > “Sending an SMS message failed. Check your SMS provider configuration.” [**Supabase docs, Auth error codes (sms_send_failed)**](https://supabase.com/docs/guides/auth/debugging/error-codes) A typo in the account SID, auth token or messaging service, or a sender number the account doesn’t own, makes every send fail. Re-enter them in the Phone provider settings under Authentication in the dashboard.
2. 02 ### **The number isn’t in international format** Send the number with a plus sign and country code, the way the docs example does. A local number without the country code can be refused by the provider.```
const { error } = await supabase.auth.signInWithOtp({
  phone: '+13334445555',
});
```
3. 03 ### **The provider account can’t send there** Trial accounts, unverified numbers and blocked countries are common reasons. The provider’s message log shows which one. Upgrade the account, verify the destination for trials, or allow the country in the provider’s settings.
4. 04 ### **Tests burn real SMS**
  > “To test phone sign-in without sending SMS, add test phone numbers with fixed codes.” [**Supabase docs, Phone login**](https://supabase.com/docs/guides/auth/phone-login) Also check: repeated tests against real numbers hit provider limits and cost money. Add test phone numbers with fixed codes for development.

Checked against the vendor’s docs on November 9, 2026: [Supabase docs: Auth error codes](https://supabase.com/docs/guides/auth/debugging/error-codes); [Supabase docs: Phone login](https://supabase.com/docs/guides/auth/phone-login).

## **Rather hand it over?**

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

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****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.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Supabase email rate limit exceeded**](https://app369.com/fix/supabase-email-rate-limit-exceeded/) · [**Supabase over_request_rate_limit**](https://app369.com/fix/supabase-auth-over-request-rate-limit/) · [**Supabase identity_already_exists**](https://app369.com/fix/supabase-identity-already-exists/) · [**Supabase db push failed**](https://app369.com/fix/supabase-migration-failed-db-push/)

Questions

## **More on this error**

<details>

<summary>**How often can a user request a code? **+</summary>

By default, once every 60 seconds, and the code expires after 1 hour.

</details>

<details>

<summary>**Is this a Supabase outage? **+</summary>

Rarely. The error means the provider refused or failed the send, so the provider’s log usually names the reason.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

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.

</details>

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.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)