Everything an AI agent can do with the Paddle API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints32
API version1
Last updated23 June 2026
Orientation

How the Paddle API works.

The Paddle API is how an app or AI agent runs billing in a Paddle account: creating products and prices, charging a customer through a transaction, managing recurring subscriptions, and refunding a charge as an adjustment. Access is granted through an API key, and a key carries per-entity permissions that set which entities a call can read or write. A state change emits a notification that Paddle delivers to a registered destination, so an integration learns about activity without polling.

32Endpoints
8Capability groups
15Read
17Write
18Permissions
Authentication
Paddle authenticates server-side calls with an API key sent as a Bearer token in the Authorization header, not OAuth. A key created from May 2025 (prefixed pdl_live_apikey_ or pdl_sdbx_apikey_) carries per-entity Read and Write permissions chosen at creation. The key is shown once; a lost key must be revoked and replaced. A separate client-side token is the only credential safe to use in front-end code.
Permissions
An API key grants each entity, like product, customer, transaction, or subscription, independent read or write access. A read permission covers GET and preview requests; a write permission covers create, update, archive, and delete, and automatically includes read. A 403 (forbidden) response means the key lacks the permission the request needs.
Versioning
Paddle versions its API with a single sequential number, currently 1, and only mints a new version for a breaking change. A request can pin a version with the Paddle-Version header, which overrides the account default. Older versions keep working, so an integration moves up on its own schedule. This is Paddle Billing; the older Paddle Classic API is separate.
Data model
Paddle is entity-oriented REST: JSON requests, JSON responses wrapped in a data envelope with a meta block, and predictable / paths under api.paddle.com. A catalog of products and prices feeds transactions (one-off charges and invoices) and subscriptions (recurring billing); refunds and credits are recorded as adjustments. A state change emits a notification delivered by webhook to a registered destination.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Paddle determines what it can reach. There is a route for making calls, a route for receiving events, and a hosted server that exposes Paddle operations to agents, and each is governed by the key or secret behind it and the permissions that key carries.

Ways to connect

REST API

The REST API takes JSON request bodies, returns JSON wrapped in a data envelope with a meta block, and pages through lists with a cursor, at https://api.paddle.com for live and https://sandbox-api.paddle.com for sandbox. A call authenticates with an API key sent as a Bearer token. The version is set with the Paddle-Version header.

Best forConnecting an app or AI agent to Paddle.
Governed byThe API key and the entity permissions it carries.
Docs ↗

Webhooks (notifications)

Paddle POSTs a notification to an HTTPS destination registered for chosen events. The receiver verifies the Paddle-Signature header against the destination's secret key to confirm the request came from Paddle. Up to 10 destinations can be active, and delivered notifications can be listed, inspected, and replayed through the API.

Best forReceiving Paddle events at an app or AI agent.
Governed byThe secret key on the notification destination.
Docs ↗

MCP server

Paddle publishes a hosted Model Context Protocol server at https://mcp.paddle.com that gives AI agents and MCP clients access to Paddle operations, with near parity to the Paddle Billing API across products, prices, customers, transactions, and subscriptions, plus up-to-date documentation. It works with Paddle Billing, not Paddle Classic.

Best forConnecting an AI agent to Paddle through MCP.
Governed byThe Paddle API key and the permissions it carries.
Docs ↗
Authentication

API key

A server-side API key authenticates first-party calls, sent as a Bearer token in the Authorization header. Keys created from May 2025 carry per-entity Read and Write permissions chosen when the key is made, so a key reaches only the entities it was scoped to. A key is shown once at creation; if it is lost it must be revoked and replaced. Each key belongs to one environment, live or sandbox.

TokenBearer API key (pdl_live_apikey_... / pdl_sdbx_apikey_...)
Best forServer-side calls scoped to specific entities.
Docs ↗

Client-side token

A client-side token is safe to embed in front-end code. It is limited to client-safe operations, like opening a checkout and previewing prices, and cannot read or change billing data. It is created and managed separately from the secret API key.

TokenClient token (test_... / live_...)
Best forFront-end checkout and price previews (Paddle.js).
Docs ↗
Capability map

What an AI agent can do in Paddle.

The Paddle API is split into entities an agent can act on, like products, prices, customers, transactions, subscriptions, and adjustments. Each entity has its own methods, and a write in some of them charges a customer, cancels billing, or moves money back as a refund.

Endpoint reference

Every Paddle API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Products

