Reference · Tools
Paddle
Manage payments, subscriptions, coupons, products, and users via the Paddle Classic API
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
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Paddle API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Coupon | coupon |
| Payment | payment |
| Plan | plan |
| Product | product |
| User | user |
Operations
Each resource has its own Operation list, and most reuse the operation value getAll. Pick the resource first, then the operation.
| Resource | Operation | Value | Description |
|---|---|---|---|
| Coupon | Create | create | Create a coupon |
| Coupon | Get Many | getAll | Get many coupons |
| Coupon | Update | update | Update a coupon |
| Payment | Get Many | getAll | Get many payments |
| Payment | Reschedule | reschedule | Reschedule a payment |
| Plan | Get | get | Get a plan |
| Plan | Get Many | getAll | Get many plans |
| Product | Get Many | getAll | Get many products |
| User | Get Many | getAll | Get 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| JSON Parameters | boolean | No | false | Whether to send all fields as raw JSON. |
| Additional Fields (JSON) | json | No | — | All coupon creation attributes in JSON form. See Paddle API docs for available fields. (shown when JSON Parameters is true) |
| Coupon Type | options | No | checkout | Either product (valid for specified products) or checkout (valid for any checkout). (shown when JSON Parameters is false) |
Options: checkout, product | ||||
| Product IDs | string | Yes | — | Comma-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 Type | options | No | flat | Either flat (fixed currency amount) or percentage. (shown when JSON Parameters is false) |
Options: flat, percentage | ||||
| Discount Amount (Currency) | number | No | 1 | Discount amount in currency. (shown when Discount Type is flat and JSON Parameters is false) |
| Discount Amount (%) | number | No | 1 | Discount amount in percentage. (shown when Discount Type is percentage and JSON Parameters is false) |
| Currency | options | No | EUR | The 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 Fields | collection | No | {} | Optional coupon properties. (shown when JSON Parameters is false) |
| — Allowed Uses | number | No | 1 | Number of times a coupon can be used. Defaults to 999,999 if not specified. |
| — Coupon Code | string | No | — | Will be randomly generated if not specified. |
| — Coupon Prefix | string | No | — | Prefix for generated codes. Not valid if couponCode is specified. |
| — Description | string | No | — | Description displayed in the Seller Dashboard. |
| — Expires | dateTime | No | — | Coupon expires on this date at 00:00:00 UTC. |
| — Group | string | No | — | Coupon group name (1-50 characters). |
| — Number of Coupons | number | No | 1 | Number of coupons to generate. Not valid if couponCode is specified. |
| — Recurring | boolean | No | false | Whether discount applies to recurring subscription payments after the initial purchase. |
Coupon: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Product ID | string | Yes | — | The specific product/subscription ID to list coupons for. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
Coupon: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| JSON Parameters | boolean | No | false | Whether to send all fields as raw JSON. |
| Additional Fields (JSON) | json | No | — | All coupon update attributes in JSON form. (shown when JSON Parameters is true) |
| Update By | options | No | couponCode | Whether to identify the coupon by code or group name. (shown when JSON Parameters is false) |
Options: couponCode, group | ||||
| Coupon Code | string | No | — | The coupon code to identify which coupon to update. (shown when Update By is couponCode and JSON Parameters is false) |
| Group | string | No | — | The name of the group of coupons to update. (shown when Update By is group and JSON Parameters is false) |
| Additional Fields | collection | No | {} | The coupon properties to change. (shown when JSON Parameters is false) |
| — Allowed Uses | number | No | 1 | Number of times a coupon can be used. |
| — Discount | fixedCollection | No | {} | Replace the coupon’s discount. |
| — — Discount Type | options | No | flat | Either flat or percentage. |
Options: flat, percentage | ||||
| — — Currency | options | No | EUR | Required 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) | number | No | 0 | Flat discount amount. (shown when Discount Type is flat) |
| — — Discount Amount (%) | number | No | 0 | Percentage discount amount. (shown when Discount Type is percentage) |
| — Expires | dateTime | No | — | Coupon expires on this date at 00:00:00 UTC. |
| — New Coupon Code | string | No | — | New code to rename the coupon to. |
| — New Group Name | string | No | — | New group name to move coupon to. |
| — Product IDs | string | No | — | Comma-separated list of product IDs. Leave blank to remove associated products. |
| — Recurring | boolean | No | false | Whether discount applies to recurring subscription payments after the initial purchase. |
Payment: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
| JSON Parameters | boolean | No | false | Whether to send filter fields as raw JSON. |
| Additional Fields (JSON) | json | No | — | Filter attributes in JSON form. (shown when JSON Parameters is true) |
| Additional Fields | collection | No | {} | Filters applied to the payment list. (shown when JSON Parameters is false) |
| — Date From | dateTime | No | — | Payment starting from date. |
| — Date To | dateTime | No | — | Payment up until date. |
| — Is Paid | boolean | No | false | Whether the payment is paid. |
| — One Off Charge | boolean | No | false | Filter one-off charges. |
— Plan ID (plan) | string | No | — | Filter by plan ID (single or comma-separated). |
| — State | options | No | active | Filter by subscription status. |
Options: active, past_due, paused, trialing | ||||
| — Subscription ID | number | No | — | A specific user subscription ID. |
Payment: Reschedule
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Payment ID | number | Yes | — | The upcoming subscription payment ID. Find payment IDs by listing payments first. |
| Date | dateTime | Yes | — | The date to reschedule the payment to (YYYY-MM-DD). |
Plan: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Plan ID | string | Yes | — | The subscription plan ID. |
Plan: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
Product: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
User: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
| JSON Parameters | boolean | No | false | Whether to send filter fields as raw JSON. |
| Additional Fields (JSON) | json | No | — | Filter attributes in JSON form. (shown when JSON Parameters is true) |
| Additional Fields | collection | No | {} | Filters applied to the user list. (shown when JSON Parameters is false) |
— Plan ID (planId) | string | No | — | Filter by subscription plan ID. |
| — Subscription ID | string | No | — | A specific user subscription ID. |
| — State | options | No | active | Filter by subscription status. |
Options: active, past_due, paused, trialing |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum 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.
| Operation | Output |
|---|---|
| Coupon: Create | One 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 Many | One output item per coupon. |
| Coupon: Update | One output item carrying Paddle’s update result. |
| Payment: Get Many | One output item per payment. |
| Payment: Reschedule | One output item carrying the API acknowledgement, including success: true. |
| Plan: Get | One output item carrying the plan. |
| Plan: Get Many | One output item per plan. |
| Product: Get Many | One output item per product. |
| User: Get Many | One 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
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes 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 BusyBotLast updated . Spotted something wrong? Tell us.