Supabase

Supabase-compatible API

Base URL, SDK setup and PostgREST support matrix.

Database exposes its row API through Supabase client paths. Use a base URL ending in /supabase/<database_id>/, including the trailing slash, and a Praxis credential. Unlike Supabase, storage uses SQLite; define tables and fields through /database/v1, not SQL migrations, and do not expect Supabase Auth, RLS policies or realtime subscriptions. Auth, storage, realtime, functions and graphql service paths return 501 with x-should-retry=false. See the Database domain for supported concepts and differences.

Use the official supabase-js client to read and write tables in one database.

Guide →

Base URL

https://api.deepraxis.ai/supabase/{database_id}/

PartMeaning
{database_id}ID returned by database creation; each database has its own URL.
/Keep the trailing slash so supabase-js preserves the database ID when adding rest/v1.

The API Key is the Authorization: Bearer credential; pass that same key as the second supabase-js argument. These examples run on the server.

import { createClient } from "@supabase/supabase-js";

const supabase = createClient(
  `https://api.deepraxis.ai/supabase/${process.env.DATABASE_ID}/`,
  process.env.PRAXIS_API_KEY,
  { auth: { persistSession: false, autoRefreshToken: false } },
);

Table endpoint

GET / HEAD / POST / PATCH / DELETE

/supabase/{database_id}/rest/v1/{table}

Only the PostgREST subset below is available. Unsupported syntax returns HTTP 400 with code PGRST127; invalid or unknown parameters can return PGRST100.

Filter operators

ValueSupport
eqsupported
neqsupported
gtsupported
gtesupported
ltsupported
ltesupported
likesupported
ilikesupported
insupported
issupported
cssupported
cdsupported
ovsupported
ftsunsupported
plftsunsupported
phftsunsupported
wftsunsupported
matchunsupported
imatchunsupported
isdistinctunsupported
slunsupported
srunsupported
nxlunsupported
nxrunsupported
adjunsupported

Prefer

ValueSupport
return=minimalsupported
return=headers-onlysupported
return=representationsupported
count=exactsupported
count=plannedpartial
count=estimatedpartial
resolution=merge-duplicatessupported
resolution=ignore-duplicatessupported
missing=defaultpartial
handling=strictsupported
handling=lenientsupported

Accept

ValueSupport
application/jsonsupported
*/*supported
application/vnd.pgrst.object+jsonsupported
text/csvunsupported
application/geo+jsonunsupported
application/vnd.pgrst.plan*unsupported

Query syntax

ValueSupport
notsupported
and/or/not.and/not.orsupported
JSON paths (->, ->>)supported
aliasessupported
link embeddingsupported
!field hintsupported
embedded filters/order/paginationunsupported
casts (::)unsupported
aggregatesunsupported
spread (...)unsupported
!inner/!leftunsupported
operator(any)/operator(all)unsupported

planned/estimated currently return exact counts. Fields can declare a default. In a bulk insert, a column some rows supply and others omit takes the field default where omitted with missing=default, and null otherwise, as in PostgREST; a column no row supplies always takes the default (null without one). cs/cd/ov accept arrays ({a,b} or ["a"]); on json fields cs/cd also accept a JSON object and use jsonb containment, e.g. meta=cs.{"color":"red"} (keys and values are contained recursively); cs also accepts a JSON scalar, matching a top-level array that holds it, e.g. meta=cs."a". cs.{}/cd.{} is the empty object on json fields and the empty array on array fields. Rows deleted by one DELETE may reference each other; a referencing row outside that DELETE still returns 409 23503. like/ilike apply only to string fields and ->> text paths; other types return 400 42883. Strings compare and sort in binary order (case-sensitive, uppercase before lowercase); ordering by lower() is not supported, so store a lowercase copy in another field and order by it for case-insensitive sorting. GET/HEAD with If-None-Match matching the current ETag return 304 with no body. Unsupported Accept values return 406 PGRST107. Upsert accepts id or one unique field.

Unknown Prefer values are ignored by default; handling=strict returns 400 PGRST122. Singular Accept returns an object for exactly one row, otherwise 406 PGRST116. Other unsupported Accept values return 406 PGRST107.

Unavailable services

PathHTTPcode
/supabase/{database_id}/auth/v1/{+path}501not_implemented
/supabase/{database_id}/storage/v1/{+path}501not_implemented
/supabase/{database_id}/realtime/v1/{+path}501not_implemented
/supabase/{database_id}/functions/v1/{+path}501not_implemented
/supabase/{database_id}/graphql/v1/{+path}501not_implemented

These services return x-should-retry: false. Their error body has only code and message, unlike table endpoint errors.

Error codes and envelopes

Export

On this page