Subscriptions
Status:
contracted_test. In the machine-checked test-mode contract (openapi.subset.json) and the API Reference: create, retrieve, list. Served by thefluveo-billingsidecar (ADR 0019); promoted 2026-07-13. Update/cancel are not in the contract yet. TheStripe-Versionheader is optional; send anIdempotency-Keyon POST writes. See API coverage.
A Subscription bills a customer on a recurring
price, generating an invoice each cycle. It
tracks the billing period, status (incomplete, active, past_due, canceled, …),
and its items — each subscription item expands its price inline on reads. A new
subscription starts incomplete and activates through its first hosted invoice
payment.
Served operations: create, retrieve, and list. Create items are
form-encoded with indexed brackets (items[0][price], items[0][quantity]) — the
service reads those literally. A create that brings its own saved card and mandate, and the
legacy renew call, answer 400 subscription_automatic_collection_unavailable. Billing renews an
enrolled subscription on its own at period end (see below).
Dashboard-created subscriptions use the same API and persist in merchant-scoped
durable Billing storage.
Only a first invoice paid on its hosted page enrolls renewal. A
charge_automatically subscription renews only once its first invoice has been paid on the
invoice’s hosted_invoice_url. That page shows the renewal consent text above Pay, and the card is
saved with the customer’s acceptance. A first invoice paid with POST /v1/invoices/{id}/pay, or
any other way, leaves the subscription active with no renewal invoice and no charge at period
end; Stripe would renew it. No public field shows which case a subscription is in, and
default_payment_method does not decide it. Send customers the first invoice’s
hosted_invoice_url.
Hidden from the public API
Each item below is hidden because it does not follow the Stripe parity ADR (ADR 0004 as amended). The hidden public /v1 registry lists every
hidden item. Public /v1 answers a hidden operation as an unknown URL, refuses a hidden request
parameter or value with Stripe’s invalid_request_error, and omits a hidden response key.
- the request parameter
mandateofPOST /v1/subscriptions(HIDE0-035) - the request parameter
start_dateofPOST /v1/subscriptions(HIDE0-036) - the response key
current_period_endofPOST /v1/subscriptions(HIDE0-037) - the response key
current_period_startofPOST /v1/subscriptions(HIDE0-038) - the response key
current_period_endofGET /v1/subscriptions(HIDE0-059) - the response key
current_period_startofGET /v1/subscriptions(HIDE0-060) - the response key
current_period_endofGET /v1/subscriptions/{subscription}(HIDE0-069) - the response key
current_period_startofGET /v1/subscriptions/{subscription}(HIDE0-070)
In the dashboard
A subscription’s page in the dashboard (test mode) warns Renewal not enrolled, with the reason, when Billing will not renew it at the end of its period.