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

# CFDI supplier registration guide

> Register suppliers to issue CFDI documents in Mexico using the SAT Mexico app.

## Introduction

Before a supplier can issue CFDI (*Comprobante Fiscal Digital por Internet*) documents in Mexico, they must be registered with Invopop's local PAC (*Proveedor Autorizado de Certificación*), SW Sapien, who signs and submits invoices to the country's tax authority, the SAT (*Servicio de Administración Tributaria*).

In this guide you'll learn how to register a supplier using the [SAT Mexico app](/apps/sat-mexico), and how to unregister them when they should no longer issue invoices from your workspace. Once a supplier is registered, continue with the companion guide: [Mexico: Issuing invoices](/guides/mx-sat-issuing).

## Prerequisites

To register a supplier with the SAT, you will need:

* **Supplier Information**:
  * Name
  * Taxpayer ID (RFC - *Registro Federal de Contribuyentes*)
  * Address
  * Fiscal regime code (as defined by SAT)
* **Two certificates** required by the SAT:
  1. **e.firma (FIEL)**: Confirms your identity before SAT. Required to obtain the CSD below and to authorize 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.

| -            | Sandbox                                                                                     | Live                                  |
| ------------ | ------------------------------------------------------------------------------------------- | ------------------------------------- |
| **Supplier** | Register a test supplier using one of SW Sapien's published test CSDs, or register your own | Real RFC and CSD certificate required |

## Setup

