Documentation menu

Paddle

Import customers, subscriptions, transactions and refunds into Revenue → MRR, Payments, Customers and Attribution. This connector is read-only: it never creates transactions, subscriptions or adjustments in Paddle.

  1. In Paddle, open Developer tools → Authentication and create an API key with read permissions on customers, subscriptions, transactions and adjustments. For a sandbox workspace, enable Test mode on the connector so sync uses sandbox-api.paddle.com.
  2. In Revenue → Connectors → Add a connector, choose Paddle. Enter a label, the API key and a webhook secret of your choosing. Credentials are encrypted in the vault.
  3. Copy the revealed URL into Developer tools → Notifications → New destination and paste the secret Paddle shows for it. Enable customer.*, subscription.* and transaction.* notifications.
  4. Use Sync now, then inspect the last sync and event receipts. Verify a known transaction and refund against Paddle before relying on totals.

Signatures are verified as Paddle-Signature: ts=<unix>;h1=<hex> — HMAC-SHA256 over ts:rawBody — in constant time, with a five-minute timestamp tolerance. Several h1 values are accepted so secret rotation does not drop events. Signature verification.

Subscription MRR comes from each item's quantity × unit_price folded into the billing-cycle interval. A scheduled_change: cancel subscription stays revenue-bearing until the period ends. Transactions contribute payments at totals.total; a draft transaction is never revenue.

Refunds are adjustments, and a refund adjustment only knows its own amount — never the cumulative total this dashboard stores. adjustment.* events are recorded but not applied; each sync re-reads /adjustments and restates the cumulative refundedCents on the transaction. Adjustments.

Sync pages through customers, subscriptions, transactions and refund adjustments with the after cursor; the tampered pagination.next link is never followed, only its cursor is reused. Amounts arrive as decimal strings in minor units.