Payment providers
Connect Paddle
Set up Paddle tracking, pass the click ID and verify a credited purchase.
This guide connects your customer checkout to Slice. It is separate from the payment method you add in Billing and the bank details publishers add in Payouts.
This provider connection is in beta. Complete a purchase and refund test before relying on it for a live program.
1. Before you start
- Create your business, product and campaign in Slice. An owner or admin can change payment integrations.
- Open Payment providers, select the correct product and choose Test mode first. Each product and mode has its own connection.
- A Paddle Billing account and its sandbox. Paddle Classic uses a different event format and is not supported by this connection.
- Access to your Paddle.js checkout or backend transaction creation code.
Choose one reporting path for each sale: a provider webhook connection or your own Conversions API integration. If your site already reports purchases to Slice, review it before enabling a second path; different order identifiers can produce duplicate sales.
2. Connect the provider
In Slice, open Paddle and click Connect to prepare this product's webhook URL. Keep the panel open while you configure the provider.
- In Paddle, open Developer tools, then Notifications, then New destination.
- Choose Webhook, paste the URL from Slice, and tick the events listed below.
- Save, open the destination, and copy its secret key (it starts with pdl_ntfset_).
Select these events. If the provider has friendly event labels, use the matching labels shown in the instructions above:
transaction.completed
adjustment.created
adjustment.updatedReturn to Slice, paste the paddle secret key and click Connect Paddle. Saving the secret does not prove checkout attribution works yet.
3. Pass the publisher's click ID
On your website, load slice.js on every landing page. It stores the visitor's sclid in the slice_click_id cookie. Your backend can read that cookie when creating checkout; in the browser, window.Slice.clickId() returns the same value after the script loads.
<script src="https://takeslice.com/slice.js" async></script>custom_data on the checkout. Keep the existing checkout configuration in the example below and add the attribution field; the snippets show the integration point, not a complete checkout. Only send an ID matching clk_ followed by 32 hexadecimal characters. Omit it if no valid click is available.
Paddle.Checkout.open({
items: [{ priceId: "pri_..." }],
customData: { slice_click_id: window.Slice.clickId() },
});- In Paddle.js the option is customData; it arrives as custom_data in the webhook. Preserve any custom data your app already needs.
- Transaction renewals are linked to the first attributed subscription payment. Slice processes transaction.completed and approved refund adjustments; unrelated events are ignored.
4. Test delivery and attribution
- Use Paddle's webhook simulator to check delivery and signing. A sample without a matching Slice click is not an attribution test.
- Follow a Slice test link, complete a purchase in Paddle sandbox with the click ID in custom_data, and check Tracking for attribution.
- Create a sandbox refund and check the adjustment event. A pending adjustment is not applied as a completed refund.
Connected means credentials were saved. A received event means a delivery reached Slice. Only an attributed conversion proves the sale was credited to a publisher. Use a test link and matching sandbox purchase for the full check; test conversions create no money.
5. Switch to Live
Return to the same product's Payment providers page and choose Live. Create the production connection separately with the production account, endpoint and credentials. Do not reuse a test click for a live purchase. Confirm the production checkout carries attribution before sharing live publisher links.
Troubleshooting
- Find the notification destination in Events → Notifications or Developer tools → Notifications, depending on your dashboard version.
- No delivery: check that the destination is enabled, uses the matching sandbox/live account, and includes transaction.completed.
- Invalid signature: paste the destination's secret key, including its prefix. A Paddle API key is not the signing secret.
- No attribution: check custom_data.slice_click_id on the completed transaction.
- No event in Slice: check the provider's delivery log, selected events and full HTTPS URL. Localhost cannot receive external webhooks without a public tunnel.
- No credited conversion: check the click ID, selected product, test/live mode, paid amount and currency. Slice currently supports EUR, USD and GBP.
- Disconnecting a webhook provider does not remove the endpoint from that provider's dashboard. Remove or disable it there too. Stripe endpoint removal is attempted automatically.
Official provider documentation
Provider instructions checked against the references below on 29 October 2026. Provider dashboards can change; the event names and attribution fields above describe what Slice currently handles.