Collect payments in Brazil and stay tax-compliant
You want to sell into Brazil and have Outpost handle the whole flow end to end. Outpost collects as Merchant of Record - B2C via card through your existing PSP checkout, or B2B via bank transfer against a proforma - takes care of Brazilian tax, issues the NFS-e, and settles the net proceeds to you.
Modules used
How it fits together
- 1Payments - Collect on the card or wire rail. Card sales round-trip a
taxCalculationIdthrough your PSP - wire sales settle against a proforma. - 2Taxes - Calculate Brazilian tax before each B2C charge (calculations). B2B buyer tax identity is supplied on the proforma. Outpost files and remits.
- 3Invoicing - Outpost issues the NFS-e and notifies you via
e_invoice.issued. Retrieve the document and send it to the buyer - see the flows below for when that happens relative to payment. - 4Reporting - Reconcile via the proceeds report (
report.available), one row per taxable event keyed bytaxCalculationId.
First-time payments
Two first-sale paths: B2C via card, or B2B via wire transfer.
B2C card sale
Each sale is keyed by a taxCalculationId. Pass it through the PSP as metadata so settlement and e-invoice events can correlate back to the order (webhooks carry it as externalRef).
- Call
POST /tax/calculationswith amount, CPF, full name, and address. Outpost returns the tax total plustaxCalculationId. - Show the tax total to the customer at checkout.
- Customer pays through your PSP checkout, with
taxCalculationIdpassed through as metadata. - On
payment.settled, grant access - do not wait for NFS-e issuance. - On
e_invoice.issued, retrieve the NFS-e (pre-signed S3 link) and send the receipt.
B2B wire transfer sale
Buyers pay against a proforma plus the NFS-e. The NFS-e carries the tax calculation, and the proforma carries payment details and line items. Issue both before the buyer pays, and grant access only after settlement.
- Create a proforma via
POST /api/proforma-invoiceswith CNPJ, buyer tax regime, company's legal representative, and address. - Outpost issues the NFS-e and emits
e_invoice.issued. Retrieve the document. - Send the proforma and the NFS-e to the buyer. The buyer pays Outpost locally in BRL.
- On
proforma_invoice.settled, grant access.
Recurring payments
Recurring B2C card payment
You store the tokenized payment method ID from the PSP - Outpost does not hold the token. A renewal runs the same path as a first-time payment, with one difference: no interactive checkout. You charge the stored payment method directly through the PSP.
Outpost's role is identical to a first payment: compute tax and issue the fiscal document. Each renewal is a separate taxable event with its own taxCalculationId, mapping 1:1 to a settlement and an NFS-e.
- Renewal falls due on your schedule.
- Call
POST /tax/calculationswith amount, CPF, full name, and address (same request shape as the first payment). - Charge the stored payment method through the PSP, passing the
taxCalculationIdthrough. - On
payment.settled, renew access. Tying access to NFS-e issuance would delay or block renewal if invoice generation is slow or fails. - On
e_invoice.issued, retrieve the NFS-e and send the receipt.
E-invoicing (NFS-e)
Issuing an e-invoice is required in Brazil when providing services. Outpost issues an NFS-e - the Brazilian fiscal document - and files it with the tax authorities.
B2B buyers pay against a proforma plus the NFS-e because the NFS-e includes the tax calculation and the proforma has payment details and line items.
Wait for NFS-e issuance
e_invoice.issued confirms issuance. Retrieve the document and send it to the buyer. On the wire rail, this happens before the buyer pays.
Wait for money settlement
A second webhook confirms settlement (payment.settled on card, proforma_invoice.settled on wire) - that is when you release the product. Outpost handles the tax filings. On the card rail, grant access on settlement and send the NFS-e when it arrives afterward.
Reporting
The proceeds report is available through report.available and the merchant portal. The webhook fires when a settlement period is finalized and includes a pre-signed S3 link. An optional periodic schedule can be agreed per merchant.
Format: one row per taxable event. Each row carries taxCalculationId so you can match it to your payment, plus the amount breakdown and the payout total it settled into. Module overview: Reporting.
Region notes
Brazil B2C flows key off CPF, and B2B flows key off CNPJ and buyer tax regime. Because Outpost collects and issues the invoice in this setup, the invoice is issued by Outpost's local entity, not yours.
Confirm Brazil is activated for your account before building - an unsupported or un-activated region surfaces as a region_not_supported or region_not_activated error at call time. Calculation request rules live under Taxes → Calculations.
API map
Schemas live in the API reference. Module pages explain when to call each surface.