Changelog
Änderungen an der öffentlichen API, die neuesten zuerst. Die API ist im Pfad versioniert; inkompatible Änderungen kämen als /api/v2 – Antworten von v1 können neue Felder und Codes erhalten, verlieren oder ändern aber keine bestehenden.
Mit API-Schlüsseln
Noch nicht veröffentlichtZusammengeführt, nicht veröffentlicht: Diese Änderungen erscheinen, wenn API-Schlüssel zusammen mit den Konten auf ecdsa.com starten. Aufrufe ohne Schlüssel bleiben genau so, wie sie sind.
- Geändert
Ein korrekt formatierter Schlüssel, der unbekannt, widerrufen oder abgelaufen ist, wird mit 401
unauthorizedund einer Challenge im HeaderWWW-Authenticateabgewiesen, statt anonym beantwortet zu werden.Codes:unauthorized
Header:
WWW-Authenticate - Hinzugefügt
403
forbidden_scope: Der Schlüssel ist gültig, aber ihm fehlt ein Scope, den die Operation braucht; die Meldung nennt ihn. Der Aufruf wird abgewiesen, bevor etwas von Rate Limit oder Kontingent verbraucht wird.Codes:forbidden_scope
- Hinzugefügt
429
quota_exceeded: Ein Tages- oder Monatskontingent des Kontos, zu dem der Schlüssel gehört, ist aufgebraucht.Retry-Afterreicht bis zum Neubeginn des Kontingents; die SDKs wiederholen solche Aufrufe nie.Codes:quota_exceeded
- Hinzugefügt
Jede Antwort auf einen Aufruf mit Schlüssel enthält das Kontingent, das zuerst zur Neige geht; auch Browser dürfen diese Header lesen.
Header:
X-Quota-LimitX-Quota-RemainingX-Quota-Reset - Geändert
Aufrufe mit Schlüssel werden pro Schlüssel statt pro IP begrenzt: 120 pro Minute im Free-Tarif, 600 im Pro-Tarif. Testschlüssel bekommen immer den Free-Tarif.
Codes:rate_limited
- Geändert
Das Feld
authim API-Index sagt, dass Schlüssel optional sind, was ein Schlüssel ändert und welche Operationen einen brauchen – statt „no API keys“.Operationen:GET /v1
- Hinzugefügt
Webhooks:
/api/v1/webhookslistet (GET) und erstellt (POST) die Endpunkte des Kontos, zu dem der Schlüssel gehört,/api/v1/webhooks/deletelöscht einen und/api/v1/webhooks/testsendet ein Testereignis. Diese Operationen brauchen einen Schlüssel mit dem Scopewebhooksund sind nur über REST verfügbar – nicht als MCP-Tools und nicht in den SDKs.Operationen:GET /v1/webhooksPOST /v1/webhooksPOST /v1/webhooks/deletePOST /v1/webhooks/test
- Hinzugefügt
Zustellungen werden mit ECDSA P-256 signiert:
ECDSA-Signatureenthält den Zeitstempel, die Schlüssel-ID und die Signatur; die öffentlichen Schlüssel sind das JWKS unter/.well-known/ecdsa-webhook-keys.json– während einer Rotation überlappen sich zwei Schlüssel-IDs. Jedes SDK prüft eine Zustellung mitverifyWebhook(). - Hinzugefügt
Neue Codes für Webhooks:
webhook_url_refused(400),webhook_limit_reached(403),webhook_not_found(404) undwebhooks_unavailable(503).Codes:webhook_url_refusedwebhook_limit_reachedwebhook_not_foundwebhooks_unavailable
v1.1.0
Veröffentlicht am 22. Oktober 2026Der Kern der API wurde auf deklarative Operationen umgebaut, und Scans einer Domain teilen sich jetzt ein Budget pro geprüftem Host. Für bestehende Clients rein additiv: Jede v1.0-Anfrage bekommt denselben Status und denselben Body, dazu die neuen Felder. Die meisten dieser Änderungen sind seit dem 20. Oktober 2026 live; der Index meldet ab diesem Release die Version 1.1.0.
- Hinzugefügt
Echte Scans einer Domain zehren von Budgets, die alle Clients gemeinsam nutzen: ein Host höchstens 6-mal in 10 Minuten, alle Scans zusammen höchstens 300-mal pro Minute. Ein Scan über ein Budget hinaus wird mit 429
rate_limitedundRetry-Afterbeantwortet; Antworten aus dem einstündigen Cache verbrauchen nichts.Codes:rate_limited
Operationen:GET /v1/health/{domain}
- Hinzugefügt
Fehler-Bodys erhalten
requestId– gib den Wert an, wenn du ein Problem meldest – unddocs, einen Link zu den Fehlercodes.codeundmessagebleiben unverändert.Felder:
error.requestIderror.docs - Hinzugefügt
Jede Antwort enthält
X-Request-Id. Sende eine eigene Request-ID (1–128 Buchstaben, Ziffern, Punkte, Unterstriche, Doppelpunkte oder Bindestriche), um Anfragen zuzuordnen: Die API gibt sie unverändert zurück.Header:
X-Request-Id - Geändert
Unbekannte Pfade antworten mit 404
not_found, falsche Methoden mit 405method_not_allowedund einem HeaderAllow– als JSON-Fehlerobjekte mit CORS statt als HTML-Seiten.Codes:not_foundmethod_not_allowed
Header:
Allow - Behoben
JSON, das mehr als 64 Ebenen tief verschachtelt ist – JSON in String-Feldern eingeschlossen –, wird mit 400
invalid_jsonim JSON-Fehlerobjekt beantwortet. Früher endete das mit einer 500-Antwort, die kein JSON war.Codes:invalid_json
- Hinzugefügt
Antworten des Domain-Checks erhalten
certificate: Ablaufdatum, verbleibende Tage, Schlüsselalgorithmus und Kurve des Leaf-Zertifikats.Felder:
certificateOperationen:GET /v1/health/{domain}
- Hinzugefügt
Ein fehlerhaft formatierter Header
AuthorizationoderX-API-Keywird mit 401unauthorizedabgewiesen statt ignoriert – so erfährt ein Client, der sich authentifizieren wollte, von dem Tippfehler. Aufrufe mit korrekt formatierten Schlüsseln werden bis zum Start der API-Schlüssel weiterhin anonym beantwortet.Codes:unauthorized
- Hinzugefügt
Eine Operation, die nicht innerhalb ihres Zeitbudgets von 10 Sekunden fertig wird, antwortet mit 504
timeout.Codes:timeout
- Geändert
Browser dürfen
Authorization,X-API-Key,X-Request-IdundIdempotency-Keyin Cross-Origin-Anfragen senden undX-Request-Idlesen. - Geändert
Das OpenAPI-Dokument wird aus den Schemas der API selbst erzeugt: Jede Operation listet ihre Fehlercodes nach Status, ihre Beispiele und die Scopes auf, die ein API-Schlüssel braucht.
Operationen:GET /v1/openapi.json
v1.0.0
Veröffentlicht am 20. August 2026Die kostenlose Signatur-API startet öffentlich.
- Hinzugefügt
Erstes öffentliches Release: die Operationen unten und das OpenAPI-3.1-Dokument – kostenlos, anonym, CORS offen, 60 Anfragen pro Minute und IP.
Codes:invalid_jsonmissing_fieldinvalid_inputprivate_key_rejectedunsupported_algorithminvalid_domainscan_dns_errorscan_private_addresspayload_too_largerate_limitedinternal_errorscan_unreachablescan_tls_errorscan_timeout
Header:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-AfterOperationen:GET /v1POST /v1/verifyPOST /v1/convertPOST /v1/jwt/decodePOST /v1/jwt/verifyPOST /v1/cert/decodeGET /v1/health/{domain}GET /v1/openapi.json