API Monitoring Guide

Monitor Supabase API Status

Get alerted when your Supabase project has issues before your app can't read data, users can't log in, or your free-tier project silently pauses. Know the Supabase API status in real time, not 15 minutes later.

Supabase is the backend for countless apps — Postgres database, auth, realtime, storage, and edge functions, all behind one project domain at YOUR_REF.supabase.co. When the REST API (PostgREST) returns errors, Auth (GoTrue) starts rate-limiting, or your project hits its connection pool, your whole app breaks at once — and the global status page may say everything is fine.

This guide covers everything you need to monitor Supabase API status: which per-service endpoints to track, how GoTrue auth rate limits and connection limits work, how to catch a paused free-tier project, and what to do when a service goes down.

Why Monitor the Supabase API Externally?

Supabase maintains a status page at status.supabase.com for platform-wide incidents. But because every project is its own isolated instance on its own subdomain, the most common failures are project-specific and invisible to the global status page.

The problem with relying on Supabase's status page

  • Paused projects: Free-tier projects auto-pause after inactivity. Every API call then fails until you manually restore — a total outage the status page will never report.
  • Connection exhaustion: Postgres has a finite connection pool. Under load (or with a leaky client) you can exhaust it, and PostgREST starts failing while Supabase's platform is perfectly healthy.
  • Auth rate limits: GoTrue rate-limits sign-ups, sign-ins, and OTPs per IP. A spike or attack can 429 your auth flow while the rest of your app is fine.
  • Per-service failures: Auth, REST, Realtime, Storage, and Edge Functions can each fail on their own. A single global status indicator can't tell you which one is down.

External synthetic monitoring catches Supabase issues in 1-2 minutes, not 10-15. For a paused project or connection exhaustion, that's the difference between catching it before users do and finding out from an angry support ticket.

Understanding Supabase's Services

Supabase is several services behind one project domain. Knowing the path for each tells you exactly what to monitor and where a failure is.

Service Path Powered by
REST / Database /rest/v1/ PostgREST
Auth /auth/v1/ GoTrue
Realtime /realtime/v1/ Realtime (WSS)
Storage /storage/v1/ Storage API
Edge Functions /functions/v1/ Deno runtime

Monitoring tip: use the anon key, not the service role key

PostgREST requires an apikey header. Use the anon key for monitoring public read paths — it respects Row Level Security and is safe to store. Never put the service role key in a monitor unless absolutely necessary, since it bypasses RLS.

Because all services share the project's compute and database, a single overloaded Postgres instance can take down REST, Auth, and Realtime together. Monitoring each path separately tells you whether it's one service or the whole project.

Which Supabase API Endpoints to Monitor

Each endpoint below tests a different Supabase service. Monitoring several lets you pinpoint whether it's the database, auth, functions, or a fully paused project.

GET https://YOUR_REF.supabase.co/rest/v1/

PostgREST root (with the apikey header). Confirms the REST API is up and your key is accepted. The cheapest signal that your project isn't paused. Make this your primary Supabase health check.

Critical
GET https://YOUR_REF.supabase.co/rest/v1/your_table?select=id&limit=1

Table read. Confirms the database itself is reachable through PostgREST and not just the gateway. Catches connection-pool exhaustion and RLS misconfigurations. Use a small table and limit=1 to keep it light.

Critical
GET https://YOUR_REF.supabase.co/auth/v1/health

GoTrue auth health. Confirms the Auth service is responding so logins and sign-ups work. Auth can degrade or rate-limit independently of the database, so monitor it on its own.

High
GET https://YOUR_REF.supabase.co/functions/v1/your-function

Edge Function. If you run business logic in Edge Functions, monitor a health route on one. Deno functions can fail on cold starts, timeouts, or deploy errors independently of the rest of the project.

High
GET https://YOUR_REF.supabase.co/storage/v1/object/public/bucket/health.txt

Storage object. If your app serves user uploads or assets from Supabase Storage, monitor a small public object to confirm the Storage API and CDN path are serving files.

Medium

Rate limit note: The PostgREST REST API isn't gateway-rate-limited by default, so light monitoring won't trip it — but it does consume a database connection, so keep table-read checks to limit=1 and reasonable intervals. Be more conservative on /auth/v1/ endpoints, which are IP-rate-limited around 30 requests per bucket.

