Authentification
Aucune
Les endpoints v1 sont ouverts. Pas de cle API a fournir. Identification de l'appelant par IP source.
Limite de debit
60 requetes / minute / IP
Au-dela, le serveur repond 429. Pour un volume superieur, contactez contact@nexthop.fr.
Endpoints
Six routes, lecture seule
Toutes les reponses JSON ont la forme { data, meta }. Les exports CSV/JSON utilisent un header Content-Disposition: attachment avec un nom de fichier date.
Liste de tous les fournisseurs, colonnes publiques, trie par nom.
Exemple curl
curl -s https://www.nexthop.fr/api/v1/providersReponse exemple
{
"data": [
{
"id": 17,
"name": "[A COMPLETER avec donnees reelles a la prochaine sync]",
"slug": "[A COMPLETER]",
"country_code": "[A COMPLETER]",
"country": "[A COMPLETER]",
"headquarters": "[A COMPLETER]",
"employees": null,
"founded_year": null,
"ownership_holding": null,
"website_url": "[A COMPLETER]",
"sovereignty_score": 87,
"sovereignty_status": "eu",
"last_updated": "2026-05-23T08:12:00.000Z",
"is_active": 1
}
],
"meta": {
"count": 30,
"generated_at": "2026-05-23T09:00:00.000Z"
}
}Detail d'un fournisseur, avec sous-objet criteria (6 criteres de scoring).
Exemple curl
curl -s https://www.nexthop.fr/api/v1/providers/ovhReponse exemple
{
"data": {
"id": 17,
"name": "[A COMPLETER]",
"slug": "ovh",
"country_code": "FR",
"country": "France",
"sovereignty_score": 87,
"sovereignty_status": "eu",
"criteria": {
"juridique": { "score": 20, "max": 20, "level": null, "label": null },
"immunite": { "score": 18, "max": 20, "level": null, "label": null },
"technologie": { "score": 12, "max": 15, "level": null, "label": null },
"donnees": { "score": 18, "max": 20, "level": null, "label": null },
"certifications": { "score": 12, "max": 15, "level": null, "label": null },
"ouverture": { "score": 7, "max": 10, "level": null, "label": null }
},
"last_updated": "2026-05-23T08:12:00.000Z"
},
"meta": { "generated_at": "2026-05-23T09:00:00.000Z" }
}Scores courants. Parametres : ?sort=score|name &order=asc|desc.
Exemple curl
curl -s 'https://www.nexthop.fr/api/v1/scores?sort=score&order=desc'Reponse exemple
{
"data": [
{
"provider_id": 17,
"provider_name": "[A COMPLETER]",
"sovereignty_score": 87,
"last_changed_at": "2026-05-20T14:32:11.000Z"
}
],
"meta": {
"count": 30,
"generated_at": "2026-05-23T09:00:00.000Z",
"sort": "score",
"order": "desc"
}
}Telechargement CSV (UTF-8, header en premiere ligne).
Exemple curl
curl -OJ https://www.nexthop.fr/api/v1/export/providers.csvReponse exemple
id,name,slug,country_code,country,headquarters,employees,founded_year,ownership_holding,website_url,sovereignty_score,sovereignty_status,last_updated,is_active
17,[A COMPLETER],ovh,FR,France,Roubaix,,1999,,https://www.ovhcloud.com,87,eu,2026-05-23T08:12:00.000Z,1Telechargement JSON (meme payload que /providers, header Content-Disposition).
Exemple curl
curl -OJ https://www.nexthop.fr/api/v1/export/providers.jsonReponse exemple
(meme schema que /providers)Telechargement CSV scores actuels.
Exemple curl
curl -OJ https://www.nexthop.fr/api/v1/export/scores.csvReponse exemple
provider_id,provider_name,sovereignty_score,last_changed_at
17,[A COMPLETER],87,2026-05-20T14:32:11.000ZCodes d'erreur
Format unifie
Une erreur reponds toujours avec le meme schema :
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Provider 'foo' not found"
}
}Webhooks
BETANotifications signees HMAC sur evenements
Recevez une requete HTTP POST sur votre endpoint des qu'un score evolue, qu'un fournisseur est ajoute ou qu'un snapshot est publie. Chaque livraison embarque une signature dans l'entete X-NextHop-Signature.
Cree une souscription. Body JSON : { url, event_type, contact_email }. La reponse contient un secret 32-bytes (uniquement a la creation).
Exemple curl
curl -X POST https://www.nexthop.fr/api/v1/webhooks \
-H 'Content-Type: application/json' \
-d '{
"url": "https://your-server.example.com/hook",
"event_type": "score.changed",
"contact_email": "you@example.com"
}'Liste les types d'evenements supportes avec un payload exemple pour chacun.
Exemple de payload (event score.changed)
{
"event": "score.changed",
"delivered_at": "2026-05-23T12:30:00.000Z",
"data": {
"provider_id": 17,
"provider_slug": "ovh",
"provider_name": "OVHcloud",
"previous_score": 84,
"new_score": 87,
"changed_at": "2026-05-23T12:29:11.000Z"
}
}Verification de signature
X-NextHop-Signature: sha256=<HMAC-SHA256 du body avec le secret>
# Node.js
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-nexthop-signature']))) {
return res.status(401).end();
}Beta : la livraison effective sera activee une fois le worker d'envoi en production. L'API de souscription est deja disponible pour preparer l'integration cote consommateur.