VibeKit Documentation
Build and deploy full-stack apps with AI. One API call, live URL in minutes. Apps are hosted as Docker containers at {name}.vibekit.bot.
Base URL: https://vibekit.bot/api/v1
🔑 Free with BYOK: Connect your Claude or OpenAI key in settings and VibeKit costs you nothing. Supports Claude and OpenAI Codex — switch providers anytime via the API or dashboard.
Quickstart
Sign in with GitHub
The fastest way to get started. Sign in via the web to get your API key and access the Dashboard.
https://vibekit.bot/auth/github
Or register via API:
curl -X POST https://vibekit.bot/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
Submit a Task
curl -X POST https://vibekit.bot/api/v1/task \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Build a todo app with dark mode"}'
Check Status & Get URL
curl https://vibekit.bot/api/v1/task/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
Your app will be live at {name}.vibekit.bot
Authentication
VibeKit supports two authentication methods. All API requests require one of these in the Authorization header.
1. API Key
Use your API key directly. Keys start with vk_.
Authorization: Bearer vk_your_api_key
2. JWT (Dashboard Sessions)
JWTs are issued via GitHub OAuth sign-in or the POST /auth/token endpoint. Used by the web dashboard.
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Register via API
/api/v1/auth/register
Create an account and receive an API key. No authentication required.
Request Body
{
"email": "[email protected]"
}
Response
{
"apiKey": "vk_xxx...",
"plan": "free",
"balance": 0.25
}
Exchange API Key for JWT
/api/v1/auth/token
Exchange an API key for a short-lived JWT. Useful for frontend apps that need token-based auth.
Request Body
{
"apiKey": "vk_xxx"
}
Response
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"expiresIn": 86400
}
GitHub OAuth
/auth/github
Redirects to GitHub OAuth for sign-in. On success, issues a JWT and redirects to the Dashboard.
Tasks
Submit coding tasks to VibeKit's AI. Each task uses balance (unless using BYOK mode, which is free).
Submit Task
/api/v1/task
Request Body
{
"prompt": "Build a landing page",
"skills": ["solana"], // optional: domain skills
"projectId": "abc123", // optional: iterate on existing
"repo": "owner/repo", // optional: target repo
"database": true, // optional: enable Postgres database
"template": "landing", // optional: project template
"callbackUrl": "https://...", // optional: webhook
"anthropicApiKey": "sk-ant-..." // optional: BYOK (free)
}
| Field | Type | Description |
|---|---|---|
| prompt | string · required | What you want built, in plain English |
| projectId | string | Existing project ID to iterate on |
| repo | string | GitHub repo (owner/name). Omit to create new |
| branch | string | Branch to work on. Default: main |
| deploy | boolean | Auto-host when done. Default: true |
| database | boolean | Enable Postgres database (Builder/Pro plans). Default: false |
| template | string | Project template (landing, dashboard, crud-api, saas, blog, form, portfolio, ecommerce) |
| skills | string[] | Domain skills (e.g. ["solana", "stripe"]) |
| files | object[] | File attachments ({name, content} base64) |
| callbackUrl | string | Webhook URL for completion notification |
| anthropicApiKey | string | Your Anthropic key for BYOK mode (free) |
Get Task Status
/api/v1/task/:taskId
Response
{
"taskId": "task_abc123",
"status": "complete", // pending | running | complete | error
"deployUrl": "https://myapp.vibekit.bot",
"projectId": "abc123",
"repo": "vibekit-apps/project-abc123"
}
List Tasks
/api/v1/tasks
Returns your recent tasks with status and deploy URLs.
Cancel Task
/api/v1/task/:taskId
Cancel a running or starting task. Only tasks with status running or starting can be cancelled.
Hosting
Deploy and manage apps as Docker containers at {name}.vibekit.bot. Full lifecycle management with health monitoring and auto-recovery.
Deploy App
/api/v1/hosting/deploy
Deploy a new app from a GitHub repository.
{
"repo": "owner/repo",
"subdomain": "my-app", // optional
"runtime": "node", // optional (default: node)
"memoryLimit": 256, // optional: MB
"envVars": {"KEY": "value"} // optional
}
Response
{
"id": "app_abc123",
"url": "https://my-app.vibekit.bot",
"status": "running"
}
List Apps
/api/v1/hosting/apps
Returns all hosted apps for the authenticated user.
Response
{
"apps": [{
"id": "app_abc123",
"name": "my-app",
"repo": "owner/repo",
"url": "https://my-app.vibekit.bot",
"status": "running",
"memory": 256
}]
}
Create App (Template or Repo)
/api/v1/hosting/apps
Create a new app from a template or GitHub repo. The AI agent is auto-provisioned and starts building immediately.
// From template
{
"template": "landing",
"subdomain": "my-app"
}
// From GitHub repo
{
"repo": "owner/repo-name",
"subdomain": "my-app"
}
Templates: landing dashboard saas crud-api ecommerce portfolio blog form
App Details
/api/v1/hosting/app/:id
Returns full app details including infrastructure topology, resource usage, and domain config.
{
"id": "app_abc123",
"name": "my-app",
"url": "https://my-app.vibekit.bot",
"status": "running",
"stats": { "cpu": 2.1, "memory": 128, "memoryLimit": 256 },
"infra": {
"nodes": [{ "id", "type", "label" }],
"edges": [{ "source", "target", "label" }]
}
}
App Lifecycle
/api/v1/hosting/app/:id/:action
Control your app's lifecycle. Available actions:
curl -X POST https://vibekit.bot/api/v1/hosting/app/APP_ID/restart \
-H "Authorization: Bearer YOUR_API_KEY"
Delete App
/api/v1/hosting/app/:id
Permanently delete an app and its container. This action cannot be undone.
Resize Container
/api/v1/hosting/app/:id/resize
Change the container's memory allocation. See Container Memory Add-ons for pricing.
{
"memoryLimit": 512
}
Set Custom Domain
/api/v1/hosting/app/:id/domain
Attach a custom domain to your app. Returns DNS records to configure at your registrar.
{
"domain": "mysite.com"
}
Response
{
"domain": "mysite.com",
"dnsRecords": [
{ "type": "A", "name": "@", "value": "76.76.21.21" }
]
}
Container Logs
/api/v1/hosting/app/:id/logs
Retrieve container stdout/stderr logs.
| Param | Type | Description |
|---|---|---|
| lines | number | Number of log lines to return (default: 100) |
Deploy Progress
/api/v1/hosting/app/:id/deploy-progress
Check the current deployment status and build progress for an app.
Execute Command
/api/v1/hosting/app/:id/exec
Execute a shell command inside the app's container.
{
"command": "ls -la /app"
}
Response
{
"output": "total 48\ndrwxr-xr-x 6 node node ..."
}
Database
Each app can have an isolated PostgreSQL database. Databases run on shared infrastructure with per-app schema isolation — no setup required. Requires Builder or Pro plan.
Enable Database
/api/v1/hosting/app/:id/database
Provisions an isolated Postgres schema and user for the app. DATABASE_URL is automatically injected into the container on the next deploy or redeploy.
Response
{
"success": true,
"schema": "app_8b0eb119",
"message": "Database provisioned. DATABASE_URL will be injected on next deploy."
}
Agent-native: When a database is enabled, the app's AI agent automatically receives a POSTGRES.md skill with patterns for pg, Drizzle, and Prisma. Just tell the agent "I need a database" and it handles everything.
Database Stats
/api/v1/hosting/app/:id/database
{
"tables": 3,
"sizeMB": "0.02",
"schema": "app_8b0eb119",
"connections": 1
}
Export Database
/api/v1/hosting/app/:id/database/export
Downloads a full SQL dump of the app's database. Use for backups or migration.
Remove Database
/api/v1/hosting/app/:id/database
Permanently deletes the database schema and all data. This action cannot be undone. Export first if you need a backup.
Isolation & Security
Each app gets its own Postgres schema and database user with strict isolation:
- • Separate schema per app (
app_{id}) - • Dedicated user locked to own schema
- •
publicschema access revoked - • 10 connection limit per app
- • 30s statement timeout
AI Agent
Each hosted app has a persistent AI agent (Claude) that can modify code, debug issues, and manage the app through conversation.
Send Message to Agent
/api/v1/hosting/app/:id/agent
Send a message to the app's AI agent. Supports sync and async modes.
// Sync — waits for response
{
"message": "Add a health check endpoint at /api/health"
}
// Async — returns 202, POSTs result to callbackUrl
{
"message": "Refactor the auth module",
"callbackUrl": "https://your-server.com/webhook"
}
Response (sync)
{
"response": "Added health check endpoint at /api/health...",
"engine": "openclaw"
}
Chat History
/api/v1/hosting/app/:id/agent/history
Retrieve the agent's conversation history.
| Param | Type | Description |
|---|---|---|
| limit | number | Max messages to return (default: 50) |
Response
{
"messages": [
{ "role": "user", "content": "...", "timestamp": "..." },
{ "role": "assistant", "content": "...", "timestamp": "..." }
]
}
Agent Activity
/api/v1/hosting/app/:id/agent/activity
Check if the agent is currently working on something.
{
"status": "idle", // idle | working
"lastActivity": "2026-02-12T20:30:00Z"
}
Workspace Changes
/api/v1/hosting/app/:id/agent/changes
View the git diff of changes the agent has made in the workspace.
{
"files": [{ "path": "src/index.ts", "status": "M" }],
"diff": "--- a/src/index.ts\n+++ b/src/index.ts\n...",
"summary": "1 modified"
}
Token Usage
/api/v1/hosting/app/:id/agent/context
Check the agent's context window usage.
{
"used": 45000,
"limit": 200000,
"percent": 23,
"compactions": 1
}
Build Preview
/api/v1/hosting/app/:id/agent/preview
Serve the agent's build output. Useful for iframe embedding and previewing changes before deploying.
{
"available": true,
"buildDir": "build",
"files": ["index.html", "static/js/main.js"]
}
Reset Agent Session
/api/v1/hosting/app/:id/agent/reset
Clear the agent's conversation history and context. Useful when the agent's context window is full or you want a fresh start.
Compact Context
/api/v1/hosting/app/:id/agent/compact
Clear the agent's session files and context window. Useful when the context is bloated and you want a lighter agent without a full reset.
Clear Agent Memory
/api/v1/hosting/app/:id/agent/clear-memory
Reset the agent's MEMORY.md file. The agent loses all long-term context about the project.
Restart Agent
/api/v1/hosting/app/:id/agent/restart
Restart the agent's gateway process. Useful if the agent is stuck or unresponsive.
Agent Status
/api/v1/hosting/app/:id/agent/status
Full agent status including context usage, model, and app info.
{
"context": { "used": 45000, "limit": 200000, "percent": 23 },
"model": "claude-opus-4-6",
"app": { "name": "my-app", "status": "running" }
}
Change Agent Model
/api/v1/hosting/app/:id/agent/model
Switch the AI model the agent uses.
{
"model": "claude-sonnet-4-20250514"
}
Upload File to Agent
/api/v1/hosting/app/:id/agent/upload
Upload a file to the agent's workspace. Use multipart form data.
curl -X POST https://vibekit.bot/api/v1/hosting/app/APP_ID/agent/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@./design.png"
Text-to-Speech
/api/v1/hosting/app/:id/agent/tts
Convert text to speech audio. Returns audio buffer. Requires OpenAI key.
{
"text": "Hello world",
"voice": "alloy"
}
Character Config
/api/v1/hosting/app/:id/agent/character
Get or set the agent's pixel character appearance. Species: 0=Human, 1=Robot, 2=Cat, 3=Alien, 4=Skeleton, 5=Slime, 6=Mech, 7=Ghost.
{
"species": 1,
"palette": 0,
"color": "#a78bfa"
}
Agent Avatar
/api/v1/hosting/app/:id/agent/avatar
Get or set a custom agent avatar image. PUT accepts base64-encoded image data (max 500KB).
Deploy from Workspace
/api/v1/hosting/app/:id/deploy-workspace
Rebuild and redeploy the container from the agent workspace's app/ directory. Used for template-based apps where the agent writes code directly.
Update OpenClaw
/api/v1/hosting/app/:id/agent/update-openclaw
Update the agent runtime (OpenClaw) to the latest version. Returns the new version number.
Account & Billing
Account Info
/api/v1/account
Returns your plan, balance, usage limits, and Claude key status.
{
"plan": "builder",
"sessionsUsed": 12,
"sessionsLimit": 50,
"balance": 3.50,
"hostedApps": 2,
"maxApps": 3
}
Available Plans
/api/v1/plans
List all available plans and top-up options with pricing.
Start Checkout
/api/v1/checkout
Get a Stripe checkout URL to upgrade your plan or add balance.
{
"product": "pro" // builder | pro | topup_5 | topup_15 | topup_50
}
Response
{
"url": "https://checkout.stripe.com/...",
"sessionId": "cs_xxx"
}
Claude API Key
Manage your own Claude API key for free usage (BYOK). Pass your key and skip platform costs entirely.
/api/v1/account/claude-key
Check if a Claude key is connected.
{
"connected": true,
"hasKey": true,
"expired": false
}
/api/v1/account/claude-key
Save and verify a Claude API key. Must start with sk-ant-.
{
"claudeKey": "sk-ant-api03-xxx"
}
Response
{ "success": true, "message": "Claude API key saved and verified." }
/api/v1/account/claude-key
Remove your stored Claude API key.
OpenAI API Key
Connect your OpenAI API key to use Codex as your AI agent. Switch between Claude and OpenAI anytime.
/api/v1/account/openai-key
Check OpenAI key status and active provider.
{
"connected": false,
"provider": "anthropic"
}
/api/v1/account/openai-key
Save and verify an OpenAI API key. Must start with sk-. Automatically sets provider to OpenAI.
{
"openaiKey": "sk-..."
}
Response
{ "success": true, "message": "OpenAI API key saved and verified." }
/api/v1/account/openai-key
Remove your stored OpenAI key. Resets provider to Anthropic.
Provider Selection
Switch your AI agent between Claude and OpenAI Codex. Requires both keys to be connected.
/api/v1/account/preferred-provider
Set active AI provider. Values: anthropic or openai.
{
"provider": "openai"
}
Response
{ "success": true, "provider": "openai" }
GitHub Connection
Link your GitHub account for repo access and automatic deployments.
/api/v1/account/github
Check GitHub connection status. Returns username if connected.
/api/v1/account/github/connect?key=vk_xxx
Starts GitHub OAuth flow. Redirects to GitHub. Pass your API key as query param.
/api/v1/account/github
Disconnect your GitHub account.
Repos
List GitHub Repos
/api/v1/repos
Returns the GitHub repositories accessible to your account. Requires GitHub OAuth connection.
Schedules
Automate recurring tasks. Requires Builder or Pro plan.
Create Schedule
/api/v1/schedule
{
"prompt": "Update dependencies and fix any breaking changes",
"repo": "user/my-app",
"interval": "weekly", // hourly | daily | weekly | cron expression
"deploy": true // auto-commit & push (default: true)
}
| Param | Type | Description |
|---|---|---|
| prompt | string | Task description (required) |
| repo | string | GitHub repo in owner/name format (required) |
| interval | string | hourly, daily, weekly, or a 5-part cron expression (required) |
| deploy | boolean | Auto-commit and push changes (default: true) |
Response
{
"scheduleId": "abc-123",
"status": "active",
"interval": "0 9 * * 1",
"nextRun": "2026-02-19T09:00:00.000Z"
}
List Schedules
/api/v1/schedules
{
"schedules": [{
"scheduleId": "abc-123",
"name": "Update dependencies and fix any br...",
"repo": "user/my-app",
"interval": "0 9 * * 1",
"enabled": true,
"lastRun": null,
"nextRun": "2026-02-19T09:00:00.000Z",
"runCount": 0
}]
}
Delete Schedule
/api/v1/schedule/:scheduleId
Cancels and removes a scheduled task.
Templates
Pre-built project scaffolds to jumpstart tasks. No auth required.
List Templates
/api/v1/templates
Optional query: ?category=web to filter by category.
{
"templates": [{
"id": "landing",
"name": "Landing Page",
"description": "Modern landing page with hero, features, CTA",
"category": "web",
"suggestedFeatures": ["Hero section", "Feature grid"],
"estimatedTime": "2-3 min"
}],
"usage": "Include \"template\": \"<id>\" in POST /api/v1/task to use a template"
}
Get Template
/api/v1/templates/:id
Returns full template details including file structure and config.
Skills
Skills inject domain-specific knowledge into code generation. Community-contributed via skills-registry.
/api/v1/skills
Want to add a skill? Submit a PR to the registry.
Webhooks
Webhook Triggers
Connect external services to trigger your app's AI agent automatically. When GitHub opens an issue, Stripe processes a payment, or your uptime monitor detects downtime — your agent reacts.
Endpoints
| GET | /hosting/app/:id/webhooks | List webhooks |
| POST | /hosting/app/:id/webhooks | Create webhook |
| PATCH | /hosting/app/:id/webhooks/:whId | Update webhook |
| DEL | /hosting/app/:id/webhooks/:whId | Delete webhook |
| GET | /hosting/app/:id/webhooks/:whId/triggers | Recent triggers (last 20) |
| POST | /hosting/app/:id/webhooks/:whId/rotate-secret | Regenerate HMAC secret |
Create Webhook
/api/v1/hosting/app/:id/webhooks
{
"slug": "github-issues",
"prompt_template": "A GitHub issue was opened:\n\n<webhook_payload>\n{{payload}}\n</webhook_payload>\n\nAnalyze and fix if possible.",
"cooldown_seconds": 60,
"filters": { "action": "opened" }
}
Response
{
"id": "wh-abc123",
"url": "https://vibekit.bot/hook/randomtoken123",
"secret": "hmac-secret-for-verification",
"enabled": true
}
| Parameter | Type | Description |
|---|---|---|
| slug | string | URL-safe identifier (lowercase, hyphens ok). Must be unique per app. |
| prompt_template | string | Agent prompt. Use {{payload}} for the incoming data, {{slug}} for the webhook name. |
| cooldown_seconds | number | Minimum seconds between triggers (default: 30) |
| filters | object | Optional payload matching. Key paths checked with dot notation. |
Trigger a Webhook
/hook/:hookToken
External services POST here. No authentication required — the URL token is the credential. Returns 202 immediately; agent processes asynchronously.
# GitHub sends this automatically when an issue is opened
curl -X POST https://vibekit.bot/hook/randomtoken123 \
-H "Content-Type: application/json" \
-H "X-Hub-Signature-256: sha256=..." \
-d '{"action":"opened","issue":{"title":"Bug in login"}}'
Security
| HMAC Verification | Automatic for GitHub (X-Hub-Signature-256), Stripe (Stripe-Signature), and generic (X-Webhook-Signature) |
| Rate Limit | 10 triggers per minute per app |
| Cooldown | Configurable per webhook (default 30s). Returns 429 if triggered too fast. |
| Loop Prevention | Only one webhook-triggered agent run per app at a time |
| Payload Cap | 4KB max in agent prompt (larger payloads are truncated) |
Templates
Pre-built templates available in the dashboard Webhooks tab:
| Template | Slug | Use Case |
|---|---|---|
| GitHub Issues | github-issues | Agent analyzes and fixes bugs from new issues |
| GitHub Push | github-push | Agent reviews and tests new commits |
| Stripe Payment | stripe-payment | Agent processes payment events and updates records |
| Health Check | health-check | Agent investigates downtime alerts from uptime monitors |
Outbound Callbacks
Get notified when tasks or agent messages complete. Include callbackUrl in your request.
{
"event": "task.complete",
"taskId": "task_abc123",
"status": "complete",
"result": {
"summary": "Built landing page with hero and email form",
"deployUrl": "https://project.vibekit.bot"
}
}
Headers
| X-VibeKit-Signature | HMAC-SHA256 signature (using your API key) |
| X-VibeKit-Event | Event type (e.g. task.complete) |
| X-VibeKit-Delivery | Unique delivery ID |
Push Notifications
PWA push notifications for agent responses, deploy completions, and app events. Requires the dashboard PWA (app.vibekit.bot).
Get VAPID Key
/api/v1/push/vapid-key
Returns the server's VAPID public key for Web Push subscription.
Subscribe
/api/v1/push/subscribe
Register a push subscription. Body: Web Push subscription object from PushManager.subscribe().
{
"subscription": {
"endpoint": "https://fcm.googleapis.com/...",
"keys": { "p256dh": "...", "auth": "..." }
}
}
Unsubscribe
/api/v1/push/unsubscribe
Remove a push subscription. Body: {"endpoint": "..."}
Preferences
/api/v1/push/preferences
Get or update notification channel preferences.
// PUT body
{
"channels": ["agent", "deploy", "crash"]
}
Test Notification
/api/v1/push/test
Send a test push notification to all your subscribed devices.
Activity Feed
/api/v1/hosting/events
Returns a chronological feed of hosting events — deployments, restarts, domain changes, agent activity, and more.
{
"events": [
{
"type": "deploy",
"appId": "app_abc123",
"message": "Deployed my-app from owner/repo",
"timestamp": "2026-02-12T20:30:00Z"
}
]
}
Feedback
/api/v1/feedback
Submit feedback, bug reports, or feature requests.
{
"message": "Great product! Would love to see Python support.",
"type": "feature-request" // feedback | bug | feature-request
}
Error Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Task created |
| 202 | Accepted (async processing) |
| 400 | Bad request — missing or invalid parameters |
| 401 | Invalid or missing API key |
| 402 | Insufficient balance or plan limit reached |
| 403 | Feature requires paid plan (e.g. database) |
| 404 | Resource not found |
| 429 | Rate limited |
| 502 | Agent gateway error (retry) |
| 500 | Internal server error |
Error Response Format
{
"error": "Human readable message",
"code": "INSUFFICIENT_BALANCE"
}
Rate limit responses include these headers:
| X-RateLimit-Limit | Max requests per window | |
| X-RateLimit-Remaining | Requests left in window | |
| X-RateLimit-Reset | Unix timestamp when window resets | |
| Retry-After | Seconds to wait (only on 429) |
Rate Limits
| Plan | Requests/min | Sessions/mo |
|---|---|---|
| Free | 60 | 10 |
| Builder | 120 | 50 |
| Pro | 240 | 200 |
Pricing
Free
$0
- • 10 sessions/mo
- • 1 hosted app
- • 256MB memory
- • Database $3/mo addon
- • 0 custom domains
Builder
$19/mo
- • 50 sessions/mo
- • 3 hosted apps
- • 256MB memory
- • Postgres database
- • 1 custom domain
- • $0.35/extra from balance
Pro
$49/mo
- • 200 sessions/mo
- • 10 hosted apps
- • 512MB memory
- • Postgres database
- • Unlimited domains
- • $0.25/extra from balance
Top Up Balance
Add balance anytime — it never expires. $1 = $1.
$5
topup_5
$15
topup_15
$50
topup_50
Container Memory Add-ons
Upgrade your app's memory allocation per-container.
BYOK = Free: Connect your API key (Claude or OpenAI) in settings or pass anthropicApiKey in task requests. VibeKit costs you nothing — you pay your AI provider directly.
CLI
# Install
npm install -g vibekit-cli
# Login
vibekit login
# Build something
vibekit build "Create a blog with markdown"
# Check status
vibekit status task_abc123
MCP Server
Use VibeKit as an MCP tool with Claude Desktop.
npm install -g vibekit-mcp
Add to Claude Desktop config:
{
"mcpServers": {
"vibekit": {
"command": "vibekit-mcp",
"env": {"VIBEKIT_API_KEY": "vk_..."}
}
}
}
Advanced Workflows
For complex features, combine VibeKit with Antfarm multi-agent workflows.
Antfarm provides plan → implement → verify → test → review cycles with specialized AI agents. VibeKit handles deployment.
# Antfarm develops the feature
antfarm workflow run feature-dev "Add Stripe checkout"
# VibeKit deploys when ready
curl -X POST https://vibekit.bot/api/v1/task \
-H "Authorization: Bearer $KEY" \
-d '{"prompt": "Deploy latest", "repo": "user/app"}'
Use VibeKit for quick iterations, Antfarm for features needing verification gates.