Saltar al contenido
ecdsa.com

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.

  1. Con claves de API

    Aún no publicada

    Fusionados, 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 unauthorized y un desafío WWW-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-After indica 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

    • Añadido

      503 service_unavailable: ahora mismo no se pueden verificar las claves. Una llamada con clave nunca se atiende de forma anónima: reintenta en breve.

      Códigos:service_unavailable

    • 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 auth del í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/webhooks enumera (GET) y crea (POST) los endpoints de la cuenta de la clave, /api/v1/webhooks/delete elimina uno y /api/v1/webhooks/test envía un evento de prueba. Necesitan una clave con el ámbito webhooks y 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-Signature lleva 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 con verifyWebhook().

    • Añadido

      Nuevos códigos para webhooks: webhook_url_refused (400), webhook_limit_reached (403), webhook_not_found (404) y webhooks_unavailable (503).

      Códigos:webhook_url_refusedwebhook_limit_reachedwebhook_not_foundwebhooks_unavailable

  2. v1.1.0

    Publicada el 22 de octubre de 2026

    El 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_limited y Retry-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— y docs, un enlace a los códigos de error. code y message no 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_found y los métodos incorrectos, 405 method_not_allowed con un encabezado Allow: 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_json en 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:certificate

      Operaciones:GET /v1/health/{domain}

    • Añadido

      Un encabezado Authorization o X-API-Key mal formado se rechaza con 401 unauthorized en 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-Id e Idempotency-Key entre orígenes y leer X-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

  3. v1.0.0

    Publicada el 20 de agosto de 2026

    La API de firmas gratuita se hace pública.