Reference · Tools

Paddle

Manage payments, subscriptions, coupons, products, and users via the Paddle Classic API

Action Sales v1

The Paddle node manages payments, subscriptions, coupons, products and users through the Paddle Classic Vendor API. A typical build is generating a discount coupon on demand and emailing it, or reconciling subscription changes into an internal system.

Node type
Action
Parameters
42
Outputs
Output, Error
Credentials
Paddle API

Paddle

Manage Paddle payments, subscriptions, coupons, products, and users.

Overview

Paddle is a payment infrastructure platform for SaaS companies. This tool uses the Paddle Classic Vendor API (v2.x) to manage coupons (create, list, update), payments (list, reschedule), subscription plans (get, list), products (list), and subscription users (list). Authentication uses vendor ID and vendor auth code injected into request bodies. Supports both production and sandbox environments.

Category: Sales
Tool Name: paddle
Version: 1

Appearance: Icon: lucide-CircleDollarSign | Color: #2E6BC6

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Paddle API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Couponcoupon
Paymentpayment
Planplan
Productproduct
Useruser

Operations

Each resource has its own Operation list, and most reuse the operation value getAll. Pick the resource first, then the operation.

ResourceOperationValueDescription
CouponCreatecreateCreate a coupon
CouponGet ManygetAllGet many coupons
CouponUpdateupdateUpdate a coupon
PaymentGet ManygetAllGet many payments
PaymentReschedulerescheduleReschedule a payment
PlanGetgetGet a plan
PlanGet ManygetAllGet many plans
ProductGet ManygetAllGet many products
UserGet ManygetAllGet many users

Parameters

All fields accept expressions, so IDs, codes and dates can come from the incoming item — {{ $json.productId }} in Product IDs, for example.

Coupon Create, Coupon Update, Payment Get Many and User Get Many each offer two ways to supply their fields: the structured form fields, or a single raw JSON blob written in Paddle’s own field names. JSON Parameters picks between them, and the two paths are mutually exclusive.

Coupon: Create

ParameterTypeRequiredDefaultDescription
JSON ParametersbooleanNofalseWhether to send all fields as raw JSON.
Additional Fields (JSON)jsonNoAll coupon creation attributes in JSON form. See Paddle API docs for available fields. (shown when JSON Parameters is true)
Coupon TypeoptionsNocheckoutEither product (valid for specified products) or checkout (valid for any checkout). (shown when JSON Parameters is false)
Options: checkout, product
Product IDsstringYesComma-separated list of product IDs. Required if coupon type is product. Find product IDs in your Paddle dashboard. (shown when Coupon Type is product and JSON Parameters is false)
Discount TypeoptionsNoflatEither flat (fixed currency amount) or percentage. (shown when JSON Parameters is false)
Options: flat, percentage
Discount Amount (Currency)numberNo1Discount amount in currency. (shown when Discount Type is flat and JSON Parameters is false)
Discount Amount (%)numberNo1Discount amount in percentage. (shown when Discount Type is percentage and JSON Parameters is false)
CurrencyoptionsNoEURThe currency must match the balance currency specified in your Paddle account. (shown when Discount Type is flat and JSON Parameters is false)
Options: ARS, AUD, BRL, CAD, CHF, CNY, CZK, DKK, EUR, GBP, HKD, HUF, INR, JPY, KRW, MXN, NOK, NZD, PLN, RUB, SEK, SGD, THB, TWD, USD, ZAR
Additional FieldscollectionNo{}Optional coupon properties. (shown when JSON Parameters is false)
— Allowed UsesnumberNo1Number of times a coupon can be used. Defaults to 999,999 if not specified.
— Coupon CodestringNoWill be randomly generated if not specified.
— Coupon PrefixstringNoPrefix for generated codes. Not valid if couponCode is specified.
— DescriptionstringNoDescription displayed in the Seller Dashboard.
— ExpiresdateTimeNoCoupon expires on this date at 00:00:00 UTC.
— GroupstringNoCoupon group name (1-50 characters).
— Number of CouponsnumberNo1Number of coupons to generate. Not valid if couponCode is specified.
— RecurringbooleanNofalseWhether discount applies to recurring subscription payments after the initial purchase.

Coupon: Get Many

ParameterTypeRequiredDefaultDescription
Product IDstringYesThe specific product/subscription ID to list coupons for.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)

Coupon: Update