Configure your Invopop workspace for supplier registration 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 theme={"system"}
        {
          "name": "SAT supplier post-registration",
          "description": "Mark a SAT supplier 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": []
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/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 workflow is composed of 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 theme={"system"}
        {
          "name": "SAT register supplier",
          "description": "Register a supplier with SAT",
          "schema": "org/party",
          "steps": [
            {
              "id": "1a9bcde0-a816-11ef-87b2-fd751e6d3b88",
              "name": "Sign envelope",
              "provider": "silo.close"
            },
            {
              "id": "2061c540-a816-11ef-87b2-fd751e6d3b88",
              "name": "Register supplier with SAT",
              "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}"
            }
          ]
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/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 envelope**
        * **Register supplier with SAT**
        * **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>
</Steps>

## Register a supplier

Registering a business entity requires uploading the CSD to our local provider, SW Sapien, 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 Sapien checks for a valid CSD linked to it, as SAT requires a valid certificate to issue 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>

<Note>
  Registration is required even in the **sandbox** now. When following the steps below in that environment, you don't need a real CSD: you can register either your own company and certificate, or any of the test companies published on the [SW Sapien test page](https://developers.sw.com.mx/knowledge-base/donde-encuentro-csd-de-pruebas-vigentes/), where you can download each test company's certificate, private key, and password. Either way, make sure the supplier's name and RFC matches its certificate.
</Note>

<Steps>
  <Step title="Run the Supplier Registration Workflow">
    In the left sidebar, go to the **Parties** 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 Mexico supplier example theme={"system"}
    {
        "$schema": "https://gobl.org/draft-0/org/party",
        "name": "ESCUELA KEMPER URGATE",
        "tax_id": {
            "country": "MX",
            "code": "EKU9003173C9"
        },
        "addresses": [
            {
                "code": "26015",
                "country": "MX"
            }
        ],
        "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/-KQ2_uysex-mWyqz/assets/guides/mx-sat-reg-link.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=48c091d128197a5c0808ffe9ae4b1b71" width="450px" alt="Supplier Registration Link" data-path="assets/guides/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/-KQ2_uysex-mWyqz/assets/guides/mx-sat-reg-csd.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=5e54154e661bc666c0d3a7b3926c86a7" alt="Issuer Registration Form" width="1272" height="1138" data-path="assets/guides/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 if you need to.

    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. Head over to the [CFDI issuing invoices guide](/guides/mx-sat-issuing) to continue.

## Unregister a supplier

Unregistering a supplier revokes their invoice issuing privileges from your workspace. You might need to unregister an entity because the supplier is no longer your client or because of a change in their Tax ID. To do so, use the following workflow template:

<Tabs>
  <Tab title="Template">
    <Card title="SAT unregister supplier" icon="code-branch" iconType="duotone" href="https://console.invopop.com/redirect/workflows/new?template=mx-sat-unregister-supplier" cta="Add to my workspace">
      This workflow will revoke invoice issuing privileges for a SAT supplier.
    </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 unregister supplier workflow theme={"system"}
    {
        "name": "SAT unregister supplier",
        "description": "Unregister a supplier from SAT",
        "schema": "org/party",
        "steps": [
            {
                "id": "23affb5e-c15f-4b7b-9517-eaaf4ebd37c1",
                "name": "Unregister supplier from SAT",
                "provider": "sat-mx.unregister"
            },
            {
                "id": "45280ede-ab86-4e76-b55e-7ee744460748",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `void`{.state .void}",
                "config": {
                    "state": "void"
                }
            }
        ],
        "rescue": [
            {
                "id": "47816a6b-fa58-4b89-ae73-a8eee8e43b0a",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `error`{.state .error}",
                "config": {
                    "state": "error"
                }
            }
        ]
    }
    ```
  </Tab>

  <Tab title="Build from scratch">
    In [Console](https://console.invopop.com) create a new workflow and select [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) in the template selector, then add the following steps:

    1. **Unregister supplier from SAT** - Removes the supplier's registration so it can no longer issue invoices from this workspace.
    2. **Set state** - Select `void` to label the supplier accordingly.

    In the Error Handling section, add the **Set state** action and select `Error`.
  </Tab>
</Tabs>

## FAQ

<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="What happens if my CSD certificate is revoked?">
    Without a valid CSD, the issuer cannot stamp any CFDI through any PAC. SAT can administratively revoke a CSD when it suspects fraudulent activity, repeated non-compliance, or tax debts. Operations halt until the supplier resolves the underlying cause and obtains a new CSD. CSDs also expire every four years. Suppliers should monitor CSD validity proactively; Invopop relies on the CSD uploaded during supplier registration and does not manage its lifecycle.
  </Accordion>

  <Accordion title="How do I onboard a new supplier in Mexico?">
    Generate a registration link via the SAT Mexico Register Supplier workflow. The supplier uploads their CSD certificate (`.cer` + `.key` + password) and authorizes the PAC. Once validated, the supplier is ready to issue CFDIs.
  </Accordion>

  <Accordion title="What certificates does SAT/CFDI require to authenticate a supplier?">
    A CSD (Certificado de Sello Digital) issued by SAT specifically for invoicing — distinct from the FIEL (e.firma) used for portal login. The CSD comprises a `.cer` (X.509) and `.key` (encrypted private key) with a password set at generation. Validity: 4 years.
  </Accordion>

  <Accordion title="How are supplier credentials stored in Invopop for Mexico?">
    The CSD certificate (`.cer`), private key (`.key`), and key password are stored encrypted at rest. Invopop uses them only to seal CFDIs before transmission to the PAC; the password and key are never returned in API responses.
  </Accordion>
</AccordionGroup>

More available in our [Mexico FAQ](/faq/mexico) section

***

<AccordionGroup>
  <Accordion title="🇲🇽 Invopop resources for Mexico">
    |            |                                                                                                                                                                                                                                                                                                 |
    | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Compliance | <Icon icon="https://assets.invopop.com/flags/mx.svg" /> [Invoicing compliance in Mexico](/compliance/mexico)<br /> <Icon icon="timeline" /> [Compliance timeline](/timelines/mexico)                                                                                                            |
    | Apps       | <Icon icon="https://assets.invopop.com/apps/sat-mexico/icon.svg" /> [SAT Mexico](/apps/sat-mexico)<br /> <Icon icon="https://assets.invopop.com/apps/sw-sapien/icon.svg" /> [SW Sapien](/apps/sw-sapien)<br /> <Icon icon="https://assets.invopop.com/apps/cron/icon.svg" /> [Cron](/apps/cron) |
    | Guides     | <Icon icon="book" /> [Supplier registration](/guides/mx-sat-supplier)<br /> <Icon icon="book" /> [Issuing invoices](/guides/mx-sat-issuing)<br /> <Icon icon="book" /> [Receiving invoices](/guides/mx-sat-receiving)                                                                           |
    | FAQ        | <Icon icon="square-question" /> [Mexico FAQ](/faq/mexico)                                                                                                                                                                                                                                       |
    | GOBL       | <Icon icon="https://assets.invopop.com/icons/gobl.svg" />  [Mexico Tax Regime](https://docs.gobl.org/regimes/mx)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Mexican SAT CFDI Addon](https://docs.gobl.org/addons/mx-cfdi-v4)                                              |
    | GitHub     | <Icon icon="github" /> [gobl.cfdi](https://github.com/invopop/gobl.cfdi)                                                                                                                                                                                                                        |
  </Accordion>
</AccordionGroup>

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about invoicing in Mexico →
</Card>
