Skip to main content
The Storage primitive proxies a fullstack app’s storage API (/storage/v1) with the project service-role key injected. App-scoped, on both the company mount (/v1/apps/:id/...) and per-user mount (/v1/users/:user_id/apps/:id/...). On per-user mounts the kit must enable the storage primitive.

Endpoint

Everything after storage/proxy/ maps to the project’s /storage/v1/:
POST .../supabase/proxy/v1/projects/{ref}/storage/buckets also creates a bucket. The Management API has no such route (it is GET-only), so the apps proxy rewrites that call to POST storage/v1/bucket on the data plane — the same thing storage/proxy/bucket reaches. Agents kept reaching for the management path; it now works instead of returning an opaque upstream failure.
Binary uploads are best done with a signed upload URL (POST .../storage/v1/object/upload/sign/{bucket}/{path}) then a direct PUT of the bytes — the JSON proxy is intended for metadata and text/JSON content.

SDK

See the Storage guide and the storage sub-client.