Canonical docs. This page is rendered from public/SKILL.md — the same file VibeKit agents read. One source of truth, no drift.

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.


  • Dashboard: https://app.vibekit.bot
  • CLI: npm install -g vibekit-cli
  • MCP: npm install -g vibekit-mcp
  • Telegram: @the_vibe_kit_bot