# Create payment links with Connect With Connect, you can create payment links for connected accounts, optionally taking fees in the process. Don’t know much about *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients)? Check out our [Overview](https://docs.stripe.com/connect.md) article. You can create payment links for payments to connected accounts. Payment links support [all charge types ](https://docs.stripe.com/connect/charges.md) and allow your platform to take an application fee. ## Create a payment link using direct charges #### Dashboard 1. In the Dashboard, open the [Payment Links](https://dashboard.stripe.com/payment-links/create/standard-pricing) page and click **+ New**. 1. On the **Payment page** tab, select an existing product or click **+ Add a new product**. 1. On the **Payment page** tab, use the **Options** and **Advanced options** to customize the payment link. 1. On the **After payment** tab, select **Split the payment with a connected account**. Then select the connected account and enter the application fee amount. For single payments, the fee is a fixed amount. For recurring payments, the fee is a percentage. 1. Click **Create link**. When a customer buys a product through this payment link, the connected account receives the payment minus any [application fee](https://docs.stripe.com/connect/payment-links.md#collecting-fees), which goes to your platform balance. #### Payment Links API To create a payment link that uses direct charges, you must first create the [product](https://docs.stripe.com/api.md#create_product) and [price](https://docs.stripe.com/api.md#create_price) while [authenticated](https://docs.stripe.com/connect/authentication.md#stripe-account-header) as the connected account. Then [create the payment link](https://docs.stripe.com/api.md#create_payment_link), also while authenticated as the connected account. ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 ``` When you use direct charges, the connected account is responsible for the cost of the Stripe fees, refunds, and chargebacks. ## Create a payment link using destination charges #### Dashboard 1. In the Dashboard, open the [Payment Links](https://dashboard.stripe.com/payment-links/create/standard-pricing) page and click **+ New**. 1. On the **Payment page** tab, select an existing product or click **+ Add a new product**. 1. On the **Payment page** tab, use the **Options** and **Advanced options** to customize the payment link. 1. On the **After payment** tab, select **Split the payment with a connected account**. Then select the connected account and enter the application fee amount. For single payments, the fee is a fixed amount. For recurring payments, the fee is a percentage. The application fee should be large enough to cover the Stripe fees that your platform pays. Leave **Make payment on behalf of selected account** unchecked. 1. Click **Create link**. When a customer buys a product through this payment link, the platform receives the payment. The funds then automatically transfer to the connected account minus any [application fee](https://docs.stripe.com/connect/payment-links.md#collecting-fees), which remains in your platform balance. #### Payment Links API To create a payment link that charges on the platform and creates automatic transfers to a connected account, you must first create the [product](https://docs.stripe.com/api.md#create_product) and the [price](https://docs.stripe.com/api.md#create_price) on the platform account. Then [create the payment link](https://docs.stripe.com/api.md#create_payment_link) while providing the connected account ID as the `transfer_data[destination]` [value](https://docs.stripe.com/api/payment-link/object.md#payment_link_object-transfer_data). ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "transfer_data[destination]"="{{CONNECTEDACCOUNT_ID}}" ``` When using automatic transfers, the platform is the *merchant of record* (The legal entity responsible for facilitating the sale of products to a customer that handles any applicable regulations and liabilities, including sales taxes. In a Connect integration, it can be the platform or a connected account). When creating destination charges with a payment link, the payment page uses your platform’s brand settings. See the [Customize branding](https://docs.stripe.com/connect/payment-links.md#customize-branding) section for more information. ## Create a payment link using destination charges and on_behalf_of #### Dashboard 1. In the Dashboard, open the [Payment Links](https://dashboard.stripe.com/payment-links/create/standard-pricing) page and click **+ New**. 1. On the **Payment page** tab, select an existing product or click **+ Add a new product**. 1. On the **Payment page** tab, use the **Options** and **Advanced options** to customize the payment link. 1. On the **After payment** tab, select **Split the payment with a connected account** and select the correct connected account. 1. Under **How much should your business keep?**, enter an amount for the application fee. For single payments, the fee is a fixed amount. For recurring payments, the fee is a percentage. 1. Select **Make payment on behalf of selected account** to specify the connected account as the [settlement merchant](https://docs.stripe.com/connect/destination-charges.md#settlement-merchant). 1. Click **Create link**. #### Payment Links API You can also create a destination charge with the connected account as the settlement merchant by setting the `on_behalf_of` parameter to the connected account ID. The settlement merchant affects: - Whose statement descriptor the end user sees - Whose address and phone number the end user sees - The settlement currency of the charge - The payment page branding the customer sees ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \ -d "transfer_data[destination]"="{{CONNECTEDACCOUNT_ID}}" ``` ## Create a payment using separate charges and transfers If you want to explicitly control the transfer of funds to connected accounts, for example when splitting funds from a single payment between multiple connected accounts, you can create a payment link using separate charges and transfers. These payments don’t automatically transfer any funds to connected accounts. #### Dashboard 1. In the Dashboard, open the [Payment Links](https://dashboard.stripe.com/payment-links/create/standard-pricing) page and click **+ New**. 1. On the **Payment page** tab, select an existing product or click **+ Add a new product**. 1. On the **Payment page** tab, use the **Options** and **Advanced options** to customize the payment link. 1. On the **After payment** tab, leave **Split the payment with a connected account** unselected. 1. Click **Create link**. 1. When you’re ready to pay your connected account, go to the **Balance** section of the connected account’s details page and click **Send funds**. 1. Enter an amount to transfer to the connected account. To charge an [application fee](https://docs.stripe.com/connect/payment-links.md#collecting-fees), reduce the transfer amount by the amount of the fee. #### Payment Links API You can’t use the API to create payment links that use separate charges and transfers. ## Fulfill orders placed through payment links After an end user pays through a payment link you need to enable your connected accounts to handle any *fulfillment* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) necessary. Configure a *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) endpoint [in the Dashboard](https://dashboard.stripe.com/account/webhooks). ![Webhooks page in the Stripe Dashboard](https://b.stripecdn.com/docs-statics-srv/assets/account_webhooks.03b71cec87ef2093fe0caa92e5bfce44.png) Then create an HTTP endpoint on your server to monitor for completed payments. Make sure to replace the endpoint secret key (`whsec_...`) in the example with your key. #### Ruby ```ruby # Using Sinatra. require 'sinatra' require 'stripe' set :port, 4242 # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' # If you are testing your webhook locally with the Stripe CLI you # can find the endpoint's secret by running `stripe listen` # Otherwise, find your endpoint's secret in your webhook settings in # the Developer Dashboard endpoint_secret = 'whsec_...' post '/webhook' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil # Verify webhook signature and extract the event. # See https://stripe.com/docs/webhooks#verify-events for more information. begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e # Invalid payload. status 400 return rescue Stripe::SignatureVerificationError => e # Invalid Signature. status 400 return end if event['type'] == 'checkout.session.completed' session = event['data']['object'] connected_account_id = event['account'] handle_completed_checkout_session(connected_account_id, session) end status 200 end def handle_completed_checkout_session(connected_account_id, session) # Fulfill the purchase puts 'Connected account ID: ' + connected_account_id puts session.to_s end ``` Learn more in our [fulfillment guide](https://docs.stripe.com/checkout/fulfillment.md). ## Optional: Collect application fees You can optionally collect an application fee for every payment made with the payment link. #### Dashboard For single payments, the fee is a fixed amount for each payment made through the same payment link. It doesn’t vary based on quantity, discounts, or taxes. For recurring payments, the fee is a set percentage of the total transaction amount for each payment made through the same payment link. The application fee should be large enough to cover the Stripe fees that your platform pays. 1. In the **After payment** tab, select **Split the payment with a connected account**. 1. Enter the application fee amount or percentage in **How much should your business keep?**. 1. After configuring the payment link to split the payment with your connected account, click **+ Create link** to generate the URL. After a customer pays using the payment link, the funds flow depends on the charge type: - **Direct charges:** Stripe adds the entire amount to the connected account balance and deducts Stripe fees from it. Stripe then transfers the application fee amount from the connected account balance to your platform account balance. - **Indirect charges:** Stripe adds the entire amount to the platform account balance and deducts Stripe fees from it. Stripe then transfers an amount minus the application fee from your platform balance to the connected account balance. #### Payment Links API For a payment link containing only line items with one-time prices, you can define an [application_fee_amount](https://docs.stripe.com/api/payment-link/object.md#payment_link_object-application_fee_amount). You can’t set a percentage as the application fee for one-time payments. If the payment link contains a recurring price, you can define an [application_fee_percent](https://docs.stripe.com/api/payment-link/object.md#payment_link_object-application_fee_percent) instead. This must be a non-negative decimal between 0-100 with at most two decimal places. Application fees on subscriptions must be a percentage because the amount billed for subscriptions can vary. You can’t set a flat amount as the application fee for subscriptions. The following example shows an [application_fee_amount](https://docs.stripe.com/api/payment-link/object.md#payment_link_object-application_fee_amount) for a payment link with a direct charge on the connected account: ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d application_fee_amount=10 ``` This example shows an `application_fee_amount` for a payment link with a destination charge: ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d application_fee_amount=10 \ -d "transfer_data[destination]"="{{CONNECTEDACCOUNT_ID}}" ``` ## Optional: Customize branding Your platform and connected accounts with *access to the full Stripe Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) can customize branding on the payments page using the [Branding settings](https://dashboard.stripe.com/account/branding). For destination charges with `on_behalf_of` and direct charges, payment links use the branding settings of the connected account. For destination charges without `on_behalf_of`, payment links use the branding settings of the platform account. Platforms can configure the branding settings of connected accounts that don’t have access to the full Stripe Dashboard by [updating the branding properties](https://docs.stripe.com/api/accounts/update/api/accounts/update.md?api-version=2025-11-17.preview#update_account-settings-branding#update_account-settings-branding) of the `Account`: - `icon` - Displayed next to the business name in the header of the Checkout page. - `logo`- If specified, displayed instead of the icon and business name in the header of the Checkout page. - `primary_color` - Used as the background color on the Checkout page. - `secondary_color` - Used as the button color on the Checkout page. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTED_STRIPE_ACCOUNT_ID}} \ -u "<>:" \ -d "settings[branding][icon]"=file_123 \ -d "settings[branding][logo]"=file_456 \ --data-urlencode "settings[branding][primary_color]"="#663399" \ --data-urlencode "settings[branding][secondary_color]"="#4BB543" ``` ## Optional: Integrate tax calculation and collection You need to first determine which entity is liable for tax. The entity that’s liable for tax might be your connected account or the platform, depending on your business model. To learn more, see [Stripe Tax with Connect](https://docs.stripe.com/tax/connect.md).