/ Docs

API reference

The Volcano REST API lets you manage projects, deploy functions and frontends, provision databases, and handle user authentication.

The Volcano REST API lets you manage projects, deploy functions and frontends, provision databases, and handle user authentication.

Base URL

https://api.volcano.dev

For local development:

http://localhost:8000

Authentication

All API requests require authentication. Include your token in the Authorization header:

curl "https://api.volcano.dev/projects" \
  -H "Authorization: Bearer YOUR_TOKEN"

Different endpoints require different token types:

Token typeUse forWhere it comes from
Platform token (pk-)Managing every project in your accountvolcano login, or the dashboard
Project access token (pt-)Managing a single project from CI, a script, or an agentPOST /projects/{id}/access-tokens
Anon keyUser authentication (signup, signin, refresh)Created with the project
Auth user access tokenActing as one of your end users: their profile, invoking functions as themSignup/signin response
Service keyAdmin operations, invoking functions, bypassing RLSPOST /projects/{id}/service-keys

See Authentication for details on each token type, and Using the API for a worked example from first token to first deploy.

A machine-readable description of everything below is available at https://api.volcano.dev/openapi.yaml — see OpenAPI specification for generating a client or importing the API into a REST client.

Request format

Send JSON data in request bodies:

curl -X POST "https://api.volcano.dev/projects" \
  -H "Authorization: Bearer $PLATFORM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-project"}'

For file uploads (function deployment), use multipart/form-data:

curl -X POST "https://api.volcano.dev/projects/$PROJECT_ID/functions" \
  -H "Authorization: Bearer $PLATFORM_TOKEN" \
  -F "name=hello" \
  -F "runtime=nodejs24.x" \
  -F "handler=handler" \
  -F "code=@function.zip"

Response format

Success responses

Single resource:

{
  "id": "proj_abc123",
  "name": "my-project",
  "status": "active",
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-01-15T10:30:00Z"
}

Paginated list:

{
  "data": [
    { "id": "proj_abc123", "name": "project-1" },
    { "id": "proj_def456", "name": "project-2" }
  ],
  "page": 1,
  "limit": 10,
  "total": 25,
  "has_more": true,
  "next": "/projects?page=2&limit=10"
}

Error responses

{
  "error": "project not found"
}

HTTP status codes

CodeDescription
200Success
201Resource created
204Success with no response body
400Bad request — invalid parameters
401Unauthorized — missing or invalid token
403Forbidden — valid token but insufficient permissions
404Not found — resource doesn't exist
409Conflict — duplicate resource or incompatible resource state
429Too many requests — rate limited
500Internal server error
503Service unavailable — a required backend is unavailable

Pagination

List endpoints support pagination with page and limit parameters:

curl "https://api.volcano.dev/projects?page=2&limit=20" \
  -H "Authorization: Bearer $PLATFORM_TOKEN"
ParameterDefaultMaximumDescription
page1—Page number (1-indexed)
limit10100Items per page

The response includes pagination metadata:

{
  "data": [...],
  "page": 2,
  "limit": 20,
  "total": 45,
  "has_more": true,
  "next": "/projects?page=3&limit=20"
}

Rate limiting

The user authentication endpoints are rate limited per project and client IP, in hourly windows you configure per project. They report the quota on every response:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 73

Over the limit they return 429:

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704128400

X-RateLimit-Reset is a Unix timestamp for the end of the window. /auth/signup, /auth/forgot-password, /auth/reset-password, and /auth/user/change-email send it on a 429; /auth/signin and /auth/refresh do not.

No other endpoint sends these headers. Project management endpoints are not rate limited, so a request with a valid token is never refused for its rate. Project locks and function invocation have their own limits and return 429 without these headers.

One case does return 429 without a quota header: repeatedly presenting credentials that are not recognized. Each unrecognized value has to be checked, so a client working through many of them is rationed per source. Retry with a credential that works, or check the token still exists — a valid token is answered from cache and never counts against this.

Every response says which build and region answered:

X-Volcano-Version: <version>                  # production
X-Volcano-Version: <env>-<version>            # non-production (e.g. staging-xyz)
X-Volcano-Region: us-east-1                   # the region that served the request

Volcano's internal headers are never returned.

CLI version gating

A CLI reports its version via the X-Volcano-CLI-Version request header. The API can reply with these instructions:

  • X-Volcano-CLI-Instruction: suggestion_version_upgrade, require_version_upgrade, low_credit_warning, or not_enough_credit.
  • X-Volcano-Credit-URL: the billing page address sent with a credit instruction.
  • X-Volcano-Device-Instruction: reauth.

Deprecated CLI versions are blocked with 426 Upgrade Required. Credit instructions explain the account state but do not block a request. Requests without the version header are unaffected. See CLI Version Gating.

API endpoints

Projects

MethodEndpointDescription
POST/projectsCreate a project
GET/projectsList projects
GET/projects/{id}Get a project
GET/deploymentsList deployments across every project you own
PATCH/projects/{id}Update project name/region policy
DELETE/projects/{id}Delete a project

See Projects for details.

Functions

