Saltar al contenido
firmo
Docs / Inicio rápido

Inicio rápido

Regístrate, obtén tu API key y emite tu primer e-CF de prueba en 60 segundos con curl, Node o Python.

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:

POST /v1/accounts
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"
  }'
Respuesta
{
  "cuentaId": "5a0e3c1b-2f4d-4a8e-9b7c-6d1e0f2a3b4c",
  "empresaId": "9c2b1a0f-8e7d-4c6b-a5f4-3e2d1c0b9a87",
  "apiKey": "sk_test_…",
  "ambiente": "sandbox"
}

2. Guarda tu API key#

Terminal
export FIRMO_API_KEY="sk_test_…"
No pongas la API key en el código del navegador ni en un repositorio. Úsala solo desde tu servidor.

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:

Respuesta 200
{
  "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#