Stripe integrations, tool by tool

Stripe affiliate program integration: how thirteen tools connect, what carries the click, and what each can write

By Jimi Barkway · Published 6 September 2026 · Part of the comparison pages

In brief

Every tool on this page connects to Stripe. Nine do it through a button and a redirect. One asks you to paste a key. Three pages do not say. On a hosted checkout the tool's script stamps the click id into client_reference_id, a field Stripe describes as "a unique string to reference the Checkout Session". On a server-created customer or session you add one metadata field. Only two tools give a full account of what they write back to your Stripe: AffiliateRail says nothing, and Rewardful says metadata, coupons and promo codes.

How do affiliate tools connect to Stripe?

In shortTwo ways in, and two ways for the click to travel. Most tools connect through a button, a redirect to Stripe, and a redirect back. One asks you to paste a key. Three pages do not say. Then the affiliate's click id reaches Stripe one of two ways. As client_reference_id on a hosted checkout. Or as a metadata field your server sets. Every tool on this page uses one or both.

The research method was simple. I read the Stripe integration page of thirteen affiliate tools on 6 September 2026. I found nine that connect by authorisation, one that takes a key, and three whose pages do not say. Two give a full account of what they write to your Stripe: one says nothing, one lists three things. Two more name one thing they create. Nine do not say. The links are in the sources.

Four words first. A Stripe authorisation is the button that sends you to Stripe, asks you to approve access, and sends you back. A restricted key is a Stripe credential whose permissions you choose when you create it. The client_reference_id is a field on a Stripe Checkout Session that Stripe describes as "a unique string to reference the Checkout Session". And metadata is a bag of your own key-value pairs on a Stripe customer, subscription or session. The click id lives in one of the last two. Attribution is the job of deciding which partner gets credited for a sale, and that is what the click id is for.

A unique string to reference the Checkout Session. This can be a customer ID, a cart ID, or similar, and can be used to reconcile the Session with your internal systems.

Stripe's API reference, the Checkout Session object, client_reference_id, checked 6 September 2026
Thirteen affiliate tools and Stripe, from each vendor's own documentation, read on 6 September 2026
ToolHow it connectsWhat carries the clickWhat it says it writes to Stripe
AffiliateRailAuthorisation, then a restricted key that reads charges, payment intents and invoicesThe script stamps client_reference_id on Checkout, Payment Links, Pricing Tables and Buy Buttons; metadata.rail_referral server-side"It writes nothing"
ToltConnect under Program Settings, Integrationmetadata tolt_referral on the subscription or session; a body script rewrites buy.stripe.com linksNot stated
RewardfulAuthorisation; reads Stripe webhooksA referral attribute in the customer metadataMetadata on customers and invoices, and promo codes when enabled
FirstPromoter"Connecting your Stripe account in Test or Live mode"; the method is on a setup guide, not this page; "Developer Required: No"Not on the Stripe pageNot stated
DubInstall the app from Stripe's App Marketplace, then connect the workspace through Dub's OAuthclient_reference_id with a dub_id_ prefix; dubCustomerExternalId in metadata on a sessionDiscount codes, restricted to first-time orders by default
Endorsely"Connect with Stripe", "This takes 30 seconds"metadata endorsely_referral on a session or subscription; client_reference_id on Payment LinksNot stated
PromoteKitThe script, then Stripemetadata promotekit_referral on a session or subscription; the script handles Payment Links and Pricing TablesNot stated
RefgrowPaste a secret key, "a restricted key is recommended"; the webhook is set up for youmetadata referral_code on the session, from its cookieCreates its webhook endpoint
refVenueAuthorisation, "no code changes required"The customer email matched to a click; client_reference_id recommended; coupons detectedNot stated
ReditusAuthorisation; the page mentions "full Stripe account access"The customer email in the payment flowNot stated
Tapfiliate"A Stripe account with API key access", then a Connect Stripe button after the JavaScript stepsJavaScript calls carrying the Stripe customer id and charge idNot stated
AffonsoConnect the accountmetadata affonso_referral on the session; guides for Payment Links, Pricing Tables and Buy ButtonNot stated
Komissio"OAuth in about 30 seconds"; listens to webhooksNot stated on the homepagePayouts through Stripe Connect

What do you have to build?

In shortIf you sell through Stripe's hosted checkout, usually nothing. The tool's script stamps the click id onto the checkout for you. If your server creates the customer, the subscription or the session, you add one metadata field with the click id in it. The field's name is the only thing that changes from tool to tool.

