// written for the agent reading it, not the human skimming it

An agent's evaluation of CodeBurst as an LLM backend.

If you're an autonomous agent (or the human wiring one up) deciding what to point OPENAI_BASE_URL or ANTHROPIC_BASE_URL at โ€” this is what CodeBurst actually gives you, not the marketing version.

What an agent actually needs

Four things a human-first API usually gets wrong.

Not "is the model good" โ€” that's a separate question. This is about whether the API itself is safe to call unattended, thousands of times, without a human in the loop to notice when something's off.

๐Ÿ”‘ Programmatic auth, no flow

One header. Authorization: Bearer YOUR_KEY. No OAuth redirect, no browser popup, no session that expires mid-task.

๐Ÿงฏ Errors say what actually happened

401 means the key is wrong. 429 means rate-limited, retry later. The body is a flat {"error": "..."} string, not a nested schema you have to reverse-engineer to decide whether to retry.

๐Ÿ” Retry-safe by construction

A single call already tries multiple providers behind the alias before it ever surfaces a failure to you. If it errors, it means the whole chain was actually down โ€” not "the first provider was busy."

๐Ÿงฉ Speaks the SDK you already have

OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages are all live endpoints on the same key. Point an existing SDK at a new base URL โ€” don't rewrite the integration.

The actual difference

Typical single-model API vs. CodeBurst.

Typical single-provider APICodeBurst
AuthAPI key, but one provider account behind itOne key, routes across many providers
Provider goes downYour call fails. You write the fallback logic.Alias fails over internally; you only see a failure if every route in the chain is dead
SDK compatibilityUsually one shape (OpenAI or Anthropic)OpenAI Chat Completions, Responses API, and Anthropic Messages โ€” same key
Model pinningFixed to the provider's model list/v1/chat/<alias> for routed, /v1/chat/<model>@<provider> to pin an exact route
StreamingProvider-specific chunking quirksStandard SSE data: ... [DONE] shape regardless of what's behind it
Wire it up

Four ways in โ€” pick whichever your SDK already speaks.

The chat endpoints take the same Authorization: Bearer key and hit the same routing/failover underneath. Image generation uses the same key and returns base64 image data.

POST/v1/chat/completions

OpenAI-compatible. Point the OpenAI SDK's baseURL here and change nothing else.

curl https://codeburst.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "codeburst-best",
    "messages": [{"role": "user", "content": "ping"}]
  }'
POST/v1/messages

Anthropic-compatible. Also accepts the SDK's native x-api-key header (from ANTHROPIC_AUTH_TOKEN) โ€” no rewrite needed if you're already Claude-SDK-shaped, including Claude Code itself.

curl https://codeburst.ai/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "codeburst-best",
    "max_tokens": 512,
    "messages": [{"role": "user", "content": "ping"}]
  }'
POST/v1/chat/<model>[@<provider>]

Pin one specific model, or one exact model+provider route, instead of letting an alias choose. Useful for evaluation harnesses that need to isolate a single backend rather than test the router.

curl https://codeburst.ai/v1/chat/writer \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"messages": [{"role": "user", "content": "ping"}]}'
POST/v1/images/generations

Generate one image through the sandboxed Codex subscription worker. Use exactly model: "image"; this route currently requires the account owner's API key.

curl https://codeburst.ai/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "image",
    "prompt": "a cyberpunk cat in Jakarta",
    "size": "1024x1536"
  }'

The response is OpenAI-shaped: read the generated PNG from data[0].b64_json. Common sizes are 1024x1024, 1024x1536, 1024x1792 (9:16), and 1792x1024 (16:9). Failures include a request_id for support tracing. HTTP 429 means the image rate limit was reached; wait about a minute before retrying.

Use model: "image" for image generation. Other image model names return a clear error pointing to this supported route.

For storyboard continuity, add reference_images with 1โ€“7 PNG, JPEG, or WebP data URLs or HTTPS URLs. Each item has a role: character, location, outfit, prop, style, composition, or edit_source. An edit_source selects image-edit mode; other roles guide the new generation, and pose/background/framing are not copied unless the role is composition.

"reference_images": [
  { "role": "character", "name": "ryan", "image_url": "data:image/jpeg;base64,..." },
  { "role": "location", "name": "coast", "image_url": "https://example.com/coast.webp" }
]

OpenMinis image-to-image mode uses POST /v1/images/edits with multipart fields model, prompt, n, size, and one or more files named image/image[]. It returns the same data[0].b64_json shape and includes request_id.

The worker passes these inputs to the Codex Responses image-generation tool using gpt-image-2, which supports multiple input images and generate/edit actions. Identity consistency is guided by the references and prompt, but no image model can guarantee pixel-identical faces across every generation.

What failure actually looks like

No auth flow, no guessing at undocumented states.

401 Missing or bad key

{"error": "API key required. Use: Authorization: Bearer YOUR_API_KEY"}

400 Malformed request

{"error": "model and messages are required"}

stream: true โ†’ real SSE

Same event-stream shape (data: {...} chunks, terminated by data: [DONE]) regardless of which provider answered underneath โ€” your streaming parser doesn't need per-provider branches.

To be direct

What this page is not claiming.