All routes require an authenticated Medusa Admin user. Unauthenticated requests return
401.Status values
| Value | Meaning |
|---|---|
scheduled | Cycle is queued for its scheduled date |
processing | Cycle execution is in progress |
succeeded | Cycle completed successfully |
failed | Cycle failed; attempt history is available in detail |
pending, approved, rejected. When approval is not required, the approval object returns status: null.
Attempt status values: processing, succeeded, failed.
GET /admin/renewals
Returns the paginated renewal queue for Admin DataTable views.Query parameters
Number of results per page.
Zero-based result offset for pagination.
Free-text search across subscription reference, customer name, and product title.
Field to sort by. Database-backed:
scheduled_for, updated_at, created_at, status, approval_status, processed_at. In-memory: last_attempt_status, subscription_reference, customer_name, product_title, order_display_id.Sort direction. One of
asc or desc.Filter by cycle status.
Filter by approval status.
ISO datetime lower bound for
scheduled_for.ISO datetime upper bound for
scheduled_for.Filter by the status of the most recent attempt.
Filter to renewals for a specific subscription.
Filter by the ID of the order generated by a renewal.
Response
Array of renewal cycle list items.
Total matching records.
Page size used.
Result offset used.
Response example
Errors
| Code | Error | Meaning |
|---|---|---|
400 | invalid_data | Invalid query parameter shape, unsupported query value, or unsupported sort field |
GET /admin/renewals/:id
Returns the full detail payload for a single renewal cycle, including the full attempt history and operational metadata.Path parameters
Renewal cycle ID.
Response
Returns arenewal object with all list fields plus:
Response example
Errors
| Code | Error | Meaning |
|---|---|---|
404 | not_found | Renewal cycle does not exist |
POST /admin/renewals/:id/force
Manually triggers execution for a renewal cycle, ignoring its scheduled date.Path parameters
Renewal cycle ID.
Body parameters
Optional reason for the manual trigger.
Request example
Errors
| Code | Error | Meaning |
|---|---|---|
404 | not_found | Renewal cycle does not exist |
409 | conflict | Cycle is already processing |
409 | conflict | Cycle already succeeded; duplicate execution is blocked |
409 | conflict | Cycle is not in a forceable state |
409 | conflict | Cycle requires approved changes before force-run |
409 | conflict | Linked subscription is not eligible for renewal |
400 | invalid_data | Current Plans & Offers policy blocks the pending change |
POST /admin/renewals/:id/approve-changes
Approves pending subscription changes for a renewal cycle that requires approval before execution.Path parameters
Renewal cycle ID.
Body parameters
Optional approval reason.
Request example
Errors
| Code | Error | Meaning |
|---|---|---|
404 | not_found | Renewal cycle does not exist |
409 | conflict | Approval is not required for this cycle |
409 | conflict | Approval was already decided for this cycle |
POST /admin/renewals/:id/reject-changes
Rejects pending subscription changes for a renewal cycle.reason is required for rejections.
Path parameters
Renewal cycle ID.
Body parameters
Reason for rejection. Required.
Request example
Errors
| Code | Error | Meaning |
|---|---|---|
400 | invalid_data | Missing or invalid reason |
404 | not_found | Renewal cycle does not exist |
409 | conflict | Approval is not required for this cycle |
409 | conflict | Approval was already decided for this cycle |