Before you start
Use this guide when your backend calls the CREAO Developer API directly.If you are using
agent.creao.ai in the browser, start with Using CREAO. If you need an app-scoped key for one browser-created agent, see API Trigger. This page covers the Developer Platform /v1/* API.1. Create an Account API key
Open Developer Console, go to API Keys, and create an Account API key. Store it in your backend secret manager. For local testing, set it as an environment variable:2. Create or choose an agent
You can create a personal agent through the API, or copy an existingagent_id from Developer Console. If you already have an agent ID, skip to step 3.
POST /v1/agents starts an asynchronous creation run from a natural-language request:
202 Accepted with a creation run_id. The agent_id remains null while CREAO builds the agent:
agent_id or result.agent_id:
3. Start an async run
Use async runs for jobs that can finish in the background. Store the returnedrun_id and conversation_id.
model to use the default model, currently anthropic/claude-sonnet-5. See Models to compare supported ids and account-specific availability.
4. Poll for completion
PollGET /v1/runs/{run_id} until the status is terminal.
completed, failed, and cancelled.
5. Continue context
Pass a previousconversation_id when follow-up runs should share context with earlier work.
conversation_id is opaque and account-scoped. Store your own user, tenant, or workflow ID next to it in your database.
6. Choose a model
Pass an optionalmodel field on POST /v1/runs, POST /v1/realtime/runs, POST /v1/agents, and POST /v1/agents/{agent_id}/edits to control which AI model handles that request. Omit it to use the account default.
GET /v1/models to list available models along with pricing tier, whether a paid plan is required, and whether it’s currently available for your account:
model back so you can confirm which one handled the request.
Realtime streaming
UsePOST /v1/realtime/runs when your product needs live output over Server-Sent Events instead of polling.
run.created, output_text.delta, artifact.created, run.completed, run.failed, and error. See Streaming Events.
Webhooks
For async runs, includewebhook_url when your backend should receive the terminal result.
run_id belongs to a request your system created. Polling remains the fallback if delivery fails. See Webhooks.
Production checklist
- Keep
cr_sk_keys in a server-side secret store. - Store
agent_id,run_id, andconversation_idas separate identifiers. - Treat
conversation_idas opaque; do not parse it or use it as your user ID. - Retry
429responses only afterRetry-Afterwhen the header is present. - Use idempotency in your own queue or job table before creating non-idempotent runs.
- Map stable
errorcodes from Errors, not English messages. - Use Rate Limits and Developer Console to understand account-level throughput.