Methods for working with the products being sold.4

Write permission automatically includes read.

Acts onproduct
Permission (capability)product.write
VersionAvailable since the API’s base version
Webhook eventproduct.created
Rate limitStandard limits apply

Read-only.

Acts onproduct
Permission (capability)product.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onproduct
Permission (capability)product.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Set status to archived to retire a product; there is no delete operation.

Acts onproduct
Permission (capability)product.write
VersionAvailable since the API’s base version
Webhook eventproduct.updated
Rate limitStandard limits apply

Prices

Methods for working with the prices attached to products.3

A product can have many prices, like a monthly and an annual price.

Acts onprice
Permission (capability)price.write
VersionAvailable since the API’s base version
Webhook eventprice.created
Rate limitStandard limits apply

Read-only.

Acts onprice
Permission (capability)price.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Set status to archived to retire a price.

Acts onprice
Permission (capability)price.write
VersionAvailable since the API’s base version
Webhook eventprice.updated
Rate limitStandard limits apply

Customers

Methods for working with the people and businesses being billed.4

Paddle also creates customers automatically at checkout.

Acts oncustomer
Permission (capability)customer.write
VersionAvailable since the API’s base version
Webhook eventcustomer.created
Rate limitStandard limits apply

Read-only.

Acts oncustomer
Permission (capability)customer.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts oncustomer
Permission (capability)customer.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Set status to archived to retire a customer.

Acts oncustomer
Permission (capability)customer.write
VersionAvailable since the API’s base version
Webhook eventcustomer.updated
Rate limitStandard limits apply

Transactions

Methods for working with transactions, the record of a charge.4

Can collect payment automatically or be issued as an invoice for manual payment.

Acts ontransaction
Permission (capability)transaction.write
VersionAvailable since the API’s base version
Webhook eventtransaction.created
Rate limitStandard limits apply

Read-only.

Acts ontransaction
Permission (capability)transaction.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; use the include parameter to pull in related entities.

Acts ontransaction
Permission (capability)transaction.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; returns a temporary URL to the PDF.

Acts ontransaction
Permission (capability)transaction.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Subscriptions

Methods for working with recurring subscriptions.7

Read-only.

Acts onsubscription
Permission (capability)subscription.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onsubscription
Permission (capability)subscription.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

An update that charges immediately counts against the per-subscription charge limit.

Acts onsubscription
Permission (capability)subscription.write
VersionAvailable since the API’s base version
Webhook eventsubscription.updated
Rate limit20 chargeable updates per hour, 100 per 24 hours, per subscription

Ends recurring billing; cannot be undone once a subscription is canceled.

Acts onsubscription
Permission (capability)subscription.write
VersionAvailable since the API’s base version
Webhook eventsubscription.canceled
Rate limitStandard limits apply

Pauses at the end of the billing period by default.

Acts onsubscription
Permission (capability)subscription.write
VersionAvailable since the API’s base version
Webhook eventsubscription.paused
Rate limitStandard limits apply

Restarts recurring billing from the chosen date.

Acts onsubscription
Permission (capability)subscription.write
VersionAvailable since the API’s base version
Webhook eventsubscription.resumed
Rate limitStandard limits apply

An immediate charge counts against the per-subscription charge limit.

Acts onsubscription
Permission (capability)subscription.write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit20 chargeable updates per hour, 100 per 24 hours, per subscription

Adjustments (refunds & credits)

Methods for refunds, credits, and chargebacks against billed transactions.3

A full or partial refund returns money to the customer; a refund needs Paddle approval before it is paid out.

Acts onadjustment
Permission (capability)adjustment.write
VersionAvailable since the API’s base version
Webhook eventadjustment.created
Rate limitStandard limits apply

Read-only.

Acts onadjustment
Permission (capability)adjustment.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; returns a temporary URL to the PDF.

Acts onadjustment
Permission (capability)adjustment.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Discounts

Methods for working with discount codes and amounts.3

Can be limited by usage count, dates, or specific products and prices.

Acts ondiscount
Permission (capability)discount.write
VersionAvailable since the API’s base version
Webhook eventdiscount.created
Rate limitStandard limits apply

Read-only.

Acts ondiscount
Permission (capability)discount.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Set status to archived to retire a discount.

Acts ondiscount
Permission (capability)discount.write
VersionAvailable since the API’s base version
Webhook eventdiscount.updated
Rate limitStandard limits apply

Notifications & Webhooks

