Skip to main content
Generic passthrough to the Vercel REST API. Naive injects the platform’s Vercel credentials (token + team ID) and forwards your request, so any operation the Vercel API supports can be performed against the app’s project — without you ever holding a Vercel token. The upstream path goes after /vercel/proxy/. The HTTP method, query parameters, and JSON body are forwarded as-is; the upstream status code and body are returned verbatim.
# List deployments for the app's project
curl "https://api.usenaive.ai/v1/apps/ca7a1b8c-a4d4-4824-b92d-89d5b297eb62/vercel/proxy/v6/deployments" \
  -H "Authorization: Bearer nv_sk_live_..."

# Fetch build logs for a deployment
curl "https://api.usenaive.ai/v1/apps/:id/vercel/proxy/v3/deployments/dpl_xyz789/events" \
  -H "Authorization: Bearer nv_sk_live_..."

# Update project build settings
curl -X PATCH "https://api.usenaive.ai/v1/apps/:id/vercel/proxy/v9/projects/prj_5B9xCYfq..." \
  -H "Authorization: Bearer nv_sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"buildCommand": "next build", "nodeVersion": "22.x"}'

# List the project's environment variables
curl "https://api.usenaive.ai/v1/apps/:id/vercel/proxy/v10/projects/prj_5B9xCYfq.../env" \
  -H "Authorization: Bearer nv_sk_live_..."
{
  "deployments": [
    {
      "uid": "dpl_xyz789",
      "name": "naive-my-landing-page-ca7a1b",
      "url": "naive-my-landing-page-ca7a1b-abc123.vercel.app",
      "state": "READY",
      "target": "production",
      "created": 1768041600000
    }
  ]
}

Scoping Rules

Naive holds org-wide Vercel credentials, so every request is validated against the app before it is forwarded:
Path patternRule
vN/projects/{projectIdOrName}/**{projectIdOrName} must be this app’s Vercel project ID or name. Covers env vars, domains, settings, and every other project sub-resource.
vN/deployments (GET)projectId query param is forced to this app’s project — you always list your own deployments.
vN/deployments (POST)project and name in the body are forced to this app’s project.
vN/deployments/{idOrUrl}/**The deployment must belong to this app’s project (verified against Naive’s records, or against Vercel itself).
Blocked:
  • DELETE on the project itself — use DELETE /v1/apps/:id so all linked infrastructure is cleaned up together.
  • All account/team-level paths (listing projects, user info, billing, other teams’ resources) — 403 forbidden.

Methods

GET, POST, PATCH, PUT, DELETE. Request bodies must be JSON (binary uploads such as v2/files are not supported — use POST /v1/apps/:id/deploy to deploy).

Useful Operations

OperationMethod + path
Deployment statusGET v13/deployments/{deploymentId}
Build logs / eventsGET v3/deployments/{deploymentId}/events
Cancel a deploymentPATCH v12/deployments/{deploymentId}/cancel
List env varsGET v10/projects/{projectId}/env
Project domainsGET v9/projects/{projectId}/domains
Domain config checkGET v9/projects/{projectId}/domains/{domain}
Update project settingsPATCH v9/projects/{projectId}
Consult the Vercel REST API reference for the complete catalog, parameters, and response shapes.

Errors

403
{
  "error": {
    "code": "forbidden",
    "message": "Path must reference this app's Vercel project (prj_5B9xCYfq... or naive-my-landing-page-ca7a1b)"
  }
}
Upstream Vercel errors (4xx/5xx) are passed through with their original status code and body.