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.
No card. Cancel in one click.
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.
| Tool | How it connects | What carries the click | What it says it writes to Stripe |
|---|---|---|---|
| AffiliateRail | Authorisation, then a restricted key that reads charges, payment intents and invoices | The script stamps client_reference_id on Checkout, Payment Links, Pricing Tables and Buy Buttons; metadata.rail_referral server-side | "It writes nothing" |
| Tolt | Connect under Program Settings, Integration | metadata tolt_referral on the subscription or session; a body script rewrites buy.stripe.com links | Not stated |
| Rewardful | Authorisation; reads Stripe webhooks | A referral attribute in the customer metadata | Metadata 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 page | Not stated |
| Dub | Install the app from Stripe's App Marketplace, then connect the workspace through Dub's OAuth | client_reference_id with a dub_id_ prefix; dubCustomerExternalId in metadata on a session | Discount 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 Links | Not stated |
| PromoteKit | The script, then Stripe | metadata promotekit_referral on a session or subscription; the script handles Payment Links and Pricing Tables | Not stated |
| Refgrow | Paste a secret key, "a restricted key is recommended"; the webhook is set up for you | metadata referral_code on the session, from its cookie | Creates its webhook endpoint |
| refVenue | Authorisation, "no code changes required" | The customer email matched to a click; client_reference_id recommended; coupons detected | Not stated |
| Reditus | Authorisation; the page mentions "full Stripe account access" | The customer email in the payment flow | Not stated |
| Tapfiliate | "A Stripe account with API key access", then a Connect Stripe button after the JavaScript steps | JavaScript calls carrying the Stripe customer id and charge id | Not stated |
| Affonso | Connect the account | metadata affonso_referral on the session; guides for Payment Links, Pricing Tables and Buy Button | Not stated |
| Komissio | "OAuth in about 30 seconds"; listens to webhooks | Not stated on the homepage | Payouts 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.
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.
- AffiliateRail's Stripe integration page: the authorisation and the restricted key, what it reads and that it writes nothing, client_reference_id stamped on the hosted routes, the fifteen-minute test walkchecked 6 September 2026
- AffiliateRail docs, server-side attribution: metadata.rail_referral, the four Stripe bindings, idempotent binding, checking in test modechecked 6 September 2026
- Stripe's API reference, the Checkout Session object: client_reference_idchecked 6 September 2026
- Tolt help centre, How to set up Stripe with Tolt (metadata tolt_referral), and How to set up Stripe Payment Links with Tolt (help.tolt.com/en/articles/9305951): the body script for buy.stripe.com links and the demo-affiliate testchecked 6 September 2026
- Rewardful help centre, How does Rewardful use my Stripe account: webhooks, the referral attribute in customer metadata, metadata written on customers and invoices, commission on the amount paidchecked 6 September 2026
- Rewardful help centre, Stripe permissions: what Rewardful cannot do, metadata and promo codes as the only writes, the Modify labelchecked 6 September 2026
- FirstPromoter docs, Stripe: Developer Required No, Test or Live mode, the seven tracked events, charges without an email ignoredchecked 6 September 2026
- Dub docs, Stripe sales tracking: the App Marketplace install and OAuth, the five events, dub_client_reference_id on Payment Links, dubCustomerExternalId in checkout metadata, discount codes restricted to first-time orderschecked 6 September 2026
- Endorsely docs, Stripe integration: Connect with Stripe in 30 seconds, metadata endorsely_referral, window.endorsely_referral client-sidechecked 6 September 2026
- PromoteKit docs, Stripe API and Stripe Payment Links (docs.promotekit.com/affiliate-links-setup/stripe-payment-links): window.promotekit_referral, metadata promotekit_referral, Payment Links and the Pricing Table through the scriptchecked 6 September 2026
- Refgrow docs, Stripe Integration: a restricted key recommended, the webhook set up automatically, the six events, metadata referral_code, Checkout Sessions and Payment Linkschecked 6 September 2026
- refVenue docs, Stripe Integration: authorisation, no code changes required, email matching, the five events, the recommended client_reference_id, coupons detected, commission on the net amountchecked 6 September 2026
- Reditus help centre, Connecting Stripe: reads payments and subscriptions, the login redirect, the customer email in the payment flow, the Payments API as the alternative to full account accesschecked 6 September 2026
- Tapfiliate help centre, How to Integrate Stripe with Tapfiliate: API key access, the trial and conversion calls with the Stripe customer id and charge id, a developer requiredchecked 6 September 2026
- Affonso help centre, Stripe Checkout API, and the integrations index (affonso.io/help/integrations) listing Payment Links, Pricing Tables and the Buy Button: the affonso_referral cookie as metadatachecked 6 September 2026
- Komissio pricing page: OAuth in about 30 seconds, Stripe webhooks, payouts through Stripe Connectchecked 6 September 2026