EU GPT logo
EU GPT

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#

ToolWhat it doesTypical use
web_searchDuckDuckGo search via ddgs. Returns titles, snippets, URLs.”What’s the latest on …”, “Find news about …”.
web_fetchFetches a URL and extracts the readable content.”Read this article and summarise it.”
calculatorSafe math expression evaluation. Never hallucinates arithmetic.Anything involving numbers — totals, percentages, conversions.
current_datetimeReturns 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.