En tres pasos vas a tener un e-CF de prueba aceptado por el simulador de Firmo. No necesitas certificado digital todavía.
1. Crea tu cuenta sandbox#
Llena el formulario de registro. Firmo crea tu cuenta, una empresa de prueba y una API key que empieza con sk_test_. La key se muestra una sola vez: guárdala en tu gestor de secretos o en una variable de entorno.
Si prefieres hacerlo por API, el registro también es una llamada:
curl -X POST https://api.firmo.do/v1/accounts \
-H "Content-Type: application/json" \
-d '{
"nombre": "Ana Rodríguez",
"correo": "ana@tuempresa.do",
"empresa": "Tu Empresa SRL",
"tipo": "empresa"
}'{
"cuentaId": "5a0e3c1b-2f4d-4a8e-9b7c-6d1e0f2a3b4c",
"empresaId": "9c2b1a0f-8e7d-4c6b-a5f4-3e2d1c0b9a87",
"apiKey": "sk_test_…",
"ambiente": "sandbox"
}2. Guarda tu API key#
export FIRMO_API_KEY="sk_test_…"3. Emite tu primer e-CF#
Una Factura de Crédito Fiscal Electrónica (tipo 31) con un ítem. Con ?wait=true la API espera hasta 20 segundos el resultado final y responde 200. Sin ese parámetro responde de inmediato con 202 y estado pendiente.
curl -X POST "https://api.firmo.do/v1/ecf?wait=true" \
-H "Authorization: Bearer $FIRMO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7b2f4c1e-9a0d-4f3b-8c55-1d2e3f4a5b6c" \
-d '{
"tipo": 31,
"comprador": { "rnc": "131000000", "razonSocial": "Ferretería El Puente SRL" },
"items": [
{ "descripcion": "Cemento gris 42.5 kg", "cantidad": 20, "precioUnitario": 500 }
]
}'La respuesta es el e-CF completo:
{
"id": "0f8c2a9e-6b1d-4c2a-9a51-3e7d1b2c4f60",
"encf": "E310000000001",
"tipo": 31,
"estado": "aceptado",
"ambiente": "sandbox",
"esRfce": false,
"trackId": "b1c7e4d2-5f3a-4e8b-9c0d-2a6f1e3b7d90",
"codigoSeguridad": "Xk3P9a",
"fechaEmision": "2026-10-06",
"fechaFirma": "2026-10-06T10:14:03-04:00",
"comprador": { "rnc": "131000000", "razonSocial": "Ferretería El Puente SRL" },
"montoGravadoTotal": 10000,
"montoExento": 0,
"totalItbis": 1800,
"montoTotal": 11800,
"mensajes": [],
"urls": {
"xml": "https://api.firmo.do/v1/ecf/E310000000001/xml",
"pdf": "https://api.firmo.do/v1/ecf/E310000000001/pdf",
"qr": "https://api.firmo.do/v1/ecf/E310000000001/qr",
"consultaDgii": null
},
"idExterno": null,
"metadata": null,
"creadoEn": "2026-10-06T14:14:02.511Z",
"actualizadoEn": "2026-10-06T14:14:03.902Z"
}Fíjate en encf (la secuencia que Firmo asignó), estado, codigoSeguridad y urls, donde están el XML firmado, la representación impresa y el QR. En sandbox, urls.consultaDgii es null porque el simulador no publica en la DGII.
Qué sigue#
- Emitir e-CF: todos los campos y estados.
- Webhooks: entérate del resultado sin consultar.
- Idempotencia: reintenta sin duplicar facturas.