Upgrade to API version 2025-11-10
Version 2025-11-10 of Clerk's Frontend and Backend APIs introduces updates to how Clerk Billing formats its responses. These changes improve consistency and clarity across the APIs, making them easier to work with and understand.
To use this new API version, refer to the versioning guide. This guide documents all updates at the API level. Since implementation details may differ between SDKs, it will help you identify which parts of your SDK usage may require additional review in the documentation, and assist consumers using unofficial or custom API clients in managing the upgrade.
The following sections provide a detailed overview of the response type and endpoint changes. In general, these updates fall into one of the following categories:
- Updating branding: Clerk Billing was originally developed under the working name "Commerce", which is why
/commerce/appeared in endpoints. This API version standardizes on "Billing" instead of the deprecated "Commerce". Terminology has also been updated for consistency, including renaming "payment sources" to "payment methods". - Clearer handling of missing or empty data: In some cases, a response type has different information depending on the request that prompted the response. Previous API versions handled the absence of this information in inconsistent ways;sometimes using empty values (e.g.,
""for strings or0for numbers), sometimesnull, and sometimes omitting the field entirely. Version 2025-11-10 introduces standardized semantics:- If the response explicitly indicates that the data doesn't exist, it will be set to
null. - If the response is not making any assertion about the existence of the data, it will not include the key at all.
- If the response is trying to tell you that the data is set to the empty value (e.g.,
""for strings,0for numbers), it will be set to that value.
- If the response explicitly indicates that the data doesn't exist, it will be set to
- Removal of deprecated fields: As our API responses have evolved, several response fields were deprecated but retained for backwards compatibility. This API version removes those deprecated fields.
Backend response type changes
Payers
- Name
organization_id- Type
string | null- Description
The
organization_idfield will now be explicitlynullfor user payers, instead of omitted.
- Name
organization_name- Type
string | null- Description
The
organization_namefield will now be explicitlynullfor user payers, instead of omitted. It can still be omitted from certain endpoints that do not provide that data.
- Name
user_id- Type
string | null- Description
The
user_idfield will now be explicitynullfor organization payers, instead of omitted.
- Name
first_name- Type
string | null- Description
The
first_namefield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
last_name- Type
string | null- Description
The
last_namefield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
email- Type
string | null- Description
The
emailfield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
image_url- Type
string- Description
The
image_urlfield will now be omitted from endpoints that do not provide that data, instead of returning"".
- Name
created_at- Type
number- Description
The
created_atfield will now be omitted instead of returning0when an endpoint does not provide that data.
- Name
updated_at- Type
number- Description
The
updated_atfield will now be omitted instead of returning0when an endpoint does not provide that data.
- Name
payment_source_id- Type
string- Description
The
payment_source_idfield has been removed in favor of thepayment_method_idfield.
- Name
payment_source- Type
- BillingPaymentMethodResource
- Description
The
payment_sourcefield has been removed in favor of thepayment_methodfield.
- Name
invoice_id- Type
string- Description
The
invoice_idfield has been removed in favor of thestatement_idfield.
- Name
gateway_external_id- Type
string | null- Description
The
gateway_external_idfield can now be explicitlynull. Previously, it would be set to""if unset.
- Name
gateway_external_url- Type
string | null- Description
The
gateway_external_urlfield can now be explicitlynull. Previously, it was omitted if unset.
- Name
paid_at- Type
number | null- Description
The
paid_atfield can now be explicitlynull. Previously, it was unset if the payment attempt had not succeeded yet.
- Name
failed_at- Type
number | null- Description
The
failed_atfield can now be explicitlynull. Previously, it was unset if the payment attempt hadn't failed.
Payment methods
The payment sources response type has been renamed to payment methods.
- Name
object- Type
string- Description
The
objectfield will now always be"commerce_payment_method".
- Name
payment_method- Type
string- Description
The
payment_methodfield has been removed in favor of thepayment_typefield.
- Name
last4- Type
string | null- Description
The
last4field can now benull.
- Name
wallet_type- Type
string | null- Description
The
wallet_typefield can now benullor omitted.
- Name
card_type- Type
string | null- Description
The
card_typefield can now benull.
- Name
expiry_year- Type
number | null- Description
The
expiry_yearfield can now benullor omitted.
- Name
expiry_month- Type
number | null- Description
The
expiry_monthfield can now benullor omitted.
- Name
created_at- Type
number- Description
The
created_atfield can now be omitted when previously it was set to0.
- Name
updated_at- Type
number- Description
The
updated_atfield can now be omitted when previously it was set to0.
- Name
object- Type
string- Description
The
objectfield will now always be"commerce_payment_method_initialize".
- Name
amount- Type
number- Description
The
amountfield has been removed. Usefee.amountinstead.
- Name
amount_formatted- Type
string- Description
The
amount_formattedfield has been removed. Usefee.amount_formattedinstead.
- Name
annual_monthly_amount- Type
number- Description
The
annual_monthly_amountfield has been removed. Useannual_monthly_fee.amountinstead.
- Name
annual_monthly_amount_formatted- Type
string- Description
The
annual_monthly_amount_formattedfield has been removed. Useannual_monthly_fee.amount_formattedinstead.
- Name
annual_amount- Type
number- Description
The
annual_amountfield has been removed. Useannual_fee.amountinstead.
- Name
annual_amount_formatted- Type
string- Description
The
annual_amount_formattedfield has been removed. Useannual_fee.amount_formattedinstead.
- Name
currency- Type
string- Description
The
currencyfield has been removed. Usefee.currency,annual_monthly_fee.currency, orannual_fee.currencyinstead.
- Name
currency_symbol- Type
string- Description
The
currency_symbolfield has been removed. Usefee.currency_symbol,annual_monthly_fee.currency_symbol, orannual_fee.currency_symbolinstead.
- Name
payer_type- Type
array of strings- Description
The
payer_typefield has been removed. Usefor_payer_typeinstead.
- Name
description- Type
string | null- Description
The
descriptionfield can now benull.
- Name
avatar_url- Type
string | null- Description
The
avatar_urlfield can now benull.
- Name
features- Type
Feature[]- Description
The
featuresfield can now be omitted from responses.
- Name
plan- Type
- BillingPlanResource |
null - Description
The
planfield can now benull, in preparation for a future change to subscription items that represent an inactive subscription.
- Name
plan_id- Type
string | null- Description
The
plan_idfield can now benull, in preparation for a future change to subscription items that represent an inactive subscription.
- Name
lifetime_paid- Type
- BillingMoneyAmount
- Description
The
lifetime_paidfield can no longer benull. It will instead be omitted when the endpoint doesn't include that data in the response.
- Name
amount- Type
- BillingMoneyAmount
- Description
The
amountfield can no longer benull. It will instead be omitted when the endpoint doesn't include that data in the response.
- Name
next_invoice- Type
- BillingSubscriptionItemResource
- Description
The
next_invoicefield has been removed, in favor of thenext_paymentfield.
- Name
next_payment- Type
- BillingSubscriptionItemResource
- Description
The
next_paymentfield can be omitted when the endpoint doesn't include that data in the response.
- Name
payer- Type
- BillingPayerResource
- Description
The
payerfield can no longer benull, and will instead be omitted when the endpoint doesn't include that data in the response.
- Name
period_start- Type
number- Description
The
period_startfield can no longer benull.
- Name
proration_date- Type
string- Description
The
proration_datefield can now be omitted when the response does not contain information about proration.
- Name
payment_source- Type
- BillingPaymentMethodResource
- Description
The
payment_sourcefield has been removed, in favor of thepayment_methodfield.
- Name
payment_source_id- Type
string- Description
The
payment_source_idfield has been removed, in favor of thepayment_method_idfield.
- Name
amount- Type
- BillingMoneyAmount
- Description
The
amountfield can no longer benull.
- Name
date- Type
number- Description
The
datefield can no longer benull.
Backend endpoint changes
The following endpoints have changed their URLs:
Frontend response type changes
Billing settings
- Name
enabled- Type
boolean- Description
The
enabledfield has been removed in favor of theuser.enabledandorganization.enabledfields.
- Name
stripe_publishable_key- Type
string | null- Description
The
stripe_publishable_keyfield can no longer be omitted and will instead benullwhen unset.
- Name
has_paid_user_plans- Type
boolean- Description
The
has_paid_user_plansfield has been removed in favor of theuser.has_paid_plansfield.
- Name
has_paid_org_plans- Type
boolean- Description
The
has_paid_org_plansfield has been removed in favor of theorganization.has_paid_plansfield.
- Name
payment_source- Type
- BillingPaymentMethodResource
- Description
The
payment_sourcefield has been removed in favor of thepayment_methodfield.
- Name
organization_id- Type
string | null- Description
The
organization_idfield will now be explicitlynullfor user payers, instead of omitted.
- Name
organization_name- Type
string | null- Description
The
organization_namefield will now be explicitlynullfor user payers, instead of omitted. It can still be omitted from certain endpoints that do not provide that data.
- Name
user_id- Type
string | null- Description
The
user_idfield will now be explicitynullfor organization payers, instead of omitted.
- Name
first_name- Type
string | null- Description
The
first_namefield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
last_name- Type
string | null- Description
The
last_namefield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
email- Type
string | null- Description
The
emailfield will now be explicitlynullfor organization payers, instead of"". It can also be omitted from certain endpoints that do not provide that data.
- Name
image_url- Type
string- Description
The
image_urlfield will now be omitted from endpoints that do not provide that data, instead of returning"".
- Name
created_at- Type
number- Description
The
created_atfield will now be omitted instead of returning0when an endpoint does not provide that data.
- Name
updated_at- Type
number- Description
The
updated_atfield will now be omitted instead of returning0when an endpoint does not provide that data.
- Name
payment_source_id- Type
string- Description
The
payment_source_idfield has been removed in favor of thepayment_method_idfield.
- Name
payment_source- Type
- BillingPaymentMethodResource
- Description
The
payment_sourcefield has been removed in favor of thepayment_methodfield.
- Name
invoice_id- Type
string- Description
The
invoice_idfield has been removed in favor of thestatement_idfield.
- Name
gateway_external_id- Type
string | null- Description
The
gateway_external_idfield can now be explicitlynull. Previously, it would be set to""if unset.
- Name
gateway_external_url- Type
string | null- Description
The
gateway_external_urlfield can now be explicitlynull. Previously, it was omitted if unset.
- Name
paid_at- Type
number | null- Description
The
paid_atfield can now be explicitlynull. Previously, it was unset if the payment attempt had not succeeded yet.
- Name
failed_at- Type
number | null- Description
The
failed_atfield can now be explicitlynull. Previously, it was unset if the payment attempt hadn't failed.
Payment methods
The payment sources response type has been renamed to payment methods.
- Name
object- Type
string- Description
The
objectfield will now always be"commerce_payment_method".
- Name
payment_method- Type
string- Description
The
payment_methodfield has been removed in favor of thepayment_typefield.
- Name
last4- Type
string | null- Description
The
last4field can now benull.wallet_typestring | null
The
wallet_typefield can now benullor omitted.
- Name
card_type- Type
string | null- Description
The
card_typefield can now benull.
- Name
expiry_year- Type
number | null- Description
The
expiry_yearfield can now benullor omitted.
- Name
expiry_month- Type
number | null- Description
The
expiry_monthfield can now benullor omitted.
- Name
created_at- Type
number- Description
The
created_atfield can now be omitted when previously it was set to0.
- Name
updated_at- Type
number- Description
The
updated_atfield can now be omitted when previously it was set to0.
- Name
amount- Type
number- Description
The
amountfield has been removed. Usefee.amountinstead.
- Name
amount_formatted- Type
string- Description
The
amount_formattedfield has been removed. Usefee.amount_formattedinstead.
- Name
annual_monthly_amount- Type
number- Description
The
annual_monthly_amountfield has been removed. Useannual_monthly_fee.amountinstead.
- Name
annual_monthly_amount_formatted- Type
string- Description
The
annual_monthly_amount_formattedfield has been removed. Useannual_monthly_fee.amount_formattedinstead.
- Name
annual_amount- Type
number- Description
The
annual_amountfield has been removed. Useannual_fee.amountinstead.
- Name
annual_amount_formatted- Type
string- Description
The
annual_amount_formattedfield has been removed. Useannual_fee.amount_formattedinstead.
- Name
currency- Type
string- Description
The
currencyfield has been removed. Usefee.currency,annual_monthly_fee.currency, orannual_fee.currencyinstead.
- Name
currency_symbol- Type
string- Description
The
currency_symbolfield has been removed. Usefee.currency_symbol,annual_monthly_fee.currency_symbol, orannual_fee.currency_symbolinstead.
- Name
payer_type- Type
string[]- Description
The
payer_typefield has been removed. Usefor_payer_typeinstead.
- Name
description- Type
string | null- Description
The
descriptionfield can now benull.
- Name
avatar_url- Type
string | null- Description
The
avatar_urlfield can now benull.
- Name
features- Type
Feature[]- Description
The
featuresfield can now be omitted from responses.
- Name
time- Type
number- Description
The
timefield has been removed in favor of thedatefield.
- Name
lifetime_paid- Type
- BillingMoneyAmount
- Description
The
lifetime_paidfield can no longer benull. It will instead be omitted when the endpoint doesn't include that data in the response.
- Name
amount- Type
- BillingMoneyAmount
- Description
The
amountfield can no longer benull. It will instead be omitted when the endpoint doesn't include that data in the response.
- Name
next_invoice- Type
- BillingSubscriptionItemResource
- Description
The
next_invoicefield has been removed, in favor of thenext_paymentfield.
- Name
next_payment- Type
- BillingSubscriptionItemResource
- Description
The
next_paymentfield can be omitted when the endpoint doesn't include that data in the response.
- Name
payer- Type
- BillingPayerResource
- Description
The
payerfield can no longer benull, and will instead be omitted when the endpoint doesn't include that data in the response.
- Name
period_start- Type
number- Description
The
period_startfield can no longer benull.
- Name
proration_date- Type
string- Description
The
proration_datefield can now be omitted when the response does not contain information about proration.
- Name
payment_source- Type
- BillingPaymentMethodResource
- Description
The
payment_sourcefield has been removed, in favor of thepayment_methodfield.
- Name
payment_source_id- Type
string- Description
The
payment_source_idfield has been removed, in favor of thepayment_method_idfield.
- Name
amount- Type
- BillingMoneyAmount
- Description
The
amountfield can no longer benull.
- Name
date- Type
number- Description
The
datefield can no longer benull.
- Name
total_due_after_free_trial- Type
- BillingMoneyAmount |
null - Description
The
total_due_after_free_trialfield can no longer be omitted, and will instead benullwhen it doesn't apply.
- Name
credit- Type
- BillingMoneyAmount |
null - Description
The
creditfield can no longer be omitted, and will instead benullwhen it doesn't apply.
- Name
past_due- Type
- BillingMoneyAmount |
null - Description
The
past_duefield can no longer be omitted, and will instead benullwhen it doesn't apply.
- Name
total_due_now- Type
- BillingMoneyAmount |
null - Description
The
total_due_nowfield can no longer be omitted, and will instead benullwhen it doesn't apply.
- Name
proration- Type
- BillingCheckoutTotals |
null - Description
The
prorationfield can no longer be omitted, and will instead benullwhen it doesn't apply.
Frontend endpoint changes
The following endpoints have changed their URLs:
Feedback
Last updated on