Guides · Purchase data
Superwall
Proofline reads Superwall’s subscription webhooks. It accepts the current V2 format and the legacy format, and checks the signature on every delivery.
1. Add a webhook endpoint in Superwall
In Superwall, open Integrations → Webhooks and add an endpoint with this URL:
https://app.proofline.link/api/ingest/superwall/<appId>Superwall shows the endpoint’s signing secret (whsec_…) once. Copy it.
2. Paste the signing secret into Proofline
Open Integrations for your app, connect Superwall and paste the secret. Superwall signs each delivery through Svix: an HMAC-SHA256 over the message id, timestamp and raw body. Proofline checks it in constant time and rejects anything with a bad signature or a timestamp more than five minutes off.
3. Link purchases to the Proofline user
Purchases are tied to creators through the Proofline end-user id. Set it as a Superwall user attribute, and identify the user with the same id you give Proofline:
let token = try await Proofline.identify(userID: user.id)
Superwall.shared.identify(userId: user.id)
Superwall.shared.setUserAttributes(["proofline_end_user_id": token.uuidString])
What Proofline reads
| Superwall event | In Proofline |
|---|---|
initial_purchase, non_renewing_purchase |
Purchase (a TRIAL period at price 0) |
renewal |
Renewal (is_trial_conversion marks the first paid period) |
refund, or cancellation with a refund flag or a negative price |
Refund, reversed against the stored purchase |
cancellation, uncancellation, expiration, billing_issue, subscription_paused |
Subscription state |
product_change |
Plan change, applied when the paid change renews |
subscription_extended, transferred |
Ignored |
Money comes from price_in_purchased_currency in the purchase currency, converted once to integer
minor units. The store fee and tax come from Superwall’s commission and tax percentages. Events for
another bundle id are acknowledged and ignored.
If another source reports the same purchase
Superwall reports the store’s own transaction ids. So does Apple’s app transaction id in V2. A purchase also reported by RevenueCat, the stores’ notifications or another subscription tool earns at most one commission per program. That also covers running a legacy and a V2 webhook side by side. When your Stripe account is connected to Proofline directly, Stripe purchases that Superwall reports are ignored and Stripe’s own events are used.
Limits
- Superwall sends no test events: make a sandbox purchase to check the setup. Sandbox purchases never earn commission.
- No backfill: events from before you connect are not imported, and there is no nightly reconciliation for Superwall yet.
- Duplicates are ignored by Superwall’s event id. User attributes other than
proofline_*, such as e-mail, are dropped when the event arrives.