Web Fetch
Dai al modello il testo completo di una pagina di cui hai già l'URL. Aggiungi una voce strumento e Synthorai recupera la pagina, la ripulisce e mette il corpo leggibile nella conversazione — su qualsiasi modello, per qualsiasi canale.
Richiesta minima
Aggiungi synthorai:web_fetch a tools su /v1/messages. Nient'altro 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 pagina viene recuperata solo quando il modello decide di averne bisogno e tu hai incluso synthorai:web_fetch. Le richieste senza lo strumento sono richieste ordinarie — impatto zero su comportamento o costo.
Opzioni
Ogni campo della voce synthorai:web_fetch è opzionale:
| Parametro | Descrizione |
|---|---|
max_uses | Numero massimo di pagine per richiesta. Predefinito 3, tetto 10. È un limite di spesa, quindi vale attraverso i retry — una richiesta con max_uses: 1 paga al massimo un fetch anche se ritentata su più canali. |
{
"type": "synthorai:web_fetch",
"max_uses": 2
} Usarlo con Web Search
La ricerca trova le pagine; il fetch le legge. Dichiarandoli entrambi il modello può cercare, scegliere un risultato promettente e tirarsi dentro l'intera pagina — che di solito è ciò che vuoi per le domande di tipo ricerca:
"tools": [
{"type": "synthorai:web_search"},
{"type": "synthorai:web_fetch"}
] Forma della risposta
Ogni fetch appare nel turno assistant come coppia di blocchi, seguita dalla risposta del modello:
{
"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…" }
}
} Il numero di fetch è riportato in usage, così puoi riconciliare l'addebito da solo:
"usage": {
"input_tokens": 9241,
"output_tokens": 412,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"server_tool_use": { "web_fetch_requests": 1 }
} Fatturazione
| Voce | Prezzo |
|---|---|
| Ogni pagina recuperata | $0.01 / fetch |
| Token (prompt + completamento) | Prezzo input standard del modello utilizzato |
La tariffa per fetch non è tutto il costo. Una pagina recuperata entra nella conversazione come token di input, e un articolo lungo può valerne diverse migliaia — sulla maggior parte dei modelli quel costo supera la tariffa di $0.01. Metti a budget entrambi.
Tre modi per restare prevedibili:
- Imposta
max_usesal numero più piccolo che serve al tuo compito — fa da tetto alla tariffa dell'intera richiesta, retry inclusi. - Recupera pagine specifiche invece di lasciare esplorare il modello. Un URL incollato dall'utente è un fetch; "leggere intorno all'argomento" possono essere tre.
- Osserva insieme
usage.server_tool_use.web_fetch_requestseusage.input_tokens— i soldi di solito vanno nel secondo.
Limiti e sicurezza
- Vengono recuperati solo URL
httpehttps. Gli URL con credenziali incorporate sono respinti. - Indirizzi privati, loopback, link-local e di metadati cloud sono rifiutati — web_fetch raggiunge solo pagine pubbliche.
- Il corpo delle pagine viene troncato a un limite di caratteri configurato prima di entrare nella conversazione: una singola pagina enorme non può gonfiare una richiesta senza limiti.
- Una pagina non recuperabile torna come blocco di errore invece di far fallire l'intera richiesta, e il modello può reagirvi o rispondere senza la pagina.
- Finché dichiari
synthorai:web_fetch, il nome nudoweb_fetchè riservato — dichiarare un tuo strumento con quel nome restituisce un400che lo nomina. Rinomina il tuo, o togli il parametrosynthorai:. - Un fetch rifiutato prima di lasciare la nostra rete — URL respinto, dominio bloccato, backend non configurato — non viene addebitato. Uno arrivato al provider e lì fallito viene addebitato, perché il provider ha addebitato noi. Entrambi contano in
max_uses.
La tua responsabilità per ciò che recuperi
web_fetch recupera una pagina su tua istruzione. Decidi tu quale URL recuperare, quindi quel recupero e l'uso di ciò che torna sono responsabilità tua.
- Devi avere il diritto di accedere al contenuto. Include i termini di servizio del sito, il suo
robots.txt, ogni paywall o confine di login, e i diritti d'autore e sui database applicabili. Recuperare tramite noi non ti concede accessi che altrimenti non avresti. - I dati personali restano un tuo obbligo. Se una pagina recuperata contiene informazioni personali, ne resti il titolare ai sensi di GDPR, PIPL e regimi equivalenti — inclusi base giuridica, conservazione e qualunque richiesta di cancellazione.
- Le pretese derivanti dai tuoi fetch sono tue. Se un titolare di diritti o un gestore di sito avanza una pretesa su contenuti che hai recuperato, quella pretesa è rivolta a te e ne sostieni il costo. Ciò rispecchia i termini dei provider di recupero a monte attraverso cui instradiamo.
- L'output del modello non è autorizzato al riuso. Una risposta costruita su materiale recuperato può riprodurne delle parti. Se puoi ripubblicare quell'output dipende dalla licenza della fonte, e non facciamo alcuna dichiarazione al riguardo.
Cosa spetta a noi: gestiamo l'infrastruttura di recupero, blocchiamo indirizzi interni e di reti private, rispettiamo la blocklist di domini configurata dal tuo amministratore e non conserviamo il contenuto delle pagine oltre l'evasione della tua richiesta. Non esaminiamo la legalità dei singoli URL, e non possiamo — un URL da solo non porta la propria licenza.
Sospenderemo web_fetch su una chiave API che attiri segnalazioni credibili di abuso o che un provider di recupero segnali, perché un account provider sospeso spegne la funzione per tutti i clienti.
FAQ
Il modello può recuperare una pagina che non ho menzionato?
Può seguire un URL trovato tramite synthorai:web_search nella stessa conversazione: è il senso di combinare i due. Ha istruzioni di non inventare URL; se deve trovare una pagina, prima deve cercare.
Cosa succede se la pagina è dietro un login o blocca i crawler?
Ricevi un blocco di errore per quel fetch e il modello prosegue senza la pagina. Il fetch conta comunque in max_uses perché la richiesta è stata davvero fatta per tuo conto.
Dichiarare lo strumento cambia qualcosa quando nessuna pagina viene recuperata?
No. Fatturazione e comportamento sono identici a una richiesta normale finché il modello non recupera davvero qualcosa.