API reference
Drive your Pilots from your own code. The API is REST over HTTPS, returns JSON, and uses a bearer key you create in your account. Every response is scoped to the key owner.
Base URL and authentication
All requests go to https://bizopspilot.com and carry a bearer key. Create one in Account → API keys. Keys start with bp_ and are shown once, so store them safely.
The REST API and the MCP server are a Pro feature. A free plan can't mint its first key; go Pro for API keys, unlimited active Pilots and Systems, per-entity brains, and custom connectors.
curl https://bizopspilot.com/api/v1/pilots \
-H "Authorization: Bearer bp_your_key_here"Endpoints
/api/v1/pilotscurl https://bizopspilot.com/api/v1/pilots \
-H "Authorization: Bearer bp_your_key"
{
"pilots": [
{ "id": 12, "title": "New lead welcome", "status": "active",
"triggerType": "webhook", "runCount": 34, "lastRunAt": 1751655000 }
]
}/api/v1/pilotscurl -X POST https://bizopspilot.com/api/v1/pilots \
-H "Authorization: Bearer bp_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Summarize new orders",
"description": "When an order comes in, summarize it with AI and post to Slack.",
"triggerType": "webhook"
}'
// 201 Created
{ "id": 18, "title": "Summarize new orders", "triggerType": "webhook", "status": "active",
"steps": [ ... ] }
// 201 Created, when the free plan's active-Pilot ceiling is already full:
// the Pilot is still created, just paused instead of active
{ "id": 18, "title": "Summarize new orders", "triggerType": "webhook", "status": "paused",
"steps": [ ... ], "note": "Free keeps 3 Pilots running at once. Pause another Pilot to free a slot, or go Pro for unlimited active Pilots, unlimited Systems, and the REST API. Runs stay unlimited on every plan." }triggerType is one of manual, webhook, schedule, email (defaults to manual). status is active or paused; a note field is included only when the free plan's active-Pilot ceiling forced the new Pilot to come back paused.
/api/v1/pilots/:id/runcurl -X POST https://bizopspilot.com/api/v1/pilots/18/run \
-H "Authorization: Bearer bp_your_key" \
-H "Content-Type: application/json" \
-d '{ "orderId": "1234", "total": 49.0 }'
// 202 Accepted
{ "queued": true, "jobId": 907 }/api/v1/pilots/:id/runscurl https://bizopspilot.com/api/v1/pilots/18/runs \
-H "Authorization: Bearer bp_your_key"
{
"runs": [
{ "id": 907, "status": "success", "triggerType": "webhook",
"durationMs": 812, "error": null, "steps": [ ... ], "startedAt": 1751655100 }
]
}Errors and rate limits
Errors return a JSON body { "error": "..." } with a matching status: 401 (bad or missing key), 404 (not your Pilot), 409 (Pilot paused), 413 (body over the 64KB limit), 429 (rate limited, with a Retry-After header). Run throughput is capped per account for fair use.
Reliability
- Automatic retries. Connector and AI steps retry transient failures (rate limits, provider overload, gateway 5xx, network blips) with exponential backoff. Writes only retry when the request was rejected before it ran, so a retry never double-sends.
- Idempotent webhooks. Send a delivery id header on your webhook (
Idempotency-Key,webhook-id,svix-id,x-github-delivery, and similar) and a retried delivery is acknowledged without firing the Pilot twice. - Recovered runs. A step that dies mid-run (a worker timeout or crash) is returned to the queue and retried, rather than left stuck.
Model Context Protocol (MCP)
Prefer to drive Pilots from an AI agent? The repo ships a zero-dependency MCP bridge (scripts/mcp-server.mjs) exposing list, create, run, and get-runs as tools. Point it at your key and base URL, then add it to Claude Desktop:
{
"mcpServers": {
"bizops-pilot": {
"command": "node",
"args": ["scripts/mcp-server.mjs"],
"env": {
"BIZOPS_API_URL": "https://bizopspilot.com",
"BIZOPS_API_KEY": "bp_your_key"
}
}
}
}Ready to build?
Create an account, generate a key in Account → API keys, and make your first call in under a minute.
Get your API key