Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Collect surcharges


Public preview

Collect surcharges Public preview

Offset your card processing costs in the form of surcharges.

Australia surcharging changes

On October 1, 2026, Stripe is disabling support for surcharging in Australia following the RBA’s effective prohibition on surcharging. If you currently surcharge in Australia, remove surcharging from your integration before October 2026.

Surcharging allows you to offset some of the cost of accepting card payments. If you’re a platform that determines and collects payment fees from your connected accounts, surcharging allows your connected accounts to offset these costs.

Compliance

If you impose a surcharge on your card payments, you must comply with all applicable laws, regulations, and card network rules. Surcharging requirements vary across regions and card types and might include obligations to:

  • Accurately calculate permissible surcharge amounts so these amounts don’t exceed limits imposed by applicable law, card networks, or your cost of acceptance (which you must determine ).
  • Notify your acquirer or card network of your intent to apply a surcharge, if required by your jurisdiction or the card network.
  • Surcharge consistently across card networks or card products.
  • Conspicuously disclose surcharge amounts that apply to each transaction and the total costs to the cardholder ahead of purchase, and reflect the surcharge separately on the transaction receipt.
  • Provide the ability to cancel the transaction, or choose a different payment method after the surcharge amount is disclosed to the cardholder.

Even when surcharging functionality is available, you need to make sure that surcharging is permitted and that the surcharge you impose doesn’t exceed limitations set by applicable law, regulations, or the card networks. You’re responsible for understanding and complying with any country- or region-specific requirements or restrictions (including any state, province, or territory requirements or restrictions).

The information on this page relating to your compliance with these requirements is for your general guidance, and isn’t legal, tax, accounting, or other professional advice. Consult a professional if you’re unsure about your obligations.

Warning

You’re fully responsible for any fines, penalties, or losses arising in connection with your failure to adhere to applicable surcharging requirements.

Availability

Surcharging is available on Visa, Mastercard, Amex, Discover, Eftpos, Diners, Interac, JCB, Maestro, and Unionpay.

Surcharging is available in the following countries and payment methods:

CountryPermitted payment methodsMaximum surcharge amount
United StatesCredit cards only3%
CanadaCredit cards only2.4%
AustraliaAll cards4%
New ZealandAll cards4%

Before you begin

  • Your integration must be on API version 2026-03-25.preview . You must use the public preview SDKs or specify that Stripe version in your request header to access preview features.
  • See API changes if you’re currently in the surcharging private preview.

Determine surcharging availability

When you send either surcharge.amount or surcharge.enforce_validation and attach a payment method to your PaymentIntent, the response includes the following attributes to help you determine surcharge availability:

  • surcharge. status indicates whether surcharging is available based on the country and the funding type of the payment method.
  • This returns available or unavailable .
  • surcharge. maximum _ amount indicates the maximum surcharge amount you can pass in. However, this value is a technical restriction, not a Stripe suggested amount. The surcharge limits imposed by laws or card network requirements in your jurisdiction might differ from the surcharge. maximum _ amount . You’re responsible for making sure the surcharge you impose doesn’t exceed such limits.
  • By default, Stripe validates the surcharge you apply to a given PaymentIntent against the maximum surcharge amount. If you attempt to surcharge in excess of the maximum surcharge amount, you get an error.

Disable surcharge amount validations

  • You can disable the maximum surcharge amount validation by passing in enforce _ validation: disabled . If you disable validation by setting enforce _ validation: disabled , Stripe doesn’t return the maximum _ amount field and the default technical restriction on the surcharge amount doesn’t apply.
  • You can disable the maximum surcharge amount validation at the time you create, update, or confirm a PaymentIntent. After you either enable or disable the maximum surcharge amount validation, you can no longer modify surcharge. enforce _ validation .
  • Passing in enforce _ validation: disabled doesn’t disable any other restrictions on availability, including restrictions on card funding type and other regional restrictions. You must make sure that the surcharge you impose complies with all applicable laws and card network requirements whether or not you disable the maximum surcharge amount validation.
  • You can also pass in enforce _ validation: enabled to explicitly enable maximum surcharge amount technical validations. After you do so, you can no longer modify surcharge. enforce _ validation .
  • By default, Stripe enforces the maximum surcharge amount technical restrictions. If you don’t pass in any field in surcharge. enforce _ validation , the response includes enforce _ validation: automatic to signify this behavior.

Scenario 1: Enable validation and use maximum_amount

Create a PaymentIntent with validation enabled to receive the maximum_amount:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Example response

{
 "id": "pi_123",
 "object": "payment_intent",
 "amount": 1000,
 "amount_capturable": 0,
 "amount_details": {
 "surcharge": {
 "enforce_validation": "enabled",
 "maximum_amount": 24,
 "status": "available"
 }
 },
 "status": "requires_confirmation"
}

