For AI agents and LLMs: a structured documentation index is available at /llms.txt. Every page has a Markdown sibling — append .md to any URL.

Skip to content
Docs

Technical data mapping between Paddle Classic and Paddle Billing

All the data in Paddle Classic can be mapped to Paddle Billing, but as a complete reimagining of how you work with the Paddle platform, some of the data doesn't map one-to-one.

AI summary

A detailed technical mapping of every Classic entity — subscription users, plans, orders, and API properties — to their Paddle Billing equivalents, covering the API, webhooks, Paddle.js, and all core entities.

  • • Paddle Classic's subscription user maps to three separate Billing entities: customer, address, and business — customers can now have multiple subscriptions, addresses, and businesses.
  • • The Classic passthrough string maps to custom_data objects on all core Billing entities, providing type-safe JSON custom data instead of arbitrary string payloads.
  • • The customer portal session is a new Billing-only entity — generate authenticated URLs using the API to replace Classic's update_url and cancel_url.

After you activate Paddle Billing for your account, you get access to Paddle Billing data alongside your Paddle Classic data. Paddle Billing and Paddle Classic share some core settings, but most data is separate. This includes customer, catalog, and subscription data.

To move fully to Paddle Billing, you need to replace your integration with Paddle Classic with an integration that uses the Paddle Billing API, webhooks, and Paddle.js v2.

This guide walks through how data in Paddle Classic maps to data in Paddle Billing at a technical level. You can use it to understand how you should build your integration with Paddle Billing.

Shared settings

Paddle Billing is built on the Paddle platform, so it shares core settings with Paddle Classic.

  • Account verification
    You don't need to verify your domains, business, or identity again.
  • Your Paddle account settings
    Business account settings and team members are the same across Paddle Classic and Paddle Billing.
  • Checkout customization options
    Payment methods, branding options, and other checkout customization options work across Paddle Classic and Paddle Billing.
  • Your balance and payouts
    Earnings from transactions both Paddle Classic and Paddle Billing are added to your balance, and you're paid out using the same payout settings.
  • Taxable categories
    Paddle verifies what kinds of products you're able to offer at the account level, so you don't need to get approval for taxable categories in Paddle Billing if you were approved for them in Paddle Classic.
  • Allowed IP addresses
    Webhooks from Paddle Billing are sent from the same IP addresses as Paddle Classic.
  • API keys
    API keys work for both Paddle Classic and Paddle Billing, though we recommend you generate new keys when integrating with Paddle Billing.

Technical comparison

Where Paddle Classic is made up of a few different APIs, Paddle Billing is powered by one unified API. We prioritized consistency and conformity to REST standards when building the Paddle Billing API.

PropertyClassicBilling
Base URLvendors.paddle.com/apiapi.paddle.com
AuthenticationPassed in the body of a requestBearer authentication
VersioningURL versions; major/minor versionsPassed using a Paddle-Version header; major versions
Success responses"success": "true" in the response body2xx response codes; data and meta in the response body
Error responses"success": "false" in the response body4xx or 5xx response codes; error and meta in the response body
DeletionNot possibleNot possible, but archiving supported across entities
PaginationNot always presentCursor-based pagination, with details in meta.pagination
IDsAuto-incrementing IDsPaddle IDs for all entities
SideloadingNot possibleReturn related entities using include query parameter
Empty valuesMay be omitted in responsesReturned in responses as null
Custom datapassthrough parameter; custom_data as stringified JSON for some endpointscustom_data object across all core entities
Request bodiesapplication/x-www-form-urlencodedapplication/json; requests closely mirror responses
Standard fieldsNo standardizationAll entities return status, created_at, and updated_at fields
Rate limitingDifferent limits across endpointsMax 240 requests/minute; 429 response code returned

Notifications (webhooks) are important for provisioning and order fulfillment. They're more robust in Paddle Billing, built around a centralized event stream.

