/supabase/proxy/. The HTTP method, query parameters, and JSON body are forwarded as-is; the upstream status code and body are returned verbatim.
Scoping Rules
Naive holds an org-wide backend access token, so every request is validated against the app before it is forwarded:
Blocked:
DELETEon the project itself — useDELETE /v1/apps/:idso all linked infrastructure is cleaned up together.- All org/account-level paths (listing organizations, creating projects, other projects) —
403 forbidden.
frontend_only apps have no managed backend and return 501 feature_not_configured.
Methods
GET, POST, PATCH, PUT, DELETE, with JSON bodies.
Useful Operations
Consult the backend management API reference for the complete catalog, parameters, and response shapes.
Data Plane Passthrough
Beyond the management API (api.supabase.com), four data-plane passthroughs hit the app’s own backend project URL with the service-role key injected. Each backs a first-class primitive:
Prefer, Range, Accept, Accept-Profile, Content-Profile) are forwarded on db/rest.
Project ref in the path
The app id in the URL already scopes the call, so the{ref} segment is
rewritten to this app’s own project ref before the request is forwarded.
Pasting a stale, example, or someone else’s ref does not reach that project —
it silently targets yours. Read the response against the app you named, not
against the ref you typed.
An empty {ref} is still rejected:
403
Errors
Upstream errors (4xx/5xx) are passed through with their original status code and body. Failures on…/functions* paths are wrapped into the Naive error envelope
({ error: { code, message, http_status } }) so the upstream message survives.