Skip to main content

Agent Billing, Limits & Errors

Beta

Conversational Agents are in Beta and available on Professional, Scale and Enterprise. Limits on this page may change during the Beta.

AI credits​

Agents are billed in AI credits, drawn from your plan's included message pool like every other message. There is no extra fee per agent, skill or seat.

UsageAI creditsCharge key
Each message the agent sends (model_tier: standard, "Fast"; also greetings and the AI note)1 per message, on top of the normal message chargebot_message
Each reply written by model_tier: advanced ("Deeper thinking")2 per message, on top of the normal message chargebot_message
search_knowledge that finds something+1kb_lookup
web_search that returns results+3web_search
Reading an image the contact sent (image understanding on)+2image_analysis
A successful agent builder build100agent_builder

Free:

  • The skill classifier (router), load_skill, set_state, handoff, complete_task and the goal tools.
  • Knowledge searches that find nothing or fail.
  • Fallback and error messages sent because something failed on our side.
  • Turns stopped by the plan check (gated).
  • Failed agent builder builds, and creating an agent from a build.
  • The test console. Its credits object shows what a live turn would cost (would_bill) with billed: false.

Tool credits are the same on both tiers. If the advanced model is unavailable and the standard model writes the reply, that reply bills 1 credit per message. Each turn's billed credits are in credits_billed in the turn log.

Where to see it​

GET /api/v1/billing/tenant-usage returns an ai_credits breakdown per workspace with the buckets bot_messages, tool_usage and other, and the charge keys above in by_charge. See AI credits — Usage breakdown API.

Limits​

Agents and skills​

LimitValue
Skills linked to one agent50
Knowledge sources per agent20
allowed_domains per web search source50
Agent instructions, skill body20,000 characters
Skill description1,000 characters
Skills per import100
handoff_config.keywords50
handoff_config.handoff_tag_ids20
handoff_config size8 KB
tools_config size1 KB
max_tool_calls1-6, default 4
turn_timeout_ms2,000-15,000, default 8,000 (advanced agents: always 15,000)

Per turn​

LimitValue
Skills preloaded by the classifier2
Loaded skill text60,000 characters
Conversation history readLast 20 turns
Knowledge excerpts per search5 (6,000 characters) from up to 8 sources
Web results per search5
Web searches per conversation3 by default; a daily workspace limit also applies
Conversation state (set_state)30 keys, 500 characters per value, 8 KB in total

Skill goals​

LimitValue
Outputs per goal20
Options per select output100
max_attempts per output1-5, default 3
assign.add_tag_ids10
Paused goals per conversation3

Rate limits​

EndpointLimitResponse
POST /automation/agents/{agent_id}/test20 per minute, 200 per hour per workspace429 {"detail": {"error": "rate_limit_exceeded", "message": "…", "retry_after": …}}
POST /automation/agent-builder/generate5 per hour, 20 per day per workspace; 1 build at a time429 {"detail": {"code": "rate_limit_exceeded", …, "retry_after": …}}, 409 build_in_progress

Both 429 responses set the Retry-After header.

Test console requests​

FieldLimit
message4,000 characters
history50 items
state8 KB
task16 KB; goal_prompt 4,000 characters

Common errors​

StatusBodyWhen
401Missing or invalid API token
403{"detail": {"code": "feature_disabled", "feature": "ai_agents"}}The plan does not include Conversational Agents (or ai_features)
403"Insufficient scopes"The token lacks the required automation:* scope
404"Agent not found", "Skill not found", …Unknown id, or an id from another workspace
409{"code": "agent_in_use", "flows": […]}Deleting an agent that a Flow uses
409{"code": "skill_slug_exists"}Creating a skill with a slug that is taken
422{"code": "invalid_goal", "errors": […]}Invalid skill goal
422{"code": "invalid_handoff_tags", "tag_ids": […]}Unknown hand-off tags
422Validation error listField lengths, enums, JSON size limits, unknown fields
429rate_limit_exceededSee Rate limits

Error bodies are not fully uniform: some detail values are plain strings, others objects with a code. Match on the status code first, then on detail.code when present.

Beta caveats​

  • Limits, defaults and the engine_trace content may change. engine_trace is for troubleshooting only and is not a stable contract.
  • model values in responses are informational; the models behind an agent can change without notice.
  • Agent replies are AI generated. Test every skill in the test console before activating an agent, and keep escalation on so contacts can reach a human.
  • If the plan stops including Conversational Agents, live agents stop answering (gated) and hand over if escalation is on. Flows take the escalated branch.