Aller au contenu principal

Documentation API Zante

Dernière mise à jour : 8 mai 2026

L'API REST de Zante donne accès aux données agrégées de plus de 13 sources publiques françaises (RPPS, FINESS, SIRENE, Ameli, DREES, etc.) couvrant praticiens et établissements de santé sur l'ensemble du territoire. L'API GraphQL est disponible à partir du plan Pro.

Authentification

Chaque requête doit inclure votre clé API dans l'en-tête HTTP Authorization. Les clés sont de la forme zk_xxxxxxxxet sont générées lors de l'inscription ou depuis votre espace compte.

Authorization: Bearer zk_votre_cle_api

Exemple de requête authentifiée :

curl -sS "https://api.zante.fr/api/v1/search?q=medecin+generaliste&city=Lyon" \
  -H "Authorization: Bearer zk_votre_cle_api"

Pour générer ou révoquer une clé : Mon espace / Clés API. La clé brute n'est affichée qu'une seule fois à la création ; conservez-la en sécurité.

Les réponses d'erreur d'authentification retournent HTTP 401 avec le corps {"statusCode":401,"error":"UNAUTHORIZED","message":"..."}.

Endpoints principaux

GET
/api/v1/search

Recherche plein texte tolérante aux fautes sur praticiens et établissements. Paramètres : q (obligatoire), type, specialty, department, city, postalCode, conventionnement.

curl -sS "https://api.zante.fr/api/v1/search?q=cardiologue&city=Paris&limit=5" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/practitioners/{rpps}

Fiche complète d'un praticien identifié par son numéro RPPS (11 chiffres). Inclut l'historique des sources et la provenance par champ.

curl -sS "https://api.zante.fr/api/v1/practitioners/10000000001" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/practitioners

Liste paginée de praticiens avec filtres (specialty, city, department, postalCode, name, conventionnement). Pagination par curseur opaque.

curl -sS "https://api.zante.fr/api/v1/practitioners?specialty=Cardiologue&department=75&limit=20" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/establishments/{finess}

Fiche complète d'un établissement identifié par son numéro FINESS (9 chiffres). Inclut la hiérarchie EJ/EG et la provenance par champ.

curl -sS "https://api.zante.fr/api/v1/establishments/750100126" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/establishments

Liste paginée d'établissements avec filtres (entityType EJ/EG, categoryCode, city, department, postalCode, name). Pagination par curseur.

curl -sS "https://api.zante.fr/api/v1/establishments?entityType=EG&department=75&limit=20" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/specialties

Toutes les spécialités médicales avec le nombre de praticiens et d'établissements associés. Réponse mise en cache côté serveur (ETag).

curl -sS "https://api.zante.fr/api/v1/specialties" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/locations

Recherche géographique : villes, départements, régions avec les effectifs praticiens/établissements. Paramètre obligatoire : q.

curl -sS "https://api.zante.fr/api/v1/locations?q=Lyon" \
  -H "Authorization: Bearer zk_votre_cle_api"
GET
/api/v1/platform-stats
public

Statistiques publiques de la plateforme : nombre de praticiens indexables, établissements, sources, date de dernière synchronisation.

curl -sS "https://api.zante.fr/api/v1/platform-stats"
GET
/health
public

Sonde de disponibilité de l'API. Retourne 200 quand le service est opérationnel.

curl -sS -o /dev/null -w '%{http_code}\n' "https://api.zante.fr/health"

Headers de réponse

Chaque réponse API inclut les headers suivants pour suivre votre consommation :

X-RateLimit-Limit: 60        # quota de votre fenêtre glissante
X-RateLimit-Remaining: 57   # requêtes restantes dans la fenêtre
X-RateLimit-Reset: 23       # secondes avant réinitialisation
X-Request-Id: req_abc123    # identifiant unique de la requête

En cas de dépassement, l'API retourne HTTP 429 avec un header Retry-After indiquant en secondes le délai à attendre.

Tarifs et limites

FormulePrixQuota journalierDébitExport CSVSupport

Gratuit

Gratuit100 req/jour20 req/min50 lignesCommunauté

Pro

49 €/mois10 000 req/jour60 req/min5 000 lignesEmail 48 h

Business

149 €/mois100 000 req/jour200 req/min100 000 lignesEmail 24 h

Enterprise

Sur mesureIllimitéSelon SLAIllimitéDédié 24/7

Le débit est mesuré sur une fenêtre glissante de 60 secondes. Les quotas journaliers sont remis à zéro à minuit UTC. Comparer les formules en détail.

API GraphQL

