# Let donors help cover processing fees

> #### Private preview
> 
> Fee coverage is in private preview and is only available to eligible [US nonprofits](https://docs.stripe.com/connect/identity-verification.md?country=US#us-nonprofits). [Request access to fee coverage.](https://docs.stripe.com/payments/checkout/fee-coverage.md#fee_coverage_preview)

### Fee coverage

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/payments/checkout/fee-coverage" \
  -d '{"email": "EMAIL", "preview": "fee_coverage_preview"}'
```

You can enable fee coverage for one-time donations on Checkout Sessions and Payment Links. This lets a donor add an optional amount to their donation to help cover your card processing fees. Stripe presents the option in Checkout, updates the order total when the donor adds or removes it, and records the amount on the completed Checkout Session.

## How fee coverage works 

Stripe selects fee coverage by default, and donors can choose to remove it before completing the payment. The default selection and fee coverage calculation are fixed.

Stripe uses a fixed calculation based on the donation amount and shows the resulting fee coverage amount to the donor before payment. The calculation doesn’t add additional coverage for processing fees on the fee coverage contribution itself.

The fixed calculation is based on Stripe’s [US nonprofit pricing](https://support.stripe.com/questions/fee-discount-for-nonprofit-organizations?locale=en-US), rather than your account’s actual processing rate. Nonprofit discounted pricing isn’t a separate fee coverage eligibility requirement, so fee coverage approximates the processing fees for a payment.

## Before you begin 

Fee coverage has the following requirements:

- Your Stripe account must be in the United States and classified as an eligible [nonprofit](https://docs.stripe.com/connect/identity-verification.md?country=US#us-nonprofits).
- Your account must use [MCC 8398](https://docs.stripe.com/connect/setting-mcc.md#list) (Charitable and Social Service Organizations - Fundraising).
- Use API version `2026-08-26.preview` or later when you create a Checkout Session or Payment Link.
- Create card-only sessions. Link, Apple Pay, and Google Pay are supported and appear when the buyer and session are eligible. Other payment methods aren’t available with fee coverage.
- Use a Stripe-hosted checkout page, Embedded Checkout, or Payment Links.

Fee coverage isn’t supported with Connect platform integrations, subscriptions, manual capture, automatic tax, invoice creation, promotion codes, Adaptive Pricing, or [automatic surcharge](https://docs.stripe.com/payments/checkout/surcharge/automatic-surcharge.md). Additionally, you can’t enable fee coverage in the Stripe Dashboard.

## Create a Checkout Session 

Set the `Stripe-Version` header when initializing your Stripe client.

Set [fee_coverage[enabled]](https://docs.stripe.com/api/checkout/sessions/create.md?api-version=2026-08-26.preview#create_checkout_session-fee_coverage-enabled) to `true` and set `allowed_payment_method_types` to `card` when you create the Checkout Session.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Version: 2026-08-26.preview" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "allowed_payment_method_types[0]=card" \
  -d "fee_coverage[enabled]=true" \
  -d mode=payment \
  --data-urlencode "success_url=https://example.com/success"
```

### Add a custom disclosure 

You can provide a custom disclosure of up to 150 characters with [fee_coverage[disclosure]](https://docs.stripe.com/api/checkout/sessions/create.md?api-version=2026-08-26.preview#create_checkout_session-fee_coverage-disclosure). Checkout displays the disclosure with the fee coverage offer. Consult your legal or tax advisors about the language you show donors, including whether the additional amount is tax deductible.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Version: 2026-08-26.preview" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "allowed_payment_method_types[0]=card" \
  -d "fee_coverage[enabled]=true" \
  -d "fee_coverage[disclosure]=Your fee coverage is an additional contribution to our mission." \
  -d mode=payment \
  --data-urlencode "success_url=https://example.com/success"
```

## Create a Payment Link 

To offer fee coverage with a Payment Link, set [fee_coverage[enabled]](https://docs.stripe.com/api/payment_links/create.md?api-version=2026-08-26.preview#create_payment_link-fee_coverage-enabled) to `true`. Payment Links have the same eligibility requirements and support the same optional disclosure as Checkout Sessions.

```curl
curl https://api.stripe.com/v1/payment_links \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Version: 2026-08-26.preview" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "payment_method_types[0]=card" \
  -d "fee_coverage[enabled]=true"
```

## Handle completed payments 

When fee coverage is included, the Checkout Session’s [amount_total](https://docs.stripe.com/api/checkout/sessions/object.md?api-version=2026-08-26.preview#checkout_session_object-amount_total) includes the donation and fee coverage amount. The [fee_coverage_cost.amount_total](https://docs.stripe.com/api/checkout/sessions/object.md?api-version=2026-08-26.preview#checkout_session_object-fee_coverage_cost-amount_total) property contains only the fee coverage amount, in the smallest currency unit. If the donor doesn’t add fee coverage, `fee_coverage_cost` isn’t present.

Stripe shows the donation and fee coverage as separate items on the donor’s receipt and records `Fee coverage` as an amount details line item on the PaymentIntent. You can use these fields to identify the fee coverage amount in the Dashboard and in your reporting.

## Refund a donation 

A full refund returns the entire amount charged, including fee coverage. For a partial refund, choose the amount to return. The refund isn’t automatically divided between the donation and fee coverage, and the original fee coverage amount remains unchanged.

## Test fee coverage 

After you receive preview access, fee coverage works in a sandbox without additional test configuration. Create a test Checkout Session or Payment Link, then verify both paths:

1. Remove the default-selected fee coverage and complete the payment. Confirm that the total equals the donation and `fee_coverage_cost` isn’t present.
2. Complete a payment with fee coverage selected. Confirm that Checkout updates the total and the completed Session includes `fee_coverage_cost.amount_total`.

For custom-amount donations, verify that Checkout calculates and displays fee coverage after the donor enters an amount.