The hosted route first. AffiliateRail's page: "If you sell through Stripe Checkout, a Payment Link, a Pricing Table or a Buy Button, there is nothing to build. The script stamps the checkout for you." The field it stamps is client_reference_id, "even on elements added after load". Dub does the same on Payment Links with a query parameter when you shorten the link. On a pricing page or a Checkout Session, you pass its click id yourself, with a dub_id_ prefix. PromoteKit's page says its script "supports both Stripe Payment Links and the Stripe Pricing Table". Tolt's Payment Links guide adds a body script that rewrites every buy.stripe.com link when its referral exists.

The server route second. A click id is the short code that names one visit from one affiliate link. The tool's script leaves it in a cookie or a global variable. Your server reads it and puts it in metadata. Tolt's key is tolt_referral. Endorsely's is endorsely_referral. PromoteKit's is promotekit_referral. Affonso's is affonso_referral. Refgrow's is referral_code. AffiliateRail's is rail_referral, and its page calls it "three lines of code". Let's say your sign-up form creates a Stripe customer. You read the cookie, take the id, and pass it as metadata. That is the whole job, on every one of those tools.

Two tools work differently. Tapfiliate asks for JavaScript calls that carry Stripe's own ids. The customer id on a trial, the charge id on a conversion. Its page says "You will require a developer to correctly pull the Stripe customer id". Reditus matches on the customer's email instead. "The customer email has to be included in the Stripe payment flow. This is how Reditus tracks conversions and calculates commissions." And refVenue's page says purchases track with "no code changes required". It matches the checkout email to a recent click, and detects coupons. The same page then recommends passing its referral id as client_reference_id, because "Email fallback fails when customers use a different email at checkout".

What can the tool write to your Stripe account?

In shortTwo of the thirteen give a full account. AffiliateRail says it writes nothing, and points a restricted key at your account that cannot. Rewardful says it writes metadata, coupons and promo codes, and lists seven things it cannot do. Two more name one thing they create: Refgrow its webhook endpoint, Dub its discount codes. The other nine do not say on the pages I read.

AffiliateRail's page explains the consent screen. "Stripe's consent screen asks for read and write access, because Stripe closed its read-only scope to new platforms. The key we point at your account is a restricted one that cannot write." What it reads is charges, payment intents and invoices. Payouts "never run through Stripe" and go from your own PayPal or Wise account instead.

Rewardful's permissions page is the other one that answers. "The only updates we make in Stripe are metadata updates for tracking purposes and creating promo codes when that feature is enabled." Its cannot-do list runs from moving money and issuing refunds to changing bank details, editing pricing and cancelling subscriptions. It also explains that some permissions are labelled "Modify". That label covers coupons, metadata and promo codes.

Two more pages name one write each. Refgrow says "a restricted key is recommended" and then "will automatically set up the required webhook endpoint in your Stripe account". Dub's page says "discount codes created via Dub are restricted to first-time orders in Stripe", so it creates those. Reditus asks, on its own page, whether you "would rather not grant full Stripe account access". Its Payments API is the alternative it offers. For the rest, ask before you press the button. Imagine handing a contractor the keys to your till. You would want to know whether they can count it or open it.

Which Stripe events does the tool read?

In shortA sale, a refund, and a cancellation, at least. FirstPromoter lists seven events on its page. Refgrow lists six. Dub and refVenue list five each. AffiliateRail binds a customer on four. Rewardful describes three moments: a customer created or updated, an invoice paid, and a refund.

FirstPromoter's seven are in its own table. invoice.payment_succeeded and charge.succeeded for sales. charge.refunded and charge.dispute.created for refunds. customer.subscription.deleted for a cancellation. checkout.session.completed and customer.discount.created for a new account. Its page adds that charges with no customer email are ignored.

AffiliateRail's four are on its attribution page. A customer on customer.created. A subscription on customer.subscription.created. A checkout session on checkout.session.completed, from metadata or client_reference_id. And the hosted routes, where the script has stamped the session already. "Binding is idempotent on the Stripe customer id. The first event that carries a click id wins". Refunds "flow back and correct the commission on their own".

Refgrow's six are checkout.session.completed, invoice.paid, customer.subscription.created and .updated, customer.discount.created and charge.refunded. Dub's five are customer.created, customer.updated, checkout.session.completed, invoice.paid and charge.refunded. refVenue's five are payment_intent.succeeded, invoice.payment_succeeded, charge.refunded, charge.dispute.created and charge.dispute.updated.

Rewardful's page walks the same three moments in prose. On a customer created or updated it looks for the referral attribute in the metadata. On an invoice paid it generates a commission "based on the amount actually paid by the customer". On a refund it recalculates. That last rule, commission on the amount paid rather than the list price, is worth checking on any tool. It changes every commission where a coupon was used.

How do you test it before going live?

