Network cost passthrough for platforms私人预览
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.
Manage network cost passthrough status for your connected accounts
If you created the connected account in Stripe and have access to the stripe_, you can set new accounts as network cost passthrough or transition existing accounts to network cost passthrough.
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_ type using the Pricing Config Scheme Create API:
{ "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_ and next_ parameters.
{ "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_ Pricing Scheme and setting it to 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:
{ "id": "pcsch_1RtBWbPGj7LS2ZC4q5lrEuNG", "object": "pricing_config_scheme", "deleted": true }
You can’t delete a scheme that has a starts_ 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_ endpoint returns the pricing scheme that you applied at a specific timestamp:
{ "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_ 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:
- 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.
- 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.
To manage your pricing strategy, we recommend that you:
- Create a pricing group for your IC++ connected accounts.
- Copy the pricing scheme you use for blended rate users.
- Modify the card payments price, assign that new pricing scheme to the IC++ connected account group, then add your IC++ connected accounts to the group.
Provide network cost reports to your connected accounts
We provide two reports that you can share with your connected accounts to help them understand their network costs:
- 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 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.
This report data is also available in Sigma and the Stripe Data Pipeline (SDP), allowing you to perform custom analysis and integrate network cost data into your existing data workflows.
{ "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. 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.
The following table outlines the key columns and their descriptions for understanding the IC+ plan-level and transaction-level reports. These reports help connected accounts track their associated network costs.
| Column name | Description |
|---|---|
connected_ | ID of the connected account. (For example, acct_) |
connected_ | Human-readable name of the connected account |
network_ | Category of network costs. interchange, card_, discount, or ‘non_transactional_card_scheme’ |
plan_ | Name of network cost plan. (For example, Volume Fee - POS Mastercard Debit/Prepaid) |
fee_ | Start of the calendar month during which the fee was incurred. Measured in seconds since the Unix epoch |
variable_ | Variable rate applicable for the fee plan. |
variable_ | The total amount on which the variable_ was applied. |
fixed_ | Fixed fee amount applicable for the fee plan. |
count | The number of times fixed_ was incurred. |
fee_ | Total fee amount incurred, equal to variable_ * variable_ + fixed_ * count |
fee_ | Currency of fee_, variable_, and fixed_. |
billing_ | Total amount billed to the connected account. |
billing_ | Currency of the billing_. |
platform_ | ID of the platform account. (For example, acct_) |
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 name | Description |
|---|---|
connected_ | ID of the connected account. (For example, acct_) |
connected_ | Human-readable name of the connected account |
transfer_ | ID of the transfer or payment object that credited or debited the network costs from the connected account’s balance. (For example, tr_ or py_) |
platform_ | ID of the transfer or payment object that credited or debited the network costs from the platform account’s balance. (For example, tr_ or py_) |
transfer_ | Time at which the transfer was created. Measured in seconds since the Unix epoch |
balance_ | ID of the balance transaction that performed the change in the connected account’s balance (For example, bt_) |
balance_ | Time at which the balance transaction was created. Measured in seconds since the Unix epoch |
automatic_ | ID of the automatic payout with which contained the balance_transaction |
fee_ | Time at which the fee was incurred. Measured in seconds since the Unix epoch |
charge_ | ID of the charge that this fee is associated with (For example, ch_ or py_) |
source_ | ID of the original charge that this fee is associated with. For Direct charges, this is the same as ‘charge_id’. For Destination charges, it is the underlying charge settling on the platform account. (For example, ch_) |
refund_ | ID of the refund that this fee is associated with |
dispute_ | ID of the dispute that this fee is associated with |
captured_ | Amount captured by the charge. Non-zero only on rows with fee_=platform_ |
captured_ | Currency of the captured_ |
card_ | Brand of the card that this fee was incurred for. (For example, Visa or MasterCard) |
bin | BIN number of the card that this fee was incurred for. |
issuing_ | The bank that issued the card that this fee was incurred for. |
card_ | The funding type of the card that this fee was incurred for. (For example, debit, credit, or prepaid) |
card_ | The ISO country code for the country that the card was issued in. (For example, US) |
card_ | Boolean indicating if the card was physically present at purchase. |
fee_ | ‘network_cost’ or platform_. |
card_ | Scheme fee amount incurred. |
interchange_ | Interchange or discount fee amount incurred. |
non_ | Non transactional scheme fee amount incurred. |
platform_ | Platform application fee incurred, currency specified by billing_. |
fee_ | Currency of the ‘card_scheme_fee’, interchange_, and ‘non_transactional_card_scheme_fee’. |
billing_ | Total amount of fees billed to the connected account. |
billing_ | Currency of the ‘billing_amount’ and platform_ columns. |
platform_ | ID of the platform account. (For example, acct_) |
Here’s an example of what the reporting. 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_:
{ "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 }
Retrieve the IC+ transaction-level report for a connected account for a specific month
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.
{ "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. event.
Then, you can retrieve the report for the connected account using result_:
{ "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 }