Skip to main content
The Apps API provides full lifecycle management for managed web applications. Each app is backed by a real Vercel project; fullstack apps additionally get a dedicated Supabase project (PostgreSQL, auth, storage, edge functions). Naive owns the provider credentials and injects them into every call. Apps can be frontend_only (static/Next.js) or fullstack (Next.js + Supabase). Apps are fully standalone — no agent orchestration required. Build locally from a starter template and deploy by uploading your project; or, when the company has an agent container, let engineer agents build and deploy from their workspaces.

Capability Model

Two layers of access:
  1. Lifecycle endpoints — curated, opinionated operations for the common path: create, deploy, publish, secrets, domains, database queries.
  2. Provider proxies — generic passthrough to the Vercel REST API and Supabase Management API, scoped to the app’s own project. Anything those APIs support — build logs, project settings, auth config, storage, edge functions, migrations — works through the proxies.

Endpoints

MethodPathDescription
GET/v1/appsList all apps
POST/v1/appsCreate a new app
GET/v1/apps/templatesList starter templates (GitHub clone commands)
GET/v1/apps/:idGet app details
DELETE/v1/apps/:idDelete an app
POST/v1/apps/:id/deployDeploy — tarball upload (direct) or workspace (orchestrated)
POST/v1/apps/:id/publishPromote to production
GET/v1/apps/:id/deploymentsList deployments
POST/v1/apps/:id/retryRetry failed provisioning
GET/v1/apps/:id/secretsList secret keys
POST/v1/apps/:id/secretsSet a secret (synced to Vercel)
DELETE/v1/apps/:id/secrets/:keyDelete a secret (removed from Vercel)
GET/v1/apps/:id/secrets/:key/revealReveal secret value
GET/v1/apps/:id/domainsList domains
POST/v1/apps/:id/domainsAdd custom domain
DELETE/v1/apps/:id/domains/:domainIdRemove domain
POST/v1/apps/:id/domains/:domainId/set-primarySet primary production domain
POST/v1/apps/:id/connect-domainConnect company domain
DELETE/v1/apps/:id/connect-domain/:domainIdDisconnect company domain
POST/v1/apps/:id/verify-domain-dnsVerify DNS
POST/v1/apps/:id/db/queryRun SQL query (fullstack)
GET/v1/apps/:id/db/tablesList tables (fullstack)
ANY/v1/apps/:id/vercel/proxy/*Vercel API passthrough (scoped to the app’s project)
ANY/v1/apps/:id/supabase/proxy/*Supabase Management API passthrough (scoped to the app’s project)
ANY/v1/apps/:id/db/rest/*Supabase PostgREST passthrough (fullstack, service-role key injected)
ANY/v1/apps/:id/storage/proxy/*Supabase Storage passthrough (fullstack)
ANY/v1/apps/:id/auth/proxy/*Supabase GoTrue passthrough (fullstack)
ANY/v1/apps/:id/functions/proxy/*Supabase Edge Functions invoke passthrough (fullstack)

Capability Primitives

A fullstack app’s Supabase backend is also exposed as four first-class primitives, each a curated surface over these proxies (and individually gateable in Account Kits):

Per-User Scoping

All routes are also mounted under /v1/users/:user_id/apps for multi-tenant setups. On the per-user mount, the subject’s Account Kit must enable the apps primitive, and every :id route verifies the app belongs to that user.

Authentication

All endpoints require either a session cookie or a Bearer API key:
curl https://api.usenaive.ai/v1/apps \
  -H "Authorization: Bearer nv_sk_live_..."