Journal des modifications
Les modifications de l’API publique, de la plus récente à la plus ancienne. La version de l’API figure dans le chemin ; des changements incompatibles seraient publiés sous /api/v2 : les réponses v1 peuvent s’enrichir de champs et de codes, mais aucun champ ni code existant ne sera supprimé ni modifié.
Avec les clés d’API
Pas encore publiéeFusionnées, pas encore publiées : ces modifications seront livrées à l’arrivée des clés d’API, en même temps que les comptes ecdsa.com. Les appels sans clé restent exactement les mêmes.
- Modifié
Une clé bien formée mais inconnue, révoquée ou expirée est refusée avec 401
unauthorizedet un challengeWWW-Authenticate, au lieu que l’appel soit traité de façon anonyme.Codes :unauthorized
En-têtes :
WWW-Authenticate - Ajouté
403
forbidden_scope: la clé est valide, mais il lui manque un scope requis par l’opération ; le message le nomme. L’appel est refusé avant que la moindre limite de requêtes ou le moindre quota ne soit consommé.Codes :forbidden_scope
- Ajouté
429
quota_exceeded: un quota quotidien ou mensuel du compte de la clé est épuisé.Retry-Aftercourt jusqu’à la remise à zéro du quota ; les SDK ne retentent jamais cette erreur.Codes :quota_exceeded
- Ajouté
Chaque réponse à un appel avec une clé indique le quota qui s’épuisera le premier ; les navigateurs peuvent aussi lire ces en-têtes.
En-têtes :
X-Quota-LimitX-Quota-RemainingX-Quota-Reset - Modifié
Les appels avec une clé sont limités par clé et non plus par IP : 120 par minute avec l’offre gratuite, 600 avec l’offre Pro. Les clés de test relèvent toujours de l’offre gratuite.
Codes :rate_limited
- Modifié
Le champ
authde l’index de l’API indique que les clés sont facultatives, ce qu’une clé change et quelles opérations en exigent une, au lieu de « no API keys ».Opérations :GET /v1
- Ajouté
Webhooks :
/api/v1/webhooksliste (GET) et crée (POST) les points de terminaison du compte de la clé,/api/v1/webhooks/deleteen supprime un et/api/v1/webhooks/testenvoie un événement de test. Ces opérations exigent une clé dotée du scopewebhookset ne sont proposées qu’en REST, ni comme outils MCP ni dans les SDK.Opérations :GET /v1/webhooksPOST /v1/webhooksPOST /v1/webhooks/deletePOST /v1/webhooks/test
- Ajouté
Les envois sont signés avec ECDSA P-256 :
ECDSA-Signatureporte l’horodatage, l’identifiant de clé et la signature, et les clés publiques sont celles du JWKS publié à/.well-known/ecdsa-webhook-keys.json; deux identifiants de clé coexistent pendant une rotation. Chaque SDK vérifie un envoi avecverifyWebhook(). - Ajouté
Nouveaux codes pour les webhooks :
webhook_url_refused(400),webhook_limit_reached(403),webhook_not_found(404) etwebhooks_unavailable(503).Codes :webhook_url_refusedwebhook_limit_reachedwebhook_not_foundwebhooks_unavailable
v1.1.0
Publiée le 22 octobre 2026Le cœur de l’API a été reconstruit sur des opérations déclaratives, et les analyses d’un domaine partagent désormais un budget par hôte vérifié. Changement additif pour les clients existants : chaque requête v1.0 obtient le même statut et le même corps, plus les nouveaux champs. La plupart de ces modifications sont en ligne depuis le 20 octobre 2026 ; l’index indique 1.1.0 à partir de cette version.
- Ajouté
Les analyses réelles d’un domaine puisent dans des budgets partagés par tous les clients : un même hôte au plus 6 fois toutes les 10 minutes, l’ensemble des analyses au plus 300 par minute. Une analyse au-delà d’un budget reçoit la réponse 429
rate_limitedavecRetry-After; les réponses servies depuis le cache d’une heure ne consomment rien.Codes :rate_limited
Opérations :GET /v1/health/{domain}
- Ajouté
Les corps d’erreur gagnent
requestId(à mentionner quand vous signalez un problème) etdocs, un lien vers les codes d’erreur.codeetmessagene changent pas.Champs :
error.requestIderror.docs - Ajouté
Chaque réponse porte
X-Request-Id. Envoyez le vôtre (de 1 à 128 lettres, chiffres, points, tirets bas, deux-points ou traits d’union) pour corréler les requêtes : il vous est renvoyé tel quel.En-têtes :
X-Request-Id - Modifié
Les chemins inconnus renvoient 404
not_foundet les méthodes incorrectes 405method_not_allowedavec un en-têteAllow: des enveloppes JSON avec CORS au lieu de pages HTML.Codes :not_foundmethod_not_allowed
En-têtes :
Allow - Corrigé
Un JSON imbriqué sur plus de 64 niveaux (y compris le JSON contenu dans des champs de type chaîne) reçoit la réponse 400
invalid_jsondans l’enveloppe JSON. Auparavant, il provoquait une erreur 500 qui n’était pas du JSON.Codes :invalid_json
- Ajouté
Les réponses de santé des domaines gagnent
certificate: l’expiration du certificat feuille, le nombre de jours restants, l’algorithme et la courbe de la clé.Champs :
certificateOpérations :GET /v1/health/{domain}
- Ajouté
Un en-tête
AuthorizationouX-API-Keymal formé est refusé avec 401unauthorizedau lieu d’être ignoré, pour qu’un client qui voulait s’authentifier découvre la faute de frappe. Les appels avec une clé bien formée restent traités de façon anonyme jusqu’à l’arrivée des clés d’API.Codes :unauthorized
- Ajouté
Une opération qui ne se termine pas dans son délai imparti de 10 secondes renvoie 504
timeout.Codes :timeout
- Modifié
Les navigateurs peuvent envoyer
Authorization,X-API-Key,X-Request-IdetIdempotency-Keydepuis une autre origine, et lireX-Request-Id. - Modifié
Le document OpenAPI est généré à partir des schémas propres à l’API : chaque opération liste ses codes d’erreur par statut, ses exemples et les scopes dont une clé d’API a besoin.
Opérations :GET /v1/openapi.json
v1.0.0
Publiée le 20 août 2026L’API de signature gratuite devient publique.
- Ajouté
Première version publique : les opérations ci-dessous et le document OpenAPI 3.1, avec un accès gratuit et anonyme, CORS ouvert et 60 requêtes par minute et par IP.
Codes :invalid_jsonmissing_fieldinvalid_inputprivate_key_rejectedunsupported_algorithminvalid_domainscan_dns_errorscan_private_addresspayload_too_largerate_limitedinternal_errorscan_unreachablescan_tls_errorscan_timeout
En-têtes :
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-AfterOpérations :GET /v1POST /v1/verifyPOST /v1/convertPOST /v1/jwt/decodePOST /v1/jwt/verifyPOST /v1/cert/decodeGET /v1/health/{domain}GET /v1/openapi.json