Web Fetch
Dale al modelo el texto completo de una página cuya URL ya tienes. Añade una entrada de herramienta y Synthorai recupera la página, la limpia y pone el cuerpo legible en la conversación — en cualquier modelo, por cualquier canal.
Petición mínima
Añade synthorai:web_fetch a tools en /v1/messages. Nada más cambia:
curl https://synthorai.io/v1/messages \
-H "x-api-key: $YOUR_KEY" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"tools": [{"type": "synthorai:web_fetch"}],
"messages": [
{"role": "user", "content": "Summarise https://docs.anthropic.com/en/docs/build-with-claude/tool-use"}
]
}' Una página solo se recupera cuando el modelo decide que necesita una y tú incluiste synthorai:web_fetch. Las peticiones sin la herramienta son peticiones ordinarias — impacto cero en comportamiento o coste.
Opciones
Todos los campos de la entrada synthorai:web_fetch son opcionales:
| Parámetro | Descripción |
|---|---|
max_uses | Máximo de páginas a recuperar en una petición. Por defecto 3, con tope en 10. Es un límite de gasto, así que se aplica a través de los reintentos — una petición que declara max_uses: 1 se factura como máximo una recuperación aunque se reintente por varios canales. |
{
"type": "synthorai:web_fetch",
"max_uses": 2
} Usarlo con Web Search
La búsqueda encuentra páginas; la recuperación las lee. Declarar ambas permite al modelo buscar, elegir un resultado prometedor y traerse la página entera — que suele ser lo que quieres en preguntas de investigación:
"tools": [
{"type": "synthorai:web_search"},
{"type": "synthorai:web_fetch"}
] Forma de la respuesta
Cada recuperación aparece en el turno assistant como un par de bloques, seguido de la respuesta del modelo:
{
"type": "server_tool_use",
"id": "srvtoolu_synth_...",
"name": "web_fetch",
"input": { "url": "https://example.com/page" }
},
{
"type": "web_fetch_tool_result",
"tool_use_id": "srvtoolu_synth_...",
"content": {
"type": "web_fetch_result",
"url": "https://example.com/page",
"title": "Example page",
"content": { "type": "text", "text": "…page body…" }
}
} El número de recuperaciones se informa en usage, así puedes conciliar el cargo tú mismo:
"usage": {
"input_tokens": 9241,
"output_tokens": 412,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"server_tool_use": { "web_fetch_requests": 1 }
} Facturación
| Elemento | Precio |
|---|---|
| Cada página recuperada | $0.01 / recuperación |
| Tokens (prompt + completado) | Precio de entrada estándar del modelo utilizado |
La tarifa por recuperación no es todo el coste. Una página recuperada entra en la conversación como tokens de entrada, y un artículo largo puede ser varios miles — en la mayoría de modelos ese coste supera la tarifa de $0.01. Presupuesta ambos.
Tres formas de mantenerlo predecible:
- Pon
max_usesen el número más pequeño que tu tarea necesite — limita la tarifa de toda la petición, reintentos incluidos. - Recupera páginas concretas en lugar de dejar que el modelo explore. Una URL pegada por el usuario es una recuperación; «leer alrededor del tema» pueden ser tres.
- Vigila juntos
usage.server_tool_use.web_fetch_requestsyusage.input_tokens— el dinero suele irse en el segundo.
Límites y seguridad
- Solo se recuperan URLs
httpyhttps. Las URLs con credenciales incrustadas se rechazan. - Las direcciones privadas, de loopback, link-local y de metadatos de nube se rechazan — web_fetch solo alcanza páginas públicas.
- Los cuerpos de página se truncan a un límite de caracteres configurado antes de entrar en la conversación, así que una sola página enorme no puede inflar una petición sin límite.
- Una página que no se puede recuperar vuelve como bloque de error en lugar de hacer fallar toda la petición, y el modelo puede reaccionar o responder sin la página.
- Mientras declaras
synthorai:web_fetch, el nombre desnudoweb_fetchqueda reservado — declarar una herramienta propia con ese nombre devuelve un400que lo nombra. Renombra la tuya, o quita el parámetrosynthorai:. - Una recuperación rechazada antes de salir de nuestra red — URL rechazada, dominio bloqueado, backend sin configurar — no se cobra. Una que llegó al proveedor y falló allí se cobra, porque el proveedor nos cobró. Ambas cuentan para
max_uses.
Tu responsabilidad por lo que recuperas
web_fetch recupera una página por tu instrucción. Tú decides qué URL recuperar, así que esa recuperación y lo que hagas con lo que vuelve son tu responsabilidad.
- Debes tener derecho a acceder al contenido. Eso incluye los términos de servicio del sitio objetivo, su
robots.txt, cualquier muro de pago o límite de inicio de sesión, y los derechos de autor y de bases de datos aplicables. Recuperar a través de nosotros no te concede un acceso que de otro modo no tendrías. - Los datos personales siguen siendo tu obligación. Si una página recuperada contiene información personal, sigues siendo su responsable bajo el RGPD, la PIPL y regímenes equivalentes — incluida la base legal, la retención y cualquier solicitud de borrado.
- Las reclamaciones derivadas de tus recuperaciones son tuyas. Si un titular de derechos o un operador de sitio presenta una reclamación por contenido que recuperaste, esa reclamación se dirige a ti y tú asumes su coste. Esto refleja los términos de los proveedores de recuperación aguas arriba por los que enrutamos.
- La salida del modelo no está autorizada para reutilización. Una respuesta construida sobre material recuperado puede reproducir partes de él. Si puedes republicar esa salida es una cuestión de la licencia de la fuente, y no hacemos ninguna declaración al respecto.
Lo que nos toca: operamos la infraestructura de recuperación, bloqueamos direcciones internas y de redes privadas, respetamos la lista de bloqueo de dominios que configura tu administrador y no retenemos el contenido de las páginas más allá de servir tu petición. No revisamos la legalidad de URLs individuales, y no podemos — una URL por sí sola no lleva su licencia.
Suspenderemos web_fetch en una clave de API que atraiga denuncias de abuso creíbles o que un proveedor de recuperación marque, porque una cuenta de proveedor suspendida deja la función caída para todos los clientes.
FAQ
¿Puede el modelo recuperar una página que no mencioné?
Puede seguir una URL que encontró mediante synthorai:web_search en la misma conversación, que es el sentido de combinar ambas. Tiene instrucciones de no inventar URLs; si necesita encontrar una página, debe buscar primero.
¿Qué pasa si la página está tras un login o bloquea rastreadores?
Recibes un bloque de error para esa recuperación y el modelo continúa sin la página. La recuperación cuenta igualmente para max_uses porque la petición realmente se hizo en tu nombre.
¿Declarar la herramienta cambia algo cuando no se recupera ninguna página?
No. La facturación y el comportamiento son idénticos a una petición normal hasta que el modelo realmente recupera algo.