The CFDI (Comprobante Fiscal Digital por Internet) is the standardized electronic invoicing format in Mexico, managed by the country’s tax authority, the SAT (Servicio de Administración Tributaria). This system ensures that all fiscal documents are digitally generated, validated, and reported to SAT in compliance with national tax laws.
In this guide we’ll walk you through the steps required to first register a supplier and then issue invoices in their name.
To issue invoices in Mexico via the SAT, you will need:
Supplier Information:
Name
Taxpayer ID (RFC - Registro Federal de Contribuyentes)
Address
Fiscal regime code (as defined by SAT)
Customer Information (same as supplier, plus):
CFDI use code (Código de uso CFDI)
Line items:
Quantity, unit price, and applicable tax rates
SAT product/service code (Clave Producto-Servicio)
Additional requirements
Selected invoice series
Place of issue code (Lugar de expedición)
Two certificates required by the SAT:
e.firma (FIEL): Confirms your identity before SAT. Required to obtain the CSD below and to authorise the PAC to issue on your behalf as explained in step 3 of the Register a Supplier section below.
CSD (Certificado de Sello Digital): Required to sign electronic invoices and prove they were issued by you.
Configure your Invopop workspace for CFDI invoicing by following these steps in the Invopop Console:
These instructions apply to both the sandbox and live environments, with a few exceptions related to supplier data and registration details when real information is not available.
Before starting, review the workflows guide to understand the general setup process.
In Console, create a new workflow and choose Empty Party workflow as the base. Then name the workflow with a descriptive label such as “SAT Post-registration flow”.
This worflow is composed by a single step:
Set State - To Registered.
Though you can customize it to suit your needs (adding a webhook, or an email notification after a supplier has been registered.)
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" } ]}
Before starting, review the workflows guide to understand the general setup process.
In Console, create a new workflow and choose Empty Party workflow as the base. Then name the workflow with a descriptive label such as “SAT Register Supplier”.
The new workflow will need to perform these steps:
Sign the Envelope
Register SAT Issuer
Set State - with configuration set to processing.
Add any additional steps you may need, and save the new workflow.
3
Connect the SAT Mexico App
In the left sidebar, under the Configuration section, click Apps. This will display all available apps.
Search for SAT Mexico and click Connect. The app will move to the “Enabled Apps” section.
Next, click Configure. This will open a dialog on the right with two fields:
Environment: Sandbox / Live
Post-registration workflow: SAT supplier post-registration
Before starting, review the workflows guide to understand the general setup process.
In Console, create a new workflow and choose Empty Invoice workflow as the base. Then name the workflow with a descriptive label such as “Issue SAT Invoices”.
The new workflow will need to perform these steps:
Add Sequential Code - with dynamic sequences, and name like “SAT Invoices”.
Send to SAT (Mexico).
Generate PDF - configured for your environment.
Set State - to “sent”.
Finally, in the Error Handling area, add the Set State action and select Error.
Add any additional steps you may need, and save the new workflow.
Registering a business entity requires uploading the CSD to our local provider, SW Sapiens, via a form (see Step 2: Complete Supplier Registration). This upload goes to either the sandbox or live environment, depending on your SAT Mexico App configuration.
Each CSD is tied to an RFC. When you submit an e-invoice, including the supplier’s RFC, SW Sapiens checks for a valid CSD linked to it, as SAT requires a valid certificate to issue invoices.
To speed things up, we’ve pre-registered all the test CSDs listed on the SW Sapien test page in the sandbox.
If you’re working in sandbox, you can either:
Skip this section and go straight to Send an Invoice using a test RFC, or
Register your own certificate by following the steps below.
1
Run the Supplier Registration Workflow
In the left sidebar, go to the Contacts section and click Suppliers.
Then click +New Supplier and enter the supplier’s data manually using the console, or switch to developer mode (</> icon) to paste the data directly.
Click Build, make sure there are no errors, then click Save.
Next, click Select Workflow and execute the Supplier Registration Workflow.
2
Complete Supplier Registration
After it completes, open the Details window and click on Meta. You should see a section called Registration Link with a URL:
You can access the registration link via the API by fetching the silo entry and locating the meta entry where the key isregistration-link.
Visit that URL to access the form for registering the supplier.
Note that this form can be shared directly with the supplier if required.
Fill out the form with the following information: Issuer RFC, CSD certificate file (.crt), private key (.key), and the private key password.
Follow this guide to generate the CSD certificate and key.
When you click Save, the form details are securely sent to the PAC (Proveedor Autorizado de Certificación), who will handle invoice signing and submission to the SAT.
3
Authorize PAC to Issue Invoices
Since we are using a local PAC, you must authorize the PAC to sign, stamp, and send CFDIs to the SAT on your behalf.
To do this, visit the following page and sign the manifesto using your e.firma (FIEL).
At this point, you’re ready to start sending invoices on behalf of the supplier.
The following examples are of partial GOBL documents you can copy and paste directly into the Invopop Console or store via the API as silo entries.
GOBL Invoices sent to the SAT require the following properties in order to perform the correct normalization and validation steps. Invopop will try to assign these automatically, but we recommend defining them explicitly before upload:
This is a standard B2C invoice from a Mexican supplier to a Mexican physical person with tax details, but no specific tax declaration requirements. This would be for a larger sale when the “Simplified” and “Global Invoice” do not apply.
In addition to the observations for regular B2B invoices, note in the customer:
the presence of an RFC in the same format as for companies, and,
the mx-cfdi-fiscal-regime and mx-cfdi-use extensions have been set to 616 and S01 respectively reflecting that the customer is not subject to tax.
It is important in Mexico to ensure the correct Fiscal Regime and CFDI Use codes are set correctly as the SAT will check these details and reject documents with unexpected combinations.
Simplified Invoice (Factura al público en general)
In Mexico, a General Public Invoice (Factura al Público en General) is a type of tax document issued to record sales made to customers who do not request an invoice with a specific Federal Taxpayer Registry (RFC) number. Instead, a generic RFC is used to identify the recipient:
XAXX010101000 for domestic transactions
XEXX010101000 for foreign transactions
This type of invoice is mandatory for businesses that sell to the general public and do not issue individual invoices for each transaction.
To create this type of invoice in Invopop:
the customer field is not required
the $tags field is used to identify this as a simplified invoice.