If you are currently using the legacy Subscriptions version, you can migrate to the new version by updating your API endpoints, payload parameters, and webhook configurations as outlined below.
This new version consolidates your subscription workflows with our Payment Sessions product, delivering a smoother UI, modernized checkout experiences, and a more uniform integration lifecycle.
Feature comparison
Feature | Legacy Subscription | New Subscription |
|---|---|---|
Payment Link and Component Support | Limited only on Payment Link | Both Payment Link and Component |
Payment Channels Availability | Limited to legacy payment methods and specific regions | Availability for all existing channels and new channels in all regions Xendit supported |
New design for hosted page | Old design style, payment channel categorization is outdated | Fresh new design with improvement in user experience |
Uniform experiences on payment interfaces | Separate payment lifecycle overview on | One integration principle on each lifecycle on payment interfaces and payment object |
Support on initial payment | Only available via legacy parameter | Recommended to use |
Subscription Dashboard | The current dashboard will show the transaction created on legacy subscription | The current dashboard will show the transaction created on legacy subscription. Creation on current dashboard will use the new subscription version |
How to migrate
Update your integration flow
Update your API Version Header: To access the new features, update your
api-versionheader from the legacy2022-04-10to the new2026-01-01version.Migrate plans using Xendit hosted URLs: Instead of calling
POST /recurring/plans(which returnedactions.url), callPOST /sessionswithsession_type: "SUBSCRIPTION". The response will now return apayment_link_urlorcomponents_sdk_keydepending on your integration mode.Migrate plans using existing payment tokens: Continue using
POST /recurring/plans, but replace the legacypayment_methodsparameter with the new, unifiedpayment_tokensparameter.
Convert your parameters
The new version supports most functionalities of the legacy system but introduces a simplified payload structure. Use this mapping table to update your API requests (refer to the API Reference for the full schema):
Legacy Subscription
New Subscription
Notes
payment_methodspayment_tokensSupport the new payment tokens object
immediate_action_typeimmediate_paymentSimplified into a boolean type to easily trigger immediate payments
recurring_action-
Streamlined flow; defaults exclusively to
PAYMENTnotification_config.recurring_created, notification_config.recurring_created and notification_config.recurring_failednotification_channelsConsolidated into a single parameter to configure your notification channels
Handle new error responses
Ensure your server's error-handling logic is updated to catch and process the new error structures returned by the Payment Sessions API (upon session creation) and the upgraded Subscriptions API.
Adjust your webhook setup
The new version utilizes Xendit's upgraded Payment v3 and Payment Tokens v3 webhook infrastructure. We highly recommend updating your webhook URL endpoints to cleanly capture and process updates across your subscription lifecycles.
Legacy Setup: Managed via the legacy webhook configuration page.
.png?sv=2026-02-06&spr=https&st=2026-07-23T19%3A09%3A03Z&se=2026-07-23T19%3A21%3A03Z&sr=c&sp=r&sig=dg8twT04UbODozbZSORwI54ALR8aT%2BUujqwUvnVlMVQ%3D)
New Setup: Configured via the new unified webhook dashboard.

Optional but recommended: Adjust the webhook URL to receive the information upon your subscription lifecycle.
Payment v3 – Payment Status
Xendit sends webhooks whenever there is a status update on a Payment object.
payment.succeededIdentifies successful payments and includes full payment details.payment.failureIdentifies failed payment attempts, including failures that occur on the Xendit hosted page.
Payment Tokens v3 – Payment Token Status
Xendit sends webhooks whenever there is a status update on a Payment Token object.