Supabase Rate Limits & Capacity Explained

Supabase's limits differ sharply by service. The real ceiling is often your database, not a published rate limit. Understanding this is essential for both a reliable app and accurate alerting.

Auth (GoTrue): token bucket per IP

Auth endpoints use a token-bucket algorithm per IP address, with buckets capped around 30 requests for operations like sign-in, sign-up, and OTP. Exceeding the bucket returns HTTP 429.

HTTP/1.1 429 Too Many Requests

A login storm or attack can hit this and block legitimate users.

REST (PostgREST): bound by your database

PostgREST isn't user-rate-limited at the gateway by default. The effective limit is your Postgres connection pool and compute size. Exhaust connections and queries queue or fail — so latency and 5xx on table reads are your real capacity signal.

Realtime: configurable per project

Realtime caps concurrent connections, messages per second, channels, and joins per second. These are configurable per project and you can request increases. Because Realtime is a WebSocket, monitor it indirectly via an Edge Function health route or your app's realtime behavior.

Distinguishing limits, pauses, and outages

A 429 on auth means IP rate limiting; rising latency then 5xx on REST means connection exhaustion or compute saturation; a hard, total failure across every endpoint usually means a paused project or a platform incident. A 503 points to the platform. UptimeSignal records status codes and response times so you can tell these apart.

Your app runs on Supabase. Monitor every service yourself.

Get alerted when PostgREST, Auth, or Edge Functions start failing — or when a free-tier project pauses — before your users can't log in. Free for 25 endpoints, checks every 5 minutes.

Monitor Supabase API free →

Common Supabase API Issues and How to Detect Them

Knowing the common failure patterns helps you configure monitoring that catches real problems and avoids false alerts.

Paused Free-Tier Project

After inactivity, free projects pause and every endpoint fails until you restore from the dashboard. Monitoring the PostgREST root catches this instantly — the fix is one click, but only if you know it happened.

Connection Pool Exhaustion

A traffic spike or a client that doesn't release connections can drain the Postgres pool. Table reads slow down, then fail with timeouts or 5xx. Tracking response time on a table-read monitor warns you before it becomes a full outage — consider Supavisor/pooling if you see this often.

Auth Rate Limiting (429)

A login storm, credential-stuffing attack, or a buggy retry loop can trip GoTrue's per-IP token bucket and 429 your auth flow. Monitoring /auth/v1/health and watching for 429s on auth calls flags this early.

Invalid or Rotated API Key

If you rotate the anon/service keys (e.g. after a leak) and forget to update a client, calls return 401. Your monitor catches the mismatch immediately so you can redeploy with the new key.

Edge Function Cold Starts & Errors

Deno Edge Functions can be slow on cold start or throw after a bad deploy. A dedicated function monitor with body validation catches a function that returns 200 but with an error payload — something a status check alone misses.

How to Monitor the Supabase API: Step-by-Step

1

Get your project URL and anon key

