Documentation
Payments from Stripe
Payments, refunds and trials land on the right person, with no code.
Connect Stripe and every payment lands on the person who made it, with no code to write. A payment moves them to Paying on your Lifecycle map, so a sequence there answers it.
Kicklace only reads Stripe. The one thing it adds there is its own webhook. It never charges anybody and never changes a customer, a price or a payment.
Connecting it
Settings → Connections → Stripe → Connect asks for one restricted key. In Stripe, go to Developers → API keys → Create restricted key and give it:
- Write on Webhook Endpoints, so Kicklace can add its own;
- Read on Customers, Subscriptions, Invoices, PaymentIntents, Products and Prices, so it can read your history.
Nothing else. Paste it and press Connect. Kicklace adds a webhook called Kicklace to your Stripe account and keeps the secret Stripe hands back, so you never copy a secret anywhere. The key is locked away the moment it's saved and never shown back. If the key is missing a permission, the screen says which one and nothing is saved.
Only an owner or an admin can connect it.
What lands
| What Stripe sends | What lands in Kicklace |
|---|---|
checkout.session.completed |
A purchase, for the session's total |
payment_intent.succeeded |
A purchase, for the amount received |
invoice.paid |
A purchase, for the amount paid |
invoice.payment_failed |
A failed payment, and the subscription marked past due |
charge.refunded |
A refund, for the amount refunded |
customer.created, customer.updated |
The customer made or renamed |
customer.subscription.created, in a trial |
A trial started |
customer.subscription.created, not in a trial |
A subscription started |
customer.subscription.trial_will_end |
A trial ending, three days before it does |
customer.subscription.updated, with a new period end |
A subscription renewed |
customer.subscription.deleted |
A subscription cancelled |
checkout.session.expired |
A checkout left, with what they were about to spend |
A purchase is the only one that moves anybody along your road: to Paying, and on to paying again once the money has run past a full period. The others land on the person's record, and a side road on your map can start from any of them: a failed payment, a trial ending, a refund, a cancellation.
A single payment reaches Kicklace three times over, as the checkout, the payment and the invoice. It lands once.
Who it lands on
Kicklace finds the person by the email Stripe holds for the customer. A Stripe customer with no email is kept under Stripe's own name for them, and every later payment finds the same person.
A customer is a person unless you say it's a company's. Ask Kicklace can move a customer to a company, so three people on one card read as one customer.
Each customer reads as Paying (a live subscription, or a purchase in the last ninety days), Trial, Churned (paid once, not now) or Free (never paid). Nobody sets that by hand.
Your history
A webhook only hears what happens next. If you've been selling for two years, Kicklace reads those two years too, the moment Stripe is connected: every customer, every subscription and every payment, each dated the day the money moved. Read again reads anything new since.
Reading your history sends nothing and puts nobody on a list. Two thousand old payments are history, not two thousand people buying today.
When it's done, you're told what it found, like "187 paying customers, and 23 who look likely to leave."
Where you see it working
Everything Stripe sends shows on Settings → Connections → Your website, in the list of what has arrived, with what happened to it.