Subscription Items represent a specific product and price that a customer is subscribed to. They are components of a Subscription and are essential for managing recurring billing, especially for plans with metered usage.
This API allows you to create, retrieve, update, and delete subscription items. Crucially, it also provides methods for reporting usage for metered billing.
The Subscription Item Object
A Subscription Item object contains details about a specific item within a subscription.
The TSubscriptionItemExpanded Object
interface TSubscriptionItemExpanded {
id: string; // Unique identifier for the subscription item
subscription_id: string; // The ID of the subscription this item belongs to
price_id: string; // The ID of the price associated with this item
quantity: number; // The quantity of the price
billing_thresholds: object | null; // Usage-based billing thresholds
metadata: object | null; // A set of key-value pairs for additional information
created_at: number; // Timestamp of creation
updated_at: number; // Timestamp of last update
price: TPrice; // The expanded Price object
}Create a Subscription Item
Adds a new item (a product and price) to an existing subscription.
Create Subscription Item
const subscriptionItem = await payment.subscriptionItems.create({
subscription_id: 'sub_xxxxxxxxxxxxxx',
price_id: 'price_xxxxxxxxxxxxxx',
quantity: 1,
});Parameters
| Name | Type | Description |
|---|---|---|
subscription_id | string | Required. The ID of the subscription to add this item to. |
price_id | string | Required. The ID of the price to subscribe the customer to. |
quantity | number | The quantity of the price. Defaults to 1. |
billing_thresholds | object | Usage-based billing thresholds for this item. |
metadata | object | A set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. |
Returns
Returns the newly created TSubscriptionItem object.
Retrieve a Subscription Item
Retrieves the details of an existing subscription item.
Retrieve Subscription Item
const subscriptionItem = await payment.subscriptionItems.retrieve(
'si_xxxxxxxxxxxxxx' // Subscription Item ID
);Parameters
| Name | Type | Description |
|---|---|---|
id | string | Required. The unique identifier of the subscription item to retrieve. |
Returns
Returns a TSubscriptionItemExpanded object if a valid ID was provided.
Update a Subscription Item
Updates the properties of a subscription item. You can update the price_id, quantity, and metadata.
Update Subscription Item
const subscriptionItem = await payment.subscriptionItems.update(
'si_xxxxxxxxxxxxxx', // Subscription Item ID
{
quantity: 2,
}
);Parameters
| Name | Type | Description |
|---|---|---|
id | string | Required. The ID of the subscription item to update. |
updates | object | An object containing the fields to update. |
Updateable Fields
| Name | Type | Description |
|---|---|---|
price_id | string | The ID of the new price for this item. |
quantity | number | The new quantity for this item. |
billing_thresholds | object | Usage-based billing thresholds for this item. |
metadata | object | A set of key-value pairs to update. |
Returns
Returns the updated TSubscriptionItem object.
List Subscription Items
Returns a list of subscription items for a given subscription.
List Subscription Items
const subscriptionItems = await payment.subscriptionItems.list({
subscription_id: 'sub_xxxxxxxxxxxxxx',
});Parameters
| Name | Type | Description |
|---|---|---|
subscription_id | string | Required. The ID of the subscription whose items you want to list. |
page | number | The page number for pagination. Defaults to 1. |
pageSize | number | The number of items to return per page. Defaults to 20. |
Returns
A paginated list of TSubscriptionItemExpanded objects.
Delete a Subscription Item
Deletes an item from a subscription. This is a permanent action.
Delete Subscription Item
const deletedItem = await payment.subscriptionItems.del(
'si_xxxxxxxxxxxxxx', // Subscription Item ID
{
clear_usage: true, // Optional
}
);Parameters
| Name | Type | Description |
|---|---|---|
id | string | Required. The ID of the subscription item to delete. |
body.clear_usage | boolean | If true, all usage records for a metered price will be cleared. Defaults to false. |
Returns
Returns the deleted TSubscriptionItem object.
Create a Usage Record
For metered prices, you must report usage to bill your customers correctly. This method creates a usage record for a specified subscription item.
Create Usage Record
const usageRecord = await payment.subscriptionItems.createUsageRecord({
subscription_item_id: 'si_xxxxxxxxxxxxxx',
quantity: 100,
action: 'increment',
timestamp: Math.floor(Date.now() / 1000),
});Parameters
| Name | Type | Description |
|---|---|---|
subscription_item_id | string | Required. The ID of the subscription item to report usage for. |
quantity | number | Required. The quantity of usage to report. Must be a positive integer. |
action | string | Determines how the reported quantity is applied. Can be increment (adds to existing usage) or set (overwrites usage at the given timestamp). Defaults to increment. |
timestamp | number | The UNIX timestamp for the usage event. Must be within the current billing period. Defaults to the current time. |
Returns
Returns the created TUsageRecord object.
List Usage Record Summaries
For a given subscription item, returns a list of usage record summaries, aggregated by billing period (invoice).
List Usage Record Summaries
const summaries = await payment.subscriptionItems.listUsageRecordSummaries({
subscription_item_id: 'si_xxxxxxxxxxxxxx',
});Parameters
| Name | Type | Description |
|---|---|---|
subscription_item_id | string | Required. The ID of the subscription item. |
page | number | The page number for pagination. Defaults to 1. |
pageSize | number | The number of items to return per page. Defaults to 20. |
Returns
A paginated list of TUsageRecordSummary objects.
The TUsageRecordSummary Object
interface TUsageRecordSummary {
invoice_id: string; // ID of the invoice for this period
subscription_item_id: string;
total_usage: number; // Total usage for the period
period: {
start: number; // Start of the billing period (UNIX timestamp)
end: number; // End of the billing period (UNIX timestamp)
};
}List Usage Records
Retrieves a list of individual usage records for a subscription item. This provides a detailed, non-aggregated view of all reported usage.
List Usage Records
const records = await payment.subscriptionItems.listUsageRecords({
subscription_item_id: 'si_xxxxxxxxxxxxxx',
});Parameters
| Name | Type | Description |
|---|---|---|
subscription_item_id | string | Required. The ID of the subscription item. |
start | number | A UNIX timestamp to filter usage records after this time. |
end | number | A UNIX timestamp to filter usage records before or at this time. |
page | number | The page number for pagination. Defaults to 1. |
pageSize | number | The number of items to return per page. Defaults to 20. |
Returns
A paginated list of TUsageRecord objects.
The TUsageRecord Object
interface TUsageRecord {
id: string;
subscription_item_id: string;
quantity: number;
timestamp: number; // UNIX timestamp of the record
billed: boolean; // Whether this usage has been billed
}