Skip to main content
Subscription settings give you one place to control the global defaults that Reorder applies when new subscription operations begin. You can adjust trial lengths, dunning retry schedules, renewal behavior, and cancellation posture without redeploying your store.
Settings changes apply to future operations and newly created process state only. Existing active dunning cases, cancellation flows, and renewal cycles keep the configuration that was snapshotted when they were created.

Accessing subscription settings

In your Medusa Admin, navigate to Settings → Subscription Settings (/app/settings/subscription-settings). The page loads the current effective settings and lets you edit and save them in a single form. The settings page is split into four sections:
  • Trial — default trial period for new subscription operations
  • Dunning — retry schedule and maximum attempt count for new dunning cases
  • Renewals — default renewal behavior for newly started renewal cycles
  • Cancellation defaults — default posture when a new cancellation flow opens

Configurable fields

Renewal behavior values

Cancellation behavior values

Persisted state and the is_persisted flag

Before you save settings for the first time, Reorder serves built-in fallback defaults. These defaults are not stored in the database — they are assembled at read time. Once you save settings for the first time, Reorder creates a persistent singleton record and uses it as the runtime source of truth. The is_persisted field in the API response tells you which state you are in: The info panel at the top of the settings page shows the current version, updated_at, and updated_by values so you can see when the record was last changed and by whom.

The version field

Every successful save increments the version field by one. Version starts at 0 for fallback defaults and becomes 1 after the first save. The version field is used for optimistic locking. When you submit a settings update through the API, you pass the expected_version you read to ensure your update is based on the latest state. If another update has occurred since your read, the API returns a 409 Conflict.

Updating settings via the Admin API

You can read and update subscription settings programmatically using the Admin API.

Get current settings

This endpoint always returns a valid response. If no settings have been saved yet, it returns the fallback defaults with is_persisted: false. It never returns 404. Example response (fallback defaults):

Update settings

Send only the fields you want to change. Omitted fields keep their current effective values. Request body:
Pass expected_version: 0 for your first save. For subsequent saves, pass the version value returned by the most recent GET or POST response.
Example response (after first save):

Validation rules

The API enforces these rules on every update request:
  • default_trial_days must be >= 0
  • max_dunning_attempts must be > 0
  • dunning_retry_intervals must contain positive integers only
  • dunning_retry_intervals must be strictly increasing with no duplicates
  • max_dunning_attempts must equal the number of intervals in dunning_retry_intervals
  • default_renewal_behavior must be one of the supported enum values
  • default_cancellation_behavior must be one of the supported enum values
  • expected_version must be >= 0
A request that violates any of these rules returns 400 invalid_data. A version mismatch returns 409 Conflict.

Next steps

  • Plugin setup — review the full plugin installation steps
  • Dunning — understand how dunning cases consume these settings at create time
  • Renewals — see how renewal behavior settings apply to new renewal cycles