VST

by Levant

API de emisión de certificados de firma electrónica en Ecuador, sobre la infraestructura de FirmaSegura.

Base https://firmas.vard.cloud

Qué resuelve

En Ecuador, facturar electrónicamente exige un certificado de firma (.p12) emitido por una entidad autorizada. Conseguirlo implica recoger documentos del titular, validar su identidad y seguir el trámite hasta que el certificado se emite. Esta API hace ese trabajo por ti.

Estado de la API

Esto es lo que hay hoy, sin adornos. Solo se documentan endpoints que responden de verdad.

Sonda de salud disponible
Acceso al back office disponible
Receptor de webhooks disponible
Alta y consulta de solicitudes implementado y probado, pendiente de exponer
Cobros, lotes y gestión de usuarios en construcción

Convenciones

Endpoints

GET/healthpública

Comprueba que el servicio vive y alcanza su base de datos. Es la sonda que usan Docker y el balanceador; no consume cuota del limitador.

curl https://firmas.vard.cloud/health

200 → {"estado":"ok"}
503 → {"estado":"degradado"}

No comprueba a FirmaSegura ni a la pasarela de pago a propósito: si el proveedor está caído, este servicio sigue sano y debe seguir aceptando tráfico.

POST/auth/accesopública

Primer paso del ingreso al back office. Devuelve un token de sesión y el paso siguiente: el segundo factor es obligatorio para todos los roles.

curl -X POST https://firmas.vard.cloud/auth/acceso \
  -H 'content-type: application/json' \
  -d '{"correo":"persona@ejemplo.ec","clave":"..."}'

200 → {
  "token": "eyJhbGciOi...",
  "expiraAt": "2026-08-31T18:46:30.000Z",
  "rol": "ADMINISTRADOR",
  "nombreCompleto": "...",
  "siguientePaso": "ENROLAR_MFA"
}
EstadoCódigoCuándo
400ENTRADA_INVALIDAEl cuerpo no cumple el formato
401CREDENCIALES_INVALIDASCorreo desconocido, cuenta inactiva o contraseña incorrecta
429DEMASIADAS_PETICIONESMás de 5 intentos por minuto

Los tres motivos del 401 devuelven la misma respuesta y tardan lo mismo, a propósito: distinguirlos permitiría averiguar qué correos tienen cuenta.

POST/webhooks/firmasegurasecreto compartido

Recibe los eventos del proveedor en formato CloudEvents 1.0 y actualiza el trámite. Está pensado para que lo llame FirmaSegura, no tu integración.

POST /webhooks/firmasegura
x-vast-secret: <secreto acordado>
content-type: application/json

{"specversion":"1.0","id":"evt-001",
 "type":"ec.firmasegura.signature.session.completed",
 "subject":"<id de sesión>","data":{}}

200 → {"received":true,"message":"Evento aplicado a la solicitud."}
401 → {"received":false}

Límites de peticiones

RutaLímitePor qué
/auth/acceso5 / minutoFrena el probado de contraseñas
/webhooks/firmasegura120 / minutoHolgado para el proveedor, acotado para el resto
Resto300 / minutoTecho general
/healthsin límiteLas sondas no deben recibir 429

Al superarlo llega un 429 con la cabecera Retry-After en segundos.

En construcción

Lo que sigue existe en el código y está probado, pero todavía no se expone. Se documentará aquí cuando responda, no antes:

Contacto

La API la opera LEVANTNET CONSULTING S.A.S. desde Quito, Ecuador. Para credenciales, integraciones o el secreto del webhook, escríbenos.