ParameterTypeRequiredDefaultDescription
JSON ParametersbooleanNofalseWhether to send all fields as raw JSON.
Additional Fields (JSON)jsonNoAll coupon update attributes in JSON form. (shown when JSON Parameters is true)
Update ByoptionsNocouponCodeWhether to identify the coupon by code or group name. (shown when JSON Parameters is false)
Options: couponCode, group
Coupon CodestringNoThe coupon code to identify which coupon to update. (shown when Update By is couponCode and JSON Parameters is false)
GroupstringNoThe name of the group of coupons to update. (shown when Update By is group and JSON Parameters is false)
Additional FieldscollectionNo{}The coupon properties to change. (shown when JSON Parameters is false)
— Allowed UsesnumberNo1Number of times a coupon can be used.
— DiscountfixedCollectionNo{}Replace the coupon’s discount.
— — Discount TypeoptionsNoflatEither flat or percentage.
Options: flat, percentage
— — CurrencyoptionsNoEURRequired for flat discount type. (shown when Discount Type is flat)
Options: ARS, AUD, BRL, CAD, CHF, CNY, CZK, DKK, EUR, GBP, HKD, HUF, INR, JPY, KRW, MXN, NOK, NZD, PLN, RUB, SEK, SGD, THB, TWD, USD, ZAR
— — Discount Amount (Currency)numberNo0Flat discount amount. (shown when Discount Type is flat)
— — Discount Amount (%)numberNo0Percentage discount amount. (shown when Discount Type is percentage)
— ExpiresdateTimeNoCoupon expires on this date at 00:00:00 UTC.
— New Coupon CodestringNoNew code to rename the coupon to.
— New Group NamestringNoNew group name to move coupon to.
— Product IDsstringNoComma-separated list of product IDs. Leave blank to remove associated products.
— RecurringbooleanNofalseWhether discount applies to recurring subscription payments after the initial purchase.

Payment: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
JSON ParametersbooleanNofalseWhether to send filter fields as raw JSON.
Additional Fields (JSON)jsonNoFilter attributes in JSON form. (shown when JSON Parameters is true)
Additional FieldscollectionNo{}Filters applied to the payment list. (shown when JSON Parameters is false)
— Date FromdateTimeNoPayment starting from date.
— Date TodateTimeNoPayment up until date.
— Is PaidbooleanNofalseWhether the payment is paid.
— One Off ChargebooleanNofalseFilter one-off charges.
— Plan ID (plan)stringNoFilter by plan ID (single or comma-separated).
— StateoptionsNoactiveFilter by subscription status.
Options: active, past_due, paused, trialing
— Subscription IDnumberNoA specific user subscription ID.

Payment: Reschedule

ParameterTypeRequiredDefaultDescription
Payment IDnumberYesThe upcoming subscription payment ID. Find payment IDs by listing payments first.
DatedateTimeYesThe date to reschedule the payment to (YYYY-MM-DD).

Plan: Get

ParameterTypeRequiredDefaultDescription
Plan IDstringYesThe subscription plan ID.

Plan: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)

Product: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)

User: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
JSON ParametersbooleanNofalseWhether to send filter fields as raw JSON.
Additional Fields (JSON)jsonNoFilter attributes in JSON form. (shown when JSON Parameters is true)
Additional FieldscollectionNo{}Filters applied to the user list. (shown when JSON Parameters is false)
— Plan ID (planId)stringNoFilter by subscription plan ID.
— Subscription IDstringNoA specific user subscription ID.
— StateoptionsNoactiveFilter by subscription status.
Options: active, past_due, paused, trialing

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The Paddle response is merged onto the input item’s JSON at the top level — the returned fields sit alongside the fields the item already carried, so downstream nodes address them directly ({{ $json.id }}). A response field with the same name as an existing item field overwrites it. Binary data on the input item is forwarded.

OperationOutput
Coupon: CreateOne output item per generated coupon code, each carrying a single coupon field with the code. Creating 10 coupons from one input item produces 10 output items.
Coupon: Get ManyOne output item per coupon.
Coupon: UpdateOne output item carrying Paddle’s update result.
Payment: Get ManyOne output item per payment.
Payment: RescheduleOne output item carrying the API acknowledgement, including success: true.
Plan: GetOne output item carrying the plan.
Plan: Get ManyOne output item per plan.
Product: Get ManyOne output item per product.
User: Get ManyOne output item per subscription user. With Return All on, every page is fetched and concatenated.

A newly created coupon arrives as:

{
  "coupon": "SAVE20"
}

Paddle wraps every reply in a success envelope. When the envelope reports a failure the node raises it as an item error with Paddle’s own error code and message, so a “successful” output item always means Paddle accepted the call. Only the payload inside the envelope reaches the output item — except for Payment: Reschedule, which carries the envelope itself.

Turning Return All off applies the Limit after the response arrives, so it trims the result rather than reducing the work Paddle does. The one exception is User: Get Many with Return All on, which pages through the full list.