Methods for managing event destinations and inspecting delivered notifications.4

A maximum of 10 destinations can be active at once.

Acts onnotification_setting
Permission (capability)notification_setting.write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onnotification_setting
Permission (capability)notification_setting.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onnotification
Permission (capability)notification.read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Resends the same event so a receiver can reprocess it.

Acts onnotification
Permission (capability)notification.write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Paddle can notify an app when something happens in an account, like a transaction completing or a subscription being canceled. It POSTs a notification describing what changed to a destination that has been registered for that event, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
transaction.createdA new transaction was created, the record of a charge against a customer./transactions
transaction.completedA transaction has been fully processed and will not change further. An integration provisions access on this event./transactions
subscription.updatedA subscription changed, like an item, quantity, status, or schedule change./subscriptions/{subscription_id}
subscription.canceledA subscription was canceled and recurring billing has ended. An integration revokes access on this event./subscriptions/{subscription_id}/cancel
subscription.pausedA subscription was paused, so billing stops until it is resumed./subscriptions/{subscription_id}/pause
subscription.resumedA paused subscription was resumed and recurring billing has restarted./subscriptions/{subscription_id}/resume
adjustment.createdAn adjustment was created, like a refund, credit, or chargeback against a transaction./adjustments
customer.createdA new customer was created, by the API or at checkout./customers
customer.updatedA customer's details changed./customers/{customer_id}
product.createdA new product was created./products
product.updatedA product's details changed, including being archived./products/{product_id}
price.createdA new price was created for a product./prices
price.updatedA price's details changed, including being archived./prices/{price_id}
discount.createdA new discount was created./discounts
discount.updatedA discount's details changed, including being archived./discounts/{discount_id}
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Paddle limits how fast an app can call, measured as a number of requests per minute per IP address, with a higher allowance for the preview endpoints that price checkout pages.

Request rate

Paddle meters requests by rate per IP address, not by a per-method cost. Most operations allow 240 requests per minute per IP; the preview transaction and preview prices endpoints allow 1,000 per minute because they price checkout pages. Going over returns HTTP 429 with a Retry-After header, and that IP cannot make another request for 60 seconds. Separately, an immediate charge on a subscription is capped per subscription, at 20 chargeable updates per hour and 100 per 24 hours, shown on those rows.

Pagination

A list endpoint is cursor-based. The per parameter sets the page size, and the response meta block carries pagination details including a has_more flag and a next link that already contains the cursor (the after parameter) for the following page. Results can be ordered and filtered with query parameters, and the SDKs offer auto-pagination.

Request size

A list endpoint returns a bounded number of records per page, set by the per parameter. Request bodies and headers have size ceilings that return 413 (request_body_too_large) or 414 (request_headers_too_large) when exceeded. Up to 10 notification destinations can be active at once.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400bad_request / invalid_fieldThe request was malformed or a field failed validation. A validation error returns an errors array naming each invalid field.Read the detail and the errors array, fix the request, and resend. The request is not retryable as-is.
401authentication_missing / invalid_tokenNo API key was sent, the Authorization header was malformed, or the key is invalid.Send a valid API key as a Bearer token in the Authorization header for the right environment, and rotate the key if it is compromised.
403forbiddenThe key is valid but lacks the entity permission the request needs, for example a write call with a read-only key.Grant the entity permission on the API key, or use a key that carries it.
404not_foundThe requested entity does not exist, or is not visible to this key, account, or environment.Verify the entity ID and confirm it lives in the same environment and account.
409conflictThe request conflicts with the current state of the entity, like an action that the entity's status does not allow.Re-read the entity, confirm it is in a valid state for the action, and retry.
429too_many_requestsThe IP address exceeded the rate limit. A Retry-After header gives the seconds to wait, and that IP cannot make another request for 60 seconds.Back off until the Retry-After window passes, then retry with exponential backoff and smooth the request rate.
500internal_errorAn error on Paddle's side, which can also appear as 502 or 503. It is rare.Retry with backoff, and include the meta.request_id when contacting Paddle support if it persists.
Versioning & freshness

Version history.

Paddle versions its API with a single sequential number and only mints a new version for a breaking change, so older versions keep working until an integration chooses to move up.

Version history

What changed, and when

Latest version1
1Current version
Paddle Billing API, version 1 (current)

Paddle Billing uses a single sequential API version, currently 1, set per request with the Paddle-Version header and defaulting per account. Only a breaking change mints a new version, and older versions keep working. The entries below are dated feature releases shipped within version 1, drawn from the developer changelog.

