Describe it in a sentence
Write what the endpoint does in plain English — “look up an order by its number and return the status and tracking link”. That is the whole input.
Describe an endpoint in one sentence and CustomerBot writes the tool schema. The assistant then decides, mid-conversation, when to call it — and answers from the response.
“Look up an order by its number and return the status and tracking link.”
One sentence, no schema{
"name": "get_order_status",
"description": "Look up an order by its number and
return status and tracking",
"method": "GET",
"endpoint": "https://api.example.com/orders/{order_number}",
"headers": {
"Authorization": "Bearer ••••••••••••"
},
"parameters": {
"order_number": {
"type": "string",
"description": "The customer's order number",
"required": true
}
}
}Most do not. Tools are for facts that change per person or per minute; everything else belongs in the knowledge base, where it is cheaper and easier to audit.
| Question | Answered by | Because |
|---|---|---|
| “What is your returns window?” | Knowledge base | A published fact. It does not change per customer and it is on a page you wrote. |
| “Where is order #48120?” | API tool | True only right now, and only for this person. No page can hold it. |
| “Do you have the blue one in medium?” | API tool | Stock moves faster than a crawl. Read it live or do not claim it. |
| “How do I cancel my subscription?” | Knowledge base | A procedure. Publishing it once is the right answer. |
Write what the endpoint does in plain English — “look up an order by its number and return the status and tracking link”. That is the whole input.
CustomerBot produces a tool definition: a name, a description the model reads to decide when to call it, and typed parameters with their own descriptions.
URL, method (GET, POST or PUT), any headers such as an Authorization bearer token, and a body template for writes. Placeholders in the URL and body are filled from the parameters at call time.
During a conversation, the model picks tools by their descriptions. It can chain several calls — up to four rounds — before it answers, so a compound question becomes one reply.
Tool calling fails for boring reasons far more often than exotic ones. These four account for most of it.
The tool description is the only thing the model has when deciding whether this is the right call. “Get order” is ambiguous. “Look up a customer order by its order number and return delivery status and tracking link” is not.
A parameter described as “order_number: the customer’s order number, e.g. 48120” gets filled correctly far more often than one described as “id”.
The response goes into the model’s context. An endpoint that returns forty fields when the answer needs three makes replies slower, more expensive and vaguer. Build a purpose-shaped endpoint if you can.
An endpoint that returns a clear “order not found” lets the assistant say so. One that returns an opaque 500 leaves it guessing, and guessing is the behaviour you are trying to eliminate.
The most common mistake is exposing everything. Selection accuracy falls as the list of tools grows — this is a property of how models choose, not something a product can configure away, so it is worth designing around from the start.
Selection accuracy falls as the list grows. Developers building this by hand report models getting confused well before they reach a few dozen tools. Start with two or three that cover your highest-volume questions and add only when a real gap shows up in the transcripts.
Sixty endpoints does not mean sixty tools. Wrap the related ones into a handful that take a parameter, so the assistant makes one clear decision instead of picking from a wall of near-identical options.
The description is how the assistant decides whether a tool applies. “Look up the status of a customer order by order number” beats “order service endpoint” every time, because it says when to reach for it.
A response with forty fields gives the model forty chances to quote the wrong one. Trim to what an answer actually needs.
Because one is. A visitor's message is what causes the call, so treat every connected endpoint as reachable by the public even though the credential stays on our side.
Tool calling is the ability of a model to reach outside its own knowledge and invoke something you have defined — an API, a lookup, an action — then use the result to answer. Here you describe the endpoint in plain English, the tool definition is generated for you, and the assistant decides during the conversation whether that tool applies. Retrieval answers what you published; tools answer what is true at the moment somebody asks.
Fewer than you would expect, and this is a property of the technique rather than of any one product. Selection accuracy degrades as the list grows — people building tool-calling agents by hand hit this well before a few dozen tools. The fix is grouping: wrap related endpoints into a handful of parameterised tools rather than exposing each one, and write descriptions that say when to use the tool rather than what it is named.
If tool orchestration is the interesting part of your problem, yes — build it, you will learn more and control everything. Buy it when the chat assistant is a supporting feature rather than your product, and you would rather not own a widget, a retrieval pipeline, transcript storage, model routing and the tool layer all at once. Neither answer is wrong; they suit different weeks.
A description of one of your endpoints that the model can choose to call mid-conversation, so it can answer from live data instead of only from your published content.
No. You describe the endpoint in plain English and the schema is generated for you. You then fill in the URL, method, headers and any body template — the parts only you know.
GET, POST and PUT. GET parameters are sent as query parameters; POST and PUT use a body template where placeholders are substituted from the parameters the model supplies.
Several. The practical constraint is that too many similar tools makes the model’s choice harder — a handful of well-described, clearly distinct tools works far better than fifteen overlapping ones.
Yes. The assistant runs up to four tool rounds before it answers, so “where is my order and can I still change the address” can be resolved in one reply.
Calls time out rather than hanging the conversation, and the assistant tells the visitor it cannot check right now rather than inventing a status. This is the correct behaviour and it is worth testing deliberately before you go live.
API access is included on the paid plans. The free plan is for training and testing against your published content.
Start with a read-only lookup. It is the smallest possible tool and it removes the largest single category of tickets.
Start free