Skip to content
Create account or Sign in
The Stripe Docs logo
/
Ask AI
Create accountSign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
APIs & SDKsHelp
Overview
Get started with Connect
Design your integration
Integration fundamentals
Example integrations
Account management
Onboard accounts
Configure account Dashboards
Capabilities and information requirements
Work with connected account types
Payment processing
Accept payments
Pay out to accounts
Platform administration
Manage your Connect platform
    Understand your Connect business
    Dashboard account management
    Remediation links
    Platform pricing tools
    Network cost passthrough
    Smart Disputes fee passthrough
Tax forms for your Connect platform
United States
English (United States)
HomePlatforms and marketplacesManage your Connect platform

Network cost passthroughPrivate preview

Learn how to pass network costs from a platform to your connected accounts.

Network cost passthrough (IC++) is a capability for platforms to pass network costs through to their connected accounts. This allows you to offer IC+ pricing to your connected accounts instead of charging a blended rate for all card payments.

Stripe first charges network costs to your platform account. Within a few hours, we help you recover these costs from the connected account’s balance and add them to the platform’s balance, to ensure that the platform is fully compensated for the network costs. This includes all network cost adjustments related to network costs, including non-transactional scheme fees, refunds, and disputes.

You can’t pass through Stripe fees (such as Radar or card account updater fees) to your connected accounts using network cost passthrough. It only handles the network costs.

Manage network cost passthrough status for your connected accounts

When your platform controls pricing and the connected account is the merchant of record, you can enable network cost passthrough via the API or the Stripe Dashboard.

Set an account as network cost passthrough

To set an account as network cost passthrough, you must schedule a new Pricing Config Scheme object with the network_costs type using the Pricing Config Scheme Create API:

Command Line
cURL
No results
curl https://api.stripe.com/v1/pricing_configs/network_costs/schemes \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-07-30.preview; network_costs_private_preview=v1" \ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
" \
-d enabled=true
{ "id": "pcsch_1RtBMrPGj7LS2ZC4NtVvHirY", "object": "pricing_config_scheme", "enabled": true, "ends_at": null, "livemode": true, "pricing_config": "network_costs", "starts_at": 1754502193 }

This immediately sets the account for network cost passthrough, allowing Stripe to begin passing through network costs to the connected account. If you enable network cost passthrough on an account in the middle of the month, network costs get recovered from the connected account from the time of enablement, not the entire month.

Optionally, to set the account as network cost passthrough at a future date, you can pass the timestamp in the starts_at parameter. This determines the time that network costs begin to pass through to the connected account.

You can only create one scheduled scheme at a time for each connected account. If you attempt to create a new scheme while you already have one scheduled, it results in a 400 error. Schemes are immutable, meaning you need to delete and re-create scheduled schemes to make any changes.

You can find current and scheduled schemes in the Pricing Config object using the current_scheme and next_scheme parameters.

Command Line
cURL
No results
curl -G https://api.stripe.com/v1/pricing_configs/network_costs \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-07-30.preview; network_costs_private_preview=v1" \ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
" \
-d "expand[]"=current_scheme \ -d "expand[]"=next_scheme
{ "id": "network_costs", "object": "pricing_config", "current_scheme": { "id": "pcsch_1RtBSlPGj7LS2ZC4P6VEQe8l", "object": "pricing_config_scheme", "enabled": false, "ends_at": 1754614254, "livemode": true, "pricing_config": "network_costs", "starts_at": 1754502559 }, "livemode": true, "next_scheme": { "id": "pcsch_1RtBhkPGj7LS2ZC4U7LWEvLX", "object": "pricing_config_scheme", "enabled": true, "ends_at": null, "livemode": true, "pricing_config": "network_costs", "starts_at": 1754614254 } }

Unset an account as network cost passthrough

You can unset accounts as network cost passthrough by creating a new network_costs Pricing Scheme and setting it to enabled = false.

Command Line
cURL
No results
curl https://api.stripe.com/v1/pricing_configs/network_costs/schemes \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-07-30.preview; network_costs_private_preview=v1" \ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
" \
-d enabled=false
{ "id": "pcsch_1RtBSlPGj7LS2ZC4P6VEQe8l", "object": "pricing_config_scheme", "enabled": false, "ends_at": null, "livemode": true, "pricing_config": "network_costs", "starts_at": 1754502559 }

After you apply this scheme, Stripe doesn’t charge network costs to the connected account, meaning the account is no longer on network cost passthrough pricing.

To delete a scheduled scheme, use the DELETE endpoint:

