Connected platform guide
Connect Stripe to Drawspan
Use Stripe Checkout and invoice events to issue one-time licences, start subscriptions, and renew paid terms.
Before you start
- A Stripe sandbox or an account with test data enabled.
- A Stripe product and price for each offer you want to map.
- A Drawspan product with a reusable fixed-term licence plan. One-time Checkout purchases must map to a fixed term.
- A Payment Link ID beginning with plink_. Existing Price ID mappings are also supported; one-time Price ID checkout needs a restricted Stripe API key.
- In Connected platforms, choose Connect platform, then Stripe.
- Give the connection a name your team will recognise. Keep its workspace open.
- Expand step 1 and copy the webhook URL. Paste that URL into the provider dashboard below.
- Save the provider secret in the matching Drawspan endpoint. For Lemon Squeezy, generate it in Drawspan first. Gumroad has no signing secret.
- Expand step 2, link the product, then follow the testing instructions before enabling live sales.
Read the shared testing, expiry, email and recovery rules. Drawspan grants access to customers and seats; it does not email separate licence keys or issue ownerless licences.
Configure the webhook
Open Workbench → Webhooks → Create an event destination.
Create one event destination for test data and another for live data. Both destinations use the same Drawspan webhook URL, with different Test and Live signing secrets.
| Field | Value |
|---|---|
| Events from | Your account |
| Payload style | Snapshot events |
| Endpoint URL | The Drawspan webhook URL (the same URL for Test and Live) |
| Signing secret | Reveal the whsec_ value after saving, then store it in the matching Drawspan endpoint |
Select events
Select or create the events in the order shown below. The names follow the provider’s event picker.
charge.dispute.createdRevoke access linked to the disputed charge.charge.refundedRevoke access only when the charge is fully refunded. Partial refunds leave access unchanged.checkout.session.async_payment_succeededIssue a one-time licence after a delayed payment succeeds.checkout.session.completedIssue for a mapped Payment Link when payment is paid or no_payment_required. Legacy Price ID subscriptions start from invoice.paid.invoice.paidIssue the first subscription term or renew the current term.invoice_payment.paidRetain the payment-to-invoice relationship needed to resolve modern subscription refunds and disputes. It does not issue access.
Link products
Drawspan matches this provider by Payment Link ID or Price ID: plink_… or price_….
- Open Payment Links in Stripe, then open the link customers will use. Copy its plink_ ID from the details page.
- Do not paste the buy.stripe.com sharing URL. Each Payment Link maps to one plan and issues one seat, regardless of its checkout quantity.
- In Drawspan, paste the Test or Live Payment Link ID and choose the licence plan. Create another link for another offer. Payment Link mappings need no API key.
- Map one-time Stripe prices to a fixed-term Drawspan plan.
- For a one-time price, save the restricted API key on the matching endpoint. Drawspan uses it to fetch Checkout Session line items.
- For legacy Price ID checkout, open Developers → API keys → Create restricted key, grant Checkout Sessions read access, leave unrelated resources disabled, and save the key under the matching Drawspan endpoint’s advanced settings.
- Use separate checkouts for separate licensed subscription products. Avoid mapping two items from one payment to different plans for the same Drawspan product; Drawspan refuses that ambiguous cart.
Test the connection
- Open the test Payment Link or your Checkout page for a mapped test Price ID.
- Pay with 4242 4242 4242 4242, a future expiry date, and any three-digit CVC.
- In Drawspan, refresh the connection and open Recent webhooks.
- Confirm that Drawspan shows the mapped Payment Link or Price ID and marks the test purchase as verified. Test data does not grant production access. A synthetic webhook only checks delivery and signature verification.
Inspect the event’s outcome, then check the customer, product, seats and expiry separately. A verified sandbox mapping does not prove production issuance or email delivery. For a local development rehearsal with test processing enabled, also verify the licence and captured email, then refund the test purchase. For subscriptions, exercise renewal, cancellation and a renewal refund. See the verification checklist.
Purchases, renewals, refunds, and cancellations
| Change | What Drawspan does |
|---|---|
| Initial one-time payment | checkout.session.completed issues access after Stripe marks the session paid. |
| Delayed one-time payment | checkout.session.async_payment_succeeded issues access when the delayed payment clears. |
| Initial subscription payment | Payment Link checkout issues the first term. For legacy Price ID mappings, invoice.paid issues it. Both paths ignore repeated initial fulfilment. |
| Renewal | Only subscription_cycle invoices renew existing subscription access, using the provider period end without shortening the current term. Updates and proration invoices do not renew. |
| Cancellation | Stopping future invoices does not remove the term already paid for. Access ends when that term expires. |
| Refund | charge.refunded revokes the related access only for a confirmed full refund. Stripe reports the cumulative refunded amount; partial refunds leave access unchanged. |
| Dispute | charge.dispute.created revokes the related access. |
Limits and recovery
- Use the Stripe event log to inspect and resend a failed webhook, then refresh the connection in Drawspan.
- If a Price ID was missing or mapped to the wrong licence, correct the mapping before resending the event.
- Rotating a signing secret requires the new secret in Drawspan before Stripe starts using it.
- Repeat the complete setup for live data. Test secrets, restricted keys, products, and Price IDs do not work in live mode.
After correcting an accepted event, open Recent webhooks in its connection and choose Retry processing. Signature-rejected events cannot be retried inside Drawspan; resend them from the provider after fixing the secret. A missed event that was never accepted still requires a provider resend or manual correction. Recovery details.
Troubleshooting
- Signature rejected
- Copy the signing secret from the same event destination as the endpoint URL. Do not use an API secret key in the signing-secret field.
- One-time checkout received but no licence was issued
- Check that the session is paid, the Price ID is mapped, and the restricted key can read Checkout Sessions and line items.
- Subscription checkout did not issue from checkout.session.completed
- A mapped Payment Link grants on paid checkout. Legacy Price ID subscriptions grant on invoice.paid; later subscription_cycle invoices renew the original grant.
- The event appears under the wrong environment
- Use the test endpoint with Stripe test data and the live endpoint with live data.