Fiscalapi

Automatic CFDI invoicing
for every Stripe payment

For companies that receive hundreds or thousands of payments a month in Stripe. Each confirmed payment generates its CFDI 4.0 (Mexico's electronic invoice): the customer's invoice with tax details, the global invoice (factura global, one CFDI that groups a period's sales to the general public) for each period, and the credit note (an Egreso CFDI, type E) for each refund or lost dispute.

Fiscalapi for Stripe is an app in the Stripe App Marketplace. You set it up in the Stripe Dashboard, and it issues your CFDIs with your issuer's CSD (the digital seal certificate used to sign CFDIs) and the stamps (stamping credits) you buy in Fiscalapi.

For companies with high payment volume in Stripe

Your finance team closes the month with hundreds or thousands of Stripe payments to invoice.

SaaS with subscriptions

You charge the same customers every month, and many of them ask for an invoice in their name. Each paid renewal generates its own invoice.

E-commerce and marketplaces

You sell to businesses and individuals at the same checkout. Customers who give their tax details get their invoice. Other payments go into the global invoice.

Apps, courses, and digital content

You receive many small payments from people without an RFC (Mexico's taxpayer ID). All of them go into the period's global invoice, which the app issues automatically.

Finance and accounting

You need to close the month with every invoiced payment, every refund with its credit note, and every open item in one place.

A thousand payments a month means a thousand payments to invoice

Stripe collects the payments, but you issue the CFDI for your sales. By hand, someone on your team copies amounts and tax details from each payment, and one wrongly entered RFC forces you to correct the invoice.

Payments without tax details go into the global invoice, which the SAT (Mexico's tax authority) requires within 24 hours after each period closes. Each refund and each lost dispute needs its own credit note. Each CFDI's total must match the payment, including in dollars or euros.

At month-end, your accounting team needs to know which payments haven't been invoiced yet and why.

How it works

Every payment follows the same path, from confirmation to its CFDI.

  1. 1

    Install the app

    Install Fiscalapi from the Stripe App Marketplace, link your Stripe account to your Fiscalapi tenant (the space in Fiscalapi that holds your issuers, recipients, credits, and data), and choose the issuer.

  2. 2

    Your customer pays in Stripe

    You take payments as usual, with Stripe Checkout, Stripe Invoicing, subscriptions, or any other payment. The app picks up each payment as soon as it's confirmed.

  3. 3

    The app issues the CFDI

    If your customer has tax details, they get an invoice in their name. If not, the payment goes into the global invoice, which the app issues within 24 hours after the period closes.

  4. 4

    Refunds and disputes

    Each refund or lost dispute generates its credit note. Anything that couldn't be invoiced appears in "Needs attention", with the reason and the next step.

Which CFDI the app issues for each Stripe event

The app issues the matching CFDI for each event, so you don't have to enter it.

Stripe events and the CFDI that Fiscalapi for Stripe issues for each one
In StripeThe app issues
Payment from a customer with tax detailsAn income invoice (type I, the regular sales invoice) in the customer's name, as soon as the payment is confirmed.
Payment from a customer without tax detailsThe payment goes into the period's global invoice, daily, weekly, or monthly, which is issued within 24 hours after the period closes.
Full or partial refund of an invoiced paymentA credit note for the refunded amount.
Lost dispute on an invoiced paymentA credit note, the same as for a full refund.
Payment in USD or EURThe CFDI with the FIX exchange rate that Banxico (Banco de México, Mexico's central bank) publishes. Euros use the FIX rate multiplied by the euro equivalence (the euro's value in US dollars) that the DOF (Mexico's official gazette) publishes.

Each CFDI's total matches the payment's total to the cent. Each CFDI uses 1 stamp.

Finance controls, inside Stripe

Accounting and invoicing teams see the status of each payment and its CFDIs in the Stripe Dashboard.

Period summary

A page in the Stripe Dashboard with the invoiced payments, the payments waiting for the global invoice, and the ones in "Needs attention", plus your global invoices.

Needs attention

Each payment that couldn't be invoiced appears with the reason and the next step. If you have no stamps left, or Banxico hasn't published the exchange rate yet, the app retries automatically. If the problem is the customer's tax details, correct them and click "Retry".

Actions in the payment panel

Correct an invoice with a replacement CFDI (a corrected CFDI that replaces a canceled one), issue a credit note, download the XML and PDF, or resend the CFDI to your customer.

Invoices by email

If you turn it on, your customer gets their invoice by email as soon as it's issued.

Totals to the cent

Each CFDI's total matches the payment to the cent, including in USD and EUR.

Testing before production

A Stripe sandbox connects to the Fiscalapi test environment, and Stripe live mode connects to production.

Your customers' tax details

They're stored on the Stripe Customer. If you want your customers to auto-invoice (auto-invoice: a CFDI your customer requests from a ticket, a sales receipt they can later turn into a CFDI; you remain the issuer), add Auto CFDI invoicing, which is optional.

From the customer panel

Enter them in the app, in the customer's record in Stripe, or import them from their Constancia de Situación Fiscal (the SAT tax status certificate).

In Stripe Checkout

Your Checkout session asks for the RFC, the legal name (as registered with the SAT), the tax regime (régimen fiscal, the SAT category a taxpayer is registered under, such as 601 or 626), the CFDI use (how the recipient will use the CFDI for tax purposes), and the postal code. The app saves them on the Stripe Customer.

Send your customer a link

Your customer without tax details gets a link by email and uploads their Constancia de Situación Fiscal.

Pricing

The app has no extra cost: it's included in CFDI invoicing, and you only pay for the stamps it uses. Prices include IVA (Mexico's value-added tax, VAT).

  • Included in CFDI invoicing

    The app, with its global invoices and credit notes, is included in the CFDI invoicing subscription: $199 MXN a month or $2,149.20 MXN a year. If you already have that subscription, you don't pay anything more for the app, only for the stamps you use.

  • 1 stamp per CFDI

    Each invoice, credit note, or global invoice uses 1 stamp. The stamp includes its cancellation and doesn't expire.

  • High volume

    Buy stamps in packages sized to your volume. Above 100,000 stamps, pricing comes from our sales team.

  • Auto CFDI invoicing, optional

    $199 MXN a month plus ticket credits, if you want your customers to auto-invoice.

Frequently asked questions about Fiscalapi for Stripe

What is Fiscalapi for Stripe?

It's the Fiscalapi app for the Stripe App Marketplace. It issues CFDI 4.0 invoices for the payments you receive in Stripe: the customer's invoice with tax details as soon as the payment is confirmed, the global invoice for the other payments when each period closes, and the credit note for each refund or lost dispute.

Is this the invoice for the fees Stripe charges me?

No. Stripe issues the CFDI for its fees. Fiscalapi for Stripe issues the CFDIs for the payments you receive from your customers.

Do I need to code?

No. You add your issuer and its CSD in Fiscalapi, install the app, and set it up from the Stripe Dashboard. The app invoices your payments as you receive them. If you want to collect tax details in Stripe Checkout, your team adds those fields to the session. The documentation explains how.

How is the global invoice for Stripe payments issued?

Payments from customers without tax details go into the global invoice, which the app issues automatically when each period closes, within the 24 hours the SAT requires.

How often is the global invoice issued?

You choose it in the app's settings: daily, weekly, or monthly. The app issues it within 24 hours after each period closes.

How are payments in dollars or euros invoiced?

The app invoices payments in MXN, USD, and EUR. USD payments use the FIX exchange rate that Banxico publishes, and EUR payments use the FIX rate multiplied by the euro equivalence published in the DOF. Each CFDI's total matches the payment to the cent.

How do I get my customers' tax details?

Enter them in the app, in the customer's record in Stripe, or import them from their Constancia de Situación Fiscal. You can also collect them in Stripe Checkout, or send your customer a link by email so they can upload their Constancia. If you want your customers to auto-invoice, add Auto CFDI invoicing.

What happens if a payment can't be invoiced?

It appears in the "Needs attention" tab of the Stripe Dashboard, with the reason and the next step. If you have no stamps left, or Banxico hasn't published the exchange rate yet, the app retries automatically. If the problem is your customer's tax details, correct them and click "Retry".

Can I test the app before invoicing in production?

Yes. A Stripe sandbox connects to the Fiscalapi test environment, and Stripe live mode connects to production.

How much does Fiscalapi for Stripe cost?

The app has no extra cost. It's included in the CFDI invoicing subscription, at $199 MXN a month or $2,149.20 MXN a year. If you already have the subscription, you don't pay anything more for the app, only for the stamps you use. Each invoice, credit note, or global invoice uses 1 stamp, which includes its cancellation and doesn't expire. Above 100,000 stamps, pricing comes from our sales team. Auto CFDI invoicing is optional: $199 MXN a month plus ticket credits. Prices include IVA.

Take the next step

Invoice your Stripe payments with Fiscalapi

Activate CFDI invoicing, install the app, and invoice every payment confirmed in Stripe from then on. If your team wants to validate it first, connect it to a Stripe sandbox.