Command Line
cURL
No results
curl -X DELETE https://api.stripe.com/v1/pricing_configs/network_costs/schemes/pcsch_1RtBWbPGj7LS2ZC4q5lrEuNG \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-07-30.preview; network_costs_private_preview=v1" \ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
{ "id": "pcsch_1RtBWbPGj7LS2ZC4q5lrEuNG", "object": "pricing_config_scheme", "deleted": true }

You can’t delete a scheme that has a starts_at date that’s in the past. If you attempt to do so, Stripe returns a 400 error that prompts you to schedule a new scheme.

View the network cost passthrough status for an account

The Pricing Config Scheme current_at endpoint returns the pricing scheme that you applied at a specific timestamp:

Command Line
cURL
No results
curl -G https://api.stripe.com/v1/pricing_configs/network_costs/schemes/current_at \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-07-30.preview; network_costs_private_preview=v1" \ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
" \
-d current_at=1754502879
{ "id": "pcsch_1RtBSlPGj7LS2ZC4P6VEQe8l", "object": "pricing_config_scheme", "enabled": true, "ends_at": 1754503791, "livemode": true, "pricing_config": "network_costs", "starts_at": 1754502879 }

If you call this endpoint with an current_at date before the account’s creation date, Stripe returns a 400 error.

Adjust the application fee for your connected accounts

Connected accounts on blended pricing typically incur higher application fees to cover the underlying network cost, and connected accounts that pay for their own network costs typically pay lower application fees. You can update your pricing logic for application fees in one of two ways:

  1. Update your internal pricing engine: If you maintain the logic of how much to charge in application fees for each charge and connected account, you need to add the conditional logic in your internal engine to lower the application fees and set the contracted price for a connected account that also pays their own network costs.
  2. Update your pricing in the platform pricing tool: If you use the platform pricing tool to execute your application fee pricing strategy, you need to edit your strategy to incorporate differentiated pricing for card payments for users set for network cost passthrough. Typically, the pricing for blended and IC+ priced connected accounts are identical in every aspect except for card payments, where the IC++ connected accounts’ application fee is lower because they’re also paying network costs.

If you use the platform pricing tool, you can customize pricing for individual connected accounts or for groups of connected accounts:

Customize pricing for individual connected accounts on IC++

You can override the pricing scheme for a specific connected account by adding a pricing rule with the condition Payment method > One of > Cards. Have the rule define the fee as the rate negotiated with the account (for example, the X bps from an IC+X bps contract).

We recommend that you add a new rule instead of adding a network cost passthrough status condition to an existing card payments price rule for a connected account. That way, the lowered application fee only applies while the network cost passthrough status for the connected account is set to true, and the original application fee applies if the account has network cost passthrough disabled.

Customize pricing for a group of connected accounts on IC++

Follow these steps:

  1. Create a pricing group for your IC++ connected accounts that you want to pay the same IC++ price.
  2. Copy the pricing scheme that you use for blended rate accounts.
  3. Create a pricing rule with the condition Payment method > One of > Cards. Have the rule define the fee as the rate negotiated with the connected accounts (for example, the X bps from an IC+X bps contract).
  4. Assign the connected account group to the new pricing scheme.
  5. Add your IC++ connected accounts to the group.

We recommend that you add a new rule instead of adding a network cost passthrough status condition to an existing card payments price rule for connected accounts. That way, the lowered application fee only applies while the network cost passthrough status for a connected account is set to true, and the original application fee applies if an account has network cost passthrough disabled.

Provide network cost reports to your connected accounts

All network cost transfers from a connected account to your platform account appear in the Activity and Payout reports as PLATFORM_FEE_TRANSFER. You can use that data for your own reconciliation.

You can help your connected accounts understand their network costs by sharing the following detailed network cost reports with them:

  • IC+ plan-level report: This report helps connected accounts understand the monthly network costs across all their charges. It provides interchange plan names and an aggregated scheme fee total. This is similar to what other payment service providers offer. This report shows data at the calendar month level.
  • IC+ transaction-level report: This report helps connected accounts understand transaction costs at an individual transaction-level. It provides information about which charges led to higher network costs and how refunds and disputes impact network costs. This report shows data at the calendar month level.

You can get the reports for a connected account in several ways:

  • Reporting API
  • Sigma or Stripe Data Pipeline (SDP)
  • Network cost passthrough embedded component
  • Stripe Dashboard (for connected accounts with Dashboard access)

The report schema is the same, regardless of how you access the report.

Reports in the Reporting API

Plan-level reports

