- Description
- Actions
- Workflows
- Documents
Invopop’s SAT Mexico app enables full compliance with Mexico’s CFDI e-invoicing framework. Use ready-made workflows to register suppliers, authorize the local PAC, and issue CFDI v4 invoices directly from Invopop. The app integrates with our local provider (SW Sapiens) to sign and stamp documents and deliver them to SAT.
Key Features
- Workflow Automation: The app makes workflow steps available for post-registration, supplier registration, and issuing invoices through SAT.
- PDF Generation: Optional PDF creation with configurable layout, locale, and formatting.
- PAC authorization: One-time e.firma (FIEL) sign-off to allow the PAC to stamp and submit CFDIs on your behalf.
- CFDI v4 compliance: Validations and transformations powered by the GOBL library and the
mx-cfdi-v4addon. - Supplier onboarding: Collect RFC and fiscal regime code; upload CSD (certificate & key) and activate via a secure registration link.
- White-Label Support: Invoicing can be performed either under a client’s brand (white-label) or directly by the issuing organization, according to operational needs. Make sure to check out our SAT Mexico Guide for instructions on how to issue invoices and onboard suppliers.
The following workflow actions will be available once you install and enable this app:

Send to SAT (Mexico)
Send GOBL invoices to the Mexican SAT using the CFDI format.
5
Add SAT registration link
Start the process of registering a GOBL party with the Mexican SAT by generating a link for them to use to upload their certificate.
The following templates help you get started quickly. Use them as is or as a base for your own flows.
SAT Mexico post-registration
SAT Mexico post-registration
Mark suppliers as
registered after successful onboarding.Example SAT supplier post-registration workflow with states
Copy
Ask AI
{
"name": "SAT supplier post-registration",
"description": "Sets suppliers as registered",
"schema": "org/party",
"steps": [
{
"id": "7e8d8070-3870-11ef-af29-4533d56cea03",
"name": "Set State",
"config": {
"state": "registered"
},
"summary": "Set state to `registered`{.state .registered}",
"provider": "silo.state"
}
],
"rescue": []
}
SAT Mexico register supplier
SAT Mexico register supplier
Adds a registration link to a supplier to upload digital certificates to issue CFDI-compliant e-invoices.
Example SAT register supplier workflow with states
Copy
Ask AI
{
"name": "SAT register supplier",
"description": "Register a supplier in SAT Mexico",
"schema": "org/party",
"steps": [
{
"id": "1a9bcde0-a816-11ef-87b2-fd751e6d3b88",
"name": "Sign Envelope",
"provider": "silo.close"
},
{
"id": "2061c540-a816-11ef-87b2-fd751e6d3b88",
"name": "Register SAT Issuer (Mexico)",
"provider": "sat-mx.register"
},
{
"id": "6f9282a0-3870-11ef-af29-4533d56cea03",
"name": "Set State",
"config": {
"state": "processing"
},
"summary": "Set state to `processing`{.state .processing}",
"provider": "silo.state"
}
],
"rescue": [
{
"id": "9a7b3d50-1358-11ef-af96-a18cfb3774fa",
"name": "Set State",
"config": {
"state": "error"
},
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}"
}
]
}
SAT Mexico issue invoice
SAT Mexico issue invoice
Issue a CFDI through SAT with optional PDF generation.
Example SAT issue invoice workflow with states
Copy
Ask AI
{
"name": "SAT issue invoice",
"description": "Issue an invoice and and generate PDF",
"schema": "bill/invoice",
"steps": [
{
"id": "3cbf8d50-a819-11ef-87b2-fd751e6d3b88",
"name": "Add Sequential Code",
"provider": "sequence.enumerate",
"summary": "Dynamic · SAT Invoices · 000001",
"config": {
"padding": 6,
"start": 1
}
},
{
"id": "fc75e4f0-8721-11ef-a962-73e3f2037a52",
"name": "Sign Envelope",
"provider": "silo.close"
},
{
"id": "1f60a0b0-ea9f-11ee-8846-3d414f6173e4",
"name": "Send to SAT (Mexico)",
"config": {
"generate_pdf": false,
"prepaid": false
},
"provider": "sat-mx"
},
{
"id": "7a645420-1358-11ef-af96-a18cfb3774fa",
"name": "Generate PDF",
"provider": "pdf",
"summary": "English",
"config": {
"layout": "Letter",
"logo_height": 40,
"locale": "en",
"date_format": "%Y-%m-%d"
}
},
{
"id": "85bf20c0-1358-11ef-af96-a18cfb3774fa",
"name": "Set State",
"config": {
"state": "sent"
},
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}"
}
],
"rescue": [
{
"id": "9a7b3d50-1358-11ef-af96-a18cfb3774fa",
"name": "Set State",
"config": {
"state": "error"
},
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}"
}
]
}
Paste into the Invopop Console (developer mode) or GOBL Builder.
Copy and paste these documents into the GOBL builder in order to preview and verify them.
SAT Mexico supplier
SAT Mexico supplier
SAT Mexico supplier example
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/org/party",
"uuid": "018fbeda-bc61-7000-b66d-398ce3e21c43",
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"ext": {
"mx-cfdi-fiscal-regime": "601"
}
}
B2B invoice (Personas Morales)
B2B invoice (Personas Morales)
In this example, we’re issuing a standard B2B invoice from a Mexican supplier (Persona Moral) to another Mexican business customer (Persona Moral).Notice:
- the minimal version (
sat-b2b.min.mdx) contains only the essential fields required to create the invoice, - the
mx-cfdi-v4addon ensures the document will be validated using the SAT CFDI 4.0 rules built into the GOBL library, - both supplier and customer have their RFC (tax identification) and fiscal regime properly specified,
- there are no totals or calculations in the minimal version; all these will be calculated automatically when running
gobl build, - the built version (
sat-b2b.mdx) shows the normalized document with calculated totals, line item sums, tax breakdowns (IVA), and automatically generated fields, and, - make sure to process it with the appropriate SAT workflow to generate the CFDI XML and obtain the fiscal stamp.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "MX",
"$addons": [
"mx-cfdi-v4"
],
"series": "XXMX",
"tax": {
"ext": {
"mx-cfdi-issue-place": "44100"
}
},
"supplier": {
"uuid": "018fbeda-bc61-7000-b66d-398ce3e21c43",
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"addresses": [
{
"street": "Julia Navarrete No. 1430",
"locality": "Guadalajara",
"region": "Jalisco",
"code": "44100",
"country": "MX"
}
],
"emails": [
{
"addr": "esckemperugarte@example.com"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "601"
}
},
"customer": {
"name": "UNIVERSIDAD ROBOTICA ESPAÑOLA",
"tax_id": {
"country": "MX",
"code": "URE180429TM6"
},
"addresses": [
{
"locality": "Ciudad de Mexico",
"region": "Ciudad de Mexico",
"code": "86991",
"country": "MX"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "601",
"mx-cfdi-post-code": "86991",
"mx-cfdi-use": "G01"
}
},
"lines": [
{
"quantity": "1",
"item": {
"name": "Standard Plan",
"price": "1000.00",
"ext": {
"mx-cfdi-prod-serv": "81112002"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
]
}
B2C invoice (Personas Físicas)
B2C invoice (Personas Físicas)
In this example, we’re issuing a B2C invoice from a Mexican supplier to an individual customer (Persona Física).Notice:
- the customer is identified as a Persona Física with their RFC and fiscal regime,
- the minimal version contains only essential fields; calculations are handled by GOBL,
- when running
gobl build, the system automatically calculates totals, applies IVA (VAT), and normalizes the document according to SAT requirements, - the built version shows all calculated fields including tax breakdowns, line totals, and final amounts,
- the
mx-cfdi-v4addon validates the document structure for Personas Físicas transactions, and, - the CFDI will be stamped by the PAC (Proveedor Autorizado de Certificación) after processing through the workflow.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "MX",
"$addons": [
"mx-cfdi-v4"
],
"series": "XXMX",
"tax": {
"ext": {
"mx-cfdi-issue-place": "44100"
}
},
"supplier": {
"uuid": "018fbeda-bc61-7000-b66d-398ce3e21c43",
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"addresses": [
{
"street": "Julia Navarrete No. 1430",
"locality": "Guadalajara",
"region": "Jalisco",
"code": "44100",
"country": "MX"
}
],
"emails": [
{
"addr": "esckemperugarte@example.com"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "601"
}
},
"customer": {
"name": "LUIS IAN ÑUZCO",
"tax_id": {
"country": "MX",
"code": "IAÑL750210963"
},
"addresses": [
{
"locality": "Ciudad de Mexico",
"region": "Ciudad de Mexico",
"code": "85256",
"country": "MX"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "616",
"mx-cfdi-use": "S01"
}
},
"lines": [
{
"quantity": "1",
"item": {
"name": "Standard Plan",
"price": "500.00",
"ext": {
"mx-cfdi-prod-serv": "81112002"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
]
}
Simplified invoice (Factura al público en general)
Simplified invoice (Factura al público en general)
In this example, we’re issuing a simplified invoice to the general public without specific customer details.Notice:
- the customer is set to “Público en General” (RFC: XAXX010101000) as per SAT requirements for general public invoices,
- the minimal version omits calculations;
gobl buildwill handle all totals and tax computations, - when running
gobl build, the system automatically calculates IVA, line totals, and applies the simplified invoice rules, - the built version shows the normalized document with all calculated fields and validations applied,
- simplified invoices have specific requirements in CFDI 4.0, which are automatically validated by the addon, and,
- these invoices are commonly used for retail transactions where customer identification is not required.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "MX",
"$addons": [
"mx-cfdi-v4"
],
"$tags": [
"simplified"
],
"series": "TEST",
"code": "00001",
"tax": {
"ext": {
"mx-cfdi-issue-place": "44100"
}
},
"supplier": {
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"ext": {
"mx-cfdi-fiscal-regime": "601"
}
},
"lines": [
{
"quantity": "1",
"item": {
"name": "Cobro por tarjetas",
"price": "10.00",
"ext": {
"mx-cfdi-prod-serv": "84141602"
}
},
"discounts": [
{
"percent": "10.0%",
"amount": "1.00"
}
],
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
},
{
"quantity": "1",
"item": {
"name": "Porcentaje sobre GMV",
"price": "10.00",
"unit": "service",
"ext": {
"mx-cfdi-prod-serv": "80141628"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"payment": {
"terms": {
"notes": "Condiciones de pago"
}
}
}
Global invoice
Global invoice
In this example, we’re issuing a global invoice that summarizes multiple transactions from a specific period (daily, weekly, or monthly).Notice:
- global invoices consolidate multiple sales to the general public into a single CFDI document,
- the minimal version includes only essential fields; totals for all consolidated transactions are calculated by GOBL,
- when running
gobl build, the system aggregates line items, calculates total IVA, and applies global invoice-specific validations, - the built version shows the complete document with all calculated totals, tax summaries, and period information,
- global invoices must be issued within specific timeframes as defined by SAT regulations, and,
- these are commonly used by businesses with high volumes of small transactions to the general public.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$addons": [
"mx-cfdi-v4"
],
"$tags": [
"global"
],
"series": "GLOBAL",
"code": "0001",
"tax": {
"ext": {
"mx-cfdi-global-month": "03",
"mx-cfdi-global-period": "04",
"mx-cfdi-global-year": "2025",
"mx-cfdi-issue-place": "44100"
}
},
"supplier": {
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"ext": {
"mx-cfdi-fiscal-regime": "601"
}
},
"lines": [
{
"quantity": "1",
"item": {
"ref": "SALE1",
"name": "Sale 1",
"price": "10.00"
},
"discounts": [
{
"percent": "10.0%"
}
],
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
},
{
"quantity": "1",
"item": {
"ref": "SALE2",
"name": "Sale 2",
"price": "20.00"
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"payment": {
"advances": [
{
"key": "cash",
"description": "Prepaid",
"percent": "100%"
}
]
}
}
Credit note
Credit note
In this example, we’re issuing a credit note (nota de crédito) to correct, cancel, or refund a previously issued invoice.Notice:
- the
typefield is set tocredit-noteto indicate this is a corrective document, - the
precedingfield contains references to the original invoice(s) being corrected with the relationship type, - the minimal version includes only essential correction details;
gobl buildcalculates the negative amounts, - when running
gobl build, the system automatically calculates negative totals, tax refunds, validates the relationship with the original invoice, and applies CFDI credit note rules, - the built version shows all calculated fields including negative amounts for the refund and proper tax adjustments,
- credit notes must be properly linked to the original CFDI using the UUID and relationship type, and,
- the PAC will validate the credit note against the original invoice before stamping.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$addons": [
"mx-cfdi-v4"
],
"type": "credit-note",
"series": "CN",
"code": "0003",
"preceding": [
{
"series": "TEST",
"code": "0001",
"issue_date": "2023-07-10",
"issue_time": "12:00:00",
"stamps": [
{
"prv": "sat-uuid",
"val": "1fac4464-1111-0000-1111-cd37179db12e"
}
]
}
],
"supplier": {
"name": "ESCUELA KEMPER URGATE",
"tax_id": {
"country": "MX",
"code": "EKU9003173C9"
},
"addresses": [
{
"street": "Julia Navarrete No. 1430",
"locality": "Guadalajara",
"region": "Jalisco",
"code": "44100",
"country": "MX"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "615"
}
},
"customer": {
"name": "UNIVERSIDAD ROBOTICA ESPAÑOLA",
"tax_id": {
"country": "MX",
"code": "URE180429TM6"
},
"addresses": [
{
"locality": "Ciudad de Mexico",
"region": "Ciudad de Mexico",
"code": "86991",
"country": "MX"
}
],
"ext": {
"mx-cfdi-fiscal-regime": "624",
"mx-cfdi-use": "G01"
}
},
"lines": [
{
"quantity": "2",
"item": {
"name": "Cigarros",
"ext": {
"mx-cfdi-prod-serv": "50211502"
},
"price": "100.1010",
"unit": "piece"
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"payment": {
"terms": {
"notes": "Pago a 30 días."
}
}
}
🇲🇽 Invopop resources for Mexico
🇲🇽 Invopop resources for Mexico
| Compliance | Compliance timeline |
| Apps | |
| Guides | SAT Mexico Guide |
| FAQ | Mexico FAQ |
| GOBL | |
| GitHub | gobl.cfdi |
Participate in our community
Ask and answer questions about SAT Mexico App →