[MX] Issuing Documents
Ingreso, Factura Global, RFC Genérico, and RFC Extranjero are all issued through the same Vertex document — invoice_type: "debit", document_type: "invoice" — and differ only in specific buyer fields. Egreso is its own document type.
Ingreso
Standard income invoice — the baseline every other variant in this section builds on. Minimum structure:
{
"supplier_company_id": "{{company_id}}",
"invoice_number": "1432",
"invoice_serie": "FE",
"invoice_type": "debit",
"document_type": "invoice",
"invoice_date": "2026-02-17",
"e_invoice": true,
"currency": "MXN",
"reason": "G03",
"buyer": {
"company": {
"name": "MARIA OLIVIA MARTINEZ SAGAZ",
"legal_name": "MARIA OLIVIA MARTINEZ SAGAZ",
"type": "person",
"address": {
"postal_code": "80290",
"country": "MX"
},
"tax_registrations": [
{
"type": "RFC",
"number": "MASO451221PM4",
"level": "country",
"location": "MX",
"status": "Régimen de Actividades Profesionales"
}
]
}
},
"items": [
{
"name": "Servicio de consultoría",
"quantity": 1,
"unit_amount": 700,
"amount": 700,
"taxes": [
{
"amount": 112,
"name": "VAT",
"rate": 0.16,
"rate_type": "percentage",
"adds_to_final_amount": true
}
]
}
]
}Field notes:
supplier_company_id— your Vertex-registered supplier.invoice_type/document_type— always"debit"/"invoice"for a standard Ingreso.reason— SAT'sUsoCFDIcatalog value (e.g.G03= gastos en general).buyer.company.tax_registrations[].status— the SAT régimen fiscal, mapped through the RegimenFiscal Mapping table in MX — Test RFCs.items[].taxes[]— one entry per tax applied to that line;adds_to_final_amount: truemeans it's added on top (like VAT), not withheld.
The Factura Global, RFC Genérico, and RFC Extranjero variants below only change the buyer block — everything else stays the same as this baseline.
Factura Global
Not a separate document type — same Ingreso payload, but two fields on the buyer are fixed:
"buyer": {
"company": {
"name": "PUBLICO EN GENERAL",
"tax_registrations": [
{ "type": "RFC", "number": "XAXX010101000", "level": "country", "location": "MX" }
]
}
}name must be exactly "PUBLICO EN GENERAL" — that's the field that tells Vertex/SAT this is a Factura Global (consolidating retail sales to the general public), not a one-off RFC Genérico sale at the same RFC. Used typically for end-of-day or end-of-period consolidation.
📮 Postman example — Factura Global
Egreso (Credit Note)
Used to cancel or partially reduce a previously issued Ingreso. This is its own Vertex document type:
invoice_type:"credit"document_type:"credit note"
Must reference the original CFDI's UUID (SAT-side CfdiRelacionados — see the raw XML in MX — SAT Guides, Egresos example).
📮 Postman example — Credit Note
RFC Genérico
Same RFC as Factura Global, different buyer name:
"buyer": {
"company": {
"name": "Juan Cliente Ocasional",
"tax_registrations": [
{ "type": "RFC", "number": "XAXX010101000", "level": "country", "location": "MX" }
]
}
}Any name other than PUBLICO EN GENERAL at RFC XAXX010101000 = RFC Genérico (billed individually), not Global.
RFC Extranjero
For foreign buyers without a Mexican RFC. Needs two tax_registrations[] entries:
"buyer": {
"company": {
"tax_registrations": [
{ "type": "RFC", "number": "XEXX010101000", "level": "country", "location": "MX" },
{ "type": "tax_id", "number": "111111111", "level": "country", "location": "USA" }
]
}
}The second entry's number is the foreign tax ID (maps to SAT NumRegIdTrib); its location (≠ "MX") is the fiscal residence (maps to SAT ResidenciaFiscal).
Updated 6 days ago
