New Supabase table not showing in the API
Two checks tell you if the grant is missing. Then fix it below.
Check 1: what does the table grant right now?
Run this in the SQL Editor with your table name:
select grantee, privilege_type
from information_schema.role_table_grants
where table_name = 'your_table';
If anon and authenticated are not in the result, the Data API cannot reach the table for visitors or signed-in users.
Check 2: what will future tables get?
select
case d.defaclobjtype
when 'r' then 'tables'
when 'S' then 'sequences'
when 'f' then 'functions'
end as object_type,
a.grantee::regrole as role,
string_agg(a.privilege_type, ', ' order by a.privilege_type) as privileges
from pg_default_acl d
cross join lateral aclexplode(d.defaclacl) a
where d.defaclrole = 'postgres'::regrole
and d.defaclnamespace = 'public'::regnamespace
and a.grantee in ('anon'::regrole, 'authenticated'::regrole, 'service_role'::regrole)
group by 1, 2
order by 1, 2;
Each row is a role and the privileges it receives on new objects that the postgres role creates in public. No rows means new tables grant nothing to the API roles until you do it yourself.
Read the symptom
| What you see | Likely cause | Fix |
|---|---|---|
42501, permission denied for table x | No grant for the calling role | Grant, then RLS and policies (tool below) |
| Empty result, no error | Grant exists, RLS is on, no policy allows the rows | Add a policy for that role |
| 42501 with a row-level security message on insert or update | Grant exists, policy rejects the new row | Fix the with check rule |
42501, permission denied for sequence x | Table is granted, its serial sequence is not | Grant the sequence |
Dates are from the Supabase changelog post published 2026-04-28, read 2026-11-10. We have not seen an official post confirming that the 2026-10-30 step finished for every project, so check your own project with the query on this page.
Write the fix for your tables
One table is free. The whole schema with a rollback file is $9 one-time, free during launch.
Waiting for a paste.
Who can reach each table
Your tables show up here, one row each, with a choice of who can reach them.
Parsed in your browser. Your SQL is never uploaded, and no site or database is scanned.
Questions
I created the table in the Table Editor. Does that grant access?
The changelog says the rule holds no matter how the table was created: SQL Editor, migrations, Management API, MCP, CLI or a coding tool. We have not tested what the dashboard offers at creation time, so run check 1 to be sure.
Sources
- Supabase changelog: Breaking Change: Tables not exposed to Data and GraphQL API automatically (published 2026-04-28), read 2026-11-10
- Supabase docs: Securing your API, read 2026-11-10
- Supabase knowledge base: Database API 42501 errors (marked updated 2026-11-03), read 2026-11-10
- Supabase docs: Row Level Security, read 2026-11-10
Related
- Grants vs row level securityTwo checks run on every request. A grant comes first.
- permission denied for sequenceThe table is granted and its id counter is not. One more grant fixes it.
- Check the grants on a tableOne query lists every role and privilege on a table.
- The Supabase change of 30 October 2026New tables in public need explicit grants. Dates, scope and the SQL in one place.