PropertyClassicBilling
CreationUsing Paddle dashboardUsing Paddle dashboard and the API
Max webhook endpoints510 active; no limit on inactive
Events available1842
Event subscriptionsGlobalEndpoint specific
Payloadapplication/x-www-form-urlencoded; may include data not returned in the APIapplication/json; includes the new or changed entity in the Paddle API
Sensitive fieldsOnly sent to the primary endpointNo concept of sensitive fields
Primary endpointReceives all fields, including sensitive fieldsNo concept of a primary endpoint
LogsUsing the Paddle dashboard; global onlyUsing Paddle dashboard and the API; global, endpoint specific, and for a specific notification
Webhook simulatorLets you send test notifications using mock dataLets you simulate single events and complex scenarios, like subscription creation, renewals, and cancellation
Event streamNot availablePoll /events using the Paddle API
Failed deliveryRetried every 15 minutes over three daysReplayed using an exponential backoff schedule; may be replayed using the Paddle API
Product fulfillmentPaddle-led fulfillment by setting a webhook endpoint against productsHandle fulfillment using transaction webhooks
Signature verificationSignature in payload; requires PHP serializationPaddle-Signature header; hash using SHA256

There's a new version of Paddle.js for Paddle Billing. Many concepts are the same, but it now supports multi-product checkouts and new ways to localize.

PropertyClassicBilling
Version12
CDN URLhttps://cdn.paddle.com/paddle/paddle.jshttps://cdn.paddle.com/paddle/v2/paddle.js
IncludeManually load by adding to <head>Manually load by adding to <head>, or import using the Paddle.js wrapper
InitializationPass vendor ID to Paddle.Setup()Pass client-side token to Paddle.Initialize()
Retain authenticationPass a Retain API key to Paddle.Setup()Automatically authenticated using client-side token
Work with RetainAvailable using profitwell methodAvailable using Paddle.Retain methods
TypeScript supportNot availableAvailable using the Paddle.js wrapper
CallbackseventCallback, successCallback, and closeCallbackSingle eventCallback
Update checkoutsNot possibleDynamically update items and discounts on an opened checkout
ItemsSingle product checkouts onlyMulti-product checkouts supported
Pricing pagesPaddle.Product.Prices() returns localized prices for one productPaddle.PricePreview() returns localized prices for a list of prices
One-page checkoutPrefill required properties at checkout to land on the second pagePass variant with the value one-page to present a one-page checkout experience

Methods

Core methods are the same, with new parameters to support multi-product checkouts, new ways to localize, and ways to work with Paddle IDs.

ClassicBilling
Paddle.Setup()Paddle.Initialize()
Paddle.Setup()Paddle.Update()
Paddle.Environment.set()Paddle.Environment.set()
Paddle.Checkout.open()Paddle.Checkout.open()
Paddle.Checkout.updateCheckout()
Paddle.Checkout.updateItems()
Paddle.Checkout.close()
Paddle.Product.Prices()Paddle.PricePreview()
Paddle.Retain.demo()
Paddle.Retain.initCancellationFlow()
Paddle.Spinner.show()Paddle.Spinner.show()
Paddle.Spinner.hide()Paddle.Spinner.hide()
Paddle.Status.libraryVersionPaddle.Status.libraryVersion
Paddle.Audience
Paddle.Download
Paddle.Order
Paddle.User.History()

Events

Events are simplified, with a standard event payload that you can compare across the checkout lifecycle.

ClassicBilling
Checkout.Loadedcheckout.loaded
Checkout.Closecheckout.closed
checkout.updated
Checkout.Completecheckout.completed
Checkout.Quantity.Changecheckout.items.updated
checkout.items.removed
Checkout.Logincheckout.customer.created
Checkout.Customer.Detailscheckout.customer.updated
Checkout.Logoutcheckout.customer.removed
Checkout.Payment.Selectedcheckout.payment.selected
checkout.payment.initiated
checkout.payment.failed
Checkout.Coupon.Appliedcheckout.discount.applied
Checkout.Coupon.Removecheckout.discount.removed
checkout.warning
Checkout.Errorcheckout.error
Checkout.Location.Submit
Checkout.Vat.Applied
Checkout.Vat.Remove
Checkout.PaymentComplete
Checkout.User.Subscribed
Checkout.Language.Change
Checkout.Vat.Add
Checkout.Vat.Cancel
Checkout.Vat.Submit
Checkout.WireTransfer.Complete
Checkout.OfflinePayment.DetailsComplete
Checkout.PaymentMethodChange
Checkout.WireTransfer.PaymentMethodChange

Core entities

Customers in Paddle Billing are the people and businesses that make purchases. Customer entities store key information like name, email, and localization information. They have two subentities: addresses and businesses.

Key changes

