Saltar al contenido principal

Preparar Factura

Este endpoint permite a clientes con infraestructura de sellado propia (HSM, procesos corporativos) obtener el XML sin sellar y la cadena original para que sellen el CFDI externamente. NO persiste datos en la base de datos.

  • Método HTTP: POST
  • URL: /invoices/prepare

Cabeceras

NombreDescripciónRequerido
x-organization-idID de la organización del usuario.
x-api-keyAPI key para autenticación.

Estructura del Request

El cuerpo de la petición es un objeto JSON que representa el CrearComprobanteDto.

Objeto Principal: CrearComprobanteDto

CampoTipoRequeridoDescripciónCatálogo SAT
sucursalIdstring (UUID)OpcionalID de la sucursal emisora. Si se omite, se usa la matriz.
clienteIdstring (UUID)OpcionalID de un cliente existente. Si se provee, se ignora el objeto receptor.
receptorReceptorDtoCondicionalObjeto con los datos del receptor. Requerido si no se provee clienteId.
tipoDeComprobantestringObligatorioTipo de Comprobante. Para facturas de ingreso, usar I.c_TipoDeComprobante
usoCFDIstringCondicionalUso que el receptor le dará a la factura. Requerido si tipoDeComprobante es I o E.c_UsoCFDI
metodoPagostringCondicionalMétodo de pago. Requerido si tipoDeComprobante es I o E.c_MetodoPago
formaPagostringCondicionalForma de pago. Requerido si tipoDeComprobante es I o E.c_FormaPago
condicionesDePagostringOpcionalCondiciones comerciales aplicables para el pago del comprobante.
seriestringOpcionalSerie para el folio del comprobante.
foliostringOpcionalFolio del comprobante.
fechastring (ISO 8601)ObligatorioFecha y hora de expedición del comprobante.
monedastringObligatorioMoneda del comprobante.c_Moneda
tipoCambionumberCondicionalTipo de cambio. Requerido si moneda es diferente de MXN y XXX.
exportacionstringObligatorioClave que indica si el comprobante ampara una operación de exportación.c_Exportacion
lugarExpedicionstringObligatorioCódigo postal del lugar de expedición del comprobante.c_CodigoPostal
conceptosConceptoDto[]CondicionalArreglo de conceptos. Requerido si tipoDeComprobante no es P.
cfdiRelacionadosCfdiRelacionadosDtoOpcionalNodo para especificar información de CFDI relacionados.
informacionGlobalInformacionGlobalDtoCondicionalNodo para especificar información de la factura global. Requerido si el RFC del receptor es XAXX010101000.
complementoPagoComplementoPagoDtoCondicionalNodo para el Complemento de Recepción de Pagos. Requerido si tipoDeComprobante es P.
complementoCartaPorteComplementoCartaPorteDtoCondicionalNodo para el Complemento Carta Porte. Requerido si tipoDeComprobante es T.
addendastringOpcionalNodo XML de la addenda requerida por el cliente.
espaciosDeNombresEspacioDeNombreDto[]CondicionalArreglo de namespaces (xmlns) requeridos por la addenda. Requerido si se incluye addenda.
complementosComplementoGenericoDto[]OpcionalArreglo para otros complementos de factura.

Objeto: ReceptorDto

CampoTipoRequeridoDescripciónCatálogo SAT
rfcstringObligatorioRFC del receptor.
nombrestringObligatorioNombre o Razón Social del receptor.
regimenFiscalstringObligatorioRégimen Fiscal del receptor.c_RegimenFiscal
domicilioFiscalstringObligatorioCódigo Postal del domicilio fiscal del receptor.c_CodigoPostal

Objeto: ConceptoDto

CampoTipoRequeridoDescripciónCatálogo SAT
descripcionstringObligatorioDescripción del concepto.
valorUnitarionumberObligatorioPrecio unitario del concepto.
cantidadnumberObligatorioCantidad de bienes o servicios del concepto.
claveProdServstringObligatorioClave de producto o servicio.c_ClaveProdServ
claveUnidadstringObligatorioClave de unidad de medida.c_ClaveUnidad
objetoImpstringObligatorioClave que indica si el concepto es objeto de impuesto.c_ObjetoImp
descuentonumberOpcionalMonto del descuento aplicable al concepto.
impuestosConceptoImpuestosDtoCondicionalNodo de impuestos del concepto. Requerido si objetoImp es 02.
aCuentaTercerosACuentaTercerosDtoOpcionalNodo para especificar información de cuenta de terceros.
cuentaPredialstringOpcionalNúmero de cuenta predial.
informacionAduaneraInformacionAduaneraDto[]OpcionalNodo para especificar información aduanera.
partesParteDto[]OpcionalNodo para especificar las partes del concepto.
complementoConceptostringOpcionalNodo XML del complemento de concepto.

Objeto: ConceptoImpuestosDto

CampoTipoRequeridoDescripción
trasladosConceptoTrasladoDto[]OpcionalArreglo de traslados de impuestos.
retencionesConceptoRetencionDto[]OpcionalArreglo de retenciones de impuestos.

Objeto: ConceptoTrasladoDto

CampoTipoRequeridoDescripciónCatálogo SAT
basenumberObligatorioBase imponible para el cálculo del impuesto.
impuestostringObligatorioClave del impuesto.c_Impuesto
tipoFactorstringObligatorioTipo de factor.c_TipoFactor
tasaOCuotanumberObligatorioTasa o cuota del impuesto.

Objeto: ConceptoRetencionDto

CampoTipoRequeridoDescripciónCatálogo SAT
basenumberObligatorioBase imponible para el cálculo del impuesto.
impuestostringObligatorioClave del impuesto.c_Impuesto
tipoFactorstringObligatorioTipo de factor.c_TipoFactor
tasaOCuotanumberObligatorioTasa o cuota del impuesto.

Ejemplos de Código

curl -X POST https://sandbox-api.lummy.com/invoices/prepare \
-H "Content-Type: application/json" \
-H "x-organization-id: ${LUMMY_ORG_ID}" \
-H "x-api-key: ${LUMMY_API_KEY}" \
-d '{
"tipoDeComprobante": "I",
"receptor": {
"rfc": "XAXX010101000",
"nombre": "PUBLICO EN GENERAL",
"regimenFiscal": "616",
"domicilioFiscal": "06500"
},
"usoCFDI": "G03",
"metodoPago": "PUE",
"formaPago": "03",
"fecha": "2025-11-19T10:00:00",
"moneda": "MXN",
"exportacion": "01",
"lugarExpedicion": "06500",
"conceptos": [
{
"claveProdServ": "81111500",
"claveUnidad": "E48",
"descripcion": "Desarrollo de Software - Sistema Web a Medida",
"cantidad": 1,
"valorUnitario": 15000.00,
"objetoImp": "02",
"impuestos": {
"traslados": [
{
"base": 15000.00,
"impuesto": "002",
"tipoFactor": "Tasa",
"tasaOCuota": 0.16
}
]
}
}
]
}'

Respuesta Exitosa

En caso de éxito, la respuesta será un objeto JSON con la estructura PrepareInvoiceResponseDto.

{
"unsignedXml": "<?xml version=...",
"originalString": "||1.0|..."
}

Respuestas de Error

Código HTTPDescripción
400Datos de entrada inválidos.
404Sucursal o CSD no encontrado.