Présentation

DeepSeek met à disposition deux points d’accès REST, Search API et Fetch API, destinés aux agents conversationnels et aux applications Retrieval‑Augmented Generation (RAG). Les deux services sont exposés depuis l’URL de base https://api.deepseek.com et utilisent le même mécanisme d’authentification par jeton Bearer. La facturation s’applique uniquement aux appels qui renvoient un statut HTTP 200 avec du contenu exploitable, soit un tableau non vide pour Search ou le texte d’une page pour Fetch.

Fonctionnement des API Search et Fetch

Search accepte un corps JSON contenant au minimum le champ query. Le paramètre count limite le nombre de résultats (1‑50) et need_content indique si le texte complet doit être renvoyé. Les opérateurs de requête (ex. site:, lang:, after:) sont transmis tels quels au moteur interne, ce qui permet d’affiner la recherche sans transformation côté client. La réponse JSON comprend un tableau results où chaque entrée possède des attributs tels que rerank_score, title, url, snippet, summary, content, site_name, date et authority. Exemple de requête :

curl https://api.deepseek.com/v1/tools/search \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
  "query": "DeepSeek V4 release",
  "count": 5,
  "need_content": true
}'
import requests
response = requests.post(
    "https://api.deepseek.com/v1/tools/search",
    headers={"Authorization": "Bearer "},
    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"])

Fetch, quant à elle, ne nécessite qu’une URL. Le service renvoie le titre de la page et son contenu au format Markdown. Exemple :

curl https://api.deepseek.com/v1/tools/fetch \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/article"}'
import requests
response = requests.post(
    "https://api.deepseek.com/v1/tools/fetch",
    headers={"Authorization": "Bearer "},
    json={"url": "https://example.com/article"},
)
response.raise_for_status()
page = response.json()
print(page["title"])
print(page["content"])

Modèle de facturation et limites d’utilisation

Le tarif indiqué est de 0,75 $ pour 1 000 requêtes réussies, indépendamment du nombre de résultats retournés. Un appel est considéré comme réussi uniquement lorsqu’il renvoie HTTP 200 et produit du contenu (tableau non vide ou texte Markdown). Les requêtes échouées, les réponses vides et les time‑outs ne sont pas facturés. Le paramètre count influence uniquement la taille du tableau, pas le coût unitaire.

Les limites de débit sont séparées pour chaque service. Un quota de requêtes par seconde (QPS) est appliqué au niveau du compte ; tout dépassement génère HTTP 429. Fetch subit en plus une restriction QPS par domaine, afin d’éviter les surcharges sur les sites cibles. Les erreurs 408, 429 ou 5xx doivent être traitées par un mécanisme de back‑off avant nouvelle tentative, tandis que les erreurs 402 imposent le rechargement du crédit.

Implications pour les applications RAG

Pour les pipelines RAG, la distinction entre facturation à la requête et facturation à la donnée simplifie la prévision budgétaire : chaque appel de recherche ou de récupération de page représente un coût fixe. La disponibilité du champ content dans Search permet d’éviter un appel Fetch supplémentaire lorsque le texte complet est requis, réduisant ainsi le nombre d’appels facturables. En revanche, la dépendance à la disponibilité du site cible introduit une variabilité de latence et de succès, surtout sous le plafond QPS par domaine. Les développeurs doivent implémenter une logique de repli (fallback) pour gérer les cas où le site bloque l’accès ou renvoie un code 4xx non réessayable.