VibeKit — Deploy Your Code
You write the code. VibeKit deploys it.
API-first hosting platform for developers and AI coding agents. Every app gets: subdomain, container, database, AI agent, custom domain support.
Quick Start for Agents
Step 0: Get an API key (no account needed)
Create an API key instantly — no signup, no email required:
curl -X POST https://vibekit.bot/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{}'
# Response: {"apiKey": "vk_xxx", "plan": "free", "credits": 0}
Or with email (unlocks $1.00 free credits):
curl -X POST https://vibekit.bot/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
# Response: {"apiKey": "vk_xxx", "plan": "free", "credits": 1.00}
Just call register and start deploying. Ask for email only if the user wants free credits. Do NOT ask users if they "have a key" — register and go. Then use that key for all subsequent calls.
Deploy in three API calls:
1. Deploy your code:
curl -X POST https://vibekit.bot/api/v1/hosting/deploy \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"repo": "owner/repo", "subdomain": "my-app"}'
# Returns: {"deployUrl": "https://my-app.vibekit.bot", "appId": "app_xyz"}
2. Iterate via AI agent:
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/agent \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"message": "Add dark mode and fix mobile layout"}'
# Returns: {"response": "Added dark mode toggle...", "balance": "0.15"}
3. Add database if needed:
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/database \
-H "Authorization: Bearer vk_xxx"
# Returns: {"success": true, "schema": "app_8b0eb119"}
# DATABASE_URL auto-injected on next deploy
4. Connect the user's email (recommended): After deploying, ask the user for their email so they can manage their app in the dashboard and unlock $1.00 free credits:
curl -X POST https://vibekit.bot/api/v1/auth/connect-email \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
Then share the claim link so the user can access their dashboard: "Your app is live at https://{subdomain}.vibekit.bot — claim it at https://app.vibekit.bot/claim?key={api_key}"
That's it. Code to production in four API calls.
CLI (for agents with shell access)
Install once, deploy anywhere:
npm install -g vibekit-cli
vibekit auth $VIBEKIT_API_KEY
vibekit task "Deploy this Next.js app" --repo owner/repo
vibekit wait $TASK_ID --json
Interactive auth is also available:
vibekit auth login anthropic
vibekit auth login openai
vibekit auth status
BRING YOUR OWN KEY (BYOK)
Free deployment with your AI provider — see the full Claude BYOK / OpenAI BYOK guide for OAuth options (Claude Pro / Max, ChatGPT Plus via Codex) and the platform-fallback path through OpenRouter.
Set your Anthropic or OpenAI key via /account/claude-key or /account/openai-key. Pay your AI provider directly, use VibeKit for free.
{
"message": "Add user authentication",
"anthropicApiKey": "sk-ant-api03-xxx"
}
Switch providers anytime via /account/preferred-provider.
Deploy & Hosting
Register & Authentication
POST /auth/register Create account (no auth required). Email is optional — without email you get $0 credits, with email you get $1.00 free.
curl -X POST https://vibekit.bot/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{}'
# Response: {"apiKey": "vk_xxx", "plan": "free", "credits": 0}
# With email (unlocks $1.00 free credits):
curl -X POST https://vibekit.bot/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
# Response: {"apiKey": "vk_xxx", "plan": "free", "credits": 1.00}
POST /auth/connect-email (auth required) Connect email to an anonymous account and unlock $1.00 free credits.
curl -X POST https://vibekit.bot/api/v1/auth/connect-email \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
# Response: {"success": true, "credits": 1.00}
Deploy Apps
POST /hosting/deploy Deploy app to {subdomain}.vibekit.bot
Reserved subdomains (cannot be used): app, www, api, docs, admin, mail, smtp, ftp, ssh, ns1, ns2, cdn, static, staging, dev, test
curl -X POST https://vibekit.bot/api/v1/hosting/deploy \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"repo": "owner/repo", "subdomain": "my-app", "branch": "main"}'
POST /hosting/apps Create app from template
curl -X POST https://vibekit.bot/api/v1/hosting/apps \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"template": "nextjs", "subdomain": "my-app"}'
GET /hosting/apps List your hosted apps
curl https://vibekit.bot/api/v1/hosting/apps \
-H "Authorization: Bearer vk_xxx"
App Management
Control & Monitoring
GET /hosting/app/:id App details + stats + topology
GET /hosting/app/:id/logs Container logs (add ?lines=100)
POST /hosting/app/:id/restart Restart container
POST /hosting/app/:id/redeploy Rebuild and redeploy from GitHub
POST /hosting/app/:id/resize Resize memory
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/resize \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"memoryLimit": 512}'
DELETE /hosting/app/:id Delete app + container + agent
Environment Variables
GET /hosting/app/:id/env List environment variables
PUT /hosting/app/:id/env Set environment variables
curl -X PUT https://vibekit.bot/api/v1/hosting/app/app_xyz/env \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"vars": {"DATABASE_URL": "postgres://...", "STRIPE_KEY": "sk_..."}}'
DELETE /hosting/app/:id/env/:key Remove environment variable
Monitoring & Events
GET /hosting/app/:id/events Activity event log (add ?limit=50)
GET /hosting/app/:id/stats Container CPU/memory/network stats
GET /hosting/app/:id/events/stream SSE stream of real-time events
AI Agent (per app)
Every app gets a persistent coding agent for iteration and management.
Chat with Agent
POST /hosting/app/:id/agent Send message to agent
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/agent \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"message": "Add user authentication with GitHub OAuth"}'
GET /hosting/app/:id/agent/history Chat history (add ?limit=50)
GET /hosting/app/:id/agent/activity Agent status (idle/working)
Agent Management
PUT /hosting/app/:id/agent/model Change AI model
curl -X PUT https://vibekit.bot/api/v1/hosting/app/app_xyz/agent/model \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"model": "sonnet"}'
POST /hosting/app/:id/agent/restart Restart agent gateway
POST /hosting/app/:id/agent/reset Full agent reset (new session)
GET /hosting/app/:id/agent/status Full agent status (context, model, app info)
File Operations
GET /hosting/app/:id/agent/files List files in agent workspace
GET /hosting/app/:id/agent/file Read file (add ?path=app/index.html)
PUT /hosting/app/:id/agent/file Write file
curl -X PUT https://vibekit.bot/api/v1/hosting/app/app_xyz/agent/file \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"path": "app/config.js", "content": "module.exports = {...}"}'
POST /hosting/app/:id/agent/upload Upload file to workspace (multipart or JSON)
Database
Isolated PostgreSQL for each app via shared RDS instance.
POST /hosting/app/:id/database Enable database
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/database \
-H "Authorization: Bearer vk_xxx"
# Response: {"success": true, "schema": "app_8b0eb119"}
# DATABASE_URL auto-injected on next deploy
GET /hosting/app/:id/database Database stats (tables, storage, connections)
GET /hosting/app/:id/database/export Download SQL dump
DELETE /hosting/app/:id/database Remove database (destructive)
Domains & SSL
POST /hosting/app/:id/domain Add custom domain
POST /hosting/app/:id/domain/buy Buy a domain and attach it to the app
DELETE /hosting/app/:id/domain Remove domain
POST /hosting/app/:id/domain/ssl Provision SSL certificate
GET /domains/search Search available domains (add ?q=myapp)
Webhooks
Connect external services to trigger your app's AI agent automatically.
POST /hosting/app/:id/webhooks Create webhook
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/webhooks \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{
"slug": "github-issues",
"prompt_template": "GitHub issue opened:\n{{payload}}\nAnalyze and fix if possible.",
"filters": {"action": "opened"}
}'
# Response: {"hook_token": "abc123", "url": "https://vibekit.bot/hook/abc123"}
POST /hook/:hookToken Trigger webhook (external services POST here)
GET /hosting/app/:id/webhooks List webhooks
GET /hosting/app/:id/webhooks/:whId/triggers Recent trigger log
QA Testing
AI-powered testing with browser automation and annotated screenshots.
POST /hosting/app/:id/qa Start QA test run
GET /hosting/app/:id/qa Check status + get results
GET /hosting/app/:id/qa/history Past QA runs with summaries
Worktrees
Git branch isolation for safe development.
POST /hosting/app/:id/worktree/create Create worktree
curl -X POST https://vibekit.bot/api/v1/hosting/app/app_xyz/worktree/create \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"taskId": "fix-auth"}'
POST /hosting/app/:id/worktree/merge Merge worktree back to main
GET /hosting/app/:id/worktrees List active worktrees
Auth & Account
Account Management
GET /account Plan, credits, usage, API key status
GET /account/usage Credit usage history with daily breakdown
POST /checkout Stripe checkout URL
curl -X POST https://vibekit.bot/api/v1/checkout \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"product": "pro"}'
AI Provider Keys (BYOK)
PUT /account/claude-key Save Anthropic key
curl -X PUT https://vibekit.bot/api/v1/account/claude-key \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"claudeKey": "sk-ant-api03-xxx"}'
PUT /account/openai-key Save OpenAI key
PUT /account/preferred-provider Switch provider
curl -X PUT https://vibekit.bot/api/v1/account/preferred-provider \
-H "Authorization: Bearer vk_xxx" \
-H "Content-Type: application/json" \
-d '{"provider": "anthropic"}'
Billing
Plans & Pricing
| Plan | Price | Sessions/mo | Apps | Memory | Workspace disk | Custom domains | Overage |
|---|---|---|---|---|---|---|---|
| Free | $0 | 10 | 1 | 512MB | 1.5GB | — | $0.50/session |
| Builder | $19/mo | 50 | 3 | 512MB | 3GB | 1 | $0.35/session |
| Pro | $49/mo | 200 | 10 | 512MB | 10GB | Unlimited | $0.25/session |
BYOK = $0 AI cost: Bring your own Anthropic or OpenAI key and you pay your provider directly — VibeKit takes no markup on inference. Session caps still apply (they cover platform compute: container hosting, gateway throughput, deploys), but the AI tokens themselves are free across every plan.
Add-ons: Boost (1GB RAM + 0.5 vCPU per app, $8/mo), Always-on (no cold starts per app, $10/mo), Database (managed Postgres per app, $3/mo).
Integration Examples
OpenClaw Agent
# In TOOLS.md or skills
- name: vibekit
api: https://vibekit.bot/api/v1
auth: Bearer vk_xxx
MCP (Model Context Protocol)
npm install -g vibekit-mcp
{"mcpServers": {"vibekit": {"command": "vibekit-mcp", "env": {"VIBEKIT_API_KEY": "vk_xxx"}}}}
Direct API
import requests
headers = {"Authorization": "Bearer vk_xxx"}
response = requests.post("https://vibekit.bot/api/v1/hosting/deploy",
json={"repo": "owner/repo"}, headers=headers)
Additional Endpoints
App Management (continued)
POST /hosting/app/:id/exec — Run command in container. Body: {"command": "npm test"}
POST /hosting/app/:id/rename — Rename subdomain. Body: {"subdomain": "new-name"}
GET /hosting/app/:id/infra — Infrastructure topology (container, agent, DB status)
GET /hosting/app/:id/stats — Container CPU/memory/network stats
GET /hosting/app/:id/deploy-progress — SSE stream of deploy progress
POST /hosting/app/:id/live-reload — Trigger live reload in connected browsers
GET /hosting/app/:id/always-on — Check always-on status + user plan
PUT /hosting/app/:id/always-on — Toggle always-on. Body: {"alwaysOn": true}
POST /hosting/app/:id/always-on/checkout — Stripe checkout for always-on addon ($10/mo per app)
GET /hosting/app/:id/notifications/prefs — Get notification preferences
POST /hosting/app/:id/notifications/prefs — Update notification preferences
GET /hosting/app/:id/notifications/read — Get unread count
POST /hosting/app/:id/notifications/read — Mark notifications as read
Deploy History & Rollback
GET /hosting/app/:id/deploys — List deploy history with timestamps, commit info
POST /hosting/app/:id/deploys/:deployId/rollback — Rollback to a specific deploy snapshot (max 10 snapshots per app)
Collaborators
Only the app owner can invite/remove/change roles.
GET /hosting/app/:id/collaborators — List all collaborators
POST /hosting/app/:id/collaborators — Invite. Body: {"email": "...", "role": "editor"}
PATCH /hosting/app/:id/collaborators/:collabId — Change role. Body: {"role": "viewer"}
DELETE /hosting/app/:id/collaborators/:collabId — Remove collaborator
POST /hosting/collaborators/accept — Accept invite. Body: {"token": "..."}
Roles: owner, editor (can use agent, edit files), viewer (read-only)
GET /hosting/shared-apps — List apps shared with you as a collaborator
AI Agent (continued)
POST /hosting/app/:id/agent/upload — Upload file to workspace (multipart file field or JSON {filename, content})
POST /hosting/app/:id/agent/tts — Text-to-speech. Body: {"text": "...", "voice": "alloy"}
GET /hosting/app/:id/agent/character — Get agent character config
PUT /hosting/app/:id/agent/character — Set character. Body: {"species": 1, "palette": 0, "color": "#a78bfa"}
GET /hosting/app/:id/agent/avatar — Get agent avatar (base64)
PUT /hosting/app/:id/agent/avatar — Set agent avatar (base64, max 500KB)
POST /hosting/app/:id/agent/compact — Compact agent context (summarize old history)
POST /hosting/app/:id/agent/clear-memory — Reset agent memory (deletes MEMORY.md and daily logs)
POST /hosting/app/:id/agent/clear-sessions — Clear all session history (preserves memory)
GET /hosting/app/:id/agent/roles — List defined agent roles
PUT /hosting/app/:id/agent/roles/:roleName — Create/update a role
GET /hosting/app/:id/agent/roles/:roleName/history — Role execution history
DELETE /hosting/app/:id/agent/roles/:roleName — Delete role
GET /hosting/app/:id/agent/subagents — List active sub-agents
GET /hosting/app/:id/agent/features — Get automation feature flags
PUT /hosting/app/:id/agent/features — Update features. Body: {"features": {"qaValidation": true}}
Allowed keys: qaValidation, worktrees, autoMerge
Per-App Usage
GET /hosting/app/:id/usage?days=30 — Token cost tracking by model and day (max 90 days)
Account (continued)
GET /models — List available AI models
PUT /repos/active — Set active repo. Body: {"repo": "owner/name"}
PUT /account/profile — Update display name. Body: {"name": "..."}
PUT /account/avatar — Upload profile avatar (base64)
DELETE /account/avatar — Remove profile avatar
POST /checkout Products: builder ($19/mo), pro ($49/mo), topup_5, topup_15, topup_50, container_1gb (Boost), always_on.
Push Notifications (PWA)
GET /push/vapid-key — Get VAPID public key
POST /push/subscribe — Register push subscription
POST /push/unsubscribe — Remove subscription
GET /push/preferences — Notification channel preferences
PUT /push/preferences — Update preferences
POST /push/test — Send test notification
Email API
Send transactional emails from your app. Each app sends from {subdomain}@vibekit.bot.
POST /app/:id/email/send — Send email. Body:
{
"to": "[email protected]",
"subject": "Welcome!",
"html": "<h1>Welcome</h1>",
"text": "Welcome!",
"replyTo": "[email protected]"
}
to supports comma-separated (max 10). Daily limits: Free 10, Builder 200, Pro 1000.
GET /app/:id/email/quota — Check usage and daily limit
Payments API (Stripe Connect)
GET /hosting/app/:id/payments/connect — Get Stripe OAuth URL
DELETE /hosting/app/:id/payments/connect — Disconnect Stripe
GET /hosting/app/:id/payments/status — Connection status
POST /hosting/app/:id/payments/checkout — Create checkout session. Body:
{
"mode": "payment",
"line_items": [{"price": "price_XXX", "quantity": 1}],
"success_url": "https://myapp.vibekit.bot/success?session_id={CHECKOUT_SESSION_ID}",
"cancel_url": "https://myapp.vibekit.bot/pricing"
}
POST /hosting/app/:id/payments/portal — Customer billing portal. Body: {"customer_id": "cus_XXX", "return_url": "..."}
GET /hosting/app/:id/payments/products — List products from connected Stripe account
Stripe events auto-forwarded to POST /api/stripe/webhook with X-VibeKit-Stripe-Event header.
Links
- Dashboard: https://app.vibekit.bot
- CLI:
npm install -g vibekit-cli - MCP:
npm install -g vibekit-mcp - Telegram: @the_vibe_kit_bot