import { Aside, Code } from "@astrojs/starlight/components";
import models from "../../../../public/models/typescript/ecf.ts?raw";

Interfaces sin dependencias: funcionan en Node, Bun o el navegador. Copia el archivo a tu proyecto e impórtalo donde construyas o leas comprobantes.

## Descargar

{/* prettier-ignore */}
- <a href="/models/typescript/ecf.ts" download>ecf.ts</a>: emisión de e-CF, con sus tipos anidados.
- <a href="/models/novafe-models-typescript.zip" download>novafe-models-typescript.zip</a>: todas las áreas de la API.
- <a href="/openapi/novafe-public.json" download>documento OpenAPI</a>: el contrato completo, para generar tus propios modelos.

## Ejemplo: emitir un comprobante

```ts title="emitir.ts"
import type { EcfDto, IssueEcfCommand } from "./ecf";

const payload: IssueEcfCommand = {
  type: 31,
  incomeType: "01",
  internalNumber: "FAC-2026-00042",
  buyer: { rnc: "131880681", name: "Mi Cliente SRL" },
  payment: {
    condition: "credit",
    dueDate: "15-03-2026",
    methods: [{ type: "check_transfer", amount: 2360 }],
  },
  lines: [
    {
      name: "Servicio de consultoría",
      kind: "service",
      quantity: 1,
      unitOfMeasure: "43",
      unitPrice: 2000,
      itbisRate: 1,
    },
  ],
};

const response = await fetch("https://api.novafe.example/api/v1/ecf", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.NOVAFE_API_KEY!,
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify(payload),
});

const ecf: EcfDto = await response.json();
console.log(ecf.encf, ecf.status);
```

## Modelos de emisión

Todo el contenido de `ecf.ts`, listo para copiar. Incluye `IssueEcfCommand` (el cuerpo de `POST /ecf`), `EcfDto` (la respuesta) y sus tipos anidados.

<Code code={models} lang="ts" title="ecf.ts" />

<Aside type="tip" title="Otras áreas de la API">
  Los modelos de secuencias, webhooks, recepción B2B y el resto están en el zip
  y en la [página de descargas](/sdk-modelos/).
</Aside>