Billing

Superwall

Connect Superwall so subscriptions, one-time purchases, renewals, and refunds attach to the creator who drove the install. Work in Tap App Link first, then click through the Superwall dashboard with the values you copied.

Vendor reference: Superwall webhook docs · Dashboard: https://superwall.com

1. Copy the URL from Tap App Link

  1. Open your app, then Revenue Tracking.
  2. Switch the workspace to the environment you are connecting (Sandbox or Production). Each environment has its own URL and secret.
  3. Select Superwall and generate a signing secret.
  4. Copy the webhook URL, including the token= query param, and the Authorization value shown next to it.

2. Identify in your app

After trackInstall(), call setAppUserId() with Superwall.shared.userId / originalAppUserId. The id on the webhook has to be the same string.

  1. Call Superwall.identify (or set the user id when you configure Superwall) with a stable id you control.
  2. Pass that same string to setAppUserId. Superwall webhooks send data.appUserId and data.originalAppUserId.
  3. Call setAppUserId immediately after trackInstall, before the first purchase.
await TapAppLink.trackInstall();
await Superwall.shared.identify(myUserId);
await TapAppLink.setAppUserId(myUserId);

3. Superwall dashboard

  1. Open the Superwall dashboard for this app.
  2. Go to Integrations, then Webhooks.
  3. Choose Create Webhook.
  4. Name it Tap App Link sandbox or Tap App Link production so it matches the Tap App Link environment you copied the URL from.
  5. Paste the full Tap App Link webhook URL, including the token= query param. Generate the signing secret in Tap App Link first so the URL is complete.
  6. Leave custom headers empty. Superwall cannot send a Bearer header that Tap App Link would use; auth is the token on the URL, and Superwall also signs the body with Svix.
  7. If Superwall lets you filter sandbox vs production events, match that filter to this Tap App Link environment. Otherwise create one webhook per environment.
  8. Save, then trigger a sandbox purchase. Superwall has no Send test event. iOS StoreKit Configuration file purchases in Xcode do not fire webhooks. Use TestFlight with a sandbox Apple ID, or a Play license tester.

Paste the full webhook URL, including the token= query param. Leave Superwall custom headers empty. Superwall signs deliveries with Svix.

4. Events to keep enabled

Leave these event types on. Extra events are ignored. Unknown names return 2xx so the provider does not retry forever.

5. Discount codes (optional)

Map discount.billingOfferId to a Superwall campaign or paywall and set user attributes so that campaign shows for the attributed creator.

Full product guide: Discount codes.

6. Verify in sandbox

  1. Switch Tap App Link to Sandbox and open the Live Attribution Debugger.
  2. Start a link session, scan the QR, then launch the test build with the sandbox SDK key.
  3. Confirm the timeline reaches install matched and billing customer linked. If you retry, call resetForTesting() in debug builds first.
  4. Trigger a sandbox purchase and confirm a paid event on the timeline.

Other providers

RevenueCat · Adapty · Qonversion · Billing overview

Questions: support@tapapplink.com.