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":
| Surface | Use it for | Docs |
|---|---|---|
| Auth | Getting a bearer token (OAuth 2.1 or email/password) | Authentication |
| PostgREST | Reading rows and simple filtered queries over the tables | REST |
| Workflow RPCs | Every write — creating and advancing content safely | Workflow RPCs |
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"
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 }).