API Reference
All API endpoints are served from your ShipKit deployment URL.
MCP Endpoint
POST /api/mcp
The primary interface for AI coding tools. Implements JSON-RPC 2.0 over HTTP.
Authentication:Authorization: Bearer skyourkey header (preferred) or ?apikey=skyour_key query parameter (deprecated).
Rate limit: 60 requests/minute per IP.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "shipkit_usage",
"arguments": {}
}
}
Response (success):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"plan\":\"pro\",\"capturesused\":42,\"captureslimit\":500}"
}
]
}
}
Response (error):
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32000,
"message": "Invalid API key"
}
}
JSON-RPC error codes:
| Code | Meaning |
|---|---|
| -32700 | Parse error (invalid JSON) |
| -32600 | Invalid JSON-RPC 2.0 request |
| -32601 | Method not found |
| -32602 | Invalid params (missing tool name, unknown tool) |
| -32000 | Application error (auth failure, rate limit, quota exceeded) |
| Method | Description | Requires API Key |
|---|---|---|
initialize | MCP handshake — returns server info + capabilities | No |
notifications/initialized | Client acknowledgment | No |
tools/list | List all 30 tool definitions | No |
tools/call | Execute a tool | Yes (increments usage) |
See the MCP Integration Guide (/guide/mcp-guide) for the full list of 30 tools.
Docs API
Public API for reading hosted documentation. Use this to serve ShipKit-hosted docs on your own website.
GET /api/docs/[siteId]
Returns site navigation and page list for a hosted documentation site.
Authentication:Authorization: Bearer skyourkey or ?apikey=skyour_key
| Parameter | Type | Description |
|---|---|---|
siteId | string | Hosted site slug (e.g. "my-product-docs") |
{
"site_title": "MyProduct Docs",
"navigation": [
{ "label": "Getting Started", "path": "getting-started" },
{ "label": "API Reference", "path": "api" }
],
"pages": [
{ "path": "getting-started", "title": "Getting Started" },
{ "path": "api", "title": "API Reference" }
],
"updated_at": "2026-03-20T12:00:00Z"
}
GET /api/docs/[siteId]/[...path]
Returns the content of a specific documentation page.
Authentication:Authorization: Bearer skyourkey or ?apikey=skyour_key
| Parameter | Type | Description |
|---|---|---|
siteId | string | Hosted site slug |
path | string | Page path (e.g. "getting-started") |
{
"title": "Getting Started",
"content": "# Getting Started\n\nWelcome to MyProduct...",
"updated_at": "2026-03-20T12:00:00Z"
}
Cache: Cache-Control: public, max-age=60 (1-minute cache).
Errors:
| Status | Body | Cause |
|---|---|---|
| 401 | { "error": "Missing API key..." } | No API key provided |
| 403 | { "error": "Invalid or exhausted API key" } | Bad key or quota exceeded |
| 404 | { "error": "Site not found" } | No published site with that slug |
| 404 | { "error": "Page not found" } | No page at that path |
Webhook Endpoint
POST /api/webhooks/test
Send a test webhook to verify your endpoint configuration.
Authentication: Supabase session (browser cookie). Request:{
"webhook_url": "https://your-server.com/webhook",
"webhook_secret": "your-secret-string"
}
Response (success):
{
"success": true,
"status": 200,
"message": "Test webhook delivered successfully."
}
Health Endpoint
GET /api/health
Public health check. No authentication required.
Response:{
"status": "ok",
"timestamp": "2026-03-22T10:00:00.000Z",
"version": "5.7.0",
"env": {
"ready": true,
"configured": 8,
"missing": 0,
"ai_enabled": true,
"billing_enabled": true
}
}
| Field | Description |
|---|---|
status | "ok" if the server is running |
version | Current deployment version |
env.ready | All required env vars are set |
env.configured | Number of configured env vars |
env.missing | Number of missing required env vars |
env.aienabled | GEMINIAPI_KEY is configured |
env.billing_enabled | All Stripe keys are configured |
Internal REST Endpoints
These endpoints are used by the ShipKit web dashboard. They require Supabase session authentication (cookie-based).
Projects
| Method | Path | Description |
|---|---|---|
| GET | /api/projects | List user projects |
| POST | /api/projects | Create project |
| GET | /api/projects/[id] | Get project detail |
| PATCH | /api/projects/[id] | Update project |
| DELETE | /api/projects/[id] | Delete project |
Captures & Diffs
| Method | Path | Description |
|---|---|---|
| POST | /api/configs/[id]/capture | Trigger screenshot capture |
| GET | /api/configs/[id]/captures | List captures for config |
| GET | /api/configs/[id]/embed | Get embed token for config |
| POST | /api/comparison | Compare two captures |
| GET | /api/analysis/[diffId] | Get AI analysis for a diff |
Documentation
| Method | Path | Description |
|---|---|---|
| GET | /api/generate-docs | List generated docs |
| POST | /api/generate-docs | Start doc generation |
| POST | /api/generate-docs/[id]/publish | Publish doc to platform |
| POST | /api/generate-docs/[id]/translate | Translate doc |
Hosted Sites
| Method | Path | Description |
|---|---|---|
| GET | /api/hosted-sites | List hosted doc sites |
| POST | /api/hosted-sites | Create hosted site |
| PATCH | /api/hosted-sites/[id] | Update hosted site |
Launch & Promote
| Method | Path | Description |
|---|---|---|
| POST | /api/optimize-landing | Analyze landing page |
| POST | /api/legal | Scan for legal data |
| POST | /api/ph-launch | Fetch Product Hunt data |
| POST | /api/social-posts | Fetch social post data |
| POST | /api/launch-calendar | Get launch calendar |
Account & Billing
| Method | Path | Description |
|---|---|---|
| GET | /api/profile | Get user profile |
| GET | /api/usage | Get usage stats |
| GET | /api/api-keys | List API keys |
| POST | /api/api-keys | Create API key |
| POST | /api/stripe/checkout | Create Stripe checkout session |
| POST | /api/stripe/portal | Create Stripe portal session |