VULK is callable
Build VULK projects from Claude Desktop, Cursor, ChatGPT, custom GPTs, or any OpenAPI-aware agent. Public REST API + machine-readable spec.
TL;DR
Generate an API key in your VULK settings, point your agent at https://vulk.dev/openapi.json, and call POST https://app.vulk.dev/api/v1/projects with { "prompt": "..." }. Auth is Authorization: Bearer vk_sk_.... Cost is debited from the user's credit balance.
OpenAPI 3.1 spec
Every public endpoint is described in a machine-readable spec at https://vulk.dev/openapi.json. Drop the URL into Claude Desktop, Cursor, ChatGPT custom GPT, or any tool that imports OpenAPI — the agent gets typed tools for every operation, with descriptions, request shapes, and error codes.
| Method | Path | Purpose |
|---|---|---|
| POST | /projects | Start a build from a brief |
| GET | /projects | List the account’s projects |
| GET | /projects/{id} | Read a project, its versions and addresses |
| DELETE | /projects/{id} | Delete a project |
| GET | /projects/{id}/files | Read the delivered files, or one file |
| POST | /projects/{id}/messages | Send the next instruction, or answer a question |
| GET | /operations/{requestId} | Follow a build: status, replies, questions, links |
| POST | /operations/{requestId}/stop | Stop a running build |
| GET | /models | The models your account may use |
| GET | /usage | Plan, credit balance and the last 30 days |
Base URL: https://app.vulk.dev/api/v1
Generate a project from curl
curl -X POST https://app.vulk.dev/api/v1/projects \
-H "Authorization: Bearer vk_sk_$YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "prompt": "Build a SaaS dashboard with auth + Stripe + Postgres",
"requestId": "7a1c0b7e-6a0f-4b0e-9a63-0f5c1b2d3e4f" }'
# → 202 Accepted
# {
# "requestId": "7a1c0b7e-6a0f-4b0e-9a63-0f5c1b2d3e4f",
# "accepted": true,
# "operationStatus": "running",
# "projectId": "cmgp3x8d7000a0wz4h2k1qv9r",
# "editorUrl": "https://app.vulk.dev/chat/cmgp3x8d7000a0wz4h2k1qv9r",
# "nextAction": "Read GET /operations/7a1c0b7e-… until operationStatus is done, waiting or failed."
# }
curl https://app.vulk.dev/api/v1/operations/7a1c0b7e-6a0f-4b0e-9a63-0f5c1b2d3e4f \
-H "Authorization: Bearer vk_sk_$YOUR_KEY"Generation runs asynchronously. Poll GET /operations/{requestId} for status, or fetch the source tree via GET /projects/{id}/files once ready.
Claude Desktop, Cursor, Windsurf
For native tool-calling without writing HTTP code, install the VULK MCP server. The MCP client auto-exposes create_project, get_project_files, and deploy_project as native tools.
{
"mcpServers": {
"vulk": {
"command": "npx",
"args": ["vulk-mcp-server"],
"env": {
"VULK_API_KEY": "vk_sk_your_key_here"
}
}
}
}Drop into ~/Library/Application Support/Claude/claude_desktop_config.json (Claude Desktop) or ~/.cursor/mcp.json (Cursor). See the vulk-mcp-server npm page for the full tool list.
Or connect with your VULK account
If your client supports remote MCP servers with sign-in, you need no API key. Add the address below to your client, and it sends you to VULK to sign in and allow access.
https://app.vulk.dev/mcp
The connection can read your projects (and, on a paid plan, their files), plus your plan, credits and usage. It can also create a project or send the next instruction to one, using your plan’s credits as the editor does, and stop a running request. You can remove it at any time in your VULK settings, under Integrations.
Setup steps and the tool list are in the MCP docs.
Keys, rate limits, and credits
- Create keys in Settings › API keys. Each key belongs to one account, carries the scopes you choose, and starts with
vk_sk_. Revoke any time. - Auth header:
Authorization: Bearer vk_sk_<key>. No query parameter, no cookie auth — Bearer only. - Rate limit: 60 requests per minute per key. Every answer carries
X-RateLimit-*headers; past the limit the API returns HTTP 429 with Retry-After. Reads never spend credits; a build the plan or balance does not cover returns HTTP 402. - Errors share one shape — error, code, status: 400 = a wrong field, 401 = no or invalid key, 402 = plan or credits do not cover it, 403 = the key lacks the scope, 404 = not on this account, 409 = no delivered files yet, 413 = body over 64 KB, 429 = rate limit.
API usage rules
- 60 requests per minute per API key. Beyond that the API returns HTTP 429 with a
Retry-Afterheader. - Builds spend your plan’s credits.
POST /projectsstarts a build as the editor would; a brief the plan or balance does not cover returns HTTP 402 before anything starts. - The
modelparameter takes a model id fromGET /models, or auto. A model your plan does not include is listed as locked, with the plan that unlocks it, and returns HTTP 402. - Retry with the same
requestId. Send a UUID you make with every build; if the answer is lost, the samerequestIdreturns the operation already created instead of starting a second one. Bodies are JSON, at most64 KB. - Never put your API key in browser code. The API answers any origin (CORS) so tools can call it, but a key belongs server-side or in an MCP-client config, never in a page.