L'API GraphQL est exposée sur /graphql(POST uniquement, plans Pro et supérieurs). Elle couvre les mêmes entités que l'API REST avec la flexibilité de sélectionner uniquement les champs dont vous avez besoin.

Exemple de requête GraphQL :

curl -sS -X POST "https://api.zante.fr/graphql" \
  -H "Authorization: Bearer zk_votre_cle_api" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ practitioners(specialty: \"Cardiologue\", city: \"Paris\") { rpps firstName lastName } }"}'

L'explorateur interactif GraphiQL est disponible en environnement de développement sur /graphiql.

Schémas de réponse

Exemples de corps de réponse JSON pour les endpoints principaux. Tous les champs inconnus ou non disponibles dans les sources sont retournés à null.

GET /api/v1/search

{
  "data": [
    {
      "entityType": "PRACTITIONER",
      "id": "practitioner_10000000001",
      "rppsNumber": "10000000001",
      "displayName": "Dr Marie Dupont",
      "specialty": "Cardiologie",
      "city": "Paris",
      "postalCode": "75008",
      "conventionnementSector": "SECTOR_1",
      "confidenceScore": 0.97
    }
  ],
  "meta": {
    "total": 142,
    "cursor": "eyJpZCI6MTAwfQ==",
    "hasNextPage": true
  }
}

GET /api/v1/practitioners/{rpps}

{
  "rppsNumber": "10000000001",
  "firstName": "Marie",
  "lastName": "Dupont",
  "specialty": "Cardiologie",
  "phone": "+33 1 23 45 67 89",
  "email": null,
  "address": {
    "street": "10 rue du Faubourg Saint-Honoré",
    "city": "Paris",
    "postalCode": "75008",
    "department": "75",
    "region": "Île-de-France"
  },
  "conventionnementSector": "SECTOR_1",
  "languages": ["fr", "en"],
  "sources": [
    { "name": "RPPS", "updatedAt": "2026-04-15T00:00:00Z" },
    { "name": "Ameli", "updatedAt": "2026-03-20T00:00:00Z" }
  ],
  "qualityScore": 0.94
}

GET /api/v1/establishments/{finess}

{
  "finessNumber": "750100126",
  "name": "Hôpital Lariboisière",
  "entityType": "EG",
  "categoryCode": "355",
  "categoryLabel": "Centre hospitalier (CH)",
  "address": {
    "street": "2 rue Ambroise Paré",
    "city": "Paris",
    "postalCode": "75010",
    "department": "75",
    "region": "Île-de-France"
  },
  "phone": "+33 1 49 95 65 65",
  "ejFiness": "750100019",
  "sources": [
    { "name": "FINESS", "updatedAt": "2026-04-10T00:00:00Z" }
  ]
}

GET /api/v1/platform-stats

{
  "practitioners": 1043200,
  "establishments": 87400,
  "sources": 13,
  "lastSyncAt": "2026-05-01T03:00:00Z",
  "coverage": {
    "withPhone": 0.61,
    "withEmail": 0.18,
    "withCoordinates": 0.93
  }
}

Codes d'erreur

L'API utilise les codes HTTP standard. Chaque réponse d'erreur inclut un corps JSON avec les champs statusCode, error et message.

Code HTTPErreurDescriptionCorps de réponse
401UNAUTHORIZEDClé API absente, invalide ou révoquée.{"statusCode":401,"error":"UNAUTHORIZED","message":"Invalid API key"}
404NOT_FOUNDRessource introuvable (RPPS ou FINESS inconnu).{"statusCode":404,"error":"NOT_FOUND","message":"Practitioner not found"}
422UNPROCESSABLE_ENTITYParamètre manquant ou format invalide (ex. RPPS non numérique).{"statusCode":422,"error":"UNPROCESSABLE_ENTITY","message":"q is required"}
429TOO_MANY_REQUESTSQuota de débit atteint. Consulter le header Retry-After.{"statusCode":429,"error":"TOO_MANY_REQUESTS","message":"Rate limit exceeded"}

Documentation interactive (Swagger UI)

La documentation interactive complète est disponible via Swagger UI sur /swagger en environnement de développement. Elle liste l'ensemble des endpoints avec leurs paramètres, schémas de réponse et la possibilité de tester directement les requêtes.

En production, l'accès à Swagger UI est restreint aux administrateurs (Story 8.4). Les endpoints documentés ci-dessus sont accessibles à tous les abonnés disposant d'une clé API valide.

Contact et intégrations sur mesure

Pour les intégrations Enterprise, les volumes importants ou toute question technique, contactez l'équipe : contact@zante.fr.

Pour comprendre comment Zante croise les sources publiques et attribue un score qualité à chaque fiche, consultez la page méthodologie.