In the Supabase dashboard → Project Settings → API, copy your project URL (https://YOUR_REF.supabase.co) and the anon public key. You'll send the key as the apikey header.

Security tip: Use the anon key, which is RLS-protected and meant to be public. Keep the service role key out of monitors unless you must test a privileged path.

2

Create a monitor in UptimeSignal

Sign up at app.uptimesignal.io and add a new HTTP monitor:

URL: https://YOUR_REF.supabase.co/rest/v1/
Method: GET
Header: apikey: YOUR_ANON_KEY
Expected status: 200

A failure here is the clearest signal that your project is paused or down.

3

Add per-service monitors

Add a table-read monitor (database), /auth/v1/health (Auth), and a function/storage monitor as needed. Together they tell you which Supabase service is failing, not just that something is.

4

Configure alerting for your team

Route alerts where you'll act on them:

  • Email -- Immediate notification to on-call
  • Slack -- Alert your engineering channel
  • Webhook -- Trigger PagerDuty or auto-restore tooling
5

Tighten intervals for production projects

For production apps, use 1-minute checks (Pro plan) so a pause, connection exhaustion, or auth outage is caught within a minute instead of five. Frequent checks also keep a free-tier project from idling into a pause.

What to Watch For

Configure your monitors to alert on these conditions:

HTTP Status Codes

  • 200 -- Service responding normally
  • 401 -- Bad/rotated API key
  • 429 -- Auth rate limit (per IP)
  • 502, 503, 504 -- Paused project or platform issue
  • 500 -- Database/PostgREST error

Response Time

  • < 300ms -- Healthy database
  • 300ms-1.5s -- Possible connection pressure
  • > 1.5s -- Likely pool exhaustion

Response body validation

For a table read, validate that the response is a JSON array (and not a PostgREST error object with a "message" field). For an Edge Function, check for an expected token in the body. Body validation catches a 200 that actually carries an error payload — a common Edge Function failure mode.

When Supabase Goes Down: Response Playbook

When monitoring alerts you to a Supabase problem, here's how to respond and limit the impact on your app.

1. Verify and classify

Check your Supabase dashboard first (is the project paused?) and status.supabase.com for platform incidents. Determine whether it's a pause, auth rate limit (429), connection exhaustion, or an upstream outage.

2. Restore a paused project

If the project is paused, restore it from the dashboard immediately. To prevent recurrence, keep a low-frequency monitor running (which also keeps the project active) or upgrade off the free tier for a production app.

3. Relieve connection pressure

If reads are timing out, check for runaway queries or leaked connections, enable connection pooling (Supavisor), and consider scaling compute. Cache hot reads so the database isn't the single point of failure.

4. Protect the auth flow

For auth 429s, add client-side throttling and CAPTCHA, and investigate whether it's organic load or an attack. Don't blindly retry into the rate limit — back off.

5. Communicate

Update your status page so users know logins or data may be affected. If it's an upstream Supabase incident, link their official status post.

Frequently Asked Questions

Why monitor the Supabase API instead of just using their status page?
Supabase's status page reports platform-wide incidents, but won't reflect project-specific problems like a paused free-tier project, an exhausted connection pool, a rotated API key, or auth rate limiting. Each project is its own subdomain, so external monitoring of your project URL catches issues the global status page never shows.
How do I check Supabase API status right now?
For platform-wide status, visit status.supabase.com. For your project, run: curl https://YOUR_REF.supabase.co/rest/v1/ -H "apikey: YOUR_ANON_KEY", and check Auth at /auth/v1/health. For continuous monitoring, set up UptimeSignal to poll every 1-5 minutes and alert you instantly when the status changes.
Which Supabase endpoints should I monitor?
Monitor the PostgREST root /rest/v1/, a table read like /rest/v1/your_table?select=id&limit=1, /auth/v1/health for Auth, and any Edge Function or Storage path you depend on. Each tests a different Supabase service that can fail independently.
Can I monitor the Supabase API for free?
Yes. UptimeSignal's free tier includes 25 monitors with 5-minute check intervals. You can monitor your PostgREST root, Auth health, a table read, and your Edge Functions, plus other APIs. Commercial use is allowed on the free tier. For 1-minute intervals and unlimited monitors, Pro is $10/mo billed annually ($15/mo monthly).
What are Supabase's API rate limits?
Auth (GoTrue) is the strictest: a token-bucket per IP on auth endpoints, capped around 30 requests, returning HTTP 429. The PostgREST REST API isn't gateway-rate-limited by default, so its real ceiling is your database connection pool and compute. Realtime limits (connections, messages, channels) are configurable per project. All rate-limit errors surface as HTTP 429.
Why does my free-tier project keep going down?
Free-tier projects auto-pause after inactivity, making every API call fail until you restore from the dashboard. They can also hit connection or compute limits under load. Monitoring your project URL catches a pause immediately, and watching response times warns you before connection exhaustion becomes a full outage.
How do I monitor Auth, Realtime, and Edge Functions separately?
Monitor /auth/v1/health for Auth, /rest/v1/ for the database REST layer, and your /functions/v1/your-function URL for Edge Functions. Realtime is a WebSocket, so the best proxy is a health route in an Edge Function plus tracking whether your app's realtime features work end to end.
Should I use the anon key or the service role key for monitoring?
Use the anon key — it's RLS-protected and safe to store, making it right for monitoring public read paths. The service role key bypasses Row Level Security and must never be exposed; only use it if you're checking a privileged path and the monitor stores secrets securely. For most health checks, the anon key against a public or RLS-allowed table is enough.

Start monitoring Supabase now

UptimeSignal checks your endpoints from outside your network and catches errors before users do.

25 monitors free, unlimited for $10/month.

Monitor Other APIs