1. Set the key
- Send it on
apikeyonly. It is not a JWT: asAuthorization: Bearerit returnsInvalid JWT. Authorizationis only for a user session. The JS client (createClient(url, publishableKey)) setsapikeyfor you.- Sign in for a bigger ceiling: the sign-in page (GitHub) hands you a user JWT to send as
Authorization: Bearer <token>alongsideapikey. Tiers: Conventions & limits. Never invent or mint a key. - Ignore Secret (
sb_secret_…) and legacyservice_role: they bypass every boundary. Landing tables are unreachable with the publishable key;Accept-Profile: publicanswers 401.
2. First call
coverage takes no arguments and says what the warehouse holds:
3. Read a view (GET)
4. Call a function (POST)
Named arguments in a JSON body to POST /rpc/<name>. Names are the SQL parameter names and all start with p_; omit one to take its default.
GET, functions you POST.
Next
Conventions & limits
Filter syntax, row caps, nulls, and error codes.
Python SDK
One method per endpoint; a capped response raises; views page.
Panel
The researcher endpoint: mixed ids, mixed metrics, one grain.
Quotes
B3 cash prices, unadjusted, by ticker and session.
Funds
Registry, profile, and monthly NAV by CNPJ.
Notes
- Sample values in these docs are illustrative shapes, not live prints. Call
coveragefor what is loaded. - If the project exposes several schemas and
apiis not first, sendAccept-Profile: apionGETandContent-Profile: apionPOST(including/rpc/). Insupabase-js:{ db: { schema: 'api' } }orsupabase.schema('api'). PGRST106means the schema is not exposed: Supabase Dashboard, Settings, API, Exposed schemas.