Skip to main content
POST /calls/inline takes the whole agent configuration in the request body. Nothing is stored, nothing is reused. Use it when the persona is decided at call time.

When this is the right choice

  • Per-user personas — the prompt is assembled from that user’s data
  • Generated agents — your product builds the configuration on the fly
  • Testing — try a prompt without creating a record you then have to clean up
  • Stateless architectures — you hold the config, we hold nothing
If the same configuration is used more than a handful of times, create a real agent instead — you get version history, tool assignment, a phone number, and the dashboard.

Creating one

Required: systemPrompt, voice, language. The response carries websocketUrl, exactly as /calls/create does.

Every option

systemPrompt here is the whole prompt. There is no basePrompt / context / customInstructions layering — that assembly belongs to saved agents. See Writing agent prompts for what the layered version produces, if you want to reproduce its structure by hand.

From the SDK

joinCall takes inline options directly:

Tools

Inline calls accept selectedTools in the request. Each entry references one of three things, and exactly one of them:
Setting more than one of toolId, toolName, or temporaryTool on the same entry is rejected with 400. Pick one per entry.

What you give up

Calls themselves are still recorded and billed identically, and still appear in GET /calls.

Saved agents

When configuration should persist.

Tools

What temporaryTool definitions look like.