MethodEndpointDescription
POST/projects/{id}/functionsDeploy a function
GET/projects/{id}/functionsList functions
GET/projects/{id}/functions/{functionId}Get a function
PATCH/projects/{id}/functions/{functionId}Update function settings (visibility)
DELETE/projects/{id}/functions/{functionId}Delete a function
POST/functions/{functionId}/invokeInvoke a function
GET/functions/resolveResolve function name to function ID
POST/projects/{id}/logs/searchSearch and filter function runtime logs
GET/projects/{id}/functions/{functionId}/deploymentsList function deployments

See Functions for details.

Durable functions

MethodEndpointDescription
POST/projects/{id}/durable-functionsDeploy a durable function
GET/projects/{id}/durable-functionsList durable functions
GET/projects/{id}/durable-functions/{functionId}Get a durable function
DELETE/projects/{id}/durable-functions/{functionId}Delete a durable function
GET/projects/{id}/durable-functions/{functionId}/deploymentsList durable function deployments
POST/durable-functions/{functionId}/executionsStart an execution with an application credential
POST/projects/{id}/durable-functions/{functionId}/executionsStart an execution as the project owner
GET/projects/{id}/durable-functions/{functionId}/executionsList executions
GET/projects/{id}/durable-functions/{functionId}/executions/{executionId}Get an execution
POST/projects/{id}/durable-functions/{functionId}/executions/{executionId}/stopStop an execution
GET/projects/{id}/durable-functions/{functionId}/schedulersList schedules
POST/projects/{id}/durable-functions/{functionId}/schedulersCreate a schedule
GET/projects/{id}/durable-functions/{functionId}/schedulers/{schedulerId}Get a schedule
PATCH/projects/{id}/durable-functions/{functionId}/schedulers/{schedulerId}Update a schedule
DELETE/projects/{id}/durable-functions/{functionId}/schedulers/{schedulerId}Delete a schedule

Durable functions are a separate collection: a standard function's id is 404 here, and a durable function's id is 404 under /projects/{id}/functions. See Durable functions for details.

Frontends

MethodEndpointDescription
POST/projects/{id}/frontendsDeploy a frontend archive (subject to plan deployment limits)
GET/projects/{id}/frontendsList frontends
GET/projects/{id}/frontends/{frontendId}Get a frontend
POST/projects/{id}/frontends/{frontendId}/redeployRedeploy latest frontend artifact
DELETE/projects/{id}/frontends/{frontendId}Delete/deprovision a frontend
GET/projects/{id}/frontends/{frontendId}/deploymentsList frontend deployments
POST/projects/{id}/logs/searchSearch and filter frontend runtime and deployment logs

See Frontend Endpoints for details.

Databases

MethodEndpointDescription
POST/projects/{id}/databasesCreate a database
GET/projects/{id}/databasesList databases
GET/projects/{id}/databases/{databaseName}Get a database
DELETE/projects/{id}/databases/{databaseName}Delete a database
GET/projects/{id}/databases/{databaseName}/queriesGet top query performance from pg_stat_statements
GET/databases/regionsList available regions
GET/databases/versionsList PostgreSQL versions

See Databases for details.

Project locks

MethodEndpointDescription
POST/locks/{key}/leaseAcquire a project lease
PATCH/locks/{key}/leaseRenew the owned lease
DELETE/locks/{key}/leaseRelease the owned lease

These endpoints accept service-role keys only. See Project locks.

Authentication

MethodEndpointDescription
POST/auth/signupCreate a new user
POST/auth/signinSign in a user
POST/auth/refreshRefresh access token
POST/auth/logoutSign out a user
GET/auth/userGet current user
PUT/auth/userUpdate current user
POST/auth/forgot-passwordRequest password reset
POST/auth/reset-passwordReset password with token

See Auth endpoints for details.

Service keys

MethodEndpointDescription
POST/projects/{id}/service-keysCreate a service key
GET/projects/{id}/service-keysList service keys
DELETE/projects/{id}/service-keys/{keyId}Delete a service key

Anon keys

MethodEndpointDescription
POST/projects/{id}/anon-keysCreate an anon key
GET/projects/{id}/anon-keysList anon keys
DELETE/projects/{id}/anon-keys/{keyId}Delete an anon key

Project access tokens

MethodEndpointDescription
POST/projects/{id}/access-tokensCreate a token and return its secret, once
GET/projects/{id}/access-tokensList tokens (page, limit, search, include_revoked)
GET/projects/{id}/access-tokens/{tokenId}Get one token's metadata
DELETE/projects/{id}/access-tokens/{tokenId}Revoke a token
GET/projects/{id}/access-tokens/usageDaily request counts for every token in the project
GET/projects/{id}/access-tokens/{tokenId}/usageDaily request counts for one token

Creating, listing, reading, and revoking require a platform token: a project access token cannot manage project access tokens. The usage endpoints are ordinary project reads. See Project access tokens.

MCP

MethodEndpointDescription
POST/mcpModel Context Protocol endpoint for AI agents

This endpoint takes its project from the credential, so it accepts a project access token only. See MCP server.

What's next

ReferenceDescription
Using the APICreate a token, deploy, and read logs over HTTP
AuthenticationToken types and auth headers
ProjectsProject management API
FunctionsFunction deployment and invocation
DatabasesDatabase provisioning
Auth endpointsUser authentication API
MCP serverGive an AI agent a scoped tool surface over one project
ErrorsError codes and handling
OpenAPI specificationGenerate a client from the machine-readable contract

On this page