Skip to main content
The cancellation case endpoints expose the Admin cancellation and retention queue. You can list open cases for DataTable views, fetch a full detail payload including offer history and subscription context, apply a retention offer (pause, discount, or bonus), update the churn reason, and finalize a case as cancelled. All routes require an authenticated Medusa Admin user. All mutations are workflow-backed and return the refreshed detail payload.
All routes require an authenticated Medusa Admin user. Unauthenticated requests return 401.

Status values

Final outcome values: retained, paused, canceled. Offer decision status values: proposed, accepted, rejected, applied, expired. Reason category values: price, product_fit, delivery, billing, temporary_pause, switched_competitor, other.

GET /admin/cancellations

Returns the paginated cancellation queue for Admin DataTable views.

Query parameters

number
Number of results per page.
number
Zero-based result offset for pagination.
string
Free-text search across subscription reference, customer name, and product title.
string
Field to sort by. Database-backed: created_at, updated_at, status, final_outcome, reason_category, finalized_at. In-memory: subscription_reference, customer_name, product_title.
string
Sort direction. One of asc or desc.
string | string[]
Filter by case status. Accepts a single value or an array.
string | string[]
Filter by final outcome. Accepts a single value or an array.
string | string[]
Filter by churn reason category. Accepts a single value or an array.
string | string[]
Filter by retention offer type. Accepts a single value or an array.
string
Filter to cases for a specific subscription.
string
ISO datetime lower bound for created_at.
string
ISO datetime upper bound for created_at.

Response

object[]
required
Array of cancellation case list items.
number
required
Total matching records.
number
required
Page size used.
number
required
Result offset used.
Response example

Errors


GET /admin/cancellations/:id

Returns the full detail payload for a single cancellation case, including offer history, subscription context, and linked renewal or dunning summaries.

Path parameters

string
required
Cancellation case ID.

Response

object
required
Response example

Errors


POST /admin/cancellations/:id/apply-offer

Applies a retention action to an open case. Creates a RetentionOfferEvent, updates the subscription, and closes the case as retained or paused. Returns the refreshed detail payload.

Path parameters

string
required
Cancellation case ID.

Body parameters

string
required
Type of retention offer. One of pause_offer, discount_offer, or bonus_offer.
object
required
Offer-specific configuration. Shape depends on offer_type — see examples below.
string
required
Actor ID of the admin user applying the offer.
string
Optional reason for applying the offer.
Pause offer example
Discount offer example
Bonus offer example
Validation rules: pause_offer requires pause_cycles or resume_at; percentage discounts cannot exceed 50; discount_value must be positive; duration_cycles must be positive when provided; free_cycle and credit bonus types require value.

Errors


POST /admin/cancellations/:id/reason

Updates the churn reason, normalized category, and operator notes for an open case. Returns the refreshed detail payload.

Path parameters

string
required
Cancellation case ID.

Body parameters

string
Free-text churn reason.
string
Normalized reason category.
string
Operator notes.
string
Actor ID of the admin user making the update.
string
Reason for the classification change.
Request example

Errors


POST /admin/cancellations/:id/finalize

Finalizes a case as canceled, updates the subscription lifecycle, computes cancel_effective_at, and clears renewal eligibility. Returns the refreshed detail payload.

Path parameters

string
required
Cancellation case ID.

Body parameters

string
Churn reason for the final cancellation. Required by domain rules; if omitted, the workflow falls back to the existing case reason.
string
Normalized reason category.
string
Operator notes.
string
Actor ID of the admin user finalizing the case.
string
When the cancellation takes effect. One of immediately or end_of_cycle.
Request example

Errors