---
title: "Facturar al momento del pago | Timbro"
description: "Timbro emite la factura cuando el cliente paga, o tu sistema la emite y la relaciona con el pago"
canonical: "https://timbro.do/docs/comprobantes/emitir-ecf/"
---

Cobrar y facturar

# Facturar al momento del pago

Si tu cliente paga en línea y tu sistema no emite facturas, Timbro puede emitir la factura en cuanto se confirma el pago. En Checkout, tu cliente puede elegir si quiere una Factura de Consumo o una Factura de Crédito Fiscal y escribir su RNC; Timbro emite la factura con los artículos del pago.

Si tu sistema ya emite la factura antes de cobrar, no necesitas esta guía: [cobra la factura que ya emitiste](https://timbro.do/docs/comprobantes/cobrar-una-factura/).

Para facturar al crear el pago necesitas:

- Una clave de API con acceso a Cobra y a Facturación. En estos ejemplos la guardas en `TIMBRO_API_KEY`.
- La [facturación configurada](https://timbro.do/docs/comprobantes/configurar-facturacion/) en el modo que vas a usar.
- Los artículos de la venta, en pesos dominicanos (DOP), con su unidad de medida (`unit`) y si son un bien o un servicio (`kind`). Un pago que solo lleva `amount` no puede facturarse.

## Timbro emite la factura

Envía los artículos y, en `invoicing`, el modo `automatic` y el tipo de comprobante que Checkout muestra elegido al abrir:

- [TypeScript](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-0-0)
- [Python](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-0-1)

```ts
import { createTimbroInvoices } from "@timbro/invoices";
import { createTimbroPayments } from "@timbro/payments";

const timbro = createTimbroPayments({ apiKey: process.env.TIMBRO_API_KEY! });
const timbroInvoices = createTimbroInvoices({ apiKey: process.env.TIMBRO_API_KEY! });
const automaticPayment = await timbro.payments.create({
  paymentReference: "venta-124",
  currency: "DOP",
  items: [{
    description: "Servicio",
    quantity: "1",
    unit: "unit",
    kind: "service",
    unitPrice: "1250.00",
    tax: { kind: "itbis_18", included: true },
  }],
  returnUrl: "https://merchant.example/ventas/124",
  invoicing: { mode: "automatic", type: "E32", recipientEmail: "comprador@example.com" },
});
```

```python
import os

from timbro_invoices import TimbroInvoices
from timbro_payments import TimbroPayments

timbro = TimbroPayments(api_key=os.environ["TIMBRO_API_KEY"])
timbro_invoices = TimbroInvoices(api_key=os.environ["TIMBRO_API_KEY"])
automatic_payment = timbro.payments.create({
    "paymentReference": "venta-124",
    "currency": "DOP",
    "items": [{
        "description": "Servicio",
        "quantity": "1",
        "unit": "unit",
        "kind": "service",
        "unitPrice": "1250.00",
        "tax": {"kind": "itbis_18", "included": True},
    }],
    "returnUrl": "https://merchant.example/ventas/124",
    "invoicing": {"mode": "automatic", "type": "E32", "recipientEmail": "comprador@example.com"},
})
```

`type` puede ser Factura de Consumo (`E32`), Factura de Crédito Fiscal (`E31`) o Comprobante Gubernamental (`E45`). El cliente puede cambiarlo en Checkout. Para limitar los tipos que puede elegir, envía `allowedTypes`; para que no pueda cambiarlo, envía `isTypeLocked: true`. Si ya conoces al comprador, envíalo en `buyer`, y `isBuyerLocked: true` impide que el cliente lo cambie. Un Comprobante Gubernamental también necesita `governmentEligibility`.

`recipientEmail` es opcional. Con él, Timbro le envía la factura al cliente por correo cuando la DGII la acepta.

Cuando el pago llega a `succeeded`, Timbro emite la factura y el pago muestra su `invoiceId`. Consulta la factura para conocer su estado y sus archivos; que el pago esté en `succeeded` no confirma que la DGII ya aceptó la factura:

- [TypeScript](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-1-0)
- [Python](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-1-1)

```ts
const paid = await timbro.payments.retrieve(automaticPayment.id);
const invoice = paid.invoiceId ? await timbroInvoices.invoices.retrieve(paid.invoiceId) : undefined;
```

```python
paid = timbro.payments.retrieve(automatic_payment["id"])
invoice = timbro_invoices.invoices.retrieve(paid["invoiceId"]) if paid["invoiceId"] else None
```

La guía [Descargar y enviar la factura](https://timbro.do/docs/comprobantes/entregar-comprobante/) explica los estados de la factura y cómo descargar el XML y el PDF.

## Cuando tu sistema emite la factura después del pago

Si tu sistema debe emitir la factura, pero quieres que el cliente elija el tipo de comprobante en Checkout, crea el pago con el modo `merchant`. Timbro guarda la elección del cliente y no emite la factura; tu sistema la emite con la [API de facturación](https://timbro.do/docs/comprobantes/facturar-desde-pos-erp/) cuando el pago se confirma, y después la relaciona con el pago.

Primero crea el pago y guarda su `id` junto a la venta:

- [TypeScript](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-2-0)
- [Python](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-2-1)

```ts
const merchantPayment = await timbro.payments.create({
  paymentReference: "venta-125",
  currency: "DOP",
  items: [{
    description: "Servicio",
    quantity: "1",
    unit: "unit",
    kind: "service",
    unitPrice: "1250.00",
    tax: { kind: "itbis_18", included: true },
  }],
  invoicing: { mode: "merchant", type: "E32" },
});
```

```python
merchant_payment = timbro.payments.create({
    "paymentReference": "venta-125",
    "currency": "DOP",
    "items": [{
        "description": "Servicio",
        "quantity": "1",
        "unit": "unit",
        "kind": "service",
        "unitPrice": "1250.00",
        "tax": {"kind": "itbis_18", "included": True},
    }],
    "invoicing": {"mode": "merchant", "type": "E32"},
})
```

Cuando el pago esté en `succeeded`, lee en `invoicing` el tipo y el comprador que eligió el cliente, emite la factura con esos datos y los mismos artículos, y espera a que la DGII la acepte. Después relaciónala con el pago:

- [TypeScript](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-3-0)
- [Python](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-3-1)

```ts
const currentPayment = await timbro.payments.retrieve(merchantPayment.id);
if (currentPayment.status !== "succeeded") throw new Error("Payment not yet confirmed");
const linked = await timbro.payments.attachInvoice(merchantPayment.id, {
  invoiceId: "f35b7ae4-c484-4c63-981e-4f0f15e913b5",
});
```

```python
current_payment = timbro.payments.retrieve(merchant_payment["id"])
if current_payment["status"] != "succeeded":
    raise RuntimeError("Payment not yet confirmed")
linked = timbro.payments.attach_invoice(
    merchant_payment["id"], {"invoiceId": "f35b7ae4-c484-4c63-981e-4f0f15e913b5"}
)
```

La factura debe ser del mismo negocio y del mismo modo que el pago, y sus datos fiscales deben coincidir con la venta. Si no coinciden, la API rechaza la relación y la factura sigue siendo válida en la DGII.

## Cambia el correo de la factura

El pago muestra en `invoicing.recipientEmail` el correo al que Timbro enviará la factura, o `null` si no hay ninguno. Para cambiarlo antes de que se envíe, usa `PUT /v1/payments/{paymentId}/invoice-recipient`:

- [TypeScript](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-4-0)
- [Python](https://timbro.do/docs/comprobantes/emitir-ecf/#tab-panel-4-1)

```ts
await timbro.payments.updateInvoiceRecipient({
  paymentId: automaticPayment.id,
  recipientEmail: "comprador@example.com",
  idempotencyKey: "venta-124-correo-1",
});
```

```python
timbro.payments.update_invoice_recipient(
    automatic_payment["id"],
    {"recipientEmail": "comprador@example.com"},
    idempotency_key="venta-124-correo-1",
)
```

Timbro o tu sistema le envía la factura al cliente, nunca los dos. Si tu sistema la envía, no indiques `recipientEmail` ni llames a esta operación. Para enviar por correo una factura que ya existe, sigue [Envía la factura por correo](https://timbro.do/docs/comprobantes/entregar-comprobante/#env%C3%ADa-la-factura-por-correo).

## Facturar en vivo

En modo en vivo, Timbro solo acepta un pago con `automatic` o `merchant` cuando tu negocio ya puede emitir en vivo cada tipo que el pago permite. Si falta algo, la API responde `409 business_fiscal_setup_incomplete`, y su `detail` dice qué falta; [Configurar la facturación](https://timbro.do/docs/comprobantes/configurar-facturacion/#pasa-al-modo-en-vivo) explica cómo completarlo. Si Timbro no puede comprobarlo en ese momento, responde `503 business_fiscal_setup_unavailable`: repite la misma solicitud más tarde.

Un pago sin factura, o un pago por una factura que ya existe, no necesita esta comprobación. Por eso un sistema de caja que emite sus propias facturas puede seguir cobrando aunque la facturación de Timbro no esté disponible.

[Página anterior\
Cobrar una factura que ya emitiste](https://timbro.do/docs/comprobantes/cobrar-una-factura/)[Siguiente página\
Consultar y cancelar pagos](https://timbro.do/docs/cobros/consultar-pagos/)

Vende, atiende a tus clientes y cobra desde tu celular

© 2026 Timbro. Todos los derechos reservados

[Español](https://timbro.do/docs/comprobantes/emitir-ecf/)[English](https://timbro.do/en/docs/comprobantes/emitir-ecf/)

## Productos

[Facturación](https://timbro.do/facturacion-electronica/)[Atiende](https://timbro.do/atiende/)[Cobra](https://timbro.do/pagos/)[Portal Timbro](https://timbro.do/portal-timbro/)[Integraciones](https://timbro.do/integraciones/)[Cuenta Timbro](https://timbro.do/cuenta-timbro/)[Precios](https://timbro.do/precios/)

## Desarrolladores

[SDK y API](https://timbro.do/desarrolladores/)[Documentación](https://timbro.do/docs/)[Referencia de la API](https://timbro.do/docs/reference/payments/)

## Empresa

[INDEXA, la empresa detrás de Timbro](https://indexa.do/)[Presentaciones](https://timbro.do/presentaciones/)

## Ayuda

[Cómo empezar](https://timbro.do/como-empezar/)[Guía de facturación electrónica](https://timbro.do/guias/facturacion-electronica-republica-dominicana/)[Contacto](https://timbro.do/contacto/)<hola@timbro.do>

## Legal

[Condiciones para negocios](https://timbro.do/politicas/negocios/)[Política de uso](https://timbro.do/politicas/uso/)[Privacidad](https://timbro.do/politicas/privacidad/)[Seguridad](https://timbro.do/politicas/seguridad/)[Todos los documentos](https://timbro.do/politicas/)