PropertyClassicBilling
Data structureCustomer data stored against subscription userCustomer, address, and business entities
Data accessUsing Paddle dashboard; limited access using the APIUsing Paddle dashboard and the API; all data may be updated by you
Tax and business informationStored against subscription userStored against a related business entity; customers may have multiple businesses
Address informationStored against subscription userStored against a related address entity; customers may have multiple addresses
Relation to subscriptionsOne customer, one subscriptionCustomers may be linked to multiple subscriptions

Customer entity

Customer entities in Paddle Billing hold top-level information about someone making a purchase.

The closest equivalent in Paddle Classic is a subscription user, though information about a subscription has moved to a new subscription entity.

ClassicBilling
user.user_idcustomer.id
customer.name
user.user_emailcustomer.email
user.marketing_consentcustomer.marketing_consent
customer.status
customer.custom_data
customer.locale
customer.created_at
customer.updated_at
customer.import_meta
user.subscription_id
user.plan_id
user.state
user.signup_date
user.last_payment
user.next_payment

Address entity

Address is a new entity in Paddle Billing. It holds information about a billing address for a customer.

There's no equivalent in Paddle Classic.

ClassicBilling
address.id
address.description
address.first_line
address.second_line
address.city
address.postal_code
address.region
address.country_code
address.custom_data
address.status
address.created_at
address.updated_at
address.import_meta

Business entity

Business is a new entity in Paddle Billing. It holds information about a business for a customer.

There's no equivalent in Paddle Classic.

ClassicBilling
business.id
business.name
business.company_number
business.tax_identifier
business.status
business.contacts[]
business.created_at
business.updated_at
business.custom_data
business.import_meta

Your catalog in Paddle Billing is made up of products, prices, and discounts. Products describe the items customers can purchase, and prices describe how much and how often a product is charged.

Key changes

PropertyClassicBilling
Data structureProduct (one-time) and plan (recurring) entitiesProduct and related price entities
Data accessUsing Paddle dashboard; limited access using the APIUsing Paddle dashboard and the API; all data may be updated by you
FulfillmentLicense keys and product downloads handled by PaddleBuild your own workflows using transaction webhooks
Price localizationSet currency-specific prices for a currency against an itemSystem-wide automatic currency conversion; set country-specific prices for an item
Relation to subscriptionsOne item per subscriptionMulti-item subscriptions
Non-catalog itemsUsing pay linksPassing product and price attributes to a transaction or subscription
Discount typesPercentage or flat feePercentage, flat fee, or flat fee per unit
Discount coupon codesRequiredOptional

Product entity

Product entities in Paddle Billing describe an item that customers can purchase. They don't hold information about a charge, which is held against related price entities.

Products are comparable to products in Paddle Classic, but there's no distinction between one-time and recurring products in Paddle Billing.

ClassicBilling
product.idproduct.id
product.nameproduct.name
product.tax_category
product.type
product.descriptionproduct.description
product.iconproduct.image_url
product.custom_data
product.status
product.import_meta
product.created_at
product.updated_at
product.base_price
product.currency
product.sale_price
product.screenshots

Price entity

Price is a new entity in Paddle Billing. Prices describe how products are charged.

In Paddle Classic, recurring price information is set against the subscription plan. In Paddle Billing, prices may be one-time as well as recurring.

ClassicBilling
plan.idprice.id
price.product_id
price.description
price.type
price.name
plan.billing_type, plan.billing_periodprice.billing_cycle
plan.trial_daysprice.trial_period
price.tax_mode
plan.recurring_priceprice.unit_price
price.unit_price_overrides[]
price.status
price.custom_data
price.import_meta
price.created_at
price.updated_at
plan.initial_price

Discount entity

Discounts in Paddle Billing let you reduce the amount a customer has to pay. They're applied to transactions and subscriptions.

They're comparable to coupons or modifiers in Paddle Classic.

ClassicBilling
discount.id
discount.status
coupon.descriptiondiscount.description
discount.enabled_for_checkout
coupon.coupondiscount.code
coupon.discount_typediscount.type
coupon.discount_amountdiscount.amount
coupon.discount_currencydiscount.currency_code
coupon.is_recurringdiscount.recur
discount.maximum_recurring_intervals
coupon.allowed_usesdiscount.usage_limit
coupon.product_iddiscount.restrict_to
coupon.expiresdiscount.expires_at
discount.custom_data
coupon.times_useddiscount.times_used
discount.created_at
discount.updated_at
discount.import_meta

All revenue in Paddle Billing flows through transactions. They calculate and capture revenue for checkouts, invoices, and subscriptions. Every payment attempt in Paddle Billing has a related transaction entity.