You can choose which reports to offer your connected accounts. Use the Reporting API to run these reports for each connected account for each calendar month. Learn more about running a report from the API.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/reporting/report_runs \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
\ -d report_type="connect_card_payments_fees.plan_level.1" \ -d "parameters[interval_start]"=1680000000 \ -d "parameters[interval_end]"=1680100000
{ "id": "frr_1RmMIdPHHHwdjQjw3kOoBamc", "object": "reporting.report_run", "created": 1752875919, "error": null, "livemode": true, "parameters": { "interval_end": 1680100000, "interval_start": 1680000000 }, "report_type": "connect_card_payments_fees.plan_level.1", "result": { "id": "file_1RmM67PHHHwdjQjwvvCB2JwD", "object": "file", "created": 1752875143, "expires_at": 1784411143, "filename": "frr_1RmM5wPHHHwdjQjwgfvy9rXJ.csv", "links": { "object": "list", "data": [], "has_more": false, "url": "/v1/file_links?file=file_1RmM67PHHHwdjQjwvvCB2JwD" }, "purpose": "finance_report_run", "size": 464, "title": "FinanceReportRun frr_1RmM5wPHHHwdjQjwgfvy9rXJ", "type": "csv", "url": "https://files.stripe.com/v1/files/file_1RmM67PHHHwdjQjwvvCB2JwD/contents" }, "status": "succeeded", "succeeded_at": 1752875919 }

The IC+ plan-level and transaction-level reports can take several minutes to execute. If the status in the response from the above API call is pending, we recommend adding an Event Listener for the reporting.report_run.succeeded event. After you receive the event for the report run that you created, make sure that you compare it with the ID (for example, frr_...) associated with your report run. Learn more about the recommended integration pattern for automated reporting.

Here’s an example of what the reporting.report_run.succeeded event might look like:

{ "id": "evt_1RtCRKPHHHwdjQjwfRPzuvep", "object": "event", "account": "acct_1234", "api_version": "2025-07-30.preview; network_costs_private_preview=v1", "context": "acct_1234", "created": 1754506314, "data": { "object": { "id": "frr_1RmMIdPHHHwdjQjw3kOoBamc", "object": "reporting.report_run", "created": 1754503324, "error": null, "livemode": true, "parameters": { "interval_end": 1751328000, "interval_start": 1748736000 }, "report_type": "connect_card_payments_fees.plan_level.1", "result": { "id": "file_1RtCRKPHHHwdjQjwDeGKimBi", "object": "file", "created": 1754506314, "expires_at": 1786042314, "filename": "frr_1RtBf6PHHHwdjQjwgr4SWj6Q.csv", "links": { "object": "list", "data": [], "has_more": false, "url": "/v1/file_links?file=file_1RtCRKPHHHwdjQjwDeGKimBi" }, "purpose": "finance_report_run", "size": 748, "title": "FinanceReportRun frr_1RtBf6PHHHwdjQjwgr4SWj6Q", "type": "csv", "url": "https://files.stripe.com/v1/files/file_1RtCRKPHHHwdjQjwDeGKimBi/contents" }, "status": "succeeded", "succeeded_at": 1754506314 } }, "livemode": true, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "reporting.report_run.succeeded" }

Then, you can retrieve the report for the connected account using result_url:

Command Line
curl
No results
curl https://files.stripe.com/v1/files/file_1RtCRKPHHHwdjQjwDeGKimBi/contents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
{ "platform_id": "acct_1GcldzAppfGnVJgH", "connected_account_id": "acct_1PzmZGPHHHwdjQjw", "connected_account_name": null, "plan_name": "All scheme fees", "network_cost_category": "card_scheme", "total_amount": "0.005991", "fee_currency": "usd", "livemode": true }, { "platform_id": "acct_1GcldzAppfGnVJgH", "connected_account_id": "acct_1PzmZGPHHHwdjQjw", "connected_account_name": null, "plan_name": "CPS Services", "network_cost_category": "interchange", "total_amount": "0.025750", "fee_currency": "usd", "livemode": true }, { "platform_id": "acct_1GcldzAppfGnVJgH", "connected_account_id": "acct_1PzmZGPHHHwdjQjw", "connected_account_name": null, "plan_name": "Visa Traditional - Product 1", "network_cost_category": "interchange", "total_amount": "0.016175", "fee_currency": "usd", "livemode": true }

Transaction-level reports

