Supabase Verify OTP
Verify OTP codes through the gateway so the client only talks to one auth surface. The client sends the OTP code and the email or phone number to the verify
Verify OTP codes through the gateway so the client only talks to one auth surface. The client sends the OTP code and the email or phone number to the verify endpoint. The gateway forwards this to Supabase's GoTrue API and returns the session tokens if verification succeeds.
Last reviewed: 2026-03-06
When to use this
Use the Supabase integration guides when your application uses Supabase Auth for identity and you want passwordless (OTP) authentication flows managed at the gateway edge. The gateway handles sending OTP codes and verifying them, so your backend only sees authenticated requests.
Key concepts
The Supabase authorizer validates JWTs issued by Supabase Auth using the project's JWT secret. Configure
jwt_secret,issuer, andaudiencein the authorizer block.The
supabase_passwordless_authintegration sends OTP codes via email or phone through Supabase's GoTrue API. The gateway constructs the request from the client payload and Supabase environment variables.The
supabase_passwordless_verifyintegration verifies OTP codes and returns Supabase session tokens. The client sends the OTP code and the gateway validates it against Supabase.Supabase requires specific environment variables:
SUPABASE_URL,SUPABASE_ANON_KEY, andSUPABASE_JWT_SECRET. All three must be set before any Supabase integration works.If Supabase is configured to send magic links instead of numeric OTP codes, the verify flow will not work. This is controlled in the Supabase dashboard under Auth settings.
Repo-grounded example
{
"authorizer": {
"type": "supabase",
"jwt_secret": "$env.SUPABASE_JWT_SECRET",
"issuer": "https://project.supabase.co/auth/v1",
"audience": "authenticated"
},
"paths": [
{
"method": "POST",
"path": "/api/v1/supabase/auth",
"integration": { "type": "supabase_passwordless_auth" }
},
{
"method": "POST",
"path": "/api/v1/supabase/verify",
"integration": { "type": "supabase_passwordless_verify" }
}
]
}This snippet includes the supabase_passwordless_verify integration path. The client POSTs the OTP code along with the email or phone used during the auth step. The gateway calls Supabase's verify endpoint and returns the access and refresh tokens on success.
Troubleshooting
If OTP sending fails with a 400 error, verify that
SUPABASE_URLandSUPABASE_ANON_KEYare set correctly and that the Supabase project has email or phone auth enabled.If OTP verification returns "invalid token", confirm that Supabase is configured to send numeric OTP codes, not magic links -- check the Auth settings in your Supabase dashboard.
If JWT validation fails on protected routes, confirm that
SUPABASE_JWT_SECRETmatches the JWT secret shown in your Supabase project settings (Settings > API > JWT Secret).If you receive a "missing email or phone" error, ensure the client request body includes either an
emailorphonefield in the JSON payload sent to the auth endpoint.
Related docs
Last updated