Overview
Use this path if you’re not on Node.js, or if you need to send data the SDK doesn’t capture. The ingest endpoint accepts conversations and agent definitions in one of five formats.Endpoint
Authentication
Pass your agent’s API key as a Bearer token.cl_ and managed from your agent’s Settings page in the dashboard.
Request format
The top-level request body:Required
At least one ofconversations or agentDefinitions must be present. Empty payloads are rejected.
Optional
string (UUID)
Pin the request to a specific agent. Validated against the API key. If omitted, the key’s default agent is used.
enum
Only set this when forwarding provider request/response bodies untouched. One of
anthropic, openai_chat, openai_responses. Omit to use the default shape shown in the examples. See Format selector below.array
Array of conversation objects. Max 1,000 per request.
array
Array of agent definition objects. Max 100 per request.
Conversation object
Required
array
required
Array of message objects. Min 1, max 10,000.
Optional
string
Your stable id for this conversation. 1-255 characters. Used to link conversations across ingest calls (for multi-turn sessions) and to deduplicate.
string
Grouping id for related conversations. Max 255 characters.
string (UUID)
Link this conversation to a specific agent definition version. Used when analyzing against a known spec.
object
Arbitrary key-value data. Surfaces in the dashboard under the conversation.
object
Structured trace information. See Trace data below.
Message object
Required
string
required
Typically
user, assistant, system, or tool. Any non-empty string is accepted.string | ContentBlock[]
required
Either a plain string (max 100 KB) or an array of content blocks (1-1,000 blocks).
Optional
string (ISO 8601)
When the message was produced. Used for ordering when multiple messages share the same logical turn.
Agent definition object
Required
string
required
Human-readable name. 1-500 characters. Combined with
type to dedupe versions.enum
required
One of
system_prompt or tool_schema.string
required
The definition text. 1 byte to 100 KB.
Content blocks
Messages support either a plain string or typed content blocks. Block types mirror Anthropic’s:Trace data
When you have structured trace info (tool calls with outputs, retrieval results), attach it so analysis has more to work with.array
{ type, timestamp, duration?, metadata? }[]. Generic trace events.array
{ name, input, output?, error?, timestamp?, duration? }[]. One entry per tool invocation.array
{ query, chunks[], sourceDocIds?, timestamp? }[]. RAG retrieval results.Steps
When a conversation is one call inside a multi-agent orchestration, attach astep so calado can render the run as a tree and attribute behavior to the right sub-agent. Omit it for single-agent conversations.
string
Stable id for this step within the run.
string
Id of the parent step. Omit for the root step. Cannot equal
step.id.string
Human-readable role for this sub-agent, e.g.
orchestrator or flight_search.string | object
The sub-agent’s dynamic prompt or tool schema for this call — the “how it should work” side calado analyzes this step against. String or object, up to 100 KB. Omit it and the step is analyzed against the agent’s static definition.
Format selector
Theformat field tells calado how to parse the conversations array when you’re forwarding provider bodies untouched. Omit it to use the default shape shown in the examples.
Example
Response
Success (202 Accepted)
Error
Batch limits
Error handling
Retry on5xx and network errors only, with jittered exponential backoff. 4xx responses are permanent and should not be retried.
On repeated 401 responses, stop retrying and surface the error to your operator. The key is wrong, and retrying won’t fix it.
Next: serverless patterns
Flush the queue before your function freezes.