Skip to main content
Reorder exposes a full set of customer-facing subscription management endpoints under /store/customers/me/subscriptions. You can use these to build a self-service portal where customers can view their active subscriptions, change delivery frequency, update their address, skip a delivery, swap to a different product, retry a failed payment, pause or resume billing, and request cancellation — all without leaving your storefront.

Authentication

All customer subscription endpoints require an authenticated customer session. Include the customer’s session cookie or a bearer token with each request:
Authorization: Bearer <customer_token>
Requests without valid authentication return 401. Requests for subscriptions that belong to a different customer return 403.

Listing subscriptions

Retrieve all subscriptions for the authenticated customer:
GET /store/customers/me/subscriptions
{
  "subscriptions": [
    {
      "id": "sub_123",
      "reference": "SUB-001",
      "status": "active",
      "product_title": "Daily Vitamins",
      "variant_title": "60 capsules",
      "next_renewal_at": "2026-05-01T10:00:00.000Z",
      "active_cancellation_case": null
    }
  ]
}

Viewing subscription detail

Retrieve the full detail for a single subscription:
GET /store/customers/me/subscriptions/:id
The detail payload includes all fields from the list view, plus:
FieldDescription
frequency_intervalBilling cadence unit: "week", "month", or "year"
frequency_valueNumber of intervals between billings
effective_next_renewal_atProjected next delivery date, accounting for skipped cycles
last_renewal_atWhen the most recent renewal ran
shipping_addressThe address snapshot for this subscription’s deliveries
payment_statusCurrent payment status
payment_provider_idThe payment provider handling this subscription
payment_recoveryActive dunning recovery case, if any
scheduled_plan_changePending variant or cadence update, if one is queued
active_cancellation_caseActive cancellation case, if one is open

Managing subscriptions

All management actions return a refreshed subscription detail payload so your UI can update in place without a separate fetch.

Pause

Pause billing on a subscription. Optionally provide a reason and an effective date:
POST /store/customers/me/subscriptions/:id/pause
{
  "reason": "Taking a short break",
  "effective_at": "2026-04-15T10:00:00.000Z"
}

Resume

Resume a paused subscription. Optionally preserve the original billing anchor date:
POST /store/customers/me/subscriptions/:id/resume
{
  "resume_at": "2026-04-20T10:00:00.000Z",
  "preserve_billing_anchor": true
}

Change frequency

Schedule a cadence change for the next renewal. The current variant stays unchanged. The new cadence must be valid according to the active plan for this subscription:
POST /store/customers/me/subscriptions/:id/change-frequency
{
  "frequency_interval": "month",
  "frequency_value": 2,
  "effective_at": "2026-05-01T10:00:00.000Z"
}

Change address

Update the shipping address used for future deliveries:
POST /store/customers/me/subscriptions/:id/change-address
{
  "first_name": "Jane",
  "last_name": "Doe",
  "address_1": "Main Street 1",
  "city": "Copenhagen",
  "postal_code": "2100",
  "country_code": "dk"
}

Skip next delivery

Mark the next renewal cycle as skipped. The subscription resumes automatically at the following cycle. This endpoint takes no request body:
POST /store/customers/me/subscriptions/:id/skip-next-delivery

Swap product

Schedule a product or variant swap. The target variant must belong to the same product and be allowed by the active plan. The change applies at the next eligible renewal:
POST /store/customers/me/subscriptions/:id/swap-product
{
  "variant_id": "variant_123",
  "frequency_interval": "month",
  "frequency_value": 1,
  "effective_at": "2026-05-01T10:00:00.000Z"
}

Retry payment

Trigger a manual payment retry for a subscription that is in a recoverable failed-payment state. Include an optional reason to log with the retry attempt:
POST /store/customers/me/subscriptions/:id/retry-payment
{
  "reason": "Customer requested immediate retry"
}
This endpoint returns 409 if the subscription does not have a retry-eligible payment recovery case. Check payment_recovery in the subscription detail before surfacing this action to the customer.

Request cancellation

Start a cancellation case for the subscription. Provide a reason category and an optional free-text reason:
POST /store/customers/me/subscriptions/:id/cancellation
{
  "reason": "Too expensive right now",
  "reason_category": "price",
  "notes": "Customer started cancellation from storefront"
}
The response returns a minimal cancellation case payload with id, status, subscription_id, and the submitted reason fields. The subscription is not immediately cancelled — the case enters the configured cancellation and retention workflow.

Surfacing actions based on subscription status

Not all actions are relevant for every subscription state. Use the subscription’s status field to show the appropriate actions in your portal:
StatusAvailable actions
activePause, change frequency, change address, skip next delivery, swap product, cancel
pausedResume, change address, cancel
past_dueRetry payment, change address, cancel
cancelledNone