> ## Documentation Index
> Fetch the complete documentation index at: https://doc.trackrev.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Paddle, Polar, Lemon Squeezy & more

> Connect Paddle, Polar, Lemon Squeezy, Creem or Dodo Payments with a read-only key — TrackRev pulls charges hourly and attributes them by channel.

Not on Stripe? TrackRev connects to five other processors the same way — a read-only key, an
hourly pull, no webhooks to configure. Add them from **Configuration → Integrations →
"2 · Connect your revenue provider"** using the **Quick connect** or **Manual setup** tabs. Each
key is validated with one live read before it's saved.

<Note>
  For exact attribution, pass the visitor id (`window.trk.vid`) at checkout for every processor —
  the exact field differs per provider and is listed below and in
  [Pass the visitor id to checkout](/revenue-attribution/pass-vid-to-checkout).
</Note>

<Tabs>
  <Tab title="Paddle">
    ## Paddle (Billing)

    <Warning>Use an API key from **Paddle Billing**, not Paddle Classic.</Warning>

    * **Credential:** a single API key (`pdl_live_…`), created at your Paddle dashboard →
      Authentication.
    * **Permissions to enable:** Customer (Read), Product (Read), Subscription (Read), Transaction
      (Read), Discount (Read). Choose *Never expires*.
    * **What's pulled:** completed transactions since the last sync.
    * **Visitor id field:** `custom_data.vid` (via Paddle.js `customData: { vid }`).
    * **Coupons:** resolved from the transaction's discount code — useful for crediting an
      affiliate on a Paddle discount.
  </Tab>

  <Tab title="Polar">
    ## Polar

    * **Credentials:** an **Organization Access Token** (`polar_oat_…`) and your **Organization
      ID**.
    * **Scopes to enable:** `orders:read`, `subscriptions:read`, `organizations:read`. Choose *No
      expiration*.
    * **What's pulled:** orders, newest first.
    * **Visitor id field:** `metadata.vid`.
    * **Coupons:** the native discount code, or a `coupon` / `coupon_code` metadata field.
  </Tab>

  <Tab title="Lemon Squeezy">
    ## Lemon Squeezy

    * **Credential:** an API key (Bearer), plus an optional **Store ID**. Set the expiry to 10+
      years.
    * **What's pulled:** orders, newest first.
    * **Attribution: email-only.** Lemon Squeezy orders don't expose checkout custom data, so
      TrackRev matches sales by the customer's **email** (attach it with
      [`identify()`](/getting-started/install-pixel#the-window-trk-api)). Coupon codes aren't
      available from LS orders.

    <Info>
      Because LS is email-only, make sure you call `window.trk.identify(email)` on your site
      before or at purchase so the buyer's email is tied to their visitor.
    </Info>
  </Tab>

  <Tab title="Creem">
    ## Creem

    * **Credential:** a Production API key (`creem_live_…`), sent as `x-api-key`. Enable READ
      access for all scopes.
    * **What's pulled:** transactions (customer emails are fetched to enable email matching).
    * **Visitor id field:** `metadata.vid`.
    * **Coupons:** add a `coupon` metadata field to credit an affiliate.
  </Tab>

  <Tab title="Dodo Payments">
    ## Dodo Payments

    * **Credential:** a read-only API key (Bearer).
    * **What's pulled:** succeeded payments since the last sync.
    * **Visitor id field:** `metadata.vid`.
    * **Coupons:** add a `coupon` metadata field to credit an affiliate.
  </Tab>
</Tabs>

## Manage connections

Each connected provider shows a **Sync now** button and a disconnect (trash) action. You can run
several processors in one workspace at once — all their orders flow into the same
[Orders](/revenue-attribution/orders) list and roll up by channel.

## Notes on partial refunds

For Creem and Dodo, a **partial** refund is treated as a **paid** order (revenue was generated,
commission is owed). Only a full refund marks an order refunded and reverses commissions. See
[Refunds & renewals](/revenue-attribution/refunds-and-renewals).
