Skip to main content

API overview

Contentpipe's programmatic surface is Supabase. There is no separate REST service to run or scale — the same Postgres database that backs the admin UI and the MCP server is reachable directly, with Row-Level Security enforcing access per user.

There are three ways in, in increasing order of "does the thinking for you":

SurfaceUse it forDocs
AuthGetting a bearer token (OAuth 2.1 or email/password)Authentication
PostgRESTReading rows and simple filtered queries over the tablesREST
Workflow RPCsEvery write — creating and advancing content safelyWorkflow RPCs
Prefer RPCs for writes

Never write status (or most other columns) directly. Status transitions are validated by database triggers, and the intent-named workflow RPCs are the supported way to move content through the pipeline. Direct table writes that violate a transition will simply be rejected.

Base URL

https://jionfqfmjinkrmzlsghf.supabase.co
  • REST: /rest/v1/<table>
  • RPC: /rest/v1/rpc/<function>
  • Auth: /auth/v1/…

Every request needs two things: the project's publishable (anon) key in the apikey header, and a user bearer token in Authorization. RLS keys off the bearer token, so an anonymous request sees nothing.

curl "https://jionfqfmjinkrmzlsghf.supabase.co/rest/v1/projects?select=slug,name" \
-H "apikey: $CP_PUBLISHABLE_KEY" \
-H "Authorization: Bearer $CP_ACCESS_TOKEN"
The supabase-js client is the easy path

Everything below is plain HTTP so it's portable, but in JS/TS the @supabase/supabase-js client handles auth, headers, and typing for you — supabase.from('publications').select() and supabase.rpc('submit_for_review', { p_publication }).