Skip to main content
Plan offer endpoints let you configure which subscription frequencies and discounts are available for each product or variant. You can list all offers, fetch a single offer’s full detail including the effective configuration resolved from variant-to-product fallback semantics, create or upsert offers, update existing records, and toggle enabled state without touching other fields. 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.

Domain values


GET /admin/subscription-offers

Returns the paginated plan offer list for Admin DataTable views.

Query parameters

number
Number of results per page.
number
Zero-based result offset for pagination.
string
Free-text search across name and product/variant titles.
string
Field to sort by. Database-backed: name, scope, is_enabled, created_at, updated_at. In-memory: status, product_title, variant_title.
string
Sort direction. One of asc or desc.
boolean
Filter by enabled/disabled state.
string
Filter by target scope. One of product or variant.
string
Filter by product ID.
string
Filter by variant ID.
string
Filter by frequency interval. One of week, month, or year.
number
Minimum discount value filter.
number
Maximum discount value filter.

Response

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

Errors


GET /admin/subscription-offers/:id

Returns the full detail payload for a single plan offer.

Path parameters

string
required
Plan offer ID.

Response

Returns a plan_offer object with all list fields plus:
object
required
Response example

Errors


POST /admin/subscription-offers

Creates a new plan offer, or updates an existing one for the same target (create-or-upsert semantics).

Body parameters

string
required
Offer name. Trimmed.
string
required
Target scope. One of product or variant.
string
required
Target product ID.
string
Target variant ID. Required for variant-scoped offers; must be omitted or null for product-scoped offers.
boolean
required
Whether the offer is active.
object[]
required
Array of allowed cadences. Each entry requires interval (week, month, or year) and a positive integer value. Must contain at least one entry.
object[]
Per-frequency discount definitions. Each entry requires interval, frequency_value, type (percentage or fixed), and value. Optional.
object
Rules object with minimum_cycles, trial_enabled, trial_days, and stacking_policy. Optional.
object
Arbitrary metadata. Optional.
Request example

Errors


POST /admin/subscription-offers/:id

Updates an existing plan offer source record. At least one field must be provided.

Path parameters

string
required
Plan offer ID.

Body parameters

All fields are optional; omit any field you do not want to change.
string
Updated offer name.
boolean
Updated enabled state.
object[]
Replacement list of allowed cadences.
object[]
Replacement list of per-frequency discounts.
object
Updated rules object.
object
Updated metadata.
Request example

Errors


POST /admin/subscription-offers/:id/toggle

Enables or disables a plan offer without modifying any other fields.

Path parameters

string
required
Plan offer ID.

Body parameters

boolean
required
Target enabled state.
Request example

Errors