Skip to content
Proofline

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.