curl.
Your role, unchanged
A token authenticates as the person who created it and inherits that person’s live role. Membership is re-read on every request and never cached, so a demotion or a removal takes effect on the next call the server makes, mid-session included.
The server advertises all 123 tools whatever your role is — it does not know your role until the API answers. So a viewer’s coding agent will try a write and be told no, clearly, rather than being unable to see that the operation exists. See workspaces and roles.
What it deliberately cannot reach
Four areas are unreachable by construction, not by instruction. An agent cannot be talked into them.Sign-in, workspaces, members, roles and personal access tokens
These live on a separate control API, and this server holds no URL for it. It is not a filtered list that could be widened — the operations are not in the package. Two things follow. An AI builder cannot mint itself a credential, or revoke yours. And who is in the workspace, and at what role, stays where a human is deliberately in the loop: invites, role changes and removals are dashboard work. See workspaces and roles.Buying credits
Reading the balance would be harmless. Starting a payment spends the workspace’s money, and neither belongs on a coding agent’s surface, so nothing under billing is exposed. You do not lose the answer this would have given. A workspace that runs out of credits refuses new calls with 402, and the call reads back withclose_reason: insufficient_credits — which get_call and list_calls both report. An agent asked why a call failed finds that and has the whole answer. Top up in the dashboard; see pricing and credits.
Streaming endpoints
Server-sent event streams are not tool-shaped, so they are not tools. Every one has a polling equivalent that is —list_conversation_items for a conversation, get_kb for a knowledge build — so nothing on the API is unreachable from here. Tools has the mapping, and streaming documents the streams themselves for application code, which is where they belong.
Deleting a call or its recording
Every otherdelete_ operation removes configuration you could write again: an agent, a tool, a webhook, a knowledge base. This one is different. Deleting a call destroys the record of something that happened — the transcript, the tool calls, the recording — and it can take a contact’s memory of past calls with it, so the next time that person rings, the agent has forgotten them.
That is a decision for a person looking at the call, not a step in a cleanup script. Delete a call or a recording from the dashboard; see recordings and data retention.
Operations that touch the real world
Most of the surface is configuration, and a mistake in configuration is an edit away from being fixed. These are not:create_outbound_callrings someone’s phone. It is billable, it happens the moment it is called, and there is no cancel.create_call_batchplaces up to 10 000 of those. Answering machines are not detected, so a call that reaches voicemail is answered, billed and reported as completed; and every call runs the agent’s current published version, so republishing mid-batch changes every call placed after that moment.create_text_messageto a conversation on a connected channel is a message somebody receives.run_taskandrun_toolexecute for real. The HTTP operations call your endpoints with your secrets, MCP servers spend your credits, the model spends your tokens. A task that books a slot or charges a card does so.send_email_batch_recipientsmails real people from your own Resend account, under your agreement with them. At most 50 rows per call, named one at a time — there is deliberately no bulk form for an AI builder to reach for.publish_agentchanges what live callers hear on the next call.assign_phone_numberandunassign_phone_numberput an agent in front of real callers, or take it away from them.
Approve these by hand
Next
Recipes
Prompts that build, publish and debug — with what to check afterwards.
Tools
Every operation, its annotations, and how its arguments map to HTTP.