Registro de cambios
Cambios en la API pública, los más recientes primero. La versión de la API forma parte de la ruta; los cambios incompatibles se publicarían como /api/v2: las respuestas de la v1 pueden ganar campos y códigos, pero no los perderán ni los cambiarán.
Con claves de API
Aún no publicadaFusionados, pero no publicados: estos cambios saldrán cuando lleguen las claves de API, junto con las cuentas de ecdsa.com. Las llamadas sin clave siguen exactamente igual.
- Cambiado
Una clave bien formada, pero desconocida, revocada o caducada, se rechaza con 401
unauthorizedy un desafíoWWW-Authenticate, en lugar de atenderse de forma anónima.Códigos:unauthorized
Encabezados:
WWW-Authenticate - Añadido
403
forbidden_scope: la clave es válida, pero le falta un ámbito que la operación necesita; el mensaje lo indica. La llamada se rechaza antes de consumir ningún límite de frecuencia ni cuota.Códigos:forbidden_scope
- Añadido
429
quota_exceeded: una cuota diaria o mensual de la cuenta de la clave está agotada.Retry-Afterindica cuánto falta para que la cuota se renueve; los SDK nunca lo reintentan.Códigos:quota_exceeded
- Añadido
Cada respuesta a una llamada con clave incluye la cuota que se agota primero; los navegadores también pueden leer estos encabezados.
Encabezados:
X-Quota-LimitX-Quota-RemainingX-Quota-Reset - Cambiado
Las llamadas con clave se limitan por clave en lugar de por IP: 120 por minuto en el plan gratuito, 600 en el plan Pro. Las claves de prueba siempre usan el plan gratuito.
Códigos:rate_limited
- Cambiado
El campo
authdel índice de la API indica que las claves son opcionales, qué cambia con una clave y qué operaciones la necesitan, en lugar de «sin claves de API».Operaciones:GET /v1
- Añadido
Webhooks:
/api/v1/webhooksenumera (GET) y crea (POST) los endpoints de la cuenta de la clave,/api/v1/webhooks/deleteelimina uno y/api/v1/webhooks/testenvía un evento de prueba. Necesitan una clave con el ámbitowebhooksy solo se ofrecen por REST: ni como herramientas MCP ni en los SDK.Operaciones:GET /v1/webhooksPOST /v1/webhooksPOST /v1/webhooks/deletePOST /v1/webhooks/test
- Añadido
Las entregas se firman con ECDSA P-256:
ECDSA-Signaturelleva la marca de tiempo, el ID de clave y la firma, y las claves públicas son el JWKS de/.well-known/ecdsa-webhook-keys.json; durante una rotación se solapan dos ID de clave. Todos los SDK comprueban una entrega converifyWebhook(). - Añadido
Nuevos códigos para webhooks:
webhook_url_refused(400),webhook_limit_reached(403),webhook_not_found(404) ywebhooks_unavailable(503).Códigos:webhook_url_refusedwebhook_limit_reachedwebhook_not_foundwebhooks_unavailable
v1.1.0
Publicada el 22 de octubre de 2026El núcleo de la API se reconstruyó sobre operaciones declarativas, y los escaneos de un dominio ahora comparten un cupo por host comprobado. Es un cambio aditivo para los clientes existentes: cada solicitud de la v1.0 recibe el mismo estado y el mismo cuerpo, más los campos nuevos. La mayoría de estos cambios están en producción desde el 20 de octubre de 2026; el índice indica 1.1.0 a partir de esta versión.
- Añadido
Los escaneos reales de un dominio consumen cupos compartidos por todos los clientes: un mismo host como máximo 6 veces cada 10 minutos, y todos los escaneos juntos como máximo 300 por minuto. Un escaneo que supera un cupo recibe como respuesta 429
rate_limitedyRetry-After; las respuestas de la caché de una hora no consumen nada.Códigos:rate_limited
Operaciones:GET /v1/health/{domain}
- Añadido
Los cuerpos de error incorporan
requestId—cítalo cuando informes de un problema— ydocs, un enlace a los códigos de error.codeymessageno cambian.Campos:
error.requestIderror.docs - Añadido
Cada respuesta incluye
X-Request-Id. Envía el tuyo (de 1 a 128 letras, dígitos, puntos, guiones bajos, dos puntos o guiones) para correlacionar solicitudes: se devuelve tal cual.Encabezados:
X-Request-Id - Cambiado
Las rutas desconocidas responden 404
not_foundy los métodos incorrectos, 405method_not_allowedcon un encabezadoAllow: sobres JSON con CORS en lugar de páginas HTML.Códigos:not_foundmethod_not_allowed
Encabezados:
Allow - Corregido
Un JSON anidado más de 64 niveles —incluido el JSON dentro de campos de tipo cadena— recibe un 400
invalid_jsonen el sobre JSON. Antes fallaba con un 500 que no era JSON.Códigos:invalid_json
- Añadido
Las respuestas del diagnóstico de dominios incorporan
certificate: la caducidad del certificado hoja, los días restantes, el algoritmo de la clave y la curva.Campos:
certificateOperaciones:GET /v1/health/{domain}
- Añadido
Un encabezado
AuthorizationoX-API-Keymal formado se rechaza con 401unauthorizeden lugar de ignorarse, para que un cliente que pretendía autenticarse se entere de la errata. Las llamadas con claves bien formadas se siguen atendiendo de forma anónima hasta que lleguen las claves de API.Códigos:unauthorized
- Añadido
Una operación que no termina dentro de su límite de tiempo de 10 segundos responde 504
timeout.Códigos:timeout
- Cambiado
Los navegadores pueden enviar
Authorization,X-API-Key,X-Request-IdeIdempotency-Keyentre orígenes y leerX-Request-Id. - Cambiado
El documento OpenAPI se genera a partir de los propios esquemas de la API: cada operación enumera sus códigos de error por estado, sus ejemplos y los ámbitos que necesita una clave de API.
Operaciones:GET /v1/openapi.json
v1.0.0
Publicada el 20 de agosto de 2026La API de firmas gratuita se hace pública.
- Añadido
Primera versión pública: las operaciones que se indican abajo y el documento OpenAPI 3.1; API gratuita, anónima, con CORS abierto y 60 solicitudes por minuto por IP.
Códigos:invalid_jsonmissing_fieldinvalid_inputprivate_key_rejectedunsupported_algorithminvalid_domainscan_dns_errorscan_private_addresspayload_too_largerate_limitedinternal_errorscan_unreachablescan_tls_errorscan_timeout
Encabezados:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-AfterOperaciones:GET /v1POST /v1/verifyPOST /v1/convertPOST /v1/jwt/decodePOST /v1/jwt/verifyPOST /v1/cert/decodeGET /v1/health/{domain}GET /v1/openapi.json