API access

Everything you can do in the CCD dashboard, you can do over HTTP. Your whole workspace (agent tasks, fleet, projects, billing data) is scriptable.

Your API keys

Issue your own keys from the Developer portal. Give each key a name (for example "CI deploy" or "prod backend"), pick its access level, and copy the secret. A key looks like:

ccd_live_2a749b1c4e...

The full secret is shown once, at creation. We store only a peppered hash, so a stolen database yields no usable keys, and nobody, including us, can recover a secret later. Lost a key? Rotate it (issues a fresh secret, kills the old one) or revoke it, right from the portal. You can hold as many named keys as you need and retire them independently, so rotating one integration never disturbs another.

Two access levels:

When you create a key you can also, optionally:

Authenticate any request by sending the key in the X-API-Key header, or as a standard Bearer token. The Bearer form drops straight into most AI tools, HTTP clients, and generated SDKs:

# these two are equivalent
curl -H "X-API-Key: $CCD_API_KEY"        https://your-ccd-host/api/fleet/status
curl -H "Authorization: Bearer $CCD_API_KEY" https://your-ccd-host/api/fleet/status

No OAuth dance, no token refresh. Browser sessions use a login cookie instead, and all forms are accepted.

Not sure a key works? Ask the platform who you are:

curl -H "Authorization: Bearer $CCD_API_KEY" https://your-ccd-host/api/developer/whoami
# -> { "company_id", "scopes", "plan", "usage": {...}, "rate_limit_per_minute" }

Treat a key like a password: it carries your company's access. Do not commit it to repositories. The agent's own log redaction scrubs keys it sees, but the key itself grants access. If one leaks, revoke it in the portal. Every create, rotate, revoke and blocked attempt is written to a security log you can read at GET /api/developer/audit or on the Developer page.

The original company key from your welcome email still works, as a legacy read-and-write key. Named keys are the better path: they are scoped, individually revocable, can expire, can be IP-locked, and show you when each was last used.

What an API key cannot do

Keys are built so that a leaked one cannot escalate into account takeover. Regardless of a key's access level, these stay session-only (a logged-in human in the dashboard):

And unless a key is explicitly admin-scoped, it can read but not change company settings, tenancy, billing, credits, or move money. Two more automatic guards run on every request: a source that keeps presenting invalid keys is temporarily blocked, and oversized request bodies are refused before any handler sees them.

Example: start an agent task from a script

curl -X POST \
  -H "X-API-Key: $CCD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"task": "Run the test suite for ~/projects/shop and summarize failures"}' \
  "https://your-ccd-host/api/agent/quick-start"

This creates a project and agent session (auto-routed to your best online node) and returns the new session_id. Open /agent?session=<sid> to watch it live, or keep polling the session over the API.

The full API reference

CCD documents its own API live, generated from the running platform, so it is never out of date:

Errors

Every /api/* endpoint returns JSON errors with a consistent shape:

{ "error": "Invalid API key" }
Status Meaning
400 Malformed request: usually an invalid JSON body; a detail field says what was wrong
401 Missing or invalid credentials (Authentication required / Invalid API key)
403 Authenticated, but not allowed: a read-only key tried to write, or the endpoint needs an admin session
404 No such endpoint or resource
405 Wrong HTTP method: the allowed field lists valid methods
429 Rate limit or monthly quota exceeded. Honor the Retry-After header and back off
500 Something broke on our side. Retry, then contact support

Rate limits and quotas

Two limits apply to X-API-Key traffic, both by plan. Browser dashboard usage never counts against either.

Check your consumption any time:

curl -H "X-API-Key: $CCD_API_KEY" https://your-ccd-host/api/usage/api-calls
{
  "plan": "team",
  "month": "2026-07",
  "used": 1284,
  "limit": 100000,
  "remaining": 98716,
  "unlimited": false,
  "rate_limit_per_minute": 300
}

Bring your own AI keys (BYOK)

You can attach your own AI provider keys so agent runs bill against your provider account instead of platform quota:

Note the distinction: your CCD API key authenticates you to CCD; BYOK provider keys are what the agent uses to think.