Public preview — This API is in public preview. Endpoints, schemas, and limits may change before general availability.
API
Tools
Built-in tools, auto-approval for API callers, and how tool calls show up in the stream.
EU GPT ships with a fixed set of server-side tools. The model decides when to use them; the platform runs them; the results are folded back into the conversation transparently.
You do not register tools per request. You do not pass tool schemas. The tool catalogue is the catalogue.
The built-in tools#
| Tool | What it does | Typical use |
|---|---|---|
web_search | DuckDuckGo search via ddgs. Returns titles, snippets, URLs. | ”What’s the latest on …”, “Find news about …”. |
web_fetch | Fetches a URL and extracts the readable content. | ”Read this article and summarise it.” |
calculator | Safe math expression evaluation. Never hallucinates arithmetic. | Anything involving numbers — totals, percentages, conversions. |
current_datetime | Returns the current date and time (optionally in a timezone). | ”What day is it?”, relative time references. |
Auto-approval for API callers#
In the web UI, sensitive tools (web search, web fetch) prompt the user for explicit approval before running. In the API, that gate is bypassed by default — calls are executed without round-tripping through your application.
The auto-approved set is:
web_search
web_fetch
calculator
current_datetime
This trades caller control for simplicity. It is the right default because API integrations cannot show interactive prompts.
How tool calls appear in the stream#
Tools run on the server, but their execution is visible in the streamed events so your UI can show what is happening.
The event sequence for a web-search-then-answer turn looks like:
response.created
response.output_item.added (function_call, name="web_search")
response.output_item.done (status="completed", output=[search hits])
response.content_part.added (text content begins)
response.output_text.delta (model text answering, possibly citing)
response.output_text.delta …
response.output_text.done
response.completed
The output_item.added / output_item.done pair carries the tool call shape:
{
"type": "response.output_item.done",
"item": {
"type": "function_call",
"name": "web_search",
"arguments": "{\"query\":\"GDPR penalties 2025\"}",
"output": "[…search results JSON…]",
"status": "completed"
}
}
If you are rendering a chat UI, show a “searching the web…” indicator on output_item.added for a function call, and replace it with the result count on output_item.done.
Tool errors#
If a tool fails (e.g. the web fetch hits a 500, the calculator gets gibberish), the output_item.done event will have status: "failed" and the output field will contain a structured error description. The model usually handles this gracefully — it will either retry with a different argument or answer without the tool — but you may want to surface “search failed, answering from training data” hints to your users.
Sequential and parallel tool calls#
The model can call multiple tools per turn, and parallel calls execute concurrently. You will see interleaved output_item.added events before any of them resolve. Order resolution by sequence_number if you need to correlate.
Custom tools#
Custom tools (your own functions) are not part of the public API today. The web UI exposes an “agent builder” for organisation-scoped agents with custom tools, and a programmatic equivalent will follow. The shape will mirror Chat Completions’ tools[] parameter when it lands.