The Subscriptions & Memberships add-on registers its endpoints under https://your-store.com/wp-json/wc-sisubscriptions/v1/. Authentication and conventions are the same as for the rental endpoints: a WooCommerce REST API key with Read/Write permissions, JSON bodies, X-WP-Total pagination headers and 409 for conflicts. See the REST API overview. For what subscriptions, memberships and queues are from the store owner’s side, see Setting up Subscriptions and Setting up Memberships.
Subscriptions #
| Method and path | What it does |
|---|---|
GET /subscriptions | List subscriptions. Filters: user_id, status, search, page, per_page. |
POST /subscriptions | Create one. Required: user_id, items (array of { product_id, quantity, recurring_amount }), billing_period (day, week, month, year). Optional: billing_interval (default 1), next_payment_date, parent_order_id, status (default active). |
GET /subscriptions/{id} | One subscription with its items, its pending scheduled renewals and the ids of memberships it pays for. |
PUT /subscriptions/{id} | Change billing_period, billing_interval, next_payment_date, parent_order_id, user_id, status or replace the items. |
DELETE /subscriptions/{id} | Remove the subscription, its items and its scheduled actions. Orders already created are kept. |
POST /subscriptions/{id}/cancel | Cancel it. The parent order’s rental reservations are released and a note is added to the order. |
POST /subscriptions/{id}/pause | Pause billing (status paused). |
POST /subscriptions/{id}/resume | Resume a paused subscription (only a paused one; anything else is a 409). |
{
"id": 57,
"user_id": 2,
"status": "active",
"parent_order_id": 4402,
"last_synced_order_id": 4519,
"billing_period": "month",
"billing_interval": 1,
"next_payment_date": "2026-10-14 00:00:00",
"last_payment_date": "2026-09-14 09:12:31",
"date_created": "2026-06-14 09:12:31",
"date_modified": "2026-09-14 09:12:31",
"items": [
{ "id": 91, "subscription_id": 57, "product_id": 2101, "quantity": 1, "recurring_amount": 89, "is_one_time": 0 }
],
"scheduled_actions": [
{ "action_id": 3310, "subscription_id": 57, "type": "renewal", "status": "pending", "scheduled_date": "2026-10-14 00:00:00", "renewal_order_id": 0 }
],
"memberships": [ 12 ]
}
Renewals are charged by the plugin’s daily cron using the payment method saved on the parent order, so a subscription created through the API with no parent_order_id has nothing to charge: it is useful for migrating records or for subscriptions billed outside WooCommerce, and its next_payment_date should then be managed by the caller. Setting status to cancelled or expired through PUT has the same side effects as the /cancel action.
Memberships #
| Method and path | What it does |
|---|---|
GET /memberships | List memberships. Filters: user_id, status, page, per_page. |
POST /memberships | Create one. Required: user_id. Then either queue_items (how many rentals the member may have out at once: a rental queue membership) or storecredit_amount (a store credit membership). Optional: subscription_id that pays for it, status (active, paused, cancelled, expired). |
GET /memberships/{id} | One membership with the credit used so far, the number of rentals out and the linked subscription’s status and dates. |
PUT /memberships/{id} | Change any of the fields above. |
DELETE /memberships/{id} | Delete the membership. |
{
"id": 12,
"user_id": 2,
"subscription_id": 57,
"type": "queue",
"status": "active",
"storecredit_amount": null,
"credit_used": 0,
"queue_items": 3,
"rentals_out": 1,
"date_created": "2026-06-14 09:12:31",
"date_modified": "2026-09-14 09:12:31",
"subscription_status": "active",
"next_payment_date": "2026-10-14 00:00:00"
}
Rental queue #
A rental queue is the list of products a queue member wants next, in priority order. Sending the item at the top checks it out against one of the member’s free slots; returning it frees the slot. These endpoints do exactly what the member’s “Manage Queue” page and the admin Rental Queue Send / Return screens do.
| Method and path | What it does |
|---|---|
GET /queue?user_id=2 | The member’s queue, top priority first. |
POST /queue | Add a product: user_id, product_id. A product already queued is a 409. |
PUT /queue/{id} | Move an item: priority (1 = next). |
DELETE /queue/{id} | Remove an item from the queue. |
POST /queue/{id}/send | Check the queued item out to the member (with serials on a serial-tracked product). Refused with 409 when the member has no free slot or no unit is available. |
POST /queue-sent/{id}/return | Take a sent item back; {id} is the id from /queue/out. |
GET /queue/out?user_id=2 | What the member currently has out, with the sent date and serials. |
A queue checkout creates a rental reservation without a WooCommerce order, so it appears in the bookings endpoints with order_id 0 and counts against the product’s availability like any other booking.
