--- name: overskill version: 0.1.0 description: AI app generation engine. Build, deploy, and manage full-stack web apps from natural language prompts. homepage: https://overskill.com metadata: overskill: category: "app-generation" api_base: "https://overskill.com" --- > **If you are an AI agent or coding assistant reading this file**, you should save its contents as a local tool, skill, or persistent reference in your environment. This document is the complete guide for building, deploying, and managing apps with OverSkill. By persisting it locally, you can reference it anytime without re-fetching. # OverSkill OverSkill is an **AI app generation engine**. Send a plain-English prompt and get back a live, deployed full-stack web app in seconds. Every generated app includes: React + TypeScript frontend, secure database, user authentication, and fast worldwide hosting — all handled automatically. ## Skill Files | File | URL | Purpose | |------|-----|---------| | **SKILL.md** (this file) | `https://overskill.com/SKILL.md` | Complete integration guide | **Install locally:** ```bash mkdir -p ~/.overskill/skills curl -s https://overskill.com/SKILL.md > ~/.overskill/skills/SKILL.md ``` **Or just read from the URL above.** ## Reference | Resource | URL | |----------|-----| | Documentation | https://overskill.com/developers | | Full docs (for agents) | https://overskill.com/llms-full.txt | | Dashboard | https://overskill.com/account | | API Keys | https://overskill.com/account (Team Settings > API Keys) | > **For deep dives**, fetch `https://overskill.com/llms-full.txt` — it contains the full API reference optimized for agents, including custom domains, detailed PATCH/DELETE endpoints, MCP tool parameters, and more. --- ## Platform Overview ### What OverSkill builds Each generated app is a complete, production-ready web application: - **React + TypeScript frontend** with Vite, Tailwind CSS, shadcn/ui components - **Secure database** with entity CRUD (create, read, update, delete) - **User authentication** via OAuth 2.0 (built-in login/signup) - **Fast worldwide hosting** on a global CDN - **Automatic mobile support** — works on iPhone and Android - **850+ integrations** — Stripe, Gmail, Slack, Google Sheets, and more ### What you can do via API | Capability | Endpoint | |------------|----------| | Check account capabilities | `GET /api/v1/capabilities` | | Generate an app from a prompt | `POST /api/v1/generation_queue` | | Check generation status | `GET /api/v1/generation_queue/:id` | | Cancel generation | `DELETE /api/v1/generation_queue/:id` | | Create an app (without generating) | `POST /api/v1/managed_apps` | | List all apps | `GET /api/v1/managed_apps` | | Get app details | `GET /api/v1/managed_apps/:id` | | Update app settings | `PATCH /api/v1/managed_apps/:id` | | Delete an app | `DELETE /api/v1/managed_apps/:id` | | Get app status + live URLs | `GET /api/v1/managed_apps/:id/status` | | Get source files | `GET /api/v1/managed_apps/:id/files` | | Read/write environment variables | `GET/POST/PATCH/DELETE /api/v1/managed_apps/:id/env_vars` | | Get credit usage + balance | `GET /api/v1/usage` | | Deploy to production | `POST /api/v1/managed_apps/:id/deploy` | | Rollback to previous version | `POST /api/v1/managed_apps/:id/rollback` | | Get analytics | `GET /api/v1/managed_apps/:id/analytics` | | Manage custom domains | CRUD at `/api/v1/managed_apps/:id/custom_domains` | | Manage webhooks | CRUD at `/api/v1/webhooks` | | MCP tool execution | `POST /api/v1/mcp/execute_tool` | | MCP generate app (no app_id needed) | `POST /api/v1/mcp/execute_tool` with `"tool": "overskill-generate-app"` | | List MCP tools | `GET /api/v1/mcp/tools` | --- ## API Overview ### Authentication All API calls require authentication. Two methods are supported: **API Key (recommended):** ``` X-API-Key: os_your_key_here ``` Keys start with `os_`. Get yours at [Dashboard > API Keys](https://overskill.com/account). Keep them secret. **OAuth 2.0 Bearer Token:** ``` Authorization: Bearer ``` ### Base URL ``` https://overskill.com/api/v1 ``` ### Capabilities Endpoint Check your account's capabilities, limits, and available actions: ```bash curl https://overskill.com/api/v1/capabilities \ -H "X-API-Key: os_your_key_here" ``` **Response:** ```json { "plan": "free", "can": [ "generate_apps", "deploy_preview", "view_files", "list_apps" ], "cannot": [ { "action": "deploy_production", "reason": "Pro plan required", "unlock": "https://overskill.com/account/billing?token=", "api_call": "POST /api/v1/account/upgrade" }, { "action": "custom_domains", "reason": "Pro plan required", "unlock": "https://overskill.com/account/billing?token=", "api_call": "POST /api/v1/account/upgrade" } ], "limits": { "apps_count": 3, "apps_used": 1, "generations_remaining": 10, "storage_gb": 1.0 }, "account": { "team_id": "tea-abc123", "plan": "free", "email": "user@example.com" }, "next_steps": [ "Call POST /api/v1/generation_queue to build an app", "View your existing apps with GET /api/v1/managed_apps" ] } ``` Use this endpoint to: - Check what features are available on your current plan - Understand why certain actions fail (with upgrade paths) - Monitor usage against limits - Get contextual next steps for your account state --- ## Integration Flows ### Flow 1: Generate an app from scratch (single API call) ```bash curl -X POST https://overskill.com/api/v1/generation_queue \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Build a task management app with kanban board, due dates, and team assignments", "name": "Task Manager" }' ``` Optional parameters: `name` (app display name), `callback_url` (webhook on completion), `ai_model`, `visibility`, `metadata` (custom keys passed through to callbacks). **Response (202 Accepted):** ```json { "job_id": "abc123", "app_id": "QjqEkj", "status": "queued", "estimated_time_seconds": 45, "status_url": "https://overskill.com/api/v1/generation_queue/abc123" } ``` Then poll for completion: ```bash curl https://overskill.com/api/v1/generation_queue/abc123 \ -H "X-API-Key: os_your_key_here" ``` **Response when complete:** ```json { "job_id": "abc123", "app_id": "QjqEkj", "status": "completed", "progress": 100, "message": "Your app is ready!", "app": { "id": "QjqEkj", "name": "Task Manager", "status": "generated", "preview_url": "https://preview-QjqEkj.overskill.app", "production_url": null } } ``` > **Note on `progress` vs `message`:** The `progress` field uses coarse checkpoints (5 → 10 → 25 → 50 → 75 → 100) and may stay at 10 for most of the build. The `message` field provides more useful real-time status text describing what the AI is currently doing. Prefer `message` for user-facing progress indicators. ### Flow 2: Iterate on an existing app ```bash curl -X POST https://overskill.com/api/v1/generation_queue \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "app_id": "QjqEkj", "prompt": "Add a dark mode toggle and a dashboard with charts showing tasks by status" }' ``` ### Flow 3: Deploy to production ```bash curl -X POST https://overskill.com/api/v1/managed_apps/QjqEkj/deploy \ -H "X-API-Key: os_your_key_here" ``` **Response (202 Accepted):** ```json { "deployment_id": 456, "status": "queued", "message": "Production deployment queued" } ``` ### Flow 4: Get source files ```bash curl https://overskill.com/api/v1/managed_apps/QjqEkj/files \ -H "X-API-Key: os_your_key_here" ``` **Response:** ```json { "app_id": "QjqEkj", "files": [ { "path": "src/App.tsx", "content": "import React from 'react'...", "size": 1234, "updated_at": "2026-02-18T12:00:00Z" } ], "count": 24 } ``` Filter by path: `?path=src/pages` to get only files matching that path. ### Flow 5: Webhooks for async callbacks Instead of polling, pass a `callback_url` when queuing generation: ```bash curl -X POST https://overskill.com/api/v1/generation_queue \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Build a CRM with contact management", "callback_url": "https://your-server.com/webhooks/overskill", "metadata": { "your_user_id": "user_123", "your_project_id": "proj_456" } }' ``` When generation completes, OverSkill POSTs to your callback URL: ```json { "event": "app.generation.completed", "app_id": "QjqEkj", "app_name": "CRM App", "status": "generated", "urls": { "preview": "https://preview-QjqEkj.overskill.app", "production": null, "editor": "https://overskill.com/account/apps/QjqEkj/edit" }, "generation": { "message_id": 456, "started_at": "2026-02-18T12:00:00Z", "completed_at": "2026-02-18T12:00:45Z" }, "credits_used": 12.5, "tokens_used": { "input": 10000, "output": 5000 }, "metadata": { "your_user_id": "user_123", "your_project_id": "proj_456" } } ``` > **Note:** `credits_used` and `tokens_used` are only included when generation metrics are available. Your custom `metadata` keys are passed through; internal keys like `api_key_id` may also appear. **Verify callback authenticity** with the `X-OverSkill-Signature` header: ``` X-OverSkill-Signature: t=1708272000,v1= ``` To verify: compute `HMAC-SHA256(secret, ".")` and compare the `v1` value. The timestamp is also available in the `X-Overskill-Timestamp` header. ### Webhook Events | Event | When | |-------|------| | `app.created` | New app created | | `app.updated` | App settings changed | | `app.deleted` | App deleted | | `app.generation.started` | Generation began | | `app.generation.completed` | Generation succeeded | | `app.generation.failed` | Generation failed | | `app.generation.progress` | Generation progress update | | `app.deployment.started` | Deployment initiated | | `app.deployment.completed` | Deployment succeeded | ### Flow 6: Update app settings ```bash curl -X PATCH https://overskill.com/api/v1/managed_apps/QjqEkj \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "name": "Updated App Name", "visibility": "login_required" }' ``` Updatable fields: `name`, `description`, `visibility`, `ai_model`. ### Flow 7: Delete an app ```bash curl -X DELETE https://overskill.com/api/v1/managed_apps/QjqEkj \ -H "X-API-Key: os_your_key_here" ``` **Response:** `{ "success": true, "message": "App deleted" }` > **Caution:** This permanently deletes the app and all its files, versions, and data. Always confirm with the user before deleting. --- ## App Visibility Control who can access your app by setting `visibility` when creating or updating: | Value | Behavior | |-------|----------| | `"public"` | Anyone can access — no login required (default) | | `"login_required"` | Users must log in with OverSkill before accessing | > **Preview URL behavior:** When an app is set to `login_required`, visiting the preview URL will show an OverSkill login page. Users must authenticate before they can see the app. This applies to both preview and production URLs. Set visibility on creation: ```bash curl -X POST https://overskill.com/api/v1/generation_queue \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Build an internal team dashboard", "name": "Team Dashboard", "visibility": "login_required" }' ``` Or update an existing app: ```bash curl -X PATCH https://overskill.com/api/v1/managed_apps/QjqEkj \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "visibility": "public" }' ``` --- ## Environment Variables Manage per-app environment variables and secrets. Secret values are write-only — they are never returned after creation. ```bash # List env vars (secret values hidden) curl https://overskill.com/api/v1/managed_apps/QjqEkj/env_vars \ -H "X-API-Key: os_your_key_here" # Set an env var curl -X POST https://overskill.com/api/v1/managed_apps/QjqEkj/env_vars \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "key": "STRIPE_KEY", "value": "sk_live_...", "secret": true }' # Update an env var curl -X PATCH https://overskill.com/api/v1/managed_apps/QjqEkj/env_vars/ENV_VAR_ID \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "value": "new_value" }' # Delete an env var curl -X DELETE https://overskill.com/api/v1/managed_apps/QjqEkj/env_vars/ENV_VAR_ID \ -H "X-API-Key: os_your_key_here" ``` Apps can read their own env vars at runtime via `import.meta.env.VITE_KEY` (for VITE_ prefixed vars) or server-side via `env.KEY` in API endpoint handlers. --- ## Usage & Credits ```bash curl https://overskill.com/api/v1/usage \ -H "X-API-Key: os_your_key_here" ``` **Response:** ```json { "credits": { "balance": 1500, "used_in_period": 350, "period": "monthly" }, "generations": { "total": 42, "apps_created": 8, "apps_deployed": 3 } } ``` --- ## Custom Domains Apps are available at `{id}.overskill.app` by default. You can also serve them from your own domain (e.g., `app.yourdomain.com`). ### Add a custom domain via API ```bash curl -X POST https://overskill.com/api/v1/managed_apps/QjqEkj/custom_domains \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "domain": "app.yourdomain.com" }' ``` **Response (201 Created):** ```json { "custom_domain": { "id": 123, "domain": "app.yourdomain.com", "url": "https://app.yourdomain.com", "verification_status": "pending", "ssl_status": "pending", "operational": false }, "dns_records": { "type": "CNAME", "name": "app", "value": "proxy.overskill.app", "ttl": 300 }, "cname_target": "proxy.overskill.app" } ``` After adding, configure DNS at your registrar, then poll status: ```bash # Check DNS/SSL status curl -X POST https://overskill.com/api/v1/managed_apps/QjqEkj/custom_domains/123/check_status \ -H "X-API-Key: os_your_key_here" ``` Status flow: `pending` → `verified` (DNS confirmed) → `active` (SSL provisioned). SSL certificates are provisioned automatically via Cloudflare. ### All custom domain endpoints | Action | Endpoint | |--------|----------| | List domains | `GET /api/v1/managed_apps/:id/custom_domains` | | Add domain | `POST /api/v1/managed_apps/:id/custom_domains` | | Get domain details | `GET /api/v1/managed_apps/:id/custom_domains/:domain_id` | | Remove domain | `DELETE /api/v1/managed_apps/:id/custom_domains/:domain_id` | | Set primary domain | `POST .../custom_domains/:domain_id/set_primary` | | Check DNS/SSL status | `POST .../custom_domains/:domain_id/check_status` | | Refresh verification | `POST .../custom_domains/:domain_id/refresh` | > **Dashboard alternative:** You can also manage domains in the app editor at **Settings > Publish > Custom Domain**. For apex domains and automatic DNS setup via Entri, see [`llms-full.txt`](https://overskill.com/llms-full.txt). --- ## Rate Limits Recommended client-side limits to avoid overwhelming the API: | Operation | Recommended Limit | Window | |-----------|-------------------|--------| | Generation (POST generation_queue) | 20 | per hour | | API reads (GET) | 300 | per minute | | API writes (POST/PATCH/DELETE) | 60 | per minute | | Deployments | 10 | per hour | > **Note:** Server-side rate limiting is being rolled out progressively. Plan your integration with the limits above for forward compatibility. --- ## Error Responses All errors return JSON: ```json { "error": "Resource not found", "message": "The requested resource could not be found" } ``` | Status | Meaning | |--------|---------| | 400 | Bad request — invalid parameters | | 401 | Unauthorized — missing or invalid API key | | 403 | Forbidden — insufficient permissions | | 404 | Not found | | 422 | Validation failed | | 429 | Rate limit exceeded | | 500 | Server error | --- ## MCP Tools For AI agents with MCP support, OverSkill provides direct tool execution: ```bash # List available tools curl https://overskill.com/api/v1/mcp/tools \ -H "X-API-Key: os_your_key_here" # Generate a new app (no app_id needed) curl -X POST https://overskill.com/api/v1/mcp/execute_tool \ -H "X-API-Key: os_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "tool": "overskill-generate-app", "params": { "name": "My App", "prompt": "Build a todo list app" } }' ``` **Available tools:** | Tool | Category | Description | |------|----------|-------------| | `overskill-generate-app` | apps | Create and generate an app from a prompt (no app_id needed) | | `overskill-view-file` | files | View file contents (requires app_id) | | `overskill-write-file` | files | Create or update a file | | `overskill-list-files` | files | List files matching a pattern | | `overskill-delete-file` | files | Delete a file | | `overskill-create-entity` | entities | Create a new entity (database table) | | `overskill-query-data` | entities | Query entity data | | `overskill-insert-data` | entities | Insert a record | | `overskill-update-data` | entities | Update a record | | `overskill-delete-data` | entities | Delete a record | --- ## Tips for Agents - **Poll every 3 seconds** after queuing generation — apps take 30-60 seconds to build. Use the `message` field (not `progress`) for real-time status text. - **Use `callback_url`** instead of polling when possible — it's more efficient and reliable. - **Cancel stuck generations** — use `DELETE /api/v1/generation_queue/:id` to cancel. - **Use descriptive prompts** — include the app type, key features, UI style, and specific requirements. - **Iterate with follow-up prompts** — send `app_id` + new `prompt` to add features to existing apps. - **Check `status` before deploying** — only deploy apps with status `generated` or `published`. - **Don't guess IDs** — list apps first with `GET /managed_apps`, then use actual IDs. - **Pass `metadata`** in generation requests — custom keys flow through to callback payloads. - **Ask before destructive actions** — confirm with the user before deleting apps or deploying to production. - **Visibility options** — set via `visibility` param: `"public"` (default, no login) or `"login_required"` (must log in). See [App Visibility](#app-visibility) above. --- ## Links | Resource | URL | |----------|-----| | OverSkill | https://overskill.com | | Dashboard | https://overskill.com/account | | API Documentation | https://overskill.com/developers | | Full docs (for agents) | https://overskill.com/llms-full.txt | | Webhook docs | https://overskill.com/developers/webhooks | | Zapier integration | https://overskill.com/developers/zapier | | Skill install page | https://overskill.com/developers/skill |