Usage Examples

  • Create a 20% discount coupon for all checkouts
  • List all subscription plans
  • Get all users on a specific plan
  • Reschedule an upcoming payment
  • List all products in my Paddle account

Example Configuration

Create a percentage coupon limited to specific products:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "create",
    "jsonParameters": false,
    "couponType": "product",
    "productIds": "12345,67890",
    "discountType": "percentage",
    "discountAmount": 20,
    "additionalFields": {
      "couponCode": "SAVE20",
      "description": "20% off selected products",
      "allowedUses": 100,
      "expires": "2026-12-31T23:59:59Z",
      "recurring": false
    }
  }
}

Generate a batch of single-use prefixed codes:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "create",
    "jsonParameters": false,
    "couponType": "product",
    "productIds": "123,456,789",
    "discountType": "percentage",
    "discountAmount": 15,
    "additionalFields": {
      "couponPrefix": "PROD15_",
      "numberOfCoupons": 10,
      "allowedUses": 1,
      "expires": "2026-06-30T23:59:59Z",
      "recurring": false,
      "description": "15% off selected products - single use"
    }
  }
}

Create a flat-amount checkout coupon:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "create",
    "jsonParameters": false,
    "couponType": "checkout",
    "discountType": "flat",
    "discountAmount": 25,
    "currency": "USD",
    "additionalFields": {
      "couponCode": "WELCOME25",
      "description": "$25 off your first order",
      "allowedUses": 1000,
      "recurring": false
    }
  }
}

Supply the same coupon in Paddle’s own field names instead:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "create",
    "jsonParameters": true,
    "additionalFieldsJson": "{\"coupon_type\":\"checkout\",\"discount_type\":\"flat\",\"discount_amount\":10,\"currency\":\"USD\",\"coupon_code\":\"FLAT10\",\"description\":\"10 USD off any order\",\"allowed_uses\":500}"
  }
}

List a product’s coupons:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "getAll",
    "productId": "12345",
    "returnAll": false,
    "limit": 50
  }
}

Extend a coupon by code:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "update",
    "jsonParameters": false,
    "updateBy": "couponCode",
    "couponCode": "SAVE20",
    "additionalFields": {
      "allowedUses": 200,
      "expires": "2027-01-31T23:59:59Z"
    }
  }
}

Re-price a whole coupon group:

{
  "type": "paddle",
  "parameters": {
    "resource": "coupon",
    "operation": "update",
    "jsonParameters": false,
    "updateBy": "group",
    "group": "spring-promo",
    "additionalFields": {
      "discount": {
        "discountProperties": {
          "discountType": "flat",
          "currency": "USD",
          "discountAmount": 15
        }
      },
      "newGroup": "spring-promo-2026"
    }
  }
}

Pull paid payments in a date range:

{
  "type": "paddle",
  "parameters": {
    "resource": "payment",
    "operation": "getAll",
    "returnAll": false,
    "limit": 100,
    "jsonParameters": false,
    "additionalFields": {
      "from": "2026-01-01T00:00:00Z",
      "to": "2026-12-31T23:59:59Z",
      "isPaid": true,
      "state": "active"
    }
  }
}

Push an upcoming payment to a later date:

{
  "type": "paddle",
  "parameters": {
    "resource": "payment",
    "operation": "reschedule",
    "paymentId": 123456,
    "date": "2026-02-15T00:00:00Z"
  }
}

Fetch one plan:

{
  "type": "paddle",
  "parameters": {
    "resource": "plan",
    "operation": "get",
    "planId": "plan_12345"
  }
}

List every product in the account:

{
  "type": "paddle",
  "parameters": {
    "resource": "product",
    "operation": "getAll",
    "returnAll": true
  }
}

List active subscribers on one plan:

{
  "type": "paddle",
  "parameters": {
    "resource": "user",
    "operation": "getAll",
    "returnAll": false,
    "limit": 25,
    "jsonParameters": false,
    "additionalFields": {
      "planId": "plan_12345",
      "state": "active"
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Manage Paddle payments, subscriptions, coupons, products, and users using the Classic Vendor API.

Frequently asked questions

Which Paddle API does it use?

The Classic Vendor API. If your account is on a different Paddle API generation, check compatibility before building against this node.

What can it manage?

Payments, subscriptions, coupons, products and users — the billing objects most revenue workflows need to read or adjust.

Is it useful for coupon campaigns?

Yes — creating and managing coupons from a workflow means discount codes can be issued in response to events rather than batch-created by hand.

Which credential does it need?

A Paddle API credential for your vendor account.

Build with the Paddle node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Paddle API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.