What changed
  • Checkout domains: new operations to list and inspect approved checkout domains and trigger Apple Pay verification (16 Jun 2026).
  • Billing: paid trials, charging a reduced amount during a trial before full-price renewal (11 Jun 2026).
  • Metrics: seven new operations for retrieving timeseries metrics data (12 Mar 2026).
2026-05-15Feature update
Hosted Paddle MCP server

Paddle moved its Model Context Protocol server to a hosted remote service, giving AI agents access to the full Paddle API alongside up-to-date documentation.

What changed
  • MCP server became a hosted remote service at mcp.paddle.com.
  • Agent skills and a Claude Code plugin released for faster Paddle integration (14 May 2026).
2025-05-06Feature update
Enhanced API keys with permissions

Paddle introduced a new API key format that carries per-entity Read and Write permissions and supports secret scanning. Keys created before this date are 50-character strings without permissions.

What changed
  • API keys gained per-entity permission scopes chosen at creation.
  • New keys are prefixed pdl_live_apikey_ or pdl_sdbx_apikey_ and support secret scanning.
  • Legacy keys remain valid but carry no scoped permissions.
2023-08-01Feature update
Paddle Billing general availability

Paddle Billing, the entity-oriented REST API with products, prices, customers, transactions, subscriptions, adjustments, and notifications, became generally available as the successor to Paddle Classic.

What changed
  • Paddle Billing launched as the current API, separate from Paddle Classic.
  • Notifications model with destinations and signed webhook delivery introduced.

Pin a version with the Paddle-Version header and move up only when ready.

Paddle developer changelog ↗
Questions

Paddle API, answered.

How does an app authenticate with the Paddle API?+
Each request sends an API key as a Bearer token in the Authorization header. A key created from May 2025 carries per-entity permissions set when it is made, so it reaches only what it was scoped to. The key is revealed once at creation, so it has to be stored securely; a lost key is revoked and replaced rather than recovered.
What's the difference between sandbox and live?+
Paddle has two separate environments. Sandbox calls go to sandbox-api.paddle.com with a pdl_sdbx_apikey_ key and move no real money, while live calls go to api.paddle.com with a pdl_live_apikey_ key and process real payments. Data and keys do not cross between environments.
How do permissions and scopes work on an API key?+
Permissions are scoped per entity, like product.read or transaction.write. A read permission allows GET and preview requests; a write permission allows create, update, archive, and delete, and includes read automatically. Choosing only the entities an integration needs limits the damage if a key leaks, and a request without the needed permission returns 403 (forbidden).
How do I verify webhooks are really from Paddle?+
Each notification carries a Paddle-Signature header. The receiver computes an HMAC over the raw request body using the destination's secret key and compares it, ideally with the SDK helper. The check runs on the raw, unparsed body, and a mismatch is rejected to prevent spoofing.
How does API versioning work?+
Paddle uses a single sequential version number, currently 1, and only introduces a new version for a breaking change. A request can pin a version with the Paddle-Version header, which takes priority over the account default. Older versions stay active, so an integration upgrades when it chooses rather than on a forced schedule.
How does a refund work in Paddle?+
A billed transaction is a financial record and cannot be edited, so money is returned by creating an adjustment against it, as a full or partial refund, a credit, or a chargeback. A refund adjustment needs Paddle approval before it is paid out, and a credit note PDF is available for it.
What are the rate limits?+
Most operations allow 240 requests per minute per IP address, and the preview transaction and preview prices endpoints allow 1,000 per minute. Going over returns HTTP 429 with a Retry-After header, after which that IP is blocked for 60 seconds. Separately, immediate charges on a single subscription are capped at 20 per hour and 100 per 24 hours.
Is this Paddle Billing or Paddle Classic?+
This reference covers Paddle Billing, the current API. Paddle Classic is the older product with a different API and is not covered here. The Paddle MCP server and the version 1 API both apply to Paddle Billing only.
Related

More finance API guides for agents

What is Bollard AI?

Control what every AI agent can do in Paddle.

Bollard AI sits between a team's AI agents and Paddle. Grant each agent exactly the access it needs, read or write, entity by entity, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Paddle key.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Paddle
Billing Agent
View transactions ResourceOffReadFull use
Issue refunds ActionOffReadFull use
Cancel subscriptions ActionOffReadFull use
Customers ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Paddle