Skip to main content
Two deploy modes on the same endpoint, selected by Content-Type:
  • Direct upload (application/gzip): send a gzipped tarball of your project directory — no agent container involved. This is what naive apps deploy does when run outside a container.
  • Workspace deploy (JSON body or empty): copies code from the company’s agent container workspace (orchestrated mode).

Direct Upload Mode

Send a gzipped tarball (Content-Type: application/gzip) of the project root. Limits and rules:
  • Max 30 MB gzipped, max 200 MB decompressed, max 5,000 entries
  • node_modules, .next, and .git are skipped server-side (exclude them client-side too for speed)
  • Absolute paths and .. traversal entries are rejected
  • The build system detects the framework and builds; pre-built static sites (index.html, no package.json) are served as-is
Get a starter project from the templates endpoint.

Workspace Deploy Mode (Orchestrated)

Source resolution order:
  1. Explicit workspacePath{workspacePath}/app is deployed.
  2. Active task workspace — if a kanban task body references naive apps deploy <appId>, that task’s workspace is used.
  3. Engineer agent workspace{app.workspacePath}/app. If the workspace was never scaffolded, the starter template is applied automatically and the deploy retried once.
If the company has no agent container, workspace mode returns 400 invalid_input with instructions to use direct upload instead — apps are not tied to orchestration.

After the Deploy

The build runs asynchronously. Poll GET /v1/apps/:id/deployments or use the hosting proxy (GET v13/deployments/{vercelDeploymentId}, GET v3/deployments/{vercelDeploymentId}/events for build logs). Once READY, the deployment is automatically aliased to the production domain; use publish to promote a specific historical deployment.

Errors

400
400
501