You can generate the IC+ transaction-level report for a connected account for a specific month. Learn more about running a report from the API.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/reporting/report_runs \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
\ -d report_type="connect_card_payments_fees.transaction_level.1" \ -d "parameters[interval_start]"=1680000000 \ -d "parameters[interval_end]"=1680100000
{ "id": "frr_1RmMK3PHHHwdjQjw0pJ2Nsga", "object": "reporting.report_run", "created": 1752876007, "error": null, "livemode": true, "parameters": { "interval_end": 1680100000, "interval_start": 1680000000 }, "report_type": "connect_card_payments_fees.transaction_level.1", "result": { "id": "file_1RmM8wPHHHwdjQjwkHoUYySJ", "object": "file", "created": 1752875318, "expires_at": 1784411318, "filename": "frr_1RmM8sPHHHwdjQjwHgTQ3dlv.csv", "links": { "object": "list", "data": [], "has_more": false, "url": "/v1/file_links?file=file_1RmM8wPHHHwdjQjwkHoUYySJ" }, "purpose": "finance_report_run", "size": 6307, "title": "FinanceReportRun frr_1RmM8sPHHHwdjQjwHgTQ3dlv", "type": "csv", "url": "https://files.stripe.com/v1/files/file_1RmM8wPHHHwdjQjwkHoUYySJ/contents" }, "status": "succeeded", "succeeded_at": 1752876007 }

We recommend that you listen for the reporting.report_run.succeeded event.

Then, you can retrieve the report for the connected account using result_url:

Command Line
curl
No results
curl https://files.stripe.com/v1/files/file_1RmM8wPHHHwdjQjwkHoUYySJ/contents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
{ "platform_id": "acct_1GcldzAppfGnVJgH", "connected_account_id": "acct_1PzmZGPHHHwdjQjw", "connected_account_name": null, "transfer_id": "tr_1RWQcfPHHHwdjQjwZtsZqox6", "transfer_created": "2025-06-04T23:21:32.000Z", "balance_transaction_id": "txn_1RWQckPHHHwdjQjwRZSrO0tE", "balance_transaction_created": "2025-06-04T23:21:32.000Z", "automatic_payout_id": "po_1RXu75PHHHwdjQjwNGy9TPIx", "fee_incurred_at": "2025-06-02T16:48:13.000Z", "charge_id": "ch_3RTq8hPHHHwdjQjw1qxQ9aBj", "captured_amount": null, "captured_currency": null, "refund_id": "re_3RTq8hPHHHwdjQjw1QQUI2VO", "dispute_id": null, "card_brand": "MasterCard", "bin": "545660", "issuing_bank": "SUTTON BANK", "card_funding": "prepaid", "card_country": "US", "card_present": false, "fee_category": "network_cost", "card_scheme_fee": "0.000203", "interchange_fee": "0.000000", "non_transactional_card_scheme_fee": "0.000000", "discount_fee": "0.000000", "platform_application_fee": "0.000000", "total_amount": "0.000203", "fee_currency": "usd", "livemode": true }, { "platform_id": "acct_1GcldzAppfGnVJgH", "connected_account_id": "acct_1PzmZGPHHHwdjQjw", "connected_account_name": null, "transfer_id": "tr_1RWMxzPHHHwdjQjwOH8PHSiq", "transfer_created": "2025-06-04T19:27:15.000Z", "balance_transaction_id": "txn_1RWMxzPHHHwdjQjwwZu9lZMg", "balance_transaction_created": "2025-06-04T19:27:15.000Z", "automatic_payout_id": "po_1RXu75PHHHwdjQjwNGy9TPIx", "fee_incurred_at": "2025-06-02T16:49:15.000Z", "charge_id": "ch_3RTq8hPHHHwdjQjw1qxQ9aBj", "captured_amount": null, "captured_currency": null, "refund_id": "re_3RTq8hPHHHwdjQjw1QQUI2VO", "dispute_id": null, "card_brand": "MasterCard", "bin": "545660", "issuing_bank": "SUTTON BANK", "card_funding": "prepaid", "card_country": "US", "card_present": false, "fee_category": "network_cost", "card_scheme_fee": "0.000218", "interchange_fee": "0.000000", "non_transactional_card_scheme_fee": "0.000000", "discount_fee": "0.000000", "platform_application_fee": "0.000000", "total_amount": "0.000218", "fee_currency": "usd", "livemode": true }

Reports through Sigma or Stripe Data Pipeline (SDP)

You can access this report data in Sigma and Stripe Data Pipeline to run custom analyses and integrate network cost data into your existing workflows. Use the connect_card_payments_fees_plan_level and connect_card_payments_fees_transaction_level tables. In Stripe Data Pipeline, new platforms typically see data within 72 hours.

