> ## Documentation Index
> Fetch the complete documentation index at: https://invopop-singapore.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# CFDI & SAT Guide

> Issue CFDI documents in Mexico using the SAT Mexico provider.

## Introduction

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.

## Prerequisites

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:
  1. **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](#register-a-supplier) section below.
  2. **CSD (Certificado de Sello Digital)**:  Required to sign electronic invoices and prove they were issued by you.

## Setup

Configure your Invopop workspace for CFDI invoicing by following these steps in the [Invopop Console](https://console.invopop.com):

<Info>
  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.
</Info>

<Steps>
  <Step title="Set up the Supplier Post-Registration Workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="SAT supplier post-registration workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=sat-postregistration" cta="Add to my workspace">
          This workflow marks Suppliers as `Registered`. You will select this workflow in the SAT (Mexico) app configuration later.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.

        ```json Example SAT supplier post-registration workflow with states theme={"system"}
        {
          "name": "SAT supplier post-registration",
          "description": "Sets suppliers as registered",
          "schema": "bill/invoice",
          "steps": [
            {
              "id": "7e8d8070-3870-11ef-af29-4533d56cea03",
              "name": "Set State",
              "config": {
                "state": "registered"
              },
              "summary": "Set state to `registered`{.state .registered}",
              "provider": "silo.state"
            }
          ]
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) 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:

        1. **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.)
      </Tab>
    </Tabs>
  </Step>

  <Step title="Set up the Supplier Registration Workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="SAT register supplier workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=mx-sat-register-supplier" cta="Add to my workspace">
          Issues a registration request for a supplier to complete in order to issue invoices through SAT.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.

        ```json Example SAT register supplier workflow with states theme={"system"}
        {
          "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"
            }
          ]
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) 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.
      </Tab>
    </Tabs>
  </Step>

  <Step title="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
  </Step>

  <Step title="Set up the SAT Issue Invoice Workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="SAT issue invoice workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=sat-issue-invoice" cta="Add to my workspace">
          Issue a CFDI invoice through SAT.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view.

        ```json Example SAT issue invoice workflow with states theme={"system"}
        {
          "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}"
            }
          ]
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) 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".
        * **Sign Envelope:** - no configuration needed
        * **Send to SAT (Mexico):** no configuration needed.
        * **Generate PDF** - Set according to your needs. Layout "Letter" and locale "es - Spanish" are recommended.
        * **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.
      </Tab>
    </Tabs>
  </Step>
</Steps>

## Running

Learn how to register a business entity (supplier) and issue CFDI invoices:

<info>
  You can complete this process through the Invopop Console or the API. We'll walk through it using the Console, but don't worry, the steps are nearly identical for the API. We'll add notes along the way to clarify any differences.
</info>

### Register a Supplier

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.

<Note>
  To speed things up, we've pre-registered all the test CSDs listed on the [SW Sapien test page](https://developers.sw.com.mx/knowledge-base/donde-encuentro-csd-de-pruebas-vigentes/) in the sandbox.

  If you're working in **sandbox**, you can either:

  * Skip this section and go straight to [Send an Invoice](#send-an-invoice) using a test RFC, or
  * Register your own certificate by following the steps below.
</Note>

<Steps>
  <Step title="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.

    Here is an example supplier for reference:

    ```json SAT Mexico supplier example expandable theme={"system"}
    {
      "$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"
      }
    }
    ```

    Click **Build**, make sure there are no errors, then click **Save**.

    Next, click **Select Workflow** and execute the **Supplier Registration Workflow**.
  </Step>

  <Step title="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:

    <Frame>
      <img src="https://mintcdn.com/invopop-singapore/e7r7hAu6qvW2ozEr/guides/images/mx-sat-reg-link.png?fit=max&auto=format&n=e7r7hAu6qvW2ozEr&q=85&s=491de6f61b055623f18c4b56bf0a7c51" width="450px" alt="Supplier Registration Link" data-path="guides/images/mx-sat-reg-link.png" />
    </Frame>

    <Info>
      You can access the registration link via the API by [fetching the silo entry](/api-ref/silo/entries/fetch-an-entry) and locating the meta entry where the key is`registration-link`.
    </Info>

    Visit that URL to access the form for registering the supplier.

    <Note>
      Note that this form can be shared directly with the supplier if required.
    </Note>

    <Frame>
      <img src="https://mintcdn.com/invopop-singapore/e7r7hAu6qvW2ozEr/guides/images/mx-sat-reg-csd.png?fit=max&auto=format&n=e7r7hAu6qvW2ozEr&q=85&s=a65a3491da21a480ac9529d354f976dc" alt="Issuer Registration Form" width="1272" height="1138" data-path="guides/images/mx-sat-reg-csd.png" />
    </Frame>

    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](https://sw.com.mx/blog/administracion-fiscal/sellos-digitales-que-son-y-como-funcionan) 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.

    <Note>
      You can fill the form via API by sending a PUT request to the registration link. The payload should be a JSON object with the following fields:

      * `csd_file` (string): The CSD certificate file (`.crt`).
      * `key_file` (string): The private key (`.key`).
      * `password` (string): The private key password.

      The response will be a JSON object with the following fields:

      * `rfc` (string): The RFC of the supplier.
      * `active_cert` (boolean): Whether the certificate is active.
    </Note>
  </Step>

  <Step title="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](https://firmamanifiesto.lunasoft.net/) and **sign the manifesto using your e.firma (FIEL)**.
  </Step>
</Steps>

At this point, you're ready to start sending invoices on behalf of the supplier.

### Send an Invoice

The following examples are of partial GOBL documents you can copy and paste directly into the [Invopop Console](https://console.invopop.com) 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:

* `$regime` to be set to [`MX`](https://docs.gobl.org/regimes/mx)
* `$addons` to include [`mx-cfdi-v4`](https://docs.gobl.org/addons/mx-cfdi-v4)

<AccordionGroup>
  <Accordion title="B2B Invoice (Personas Morales)">
    This main type of invoice is a standard B2B invoice from a Mexican supplier to another Mexican customer.

    Notice:

    * we've added the `mx-cfdi-v4` addon, this ensures the document will be validated using the CFDI v4 rules built into the GOBL library,
    * extensions (`ext`) fields have been used in multiple locations for fields whose values cannot be determined any other way,
    * VAT will be applied at the standard rate, the percentage will be set automatically, and,
    * there are no totals nor calculations, all of these will be made automatically when uploading.

    ```json SAT B2B Invoice theme={"system"}
    {
      "$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"
            }
          ]
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="B2C Invoice (Personas Físicas)">
    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.

    ```json SAT B2C Invoice theme={"system"}
    {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$regime": "MX",
        "$addons": [
            "mx-cfdi-v4"
        ],
        "uuid": "0197a6ba-658f-7000-b2b4-31647f904530",
        "type": "standard",
        "series": "XXMX",
        "issue_date": "2025-06-25",
        "issue_time": "08:30:00",
        "currency": "MXN",
        "tax": {
            "ext": {
                "mx-cfdi-doc-type": "I",
                "mx-cfdi-issue-place": "44100",
                "mx-cfdi-payment-method": "PPD"
            }
        },
        "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": [
            {
                "i": 1,
                "quantity": "1",
                "item": {
                    "name": "Standard Plan",
                    "price": "500.00",
                    "ext": {
                        "mx-cfdi-prod-serv": "81112002"
                    }
                },
                "sum": "500.00",
                "taxes": [
                    {
                        "cat": "VAT",
                        "rate": "standard",
                        "percent": "16.0%"
                    }
                ],
                "total": "500.00"
            }
        ],
        "totals": {
            "sum": "500.00",
            "total": "500.00",
            "taxes": {
                "categories": [
                    {
                        "code": "VAT",
                        "rates": [
                            {
                                "key": "standard",
                                "base": "500.00",
                                "percent": "16.0%",
                                "amount": "80.00"
                            }
                        ],
                        "amount": "80.00"
                    }
                ],
                "sum": "80.00"
            },
            "tax": "80.00",
            "total_with_tax": "580.00",
            "payable": "580.00"
        }
    }
    ```
  </Accordion>

  <Accordion title="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.

    ```json SAT Mexico simplified invoice example theme={"system"}
    {
      "$schema": "https://gobl.org/draft-0/bill/invoice",
      "$regime": "MX",
      "$addons": [
        "mx-cfdi-v4"
      ],
      "$tags": [
        "simplified"
      ],
      "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
      "type": "standard",
      "series": "TEST",
      "code": "00001",
      "issue_date": "2023-07-10",
      "issue_time": "12:00:00",
      "currency": "MXN",
      "tax": {
        "ext": {
          "mx-cfdi-doc-type": "I",
          "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",
              "percent": "16.0%"
            }
          ]
        },
        {
          "quantity": "1",
          "item": {
            "name": "Porcentaje sobre GMV",
            "price": "10.00",
            "unit": "service",
            "ext": {
              "mx-cfdi-prod-serv": "80141628"
            }
          },
          "taxes": [
            {
              "cat": "VAT",
              "rate": "standard",
              "percent": "16.0%"
            }
          ]
        }
      ],
      "payment": {
        "terms": {
          "notes": "Condiciones de pago"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Global Invoice">
    The Global Invoice is used to group a set of invoices into a single CFDI document.

    Notice:

    * the `$tags` field has been used to identify this as a global invoice,
    * each `line` has a `ref` which is used to identify the invoice that it belongs to,
    * the `tax.ext.mx-cfdi-global-month`, `mx-cfdi-global-period`, and `mx-cfdi-global-year` fields have been used to identify the global invoice period.

    ```json SAT Mexico global invoice example theme={"system"}
    {
      "$schema": "https://gobl.org/draft-0/bill/invoice",
      "$addons": [
        "mx-cfdi-v4"
      ],
      "$tags": [
        "global"
      ],
      "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
      "series": "GLOBAL",
      "code": "0001",
      "issue_date": "2025-04-01",
      "issue_time": "12:00:00",
      "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%"
          }
        ]
      }
    }
    ```
  </Accordion>

  <Accordion title="Credit Note">
    The Credit Note is used to cancel an invoice.

    Notice:

    * the `$type` field has been set to `credit-note`,
    * the `preceding` field has been used to identify the invoice that is being cancelled.

    ```json SAT Mexico credit note example theme={"system"}
    {
      "$schema": "https://gobl.org/draft-0/bill/invoice",
      "$addons": [
        "mx-cfdi-v4"
      ],
      "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
      "issue_date": "2023-05-29",
      "issue_time": "12:00:00",
      "type": "credit-note",
      "series": "CN",
      "code": "0003",
      "currency": "MXN",
      "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"
            }
          ],
          "total": "200.2020"
        }
      ],
      "payment": {
        "terms": {
          "notes": "Pago a 30 días."
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

## FAQ

Please contact the [Invopop support team](email:support@invopop.com) if you have any questions that are not listed here.

<AccordionGroup>
  <Accordion title="Which PAC (Proveedor Autorizado de Certificación) does Invopop use?">
    Invopop uses [SW Sapien](https://sw.com.mx), an Authorised Certification
    Provider (PAC), to sign and stamp CFDI documents for the Mexican tax
    authority.
  </Accordion>

  <Accordion title="Where can I find the mapping of GOBL fields to CFDI?">
    The library that transforms GOBL into CFDI documents is publicly available as an open-source project and can be found at [github.com/invopop/gobl.cfdi](https://github.com/invopop/gobl.cfdi).

    For further details on how GOBL prepares data for conversion, see the [Mexico Tax Regime](https://github.com/invopop/gobl/blob/main/regimes/mx/README.md).
  </Accordion>
</AccordionGroup>