In shortIn Stripe test mode, on every tool that mentions it. AffiliateRail's page says test mode "works the same as live" and puts the whole walk at "about fifteen minutes". FirstPromoter connects "in Test or Live mode". Tolt's guide says to create a demo affiliate, open your own link, and make a test purchase.

AffiliateRail's steps, from its page. Connect Stripe in test mode. Put the tag on every page. Add yourself as a partner. Open your site through your own link, so the verifier turns green. Pay with Stripe's test card. The sale appears under Insights, Attribution health, and the commission under Commissions. If it lands under Unattributed instead, the row says what was missing.

Tolt's test is three steps. "Create a demo affiliate through your affiliate portal and copy your link", open it, make a test purchase. Whatever the tool, run the loop once with the real script on the real page. Do it before any affiliate has a link. The common failure is a click id that never reached Stripe. It shows up as a sale with no partner.

Which one should you pick?

In shortTo know what a tool can do to your Stripe before you authorise it, read AffiliateRail's and Rewardful's pages. Only those two answer it in writing. If you want no code at all, refVenue and FirstPromoter say so, and refVenue then recommends one line anyway. If you sell through Payment Links, AffiliateRail, Dub, Tolt, PromoteKit, Endorsely, Refgrow and Affonso each document that route.

The Stripe connection is the easy part on every tool here. The differences that last are elsewhere. What the tool charges. Whether payouts run through your account or the tool's. What happens to links published on your old tool. The Stripe tracking article walks the handshake in detail. The Stripe integration page has AffiliateRail's setup in full. The Rewardful, Tolt and Dub pages cover the three with the fullest Stripe guides.

One last check. Every tool on this page reads your Stripe account. Before you press Authorise, find the sentence on the vendor's own page that says what it writes. If there is no such sentence, ask for one. Your affiliate tool should never be able to touch your money. The vendor should be willing to say so.

A restricted key that reads and never writes

The script stamps client_reference_id on every hosted checkout. Your server adds one metadata field everywhere else. Payouts never touch Stripe. Fourteen days, no card.

Start free trial

Every fact on this page was read off the vendor's own documentation on the date beside it in the sources. Integrations change. Read the vendor's page before you connect anything.

Common questions

Does an affiliate tool need write access to my Stripe account?

Not to track sales. AffiliateRail reads charges, payment intents and invoices through a restricted key that cannot write. It says Stripe's consent screen asks for read and write only because Stripe closed its read-only scope to new platforms. Rewardful writes metadata, coupons and promo codes, and lists what it cannot do, from moving money to issuing refunds. Refgrow recommends a restricted key and creates its webhook endpoint. Dub creates discount codes. Ask any other vendor for the sentence on its own page.

How does the affiliate's click reach Stripe?

Two ways. On Stripe Checkout, Payment Links, Pricing Tables and Buy Buttons, the tool's script stamps the click id into client_reference_id on the session. AffiliateRail's script does this on all four. Dub does it on Payment Links with a dub_id_ prefix. On a customer, subscription or session your server creates, you add one metadata field. The key is tolt_referral on Tolt, endorsely_referral on Endorsely, promotekit_referral on PromoteKit, affonso_referral on Affonso, referral_code on Refgrow, and rail_referral on AffiliateRail.

Which affiliate tools need no code on Stripe?

refVenue says purchases, refunds, chargebacks and coupons track with no code changes required, by matching the checkout email to a click, and then recommends passing its referral id as client_reference_id because the email match fails when a customer checks out with a different email. FirstPromoter marks its Stripe guide Developer Required: No. AffiliateRail needs nothing built if you sell through Stripe's hosted checkout, because the script stamps it. Tapfiliate is the opposite case. Its page says you will require a developer to pull the Stripe customer id for its tracking calls.

Which Stripe events does an affiliate tool read?

FirstPromoter lists seven: invoice.payment_succeeded, charge.succeeded, charge.refunded, charge.dispute.created, customer.subscription.deleted, checkout.session.completed and customer.discount.created. Refgrow lists six and Dub and refVenue five each. AffiliateRail binds a customer on customer.created, customer.subscription.created or checkout.session.completed. The hosted routes are stamped by the script, and the first event with a click id wins. Rewardful describes a customer created or updated, an invoice paid, and a refund.

Where these facts come from

Fact-checked and reviewed by Jimi Barkway on 6 September 2026. Every figure above was read off the document named here on the date beside it. To contact AffiliateRail about one, email support@affiliaterail.com and the figure is corrected and the date moved.

Compare

A restricted key that reads your Stripe and never writes

The script stamps client_reference_id on every hosted checkout. Your server adds one metadata field everywhere else. Payouts never touch Stripe. No card for fourteen days. Full refund within 30 days of your first payment.