Requisitos CFDI 4.0
En Abril del 2023, el SAT liberó la nueva versión 4.0 de CFDI, la cual sustituye a la versión 3.3, que estaba vigente desde 2017.
Derivado al cambio por parte del SAT, se actualiza la emisión de CFDI, incluyendo los siguientes ajustes mandatorios a nuevas validaciones y funcionalidades, correspondientes a la versión 4.0:
- Actualización e integración del nombre y código postal del domicilio fiscal del emisor y del receptor.
- Se debe incluir el régimen fiscal del receptor.
- Se deberá especificar el régimen fiscal.
- Se debe registrar si la operación es objeto de impuestos.
- Se debe identificar operaciones de exportación.
Operation
Openpay's electronic invoice generation API is part of the functionalities offered by the platform to complement the user's purchase process.
The generation process is performed asynchronously, the trade sends the generation request to Openpay so that the request is validated and the generation process is triggered and the result of the validation will be responded to once the process is launched Generation Openpay will notify the commerce through notification (webhook) the final result of the generation.
Notifications
To set the URL, go to: Settings -> Webhooks -> Add y seleccionar “Personalizar Eventos” y notificaciones de Facturas creadas y fallidas como se muestra en la siguiente imagen:

Note: : La sección de eventos de “Facturas” solo estará disponible hasta que en su cuenta de Openpay se haya activado la API de facturación.
Endpoints
Los servicios de facturación se encuentran disponibles dentro de la API de Openpay y requieren la misma autenticación de los otros servicios. Para más información sobre la autenticación consulte: http://www.openpay.mx/docs/api/?#autenticaci-n
Endpoints for invoice:
Action
URL
Método
Invoice Generation
https://{enviroment}/v1/{merchant_id}/invoices/v40
POST
List CFDI
https://{enviroment}/v1/{merchant_id}/invoices/v40
GET
Retrieve CFDI
https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}
GET
Cancel Invoice
https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}
DELETE
Environments
- Desarollo: https://dev-api.openpay.mx
- Tests: Production:
- Production https://api.openpay.mx
Example:
POST:
https://sandbox-api.openpay.mx/v1/mzdtln0bmtms6o3kck8f/invoices/v40
DELETE:
https://sandbox-api.openpay.mx/v1/mzdtln0bmtms6o3kck8f/invoices/v40/92ACB752-0F17-427F-A007-A63DFC612036
Generation of CFDI
For the generation of CFDI it is necessary to send a Generation of CFDI Object. Los campos de este objeto deberán ser enviados en un mensaje JSON realizando una petición HTTP POST a la URL: https://{enviroment}/v1/{merchant_id}/invoices/v40
Object List
- DoctoRelacionado Object
- Concept Object
- Tax Object
- Receiver Object
- Related Object
- CFDI Related Object
- Complements Object
- Complement Airlines Object
- Charge Airlines Object
- Complement Payment Object
- Complement Donee Object
Ejemplos de petición de emisión de factura:
{
"lugar_expedicion": "37800",
"moneda": "MXN",
"total": 100,
"tipo_de_cambio": 1,
"forma_pago": "28",
"metodo_pago":"PUE",
"invoice_id":"010101010",
"conceptos: [
{
"clave":"01010101",
"identificador":"1",
"cantidad":1,
"clave_unidad":"18",
"unidad":"1","descripcion":"concepto uno",
"valor_unitario":100,
"importe":100,
"descuento":0,
"objeto_imp":"01",
"traslados":null,
"retenciones":null
}
],
"receptor":{
"rfc": "XIQB891116QE4",
"nombre": "BERENICE XIMO QUEZADA",
"uso_cfdi": "G03",
"domicilio_fiscal": "57424",
"email":"victor.gomez@openpay.mx",
"regimen_fiscal": "606"
}
}
{ "subtotal":86.21,
"total_trasladados":13.79,
"impuestos_traslado":[
{
"impuesto":"002",
"tipo_factor":"Tasa",
"tasa":0.16,
"importe":13.79
}
],
"total":100,
"tipo_de_cambio":1,
"forma_pago":"28",
"conceptos":[
{
"clave":"87631801",
"clave_unidad":"D48",
"identificador":"80111821",
"cantidad":1,
"descripcion":"204: prueba trxch1vcasicofbdsav5",
"valor_unitario":86.21,
"importe":86.21,
"objeto_imp":"02",
"traslados":[
{
"impuesto":"002",
"base":86.21,
"tipo_factor":"Tasa",
"tasa":0.16,
"importe":13.79
}
]
}
],
"lugar_expedicion":"04000",
"moneda":"MXN",
"receptor":{
"nombre":"JOSE MARIA MORFIN CASTILLEJOS",
"rfc":"MOCM680926D64",
"email":"jd@openpay.mx",
"uso_cfdi":"G03",
"domicilio_fiscal":"04100",
"regimen_fiscal":"605"
},
"invoice_id":"5665-1684346946",
"metodo_pago":"PUE"
}
Generation request response
Campos Respuesta
- invoice_id
- request_id
- date
- status
- fiscal_status
- message
Field
Description
invoice_id
Identifier of the invoice sent in the request
request_id
POST
date
POST
status
POST
fiscal_status
POST
message
POST
Ejemplos respuesta petición:
{
"invoice_id": "order1234",
"request_id": "7edd3834-81a7-4609-ac80-c0fd415c5723",
"date": "2016-04-25T12:14:52-05:00",
"status": "ok",
"fiscal_status": "active",
"message": "Cfdi generation started"
}
Ejemplos respuesta webhook:
{
"type": "invoice.failed",
"event_date": "2023-05-17T11:34:37-06:00",
"invoice_data": {
"invoice_id": "5665-1684344813",
"creation_date": "2023-05-17T11:33:33-06:00",
"receiver_rfc": "MOCM680926D64",
"total": 100,
"subtotal": 86.21,
"status": "error",
"fiscal_status": "active",
"message": "cvc-complex-type.4: El atributo 'Base' debe aparecer en el elemento 'Traslado'. - "
}
}
Retrieving a CFDI
Para obtener los datos de una factura exitosa, adjuntar el UUID al enviar un GET a la URL del API de facturación. Esto obtendrá los datos de un solo CFDI, con la opción de obtener las URL de descargas para el PDF y el XML
Parameters allowed in the request
Field
Description
getUrls
If sent with value true, retrieves the download URL for the PDF and XML. These URL have an expiration date, so they must be used immediately.
creation[gte]
List the CFDI with creation date greater or equal to a given day. YYYY-MM-DD.
creation[lte]
List the CFDI with creation date less or equal to a given day. YYYY-MM-DD.
id
Search CFDI by invoice_id
limit
The maximum number of results to retrieve. The default is 10, and the maximum allowed value is 500.
getUrls
Si el valor es true, obtiene las URL de descarga para el PDF y el XML. Estas URL tienen un tiempo de expiración por lo que deberán usarse inmediatamente.
CFDI Response
Field
Description
invoice_id
Identifier of the invoice sent in the request
creation_date
Fecha en la que se solicitó la generación / Fecha en la que se generó el documento
issue_date
Fecha en que se envió a timbrar el CFDI / Fecha en laque se timbró el documento
uuid
UUID único del CFDI / Número de folio fiscal
certificate_number
Number of Certificate used
receiver_rfc
RFC del Receptor Registros / RFC del Receptor
total
Total del CFDI / Monto total
subtotal
Subtotal del CFDI / Monto Subtotal
status
PENDING,OK,ERROR
fiscal_status
ACTIVE, CANCELLED
public_xml_link
Download URL for the XML. Will only be returned if getUrls was sent true.
public_pdf_link
Download URL for the PDF. Will only be returned if getUrls was sent true.
link_expiration_date
Expiration date for both URL. Will only be returned if getUrls was sent true.
Merchants param
- ID para emitir facturas debe ser único: Este parámetro permite que un request no genere una nueva petición,para un proceso de reintentos.
- Habilitar facturación 4.0: Este parámetro actualmente ya se encuentra deprecado, ya no es necesario habilitarlo, todos los comercios emiten en la versión actual 4.0.
- Enviar facturación genérica cuando ocurre un error con el sat: Este parámetro solo se debe habilitar cuando el comercio no desee generar una factura genérica derivado de alguna inconsistencia de datos informado al SAT, de lo contrario se emitirá la factura generica.
Requirements
Testing Environment
- Enviar el merchant_id de la cuenta de pruebas de Openpay
- Ambientar correctamente el comercio en la tabla de MERCHANTS_INFO con la información del Set de datos.
Production Environment
- Enviar el merchant_id de la cuenta productiva de Openpay
- Send the tax information of the issuer of the CFDI
- Send the CSD (Digital Seal Certificate): private, public key and password granted by the SAT for the issuance of CFDI
- Send the logo of the trade that will be placed in the printed representation of the CFDI (PDF)
Set de pruebas
Datos para pruebas en ambiente DEV, QA, Sandbox
Coleccion Postman facturación de terceros
https://drive.google.com/file/d/17yWvizMZ0cs96TziFkhtoazjWXopu2bB/view?usp=sharing
Facturación comisiones:
Una vez ambientado correctamente el comercio hay que seguir estos pasos:
1.- Acceder como usuario administrador al dashboard.
2.- En la opción de “Configurar Pago automático”
3.- Habilitar todos los días:
4.- En la opción de “avanzadas”, habilitar en Operaciones permitidas “Liquidaciones”
5.- En la sección de “Comercio” agregar una plan de comisiones :
Yo agregue el de default de openpay
6.- Acceder como comercio y generar transacciones por medio del api o link de cobro.
7.- Cambiar la fecha en la tabla de TRANSACTIONS a las transacciones realizadas, por el mes anterior, por ejemplo si es Marzo cambiar la fecha a febrero:
8.- Una vez que se realizaron los ajustes de las fechas, correr mediante el manager el job de liquidaciones. merchant-available-balance. Esperar unos 10 mins
9.- Acceder con el comercio en el menú de “Comisiones” , aparecerá algo así:
10.- Accedemos al detalle con el icono negro que esta al final del registro (Signo de mayor).
11.- Nos mostrará esta pantalla y abajo del total el botón de generar factura, la generamos y debe mostrar un registro como esto al final del proceso.
Errores comunes
Los errores más comunes que emite el SAT al generar la factura son: