tools/list endpoint exposed to anonymous callers — the chatbot is the agent.
Endpoint
Declaring you are an agent
Send theX-Agent-Model header so the chatbot knows it’s talking to another agent (not a human). It tags the conversation, switches the tool channel to api, and triggers the structured JSON envelope response automatically.
[AGENT:model-name] — the chatbot strips it out and treats the rest as the question.
Response shape (agent-aware)
WhenX-Agent-Model is present and stream is not explicitly set, you get a single JSON response. No SSE parsing.
The HTTP response also carries
X-AI-Generated: true (AI Act Art. 50 transparency).
Tool executions, not tool calls
toolExecutions[] reports what the chatbot did internally — not actions you can invoke. The chatbot decides which tools to use based on the question.
If the chatbot collects a contact via SUBMIT_FORM, books a meeting via BOOK_MEETING, or charges via COLLECT_PAYMENT, the agent caller sees it in toolExecutions[] with structured data. Useful for:
- attribution (the agent caller wrote the lead, not a random visitor)
- follow-up logic (e.g., the agent caller polls a CRM after seeing
submission.created) - debugging (which tool ran, did it succeed, what did it return)
Multi-turn conversations
Reuse the returnedsessionId (or conversationId):
sessionId.
Streaming (opt-in for agents)
Streaming is the default for browsers but opt-in for agents. Setstream: true to receive SSE chunks, ending with a done event that carries the same envelope fields.
Discovery before talking
Before sending the first message, an agent can introspect the tenant:segment to target.
Rate limits
When exceeded the API returns HTTP 429 with
Retry-After.
Errors
Integration examples
Python — agent-to-agent
LangChain Tool
Next steps
Agent-Ready
Full agent-readiness layers (.well-known files, MCP, JSON-LD)
Discovery
Introspect a tenant before chatting