import { Steps, Aside } from "@astrojs/starlight/components";

Con una API key en mano (ver [Autenticación rápida](/empezando/autenticacion/)),
emitir un comprobante es una sola llamada.

<Steps>

1. Arma el payload. Este ejemplo emite una Factura de Crédito Fiscal
   Electrónica (tipo 31), la más común entre negocios:

   ```json
   {
     "type": 31,
     "incomeType": "01",
     "internalNumber": "FAC-2026-00042",
     "buyer": {
       "rnc": "131880681",
       "name": "Mi Cliente SRL",
       "email": "pagos@micliente.do"
     },
     "payment": {
       "condition": "credit",
       "dueDate": "15-03-2026",
       "methods": [{ "type": "check_transfer", "amount": 2360.0 }]
     },
     "lines": [
       {
         "name": "Servicio de consultoría",
         "kind": "service",
         "quantity": 1,
         "unitOfMeasure": "43",
         "unitPrice": 2000.0,
         "itbisRate": 1
       }
     ]
   }
   ```

   `type`, `buyer`, `payment` y `lines` son lo mínimo. NovaFE calcula los
   totales, asigna el e-NCF y arma el resto del XML: no mandas RNC emisor,
   secuencia ni totales.

2. Envíalo a `POST /api/v1/ecf`:

   ```bash
   curl -X POST https://api.novafe.example/api/v1/ecf \
     -H "X-API-Key: $NOVAFE_API_KEY" \
     -H "Content-Type: application/json" \
     -H "Idempotency-Key: $(uuidgen)" \
     -d @comprobante.json
   ```

   El header `Idempotency-Key` es opcional pero recomendado: si el request
   se repite con la misma clave y el mismo cuerpo, NovaFE devuelve la
   respuesta original en vez de emitir dos veces.

3. NovaFE intenta resolver el estado fiscal dentro del propio request
   (unos 8 segundos). Si la DGII tarda más, la respuesta llega de todas
   formas con un estado intermedio y un worker de fondo termina el
   seguimiento:

   ```json
   {
     "id": "018f...",
     "type": 31,
     "status": "accepted",
     "encf": "E310000000042",
     "issueDate": "10-01-2026"
   }
   ```

4. Confirma el resultado final por
   [webhook](/webhooks/catalogo-de-eventos/) o consultando
   `GET /api/v1/ecf/{id}`.

</Steps>

<Aside type="tip" title="Probar sin comprometerte a nada">
  `POST /api/v1/ecf/validate` corre la misma validación de forma y de reglas
  fiscales, pero no asigna un e-NCF real, no firma ni persiste nada. Útil
  mientras integras. Ver [Validar sin emitir](/emision/validar-sin-emitir/).
</Aside>