Dit artikel beschrijft de technische specificaties van de Search API en Fetch API van DeepSeek, ontworpen voor gebruik in AI-agents en RAG-applicaties.
Kernfuncties
- Search API: Hiermee kunnen gebruikers webpagina's zoeken via queries. Het ondersteunt diverse geavanceerde operatoren (zoals
site:, lang:, after:) en retourneert gestructureerde resultaten inclusief relevantiescores en samenvattingen.
- Fetch API: Haalt de inhoud van een specifieke URL op en zet deze om naar Markdown.
Technische Details
- Authenticatie: Beiden maken gebruik van Bearer-authenticatie via de basis-URL
https://api.deepseek.com.
- Rate Limits: Er geldt een limiet van 5 requests per seconde (QPS) per account voor beide API's.
- Fouten: Foutmeldingen zijn compatibel met het OpenAI-formaat, met specifieke HTTP-statuscodes voor zaken als onvoldoende saldo (402) of geblokkeerde URL's (403).
Kosten
De API's worden gefactureerd op basis van succesvolle verzoeken (HTTP 200) tegen een prijs van $0,75 per 1.000 verzoeken. Mislukte verzoeken of lege resultaten worden niet in rekening gebracht.
Search & Fetch API
- Search API: Zoekt webpagina's op basis van een query en retourneert gestructureerde resultaten. Deze wordt aangedreven door de eigen zoekmachine van DeepSeek.
- Fetch API: Haalt een enkele webpagina op en retourneert de inhoud als Markdown.
Beide zijn raw JSON API's en maken gebruik van dezelfde bearer-authenticatie als de DeepSeek API.
Basis URL: https://api.deepseek.com
| API | Endpoint |
| Search | POST https://api.deepseek.com/v1/tools/search |
| Fetch | POST https://api.deepseek.com/v1/tools/fetch |
Raadpleeg de Search API Reference en Fetch API Reference voor de volledige request- en response-schema's.
Authenticatie
Verstuur uw API-sleutel en het JSON-inhoudstype in de request-headers:
| Header | Verplicht | Waarde |
| Authorization | Ja | Bearer <DeepSeek API Key> |
| Content-Type | Ja | application/json |
Search API
Request
Voorbeeld via curl:
curl https://api.deepseek.com/v1/tools/search \
-H "Authorization: Bearer <DeepSeek API Key>" \
-H "Content-Type: application/json" \
-d '{
"query": "DeepSeek V4 release",
"count": 5,
"need_content": true
}'
Voorbeeld via Python:
import requests
response = requests.post(
"https://api.deepseek.com/v1/tools/search",
headers={
"Authorization": "Bearer <DeepSeek API Key>",
},
json={
"query": "DeepSeek V4 release",
"count": 5,
"need_content": True,
},
)
response.raise_for_status()
for result in response.json()["results"]:
print(result["title"], result["url"])
print(result["summary"])
Request-velden:
| Veld | Type | Verplicht | Standaard | Beschrijving |
query | string | Ja | - | De zoekopdracht. Moet tussen de 1 en 128 Unicode-tekens bevatten, mag niet uitsluitend uit spaties bestaan en ondersteunt de hieronder genoemde query-operatoren. |
count | integer | Nee | 10 | Het aantal resultaten dat moet worden geretourneerd, tussen 1 en 50. |
ori_question | string | Nee | - | De oorspronkelijke vraag van de gebruiker die de zoekopdracht heeft getriggerd (1-128 tekens), om het begrip van de query te verbeteren. null wordt behandeld als niet verstrekt. |
localization | string | Nee | "" | Een optioneel IP-adres om de zoekresultaten te lokaliseren. |
need_content | boolean | Nee | false | Bepaalt of de pagina-inhoud in content wordt geretourneerd. Dit is altijd een lege string als deze waarde false is. |
Onbekende velden in het request-body worden genegeerd.
Query-operatoren
De query wordt doorgestuurd met de zoeksyntax intact. De onderstaande voorbeelden combineren operatoren met een zoekterm; u kunt meerdere operatoren in één query combineren.
| Operator | Voorbeeld | Beschrijving |
site: | DeepSeek site:github.com | Beperk resultaten tot de opgegeven site. Voor meerdere sites: scheid site: clausules met spaties en verbind ze met OR (bijv. DeepSeek site:github.com OR site:huggingface.co). |
-site: | DeepSeek -site:example.com | Sluit de opgegeven site uit. Scheid meerdere sites met spaties. |
- | DeepSeek -advertisement | Sluit pagina's uit die de term bevatten. Scheid meerdere termen met spaties. |
-"..." | DeepSeek -"release notes" | Sluit pagina's uit die de exacte frase bevatten. Scheid meerdere frases met spaties. |
"..." | DeepSeek "exact phrase" | Match een exacte frase. Scheid meerdere frases met spaties. |
lang: | DeepSeek lang:zh,en | Beperk resultaten tot de opgegeven taalcodes, gescheiden door komma's (bijv. lang:zh,en). |
after: | DeepSeek after:2025 of DeepSeek after:2025-01-01 | Beperk resultaten tot pagina's gepubliceerd ná een bepaalde datum. |
before: | DeepSeek before:2026 of DeepSeek before:2026-06-01 | Beperk resultaten tot pagina's gepubliceerd vóór een bepaalde datum. |
Voorbeeld:
{
"query": "DeepSeek site:github.com OR site:huggingface.co lang:en after:2025",
"count": 10
}
Response
Een succesvolle aanvraag retourneert HTTP 200 met een results array. Een normale zoekopdracht zonder matches retourneert een lege array.
Voorbeeld response:
{
"results": [
{
"rerank_score": 2.4,
"title": "DeepSeek V4 model released",
"url": "https://example.com/deepseek-v4",
"snippet": "DeepSeek V4 is now available, with tool calling and long-context support.",
"summary": "DeepSeek has released the V4 model. The release adds improved tool calling and long-context support for agent workflows.",
"content": "DeepSeek V4 is now generally available...",
"site_name": "Example News",
"site_icon": "https://example.com/favicon.ico",
"date": "2026-06-01T00:00:00+00:00",
"authority": 3
}
]
}
Velden in de results array:
| Veld | Type | Beschrijving |
rerank_score | number | Een relevantiescore van 0 tot 3 die signalen zoals relevantie, autoriteit en actualiteit combineert. Scores van 1,5 of hoger worden beschouwd als kwalitatief hoogwaardige resultaten. |
title | string | De titel van het resultaat. |
url | string | De URL van het resultaat. |
snippet | string | Een korte samenvatting gerelateerd aan de query (doorgaans 100 tot 200 tekens), bedoeld voor weergave in een UI. |
summary | string | Een uitgebreide samenvatting gerelateerd aan de query (doorgaans 600 tot 800 tekens), bedoeld om door een model gelezen te worden. |
content | string | De pagina-inhoud. Deze is leeg als need_content op false staat of wanneer de inhoud niet beschikbaar is. |
site_name | string of null | De naam van de site, of null indien niet beschikbaar. |
site_icon | string of null | De URL van het site-icoon, of null indien niet beschikbaar. |
date | string of null | De publicatietijd in UTC, geformatteerd als RFC 3339, of null indien onbekend. |
authority | integer | De autoriteitsklasse van de pagina, 0 tot 4 (-1 betekent onbekend). Waarden van 3 of hoger duiden op zeer gezaghebbende bronnen. |
Fetch API
Request
Voorbeeld via curl:
curl https://api.deepseek.com/v1/tools/fetch \
-H "Authorization: Bearer <DeepSeek API Key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article"
}'
Voorbeeld via Python:
import requests
response = requests.post(
"https://api.deepseek.com/v1/tools/fetch",
headers={
"Authorization": "Bearer <DeepSeek API Key>",
},
json={"url": "https://example.com/article"},
)
response.raise_for_status()
page = response.json()
print(page["title"])
print(page["content"])
Request-velden:
| Veld | Type | Verplicht | Beschrijving |
url | string | Ja | De URL van de pagina die opgehaald moet worden. Maximaal 8192 tekens, moet een HTTP- of HTTPS-URL met een host zijn en mag geen gebruikersnaam of wachtwoord bevatten. |
Response
Voorbeeld response:
{
"title": "Example article",
"content": "# Example article\n\nArticle content."
}
Response-velden:
| Veld | Type | Beschrijving |
title | string | De titel van de pagina, leeg indien niet beschikbaar. |
content | string | De opgehaalde pagina-inhoud als Markdown-tekst. |
Het ophalen van content is onderhevig aan de beschikbaarheid en toegangsregels van de doelsite.
Fouten
Fouten volgen het OpenAI-compatibele foutformaat. Het veld param is altijd null.
Voorbeeld:
{
"error": {
"message": "'count' must be between 1 and 50",
"type": "invalid_request_error",
"param": null,
"code": "invalid_request_error"
}
}
HTTP-statuscodes:
| Status | Beschrijving |
| 400 | De request-headers of het body zijn ongeldig, inclusief malformed JSON of een ongeldige veldwaarde. |
| 401 | De API-sleutel ontbreekt of is ongeldig. |
| 402 | Het account heeft onvoldoende saldo. |
| 403 | Het Fetch-verzoek is afgewezen door het beveiligingsbeleid. |
| 404 | Fetch kon geen bruikbare pagina-inhoud ophalen, bijvoorbeeld door een niet-beschikbare URL, een door sitebeleid geblokkeerde URL, een fout van de doelsite, een niet-ondersteund inhoudstype, of een pagina zonder extraheerbare Markdown-content. |
| 408 | Het lezen van het request-body is getimed uit. |
| 413 | Het request-body is te groot. |
| 429 | De Search- of Fetch-QPS-limiet is overschreden. |
| 500 | Er is een interne serverfout opgetreden. |
| 504 | Een downstream-verzoek is getimed uit. |
Search en Fetch zijn alleen-lezen. Bij HTTP 408, 429 of 5xx-fouten: wacht en probeer het opnieuw. Bij HTTP 402: vul uw account aan voordat u het opnieuw probeert. Probeer andere 4xx-fouten niet opnieuw zonder het verzoek te wijzigen.
Facturering
Search en Fetch worden gefactureerd per succesvol verzoek, niet per token of per aantal geretourneerde resultaten:
| API | Eenheidsprijs |
| Search | $0,75 per 1.000 succesvolle verzoeken |
| Fetch | $0,75 per 1.000 succesvolle verzoeken |
Een verzoek is alleen belastbaar wanneer het HTTP 200 retourneert en een resultaat produceert (Search moet een niet-lege results array retourneren, en Fetch moet pagina-inhoud retourneren). Mislukte verzoeken, lege zoekresultaten en timeouts worden niet in rekening gebracht. De count beïnvloedt alleen hoeveel resultaten er worden geretourneerd en heeft geen invloed op de prijs per verzoek.
Let op: Wanneer u de DeepSeek API gebruikt via DeepSeek Harness, Claude Code of Codex, maken server-side tool calls al gebruik van de Search en Fetch API's. Deze aanvragen zijn momenteel gratis; facturering per verzoek gaat in op 1 november 2026 om 00:00 uur Beijing-tijd.
Rate Limits
Voor elk account zijn Search en Fetch onafhankelijk gelimiteerd; verkeer naar de één verbruikt niet het quotum van de ander:
| API | QPS Limiet |
| Search | 5 |
| Fetch | 5 |
De QPS-limieten (requests per second) worden berekend op accountniveau, ongeacht welke API-sleutel wordt gebruikt, en staan apart van de limieten voor model-concurrency. Verzoeken boven de account-QPS-limiet ontvangen HTTP 429. Naast de accountlimiet is Fetch ook onderhevig aan een QPS-limiet per domein; verzoeken boven die limiet ontvangen eveneens HTTP 429.
Search & Fetch API
- Search API: Zoekt webpagina's op basis van een query en retourneert gestructureerde resultaten. Deze wordt aangedreven door de eigen zoekmachine van DeepSeek.
- Fetch API: Haalt een enkele webpagina op en retourneert de inhoud als Markdown.
Beide zijn raw JSON API's en maken gebruik van dezelfde bearer-authenticatie als de DeepSeek API.
Basis URL: https://api.deepseek.com
| API | Endpoint |
| Search | POST https://api.deepseek.com/v1/tools/search |
| Fetch | POST https://api.deepseek.com/v1/tools/fetch |
Raadpleeg de Search API Reference en Fetch API Reference voor de volledige request- en response-schema's.
Authenticatie
Verstuur uw API-sleutel en het JSON-inhoudstype in de request-headers:
| Header | Verplicht | Waarde |
| Authorization | Ja | Bearer <DeepSeek API Key> |
| Content-Type | Ja | application/json |
Search API
Request
Voorbeeld via curl:
curl https://api.deepseek.com/v1/tools/search \
-H "Authorization: Bearer <DeepSeek API Key>" \
-H "Content-Type: application/json" \
-d '{
"query": "DeepSeek V4 release",
"count": 5,
"need_content": true
}'
Voorbeeld via Python:
import requests
response = requests.post(
"https://api.deepseek.com/v1/tools/search",
headers={
"Authorization": "Bearer <DeepSeek API Key>",
},
json={
"query": "DeepSeek V4 release",
"count": 5,
"need_content": True,
},
)
response.raise_for_status()
for result in response.json()["results"]:
print(result["title"], result["url"])
print(result["summary"])
Request-velden:
| Veld | Type | Verplicht | Standaard | Beschrijving |
query | string | Ja | - | De zoekopdracht. Moet tussen de 1 en 128 Unicode-tekens bevatten, mag niet uitsluitend uit spaties bestaan en ondersteunt de hieronder genoemde query-operatoren. |
count | integer | Nee | 10 | Het aantal resultaten dat moet worden geretourneerd, tussen 1 en 50. |
ori_question | string | Nee | - | De oorspronkelijke vraag van de gebruiker die de zoekopdracht heeft getriggerd (1-128 tekens), om het begrip van de query te verbeteren. null wordt behandeld als niet verstrekt. |
localization | string | Nee | "" | Een optioneel IP-adres om de zoekresultaten te lokaliseren. |
need_content | boolean | Nee | false | Bepaalt of de pagina-inhoud in content wordt geretourneerd. Dit is altijd een lege string als deze waarde false is. |
Onbekende velden in het request-body worden genegeerd.
Query-operatoren
De query wordt doorgestuurd met de zoeksyntax intact. De onderstaande voorbeelden combineren operatoren met een zoekterm; u kunt meerdere operatoren in één query combineren.
| Operator | Voorbeeld | Beschrijving |
site: | DeepSeek site:github.com | Beperk resultaten tot de opgegeven site. Voor meerdere sites: scheid site: clausules met spaties en verbind ze met OR (bijv. DeepSeek site:github.com OR site:huggingface.co). |
-site: | DeepSeek -site:example.com | Sluit de opgegeven site uit. Scheid meerdere sites met spaties. |
- | DeepSeek -advertisement | Sluit pagina's uit die de term bevatten. Scheid meerdere termen met spaties. |
-"..." | DeepSeek -"release notes" | Sluit pagina's uit die de exacte frase bevatten. Scheid meerdere frases met spaties. |
"..." | DeepSeek "exact phrase" | Match een exacte frase. Scheid meerdere frases met spaties. |
lang: | DeepSeek lang:zh,en | Beperk resultaten tot de opgegeven taalcodes, gescheiden door komma's (bijv. lang:zh,en). |
after: | DeepSeek after:2025 of DeepSeek after:2025-01-01 | Beperk resultaten tot pagina's gepubliceerd ná een bepaalde datum. |
before: | DeepSeek before:2026 of DeepSeek before:2026-06-01 | Beperk resultaten tot pagina's gepubliceerd vóór een bepaalde datum. |
Voorbeeld:
{
"query": "DeepSeek site:github.com OR site:huggingface.co lang:en after:2025",
"count": 10
}
Response
Een succesvolle aanvraag retourneert HTTP 200 met een results array. Een normale zoekopdracht zonder matches retourneert een lege array.
Voorbeeld response:
{
"results": [
{
"rerank_score": 2.4,
"title": "DeepSeek V4 model released",
"url": "https://example.com/deepseek-v4",
"snippet": "DeepSeek V4 is now available, with tool calling and long-context support.",
"summary": "DeepSeek has released the V4 model. The release adds improved tool calling and long-context support for agent workflows.",
"content": "DeepSeek V4 is now generally available...",
"site_name": "Example News",
"site_icon": "https://example.com/favicon.ico",
"date": "2026-06-01T00:00:00+00:00",
"authority": 3
}
]
}
Velden in de results array:
| Veld | Type | Beschrijving |
rerank_score | number | Een relevantiescore van 0 tot 3 die signalen zoals relevantie, autoriteit en actualiteit combineert. Scores van 1,5 of hoger worden beschouwd als kwalitatief hoogwaardige resultaten. |
title | string | De titel van het resultaat. |
url | string | De URL van het resultaat. |
snippet | string | Een korte samenvatting gerelateerd aan de query (doorgaans 100 tot 200 tekens), bedoeld voor weergave in een UI. |
summary | string | Een uitgebreide samenvatting gerelateerd aan de query (doorgaans 600 tot 800 tekens), bedoeld om door een model gelezen te worden. |
content | string | De pagina-inhoud. Deze is leeg als need_content op false staat of wanneer de inhoud niet beschikbaar is. |
site_name | string of null | De naam van de site, of null indien niet beschikbaar. |
site_icon | string of null | De URL van het site-icoon, of null indien niet beschikbaar. |
date | string of null | De publicatietijd in UTC, geformatteerd als RFC 3339, of null indien onbekend. |
authority | integer | De autoriteitsklasse van de pagina, 0 tot 4 (-1 betekent onbekend). Waarden van 3 of hoger duiden op zeer gezaghebbende bronnen. |
Fetch API
Request
Voorbeeld via curl:
curl https://api.deepseek.com/v1/tools/fetch \
-H "Authorization: Bearer <DeepSeek API Key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article"
}'
Voorbeeld via Python:
import requests
response = requests.post(
"https://api.deepseek.com/v1/tools/fetch",
headers={
"Authorization": "Bearer <DeepSeek API Key>",
},
json={"url": "https://example.com/article"},
)
response.raise_for_status()
page = response.json()
print(page["title"])
print(page["content"])
Request-velden:
| Veld | Type | Verplicht | Beschrijving |
url | string | Ja | De URL van de pagina die opgehaald moet worden. Maximaal 8192 tekens, moet een HTTP- of HTTPS-URL met een host zijn en mag geen gebruikersnaam of wachtwoord bevatten. |
Response
Voorbeeld response:
{
"title": "Example article",
"content": "# Example article\n\nArticle content."
}
Response-velden:
| Veld | Type | Beschrijving |
title | string | De titel van de pagina, leeg indien niet beschikbaar. |
content | string | De opgehaalde pagina-inhoud als Markdown-tekst. |
Het ophalen van content is onderhevig aan de beschikbaarheid en toegangsregels van de doelsite.
Fouten
Fouten volgen het OpenAI-compatibele foutformaat. Het veld param is altijd null.
Voorbeeld:
{
"error": {
"message": "'count' must be between 1 and 50",
"type": "invalid_request_error",
"param": null,
"code": "invalid_request_error"
}
}
HTTP-statuscodes:
| Status | Beschrijving |
| 400 | De request-headers of het body zijn ongeldig, inclusief malformed JSON of een ongeldige veldwaarde. |
| 401 | De API-sleutel ontbreekt of is ongeldig. |
| 402 | Het account heeft onvoldoende saldo. |
| 403 | Het Fetch-verzoek is afgewezen door het beveiligingsbeleid. |
| 404 | Fetch kon geen bruikbare pagina-inhoud ophalen, bijvoorbeeld door een niet-beschikbare URL, een door sitebeleid geblokkeerde URL, een fout van de doelsite, een niet-ondersteund inhoudstype, of een pagina zonder extraheerbare Markdown-content. |
| 408 | Het lezen van het request-body is getimed uit. |
| 413 | Het request-body is te groot. |
| 429 | De Search- of Fetch-QPS-limiet is overschreden. |
| 500 | Er is een interne serverfout opgetreden. |
| 504 | Een downstream-verzoek is getimed uit. |
Search en Fetch zijn alleen-lezen. Bij HTTP 408, 429 of 5xx-fouten: wacht en probeer het opnieuw. Bij HTTP 402: vul uw account aan voordat u het opnieuw probeert. Probeer andere 4xx-fouten niet opnieuw zonder het verzoek te wijzigen.
Facturering
Search en Fetch worden gefactureerd per succesvol verzoek, niet per token of per aantal geretourneerde resultaten:
| API | Eenheidsprijs |
| Search | $0,75 per 1.000 succesvolle verzoeken |
| Fetch | $0,75 per 1.000 succesvolle verzoeken |
Een verzoek is alleen belastbaar wanneer het HTTP 200 retourneert en een resultaat produceert (Search moet een niet-lege results array retourneren, en Fetch moet pagina-inhoud retourneren). Mislukte verzoeken, lege zoekresultaten en timeouts worden niet in rekening gebracht. De count beïnvloedt alleen hoeveel resultaten er worden geretourneerd en heeft geen invloed op de prijs per verzoek.
Let op: Wanneer u de DeepSeek API gebruikt via DeepSeek Harness, Claude Code of Codex, maken server-side tool calls al gebruik van de Search en Fetch API's. Deze aanvragen zijn momenteel gratis; facturering per verzoek gaat in op 1 november 2026 om 00:00 uur Beijing-tijd.
Rate Limits
Voor elk account zijn Search en Fetch onafhankelijk gelimiteerd; verkeer naar de één verbruikt niet het quotum van de ander:
| API | QPS Limiet |
| Search | 5 |
| Fetch | 5 |
De QPS-limieten (requests per second) worden berekend op accountniveau, ongeacht welke API-sleutel wordt gebruikt, en staan apart van de limieten voor model-concurrency. Verzoeken boven de account-QPS-limiet ontvangen HTTP 429. Naast de accountlimiet is Fetch ook onderhevig aan een QPS-limiet per domein; verzoeken boven die limiet ontvangen eveneens HTTP 429.