Scenario 2: Disable validation

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Stripe doesn’t return maximum_amount when you disable validation.

Example response

{
 "id": "pi_123",
 "object": "payment_intent",
 "amount": 1000,
 "amount_capturable": 0,
 "amount_details": {
 "surcharge": {
 "enforce_validation": "disabled",
 "status": "available"
 }
 },
 "status": "requires_confirmation"
}

Calculate the surcharge amount

You must calculate surcharge amounts that comply with legal, regulatory, and card network requirements for each transaction. Your payment processing costs vary based on card brand, funding type, and the available networks.

If Stripe returns the maximum surcharge amount, always compare your calculated surcharge with the surcharge.maximum_amount returned in the PaymentIntent for the selected payment method to avoid errors. Card network and jurisdiction rules around surcharging might change over time. Stripe might modify the maximum surcharge amount. You’re responsible for consuming surcharge.maximum_amount. If you apply a surcharge in excess of the surcharge.maximum_amount, you might face validation errors.

Confirm the payment with a surcharge

After calculating the surcharge and disclosing it to the customer, you can apply the surcharge when confirming or capturing the PaymentIntent.

Specify the total amount inclusive of surcharge

Stripe charges only the amount in the top-level amount field and doesn’t increment the amount with any additional values. So, you need to specify the total amount inclusive of the surcharge in the amount field. For example, for a 10.00 USD subtotal with a 0.20 USD surcharge, you’d pass in 10.20 USD in the top-level amount field. The surcharge amount of 0.20 USD would be specified separately in amount_details[surcharge][amount].

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Example response

{
 "id": "pi_123",
 "object": "payment_intent",
 "amount": 1020,
 "amount_capturable": 1020,
 "amount_details": {
 "surcharge": {
 "enforce_validation": "enabled",
 "amount": 20,
 "maximum_amount": 24,
 "status": "available"
 }
 },
 "status": "requires_capture"
}

Apply surcharge when you create a PaymentIntent

Specify the top level amount field inclusive of the surcharge amount when creating a PaymentIntent:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Apply surcharge on capture

You can also apply the surcharge when capturing. You can apply this behavior in various scenarios:

  • Adjust the surcharge post-confirmation : If you need to modify the surcharge amount after confirmation, you can only reduce it. You can’t increase the surcharge amount during capture.
  • Multicapture scenarios : When performing multiple captures on a single PaymentIntent, you can specify how much to surcharge for each individual capture. The sum of each surcharge amount passed during multicapture can’t exceed the surcharge amount passed upon confirmation.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Refunds

You must implement logic for returning surcharges to a customer when you issue a refund. Card network rules and certain laws and regulations require that you return the entire surcharge in the event of a full refund, and return a prorated surcharge in the case of a partial refund. For example, assume a customer returns an item with a value of 60.00 USD from a total order of 100.00 USD, where you applied a surcharge of 1.50 USD. To refund a prorated surcharge, you must refund 60.90 USD (60.00 USD, plus 60/100 of the 1.50 USD surcharge).

Receipts

Stripe prebuilt receipts automatically display the surcharge. If you build custom receipts, show the applied surcharge amount separately. For example, for a purchase totaling 10.20 USD, where you applied a surcharge of 0.20 USD, you need to display 10.00 and 0.20 as separate line items in the receipt. Inspect the amount_details.surcharge.amount on the PaymentIntent to view the applied surcharge.

Reporting

The amount_details_surcharge_amount field is available in the Sigma payment_intents table for your convenience. This field represents the surcharge amount applied on the transaction that you send to the card network.

Feature interoperability

  • You can use surcharging with Payment Line Items .
  • You can use surcharging with Multicapture , and you can specify different surcharge amounts on each capture.
  • You can’t capture a surcharge amount that’s greater than what was passed upon confirmation.
  • The sum of each surcharge amount passed during multicapture can’t exceed the surcharge amount passed upon confirmation.
  • If you use surcharging with Incremental Authorization , you can decrease the surcharge amount using the PaymentIntent capture endpoint if you capture less than you authorize. However, you can’t increase the surcharge amount regardless of how much the amount is increased during incremental authorization.
  • Surcharging isn’t available when autocapturing with partial authorizations.

Migration from private preview API changes

If you’re currently using the private preview version of surcharging, here are the key changes you need to make to access the public preview version behavior:

Private PreviewPublic Preview
amount_surcharge (top-level)amount_details[surcharge][amount]
Stripe automatically increments amountYou specify total amount inclusive of surcharge
Amount validation is always enforcedamount_details[surcharge][enforce_validation]
Surcharge only on /update and /confirmSurcharge available on /create, /update, /confirm, and /capture
maximum_amount and status returned in payment_method_options hashmaximum_amount and status returned in amount_details hash
Last verified 2026-09-24

Is this helpful?