Todo sobre facturación CFDI
Aprende cómo automatizar y facilitar la facturación CFDI de ventas de tu negocio.
CFDI 4.0 en dólares: moneda, tipo de cambio y pagos REP

Si exportas servicios o productos, o cobras contratos en dólares, puedes emitir un CFDI en dólares sin pasar tus importes a pesos. En esta guía te explicamos qué pide el SAT, qué tipo de cambio usar y cómo resolver las notas de crédito y los complementos de pago. Al final te mostramos cómo hacerlo con la API de CFDI Express (v1.49.0).
¿Se puede emitir un CFDI 4.0 en dólares?
Sí. En el CFDI 4.0 el atributo Moneda acepta cualquier clave del catálogo c_Moneda, y cuando la moneda no es MXN debes incluir TipoCambio. En el comprobante, todos los importes (conceptos, descuentos, impuestos y total) van en la moneda del documento. No se convierten a pesos al timbrar.
Campos Moneda y TipoCambio: qué pide el SAT
- Moneda: clave de
c_Moneda(por ejemploUSDoEUR). La claveXXXsolo es para comprobantes sin importes. - TipoCambio: es obligatorio si la moneda es distinta de MXN y de XXX. En pesos se puede omitir y, si viene, debe ser
1. - Formato: hasta 18 enteros y 6 decimales como máximo.
- Decimales de los importes: deben respetar los decimales que tiene la moneda en el catálogo.
Para el detalle campo por campo, consulta Facturación al extranjero: moneda extranjera.
Qué tipo de cambio usar: FIX del DOF y monedas distintas a USD
La guía de llenado del Anexo 20 pide el tipo de cambio FIX que publica Banxico en el DOF para el dólar. Para otras monedas se usa la tabla de equivalencias de Banxico. El tipo de cambio se expresa en pesos por 1 unidad de la moneda extranjera, por ejemplo 18.4567 pesos por dólar.
La validación del SAT contra el tipo de cambio publicado (CFDI40118) todavía no está en vigor. Por eso un tipo de cambio incorrecto no necesariamente se rechaza: se timbra tal como lo mandaste, y la responsabilidad es del emisor. Usa siempre el tipo de cambio real.
Factura en dólares a cliente extranjero (XEXX010101000 y IVA 0%)
Si tu cliente está fuera de México, el receptor lleva el RFC genérico XEXX010101000, su ResidenciaFiscal (clave de país), su NumRegIdTrib (su identificación fiscal), uso S01, régimen 616 y el código postal del emisor. La moneda y el receptor son independientes: puedes facturar en dólares a un cliente extranjero o a uno mexicano.
El IVA no depende de la moneda. Según tu operación, puede corresponder la tasa 0% (por ejemplo, en algunas exportaciones), la tasa general u otro tratamiento: no es una regla fija para toda factura en dólares. La API no decide el impuesto: tú mandas en cada concepto el que corresponda (ivaRate, o ivaExempt si está exento). Si tienes dudas sobre tu caso, valídalo con tu contador.
Nota de crédito en dólares
Una nota de crédito sobre una factura en dólares va en la misma moneda que la factura relacionada. No se puede mezclar: una nota en MXN sobre una factura en USD se rechaza. Lleva su propio tipo de cambio, el de la fecha de la nota. Más detalle en Crear nota de crédito.
Complemento de pago en dólares
Cuando cobras una factura PPD en dólares, el REP (Pagos 2.0) va en la moneda de la factura (MonedaP = MonedaDR, con EquivalenciaDR = 1). El TipoCambioP es el del día del pago, no el de la factura. Los importes del documento relacionado y sus impuestos se quedan en dólares, y el nodo Totales se convierte a pesos (importe × TipoCambioP, redondeado a 2 decimales), como lo pide el complemento. Revisa Complementos de pago.
Factura global en otra moneda
La guía de llenado de la factura global permite cualquier clave de c_Moneda con su TipoCambio, así que aplican las mismas reglas. Ve Facturación global mensual.
Cómo hacerlo con la API de CFDI Express
Desde la v1.49.0, la API acepta currency (clave c_Moneda, por omisión MXN) y exchangeRate (MXN por 1 unidad, máximo 6 decimales). Además de pesos, acepta 18 monedas de 2 decimales: USD, EUR, CAD, GBP, CHF, AUD, NZD, CNY, HKD, SGD, SEK, NOK, DKK, BRL, ARS, COP, PEN y GTQ.
Factura en USD (Timbrar factura):
curl -X POST https://api.cfdi.express/v1/invoices \
-H "Authorization: Bearer $CFDI_API_KEY" \
-H "Idempotency-Key: factura-usd-001" \
-H "Content-Type: application/json" \
-d '{
"merchantId": "mer_...",
"metodoPago": "PUE",
"formaPago": "03",
"usoCfdi": "G03",
"currency": "USD",
"exchangeRate": 18.4567,
"pricesIncludeTax": true,
"receiver": { "rfc": "URE180429TM6", "name": "UNIVERSIDAD ROBOTICA ESPAÑOLA", "zip": "86991", "regimenFiscal": "601" },
"items": [
{ "productCode": "81112101", "unitCode": "E48", "description": "Servicio de software", "quantity": 1, "unitPrice": 116, "ivaRate": 0.16 }
]
}'
La respuesta trae "currency": "USD", "exchangeRate": 18.4567 y "total": 116, en dólares. El PDF muestra el tipo de cambio y el equivalente en pesos.
Nota de crédito: hereda la moneda de la factura y solo mandas su tipo de cambio:
{ "merchantId": "mer_...", "relatedInvoiceId": "inv_...", "formaPago": "03", "exchangeRate": 18.4567,
"items": [{ "productCode": "81112101", "unitCode": "E48", "description": "Bonificación", "quantity": 1, "unitPrice": 11.6, "ivaRate": 0.16 }] }
Complemento de pago (POST /v1/invoices/{id}/payments, ver Timbrar complemento de pago):
{ "monto": 58, "formaPago": "03", "exchangeRate": 18.4567 }
Si usas agentes de IA, las herramientas del servidor MCP (create_invoice, pagos y reportes) también reconocen la moneda.
Errores comunes
- Mandar
currency: "USD"sinexchangeRate: la API responde 400. Antes de la v1.49.0 estos campos se ignoraban y se timbraba en pesos, así que revisa tu integración si ya los mandabas. - Mandar MXN con un tipo de cambio distinto de 1: responde 400.
- Usar una moneda no soportada (por ejemplo, JPY): responde 400.
- Nota de crédito en otra moneda que la de la factura: responde 400.
- Usar el tipo de cambio de la factura en el REP: usa el de la fecha de pago.
- Más de 6 decimales en el tipo de cambio: el SAT no lo acepta.
Preguntas frecuentes
¿Es obligatorio el tipo de cambio en una factura en dólares?
Sí. Si la moneda no es MXN (ni XXX), TipoCambio es obligatorio. En la API, sin exchangeRate la respuesta es 400.
¿Qué tipo de cambio uso en el complemento de pago?
El de la fecha del pago (TipoCambioP). Para USD es el FIX de Banxico publicado en el DOF.
¿Puedo facturar en dólares a un cliente mexicano? Sí. La moneda no depende del receptor: puedes emitir un CFDI en USD a un RFC mexicano con su régimen y uso de CFDI normales.
¿Cuántos decimales lleva el tipo de cambio? Hasta 6. Los importes del comprobante usan los decimales de la moneda (2 en todas las que acepta la API).
¿Puedo pagar en pesos una factura en dólares?
Hoy no se puede en la API de CFDI Express: el REP va en la misma moneda que la factura (EquivalenciaDR = 1).