Run this query to return the first 10 rows from the connect_card_payments_fees_plan_level table:

SELECT * FROM connect_card_payments_fees_plan_level LIMIT 10

Reports through the network cost passthrough embedded component

You can embed the network cost passthrough embedded component in your application to have Stripe call the Reporting API for your connected accounts on your behalf.

Reports in a connected account’s Stripe Dashboard

If your connected account has access to the Stripe Dashboard, they can follow these steps to download their network cost reports:

  1. Navigate to the Reporting -> Reports page.
  2. Click Network cost passthrough.
  3. Select the month in the dropdown.
  4. Select the report to download.

Network cost report Schema

The following table outlines the key columns and their descriptions for understanding the IC+ plan-level and transaction-level reports.

Column nameDescription
connected_account_idID of the connected account. (For example, acct_1234)
connected_account_nameHuman-readable name of the connected account.
network_cost_categoryCategory of network costs. interchange, card_scheme, discount, or non_transactional_card_scheme.
plan_nameName of network cost plan. (For example, Volume Fee - POS Mastercard Debit/Prepaid)
fee_incurred_monthStart of the calendar month during which the fee was incurred. Measured in seconds since the Unix epoch.
variable_rateVariable rate applicable for the fee plan.
variable_volume_amountThe total amount on which the variable_rate was applied.
fixed_rateFixed fee amount applicable for the fee plan.
countThe number of times fixed_rate was incurred.
fee_amountTotal fee amount incurred, calculated as (variable_rate * variable_volume_amount) + (fixed_rate * count).
fee_currencyCurrency of fee_amount, variable_volume_amount, and fixed_rate.
billing_amountTotal amount billed to the connected account.
billing_currencyCurrency of the billing_amount.
platform_idID of the platform account. (For example, acct_1234)

The following table outlines the key columns and their descriptions related to the billing transactions associated with network cost recovery. Understand these columns to help clarify the financial interactions between connected accounts and the platform.

Column nameDescription
connected_account_idID of the connected account. (For example, acct_1234)
connected_account_nameHuman-readable name of the connected account.
transfer_idID of the transfer or payment object that credited or debited the network costs on the connected account’s balance. (For example, tr_1234 or py_1234)
platform_transfer_idID of the transfer or payment object that credited or debited the network costs on the platform account’s balance. (For example, tr_1234 or py_1234)
transfer_createdTime at which the transfer was created. Measured in seconds since the Unix epoch.
balance_transaction_idID of the balance transaction that performed the change in the connected account’s balance. (For example, bt_1234)
balance_transaction_createdTime at which the balance transaction was created. Measured in seconds since the Unix epoch.
automatic_payout_idID of the automatic payout that contained the balance transaction.
fee_incurredTime at which the fee was incurred. Measured in seconds since the Unix epoch.
charge_idID of the charge that this fee is associated with. (For example, ch_1234 or py_1234)
source_transaction_idID of the original charge that this fee is associated with. For direct charges, source_transaction_id is the same as charge_id. For destination charges, it’s the ID of the underlying charge settling on the platform account. (For example, ch_1234)
refund_idID of the refund that this fee is associated with.
dispute_idID of the dispute that this fee is associated with.
captured_amountAmount captured by the charge. Non-zero only on rows with fee_category=platform_fee.
captured_currencyCurrency of the captured_amount.
card_brandBrand of the card that this fee was incurred for. (For example, Visa or MasterCard)
binBIN number of the card that this fee was incurred for.
issuing_bankThe bank that issued the card that this fee was incurred for.
card_fundingThe funding type of the card that this fee was incurred for. (For example, debit, credit, or prepaid)
card_countryThe ISO country code for the country that the card was issued in. (For example, US)
card_presentBoolean indicating whether the card was physically present at purchase.
fee_categorynetwork_cost or platform_fee.
card_scheme_feeScheme fee amount incurred.
interchange_or_discount_feeInterchange or discount fee amount incurred.
non_transactional_card_scheme_feeNon-transactional scheme fee amount incurred.
platform_application_feePlatform application fee incurred, currency specified by billing_currency.
fee_currencyCurrency of the card_scheme_fee, interchange_or_discount_fee, and non_transactional_card_scheme_fee.
billing_amountTotal amount of fees billed to the connected account.
billing_currencyCurrency of the billing_amount and platform_application_fee.
platform_idID of the platform account. (For example, acct_1234)
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Chat with Stripe developers on Discord.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc
On this page