Retrieve a subscription
Fetches one subscription by id, including its current period, price and renewal state.
Parameters
| Parameter | Description |
|---|---|
| subscription_idstring · pathrequired | Id of the subscription, which starts sub_. |
| expandstring | null · queryoptional | Comma-separated related objects to include in the response. Expandable here: customer, price, refund_eligibility. An unknown name is a 400, and embedding another resource needs that resource's read scope. At most 256 characters. |
Returns
The subscription object. A subscription belonging to the other mode, or to another account, is a 404 rather than a 403, so no id existence leaks across tenants.
To decide whether to serve the customer, read serves_customer. A paused or cancelling subscription keeps status: active until a background job closes it shortly after its period ends, so status alone over-grants. Read renewal_state when you need to know what happens at the period boundary.
next_charge_amount_cents is what the next renewal will charge, with a recurring coupon and any exclusive VAT applied. The list, every mutation response and every subscription.* webhook carry the same value. It is null when the subscription will not renew or its price is metered.
Test it
Read the same subscription in the console under Subscriptions. The two views are the same row.
Errors
| Status | Cause |
|---|---|
| 400 | The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it. |
| 401 | No credential, or one that does not authenticate. |
| 402 | The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused). |
| 403 | Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the subscriptions:read scope. |
| 404 | No such object in this account and mode. |
| 429 | Rate limited. Retry-After says when to try again. |
| 500 | Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key. |
| 503 | Temporarily unable to serve. reason says whether the request was attempted. |
Other subscriptions operations
- List subscriptions GET /v1/subscriptions
- Cancel a subscription POST /v1/subscriptions/{subscription_id}/cancel
- Pause subscription POST /v1/subscriptions/{subscription_id}/pause
- Preview update subscription POST /v1/subscriptions/{subscription_id}/preview_update
- Reactivate subscription POST /v1/subscriptions/{subscription_id}/reactivate
- Reauthorize payment method POST /v1/subscriptions/{subscription_id}/reauthorize_payment_method
- Resume subscription POST /v1/subscriptions/{subscription_id}/resume
- Change a subscription's plan POST /v1/subscriptions/{subscription_id}/update
BillKit