Public REST API
Manage ChatBakers programmatically
Websites, topics, prompts, competitors, citations, dashboards — every action you can take in the app is one HTTPS call away. Bearer auth, 16 endpoints, idempotency, webhooks, agency master keys.
Quick facts
Base URL
https://app.chatbakers.com/api/v1 Auth
Authorization: Bearer cbk_live_… Three key types: cbk_live_*, cbk_read_*, cbk_agency_live_*.
Rate limits
600 read / 60 write / 5 generate per min per key
429 returns Retry-After + X-RateLimit-* headers.
Quick start
Create a key in Settings → Public API Keys, then:
List your websites (curl)
curl https://app.chatbakers.com/api/v1/websites \ -H "Authorization: Bearer cbk_live_..."
Add a prompt (JavaScript)
const res = await fetch("https://app.chatbakers.com/api/v1/prompts", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.CHATBAKERS_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
websiteId: "ws_abc",
prompts: [{ text: "best email warmup tool", intent: "commercial" }],
}),
}); Endpoints
16 endpoints across 8 resources. Full schemas and try-it-out in the Swagger UI.
| Resource | Operations |
|---|---|
| /websites | List, get, delete (cascade) |
| /dashboard | Aggregate scores, brands, and prompts |
| /topics | List, create, update (label-only), delete, generate (async) |
| /prompts | List, create (single / batch up to 50), delete — no PATCH, text is immutable |
| /competitors | List, add |
| /citations | List, paginated, filterable |
| /scores | Visibility, sentiment, and citations aggregate |
| /jobs/{id} | Poll async job status |