You may create transactions yourself to collect for a charge, passing it to Paddle.js to open a checkout or letting Paddle send an invoice for manual collection. Paddle automatically creates transactions for new checkouts, subscription renewals, and to bill for changes or one-time charges for subscriptions.

Key changes

PropertyClassicBilling
Data structureOrders and transactions (one-time); subscriptions and charges (recurring)Transactions and related subscriptions
Data accessUsing Paddle dashboard and the APIUsing Paddle dashboard and the API
InvoicingUsing separate invoice moduleManually-collected transactions and subscriptions
Subscription collection optionsAutomatic, using a saved payment method or Paddle CheckoutAutomatic, using a saved payment method or Paddle Checkout; or manual, by sending an invoice
Relation to customersOne customer, one subscriptionCustomers may have multiple subscriptions
ItemsSingle product subscriptions onlyMulti-product subscriptions supported
Non-catalog itemsNot supportedBill for items that aren't in your catalog
Supported subscription workflowsPause/resume, cancel, upgrade/downgrade, change payment method, change billing datePause/resume, cancel, upgrade/downgrade, change billing date, change payment method, change currency, transition to billing by invoice
Integration journeysBuild subscription workflows using the Paddle APIBuild subscription workflows using the Paddle API; generate secure customer portal links to handle subscription workflows
PaymentsStored against transactions (one-time), or subscriptions (recurring)Stored against a transaction
Saved payment methodsNot a standalone entityStandalone entity you can work with using the API
Paddle RetainPayment RecoveryPayment Recovery, Cancellation Flows, Term Optimization

Subscription entity

Subscriptions in Paddle Billing describe a recurring billing relationship with a customer.

They bring together what was previously on a subscription user and a subscription plan in Paddle Classic.

ClassicBilling
user.subscription_idsubscription.id
user.statesubscription.status
plan.user_idsubscription.customer_id
subscription.address_id
subscription.business_id
user.next_payment.currencysubscription.currency_code
subscription.created_at
subscription.updated_at
user.signup_datesubscription.started_at
subscription.first_billed_at
user.next_payment.datesubscription.next_billed_at
user.paused_atsubscription.paused_at
subscription.canceled_at
subscription.discount
subscription.collection_mode
subscription.billing_details
user.last_payment.date, user.next_payment.datesubscription.current_billing_period
plan.billing_type, plan.billing_periodsubscription.billing_cycle
user.paused_fromsubscription.scheduled_change
user.update_url, user.cancel_urlsubscription.management_urls
plan.plan, user.plan_idsubscription.items[]
user.passthroughsubscription.custom_data
subscription.import_meta
user.next_paymentsubscription.next_transaction

Transaction entity

Transactions in Paddle Billing tie together products, prices, and discounts with customers to calculate revenue for checkouts, invoices, and subscriptions. Every payment attempt in Paddle Billing has a related transaction entity.

They're most similar to orders in Paddle Classic, but contain elements of payments too.

ClassicBilling
order.order.order_id, order.order.subscription_order_idtransaction.id
order.state, payment.is_paidtransaction.status
order.order.customertransaction.customer_id
transaction.address_id
transaction.business_id
passthroughtransaction.custom_data
order.order.order_currencytransaction.currency_code
payment.is_one_off_chargetransaction.origin
order.order.is_subscription, order.order.subscription_idtransaction.subscription_id
transaction.invoice_number
transaction.collection_mode
order.order.coupon_codetransaction.discount_id
transaction.billing_details
transaction.billing_period
transaction.items[]
order.order.total, order.order.total_tax, order.order.quantitytransaction.details
order.order.completed, paymenttransaction.payments[]
order.checkouttransaction.checkout
transaction.created_at
transaction.updated_at
transaction.billed_at
order.order.has_locker, order.lockers
order.order.formatted_total, order.order.formatted_tax
order.order.customer_success_redirect_url
order.order.receipt_url, payment.receipt_url
payment.payout_date

Customer portal session entities

Customer portal session is a new entity in Paddle Billing. You can create a customer portal session to generate authenticated links to the customer portal, letting customers manage their subscriptions, payments, and account information.

You can link to the customer portal to add core subscription management, billing information, and payment history to your app.

There's no equivalent in Paddle Classic.

ClassicBilling
portal.id
portal.customer_id
user.update_url, user.cancel_urlportal.urls
portal.created_at

Was this page helpful?