Fetch
const url = 'https://router.telem.ai/v1/fetch';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"session_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","urls":["example"],"options":{"providers":["example"],"inline_content":true,"inline_max_chars":1,"content_format":"markdown","tier":"minimalist","max_age_seconds":1,"no_cache":true},"metadata":{}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://router.telem.ai/v1/fetch \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "session_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "urls": [ "example" ], "options": { "providers": [ "example" ], "inline_content": true, "inline_max_chars": 1, "content_format": "markdown", "tier": "minimalist", "max_age_seconds": 1, "no_cache": true }, "metadata": {} }'Read whole pages by URL, several per call. Individual limits — the per-call URL cap among them — are set by the deployment; see Parameters & Configuration.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Typed replacement for the metadata.web_fetch grab-bag. max_urls
is deliberately absent — the server cap is the cap (spec 2026-08-03).
object
Responses
Section titled “Responses”Successful Response
object
object
object
object
object
Example
{ "preprocessor_runs": [ { "batch_index": 0, "query": "" } ], "postprocessor_runs": [ { "batch_index": 0, "query": "" } ]}Typed request rejection. error.code is the contract and is append-only: missing_urls, invalid_url, over_url_cap, duplicate_urls, invalid_kind, invalid_session, invalid_request, unknown_provider.
Declared on the typed routes so the published OpenAPI shows the shape
that actually arrives. Without it the schema advertises FastAPI’s
HTTPValidationError — {"detail": [...]} — and a client generated from
docs.telem.ai cannot deserialize the envelope, nor discover the codes it is
supposed to branch on.
object
Examplegenerated
{ "error": { "code": "example", "message": "example", "param": "example", "interaction_id": "example", "session_id": "example" }}Missing or invalid API key.
Declared on the typed routes so the published OpenAPI shows the shape
that actually arrives. Without it the schema advertises FastAPI’s
HTTPValidationError — {"detail": [...]} — and a client generated from
docs.telem.ai cannot deserialize the envelope, nor discover the codes it is
supposed to branch on.
object
Examplegenerated
{ "error": { "code": "example", "message": "example", "param": "example", "interaction_id": "example", "session_id": "example" }}Key may not execute fetches.
Declared on the typed routes so the published OpenAPI shows the shape
that actually arrives. Without it the schema advertises FastAPI’s
HTTPValidationError — {"detail": [...]} — and a client generated from
docs.telem.ai cannot deserialize the envelope, nor discover the codes it is
supposed to branch on.
object
Examplegenerated
{ "error": { "code": "example", "message": "example", "param": "example", "interaction_id": "example", "session_id": "example" }}Body failed schema validation. error.param points at the offending field (urls[1]).
Declared on the typed routes so the published OpenAPI shows the shape
that actually arrives. Without it the schema advertises FastAPI’s
HTTPValidationError — {"detail": [...]} — and a client generated from
docs.telem.ai cannot deserialize the envelope, nor discover the codes it is
supposed to branch on.
object
Examplegenerated
{ "error": { "code": "example", "message": "example", "param": "example", "interaction_id": "example", "session_id": "example" }}provider_unavailable: the request PINNED options.providers and every URL failed before its target was reached. Raised only for a pinned chain — a dead link, a paywall or an empty page is the target’s answer and stays a 200 result. The interaction was recorded and billed, so error.session_id and error.interaction_id identify the run. session_id is returned even when the request omitted one, since it was minted during dispatch.
Declared on the typed routes so the published OpenAPI shows the shape
that actually arrives. Without it the schema advertises FastAPI’s
HTTPValidationError — {"detail": [...]} — and a client generated from
docs.telem.ai cannot deserialize the envelope, nor discover the codes it is
supposed to branch on.
object
Examplegenerated
{ "error": { "code": "example", "message": "example", "param": "example", "interaction_id": "example", "session_id": "example" }}