Skip to main content
Generic passthrough to the underlying backend management API for fullstack apps. Naive injects its backend access token and forwards your request, so any operation the management API supports can be performed against the app’s project — database queries and migrations, auth configuration, storage, edge functions, secrets, REST settings, and more. The upstream path goes after /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:
  • DELETE on the project itself — use DELETE /v1/apps/:id so all linked infrastructure is cleaned up together.
  • All org/account-level paths (listing organizations, creating projects, other projects) — 403 forbidden.
Requires a fullstack app — 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:
All forward with the app’s service-role key, bypassing RLS — treat as admin access. REST behavior headers (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.

Path rewrites