Saltar al contenido principal

Crear Complemento de Pago

Este endpoint permite crear y sellar un CFDI de Recepción de Pagos (Complemento de Pago).

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

Cabeceras

NombreDescripciónRequerido
x-user-idID del usuario validado por el servicio de autenticación.
x-organization-idID de la organización del usuario.
x-api-keyAPI key para autenticación.
x-idempotencyClave de idempotencia para evitar duplicados.

Estructura del Request

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

Objeto Principal: CrearComprobanteDto

CampoTipoRequeridoDescripciónCatálogo SAT
tipoDeComprobantestringObligatorioDebe ser P para Complemento de Pago.c_TipoDeComprobante
receptorReceptorDtoObligatorioObjeto con los datos del receptor.
conceptosConceptoDto[]ObligatorioArreglo de conceptos.
monedastringObligatorioDebe ser XXX.c_Moneda
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
fechastring (ISO 8601)ObligatorioFecha y hora de expedición del comprobante.
complementoPagoComplementoPagoDtoObligatorioNodo para el Complemento de Recepción de Pagos.

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
descripcionstringObligatorioDebe ser Pago.
valorUnitarionumberObligatorioDebe ser 0.
cantidadnumberObligatorioDebe ser 1.
claveProdServstringObligatorioDebe ser 84111506.c_ClaveProdServ
claveUnidadstringObligatorioDebe ser ACT.c_ClaveUnidad
objetoImpstringObligatorioDebe ser 01.c_ObjetoImp

Objeto Principal: ComplementoPagoDto

CampoTipoRequeridoDescripción
pagosPagoDto[]ObligatorioArreglo de pagos recibidos.

Objeto: PagoDto

CampoTipoRequeridoDescripciónCatálogo SAT
fechaPagostring (ISO 8601)ObligatorioFecha y hora en que se recibió el pago.
formaDePagoPstringObligatorioForma en que se recibió el pago.c_FormaPago
monedaPstringObligatorioMoneda en la que se recibió el pago.c_Moneda
tipoCambioPnumberCondicionalTipo de cambio de la moneda del pago a MXN. Requerido si monedaP es diferente de MXN y XXX.
montonumberObligatorioMonto total del pago recibido.
numOperacionstringOpcionalNúmero de operación del pago (ej. SPEI).
tipoCadPagostringCondicionalClave del tipo de cadena de pago. Requerido para pagos SPEI (01).c_TipoCadenaPago
certPagostringCondicionalCertificado del pago entregado por el banco (Base64). Requerido si existe tipoCadPago.
cadPagostringCondicionalCadena original del comprobante de pago del banco. Requerido si existe tipoCadPago.
selloPagostringCondicionalSello digital del pago entregado por el banco. Requerido si existe tipoCadPago.
documentosRelacionadosDocumentoRelacionadoDto[]ObligatorioLista de facturas de ingreso que se saldan con este pago.
impuestosPPagoImpuestosDtoObligatorioNodo de impuestos del pago.

Objeto: DocumentoRelacionadoDto

CampoTipoRequeridoDescripciónCatálogo SAT
idDocumentostring (UUID)ObligatorioUUID (Folio Fiscal) de la factura de ingreso que se está pagando.
seriestringOpcionalSerie de la factura que se paga.
foliostringOpcionalFolio de la factura que se paga.
monedaDRstringObligatorioMoneda de la factura que se paga.c_Moneda
equivalenciaDRnumberOpcionalTipo de cambio de la moneda del documento relacionado a la moneda del pago.
numParcialidadnumberObligatorioNúmero de la parcialidad que se está pagando.
impSaldoAntnumberObligatorioMonto del saldo anterior de la parcialidad.
impPagadonumberObligatorioMonto de este pago que se aplica a la parcialidad.
objetoImpDRstringObligatorioObjeto de impuesto de la factura relacionada.c_ObjetoImp
impuestosDRDocumentoRelacionadoImpuestosDtoCondicionalNodo de impuestos del documento relacionado. Requerido si objetoImpDR es 02.

Objeto: PagoImpuestosDto

CampoTipoRequeridoDescripción
trasladosPPagoTrasladoDto[]OpcionalArreglo de traslados de impuestos.
retencionesPPagoRetencionDto[]OpcionalArreglo de retenciones de impuestos.

Objeto: PagoTrasladoDto

CampoTipoRequeridoDescripciónCatálogo SAT
importePnumberObligatorioMonto del impuesto trasladado.
basePnumberObligatorioBase del impuesto.
impuestoPstringObligatorioClave del impuesto.c_Impuesto
tipoFactorPstringObligatorioTipo de factor.c_TipoFactor
tasaOCuotaPnumberObligatorioTasa o cuota del impuesto.

Objeto: PagoRetencionDto

CampoTipoRequeridoDescripciónCatálogo SAT
impuestoPstringObligatorioClave del impuesto.c_Impuesto
importePnumberObligatorioMonto del impuesto retenido.

Ejemplos de Código

curl -X POST https://sandbox-api.lummy.com/invoices \
-H "Content-Type: application/json" \
-H "x-user-id: your-user-id" \
-H "x-organization-id: ${LUMMY_ORG_ID}" \
-H "x-api-key: ${LUMMY_API_KEY}" \
-H "x-idempotency: $(uuidgen)" \
-d '{
"tipoDeComprobante": "P",
"receptor": {
"rfc": "XAXX010101000",
"nombre": "Receptor de Prueba",
"regimenFiscal": "601",
"domicilioFiscal": "12345"
},
"conceptos": [
{
"claveProdServ": "84111506",
"cantidad": 1,
"claveUnidad": "ACT",
"descripcion": "Pago",
"valorUnitario": 0,
"objetoImp": "01"
}
],
"moneda": "XXX",
"exportacion": "01",
"lugarExpedicion": "06500",
"fecha": "2025-01-15T12:00:00",
"complementoPago": {
"pagos": [
{
"fechaPago": "2025-01-15T12:00:00",
"formaDePagoP": "03",
"monedaP": "MXN",
"monto": 100,
"documentosRelacionados": [
{
"idDocumento": "f3a3b1e0-0b7a-4b1a-9b0a-0a0b0c0d0e0f",
"monedaDR": "MXN",
"numParcialidad": 1,
"impSaldoAnt": 100,
"impPagado": 100,
"objetoImpDR": "01"
}
],
"impuestosP": {}
}
]
}
}'

Respuesta Exitosa

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

{
"id": "f3a3b1e0-0b7a-4b1a-9b0a-0a0b0c0d0e0f",
"status": "STAMPED",
"cfdi": "<?xml version=..."
}

Respuestas de Error

Código HTTPDescripción
400Datos de entrada inválidos o saldo de timbres insuficiente.
409La clave de idempotencia ya ha sido usada.
500Fallo al procesar el timbrado. El saldo no fue afectado.