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.
Your finance team closes the month with hundreds or thousands of Stripe payments to invoice.
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.
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.
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.
You need to close the month with every invoiced payment, every refund with its credit note, and every open item in one place.
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.
Every payment follows the same path, from confirmation to its CFDI.
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.
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.
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.
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.
The app issues the matching CFDI for each event, so you don't have to enter it.
| In Stripe | The app issues |
|---|---|
| Payment from a customer with tax details | An 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 details | The 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 payment | A credit note for the refunded amount. |
| Lost dispute on an invoiced payment | A credit note, the same as for a full refund. |
| Payment in USD or EUR | The 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.
Accounting and invoicing teams see the status of each payment and its CFDIs in the Stripe Dashboard.
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.
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".
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.
If you turn it on, your customer gets their invoice by email as soon as it's issued.
Each CFDI's total matches the payment to the cent, including in USD and EUR.
A Stripe sandbox connects to the Fiscalapi test environment, and Stripe live mode connects to production.
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.
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).
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.
Your customer without tax details gets a link by email and uploads their Constancia de Situación Fiscal.
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).
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.
Each invoice, credit note, or global invoice uses 1 stamp. The stamp includes its cancellation and doesn't expire.
Buy stamps in packages sized to your volume. Above 100,000 stamps, pricing comes from our sales team.
$199 MXN a month plus ticket credits, if you want your customers to auto-invoice.
Detailed documentation, official SDKs, and tools to help you integrate quickly.
Take the next step
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.