These endpoints live under https://your-store.com/wp-json/wc-sibooking/v1/ and need a WooCommerce REST API key with Read/Write permissions, as described in the REST API overview. They answer the two questions a quoting tool, a point of sale or an operations dashboard asks: what does this product cost, and which orders have rentals running on these dates.
The rate card #
GET /pricing?product_id=123 returns the product’s rental rates: every period you have priced, what it costs, and its per-day equivalent. It is the same structure the product page prints above the calendar, uncapped, so a tier hidden from the shop by the “number of price points” setting is still listed here.
curl -u "ck_your_key:cs_your_secret" \
"https://your-store.com/wp-json/wc-sibooking/v1/pricing?product_id=123"
{
"product_id": 123,
"name": "Canon EOS R6 body",
"rental_type": "date",
"price_type": "advanced",
"from": { "amount": 50, "amount_html": "<span…>$50.00</span>", "unit": "day" },
"rates": [
{
"label": "1 day", "period": "1d", "quantity": 1, "unit": "day", "days": 1,
"price": 50, "price_html": "…", "per_day": 50,
"add_on": { "label": "1 day", "period": "1d", "price": 20, "price_html": "…" }
},
{
"label": "1 week", "period": "1w", "quantity": 1, "unit": "week", "days": 7,
"price": 100, "price_html": "…", "per_day": 14.29, "add_on": null
}
],
"min_length": { "quantity": 1, "type": "days" },
"max_length": [],
"currency": "USD",
"currency_symbol": "$"
}
price_typeisregularfor a product priced per day or per hour, andadvancedfor one with a grid of rental periods.fromis the headline figure: the shortest period’s price in its own unit.add_onis the “then $20 per extra day” rate that applies once a period has been used, when you have set one.per_dayis calculated, not stored. It lets you show “as low as $14.29 / day on 1 week” without repeating the arithmetic.- A composite or bundle parent is refused with
no_own_price: it has no rental price of its own, so price its children instead.
The price of specific dates #
GET /pricing/quote prices one hire. It runs the same calculation the cart runs, including date-based and length-based pricing rules, so a quote and a checkout of the same dates agree.
| Parameter | Value |
|---|---|
product_id | Required. A variation id prices that variation. |
start | Required. Y-m-d, or Y-m-d H:i for a product rented by time. |
end | Required, same formats. |
quantity | Default 1. The total is the unit price multiplied by it. |
curl -u "ck_your_key:cs_your_secret" \
"https://your-store.com/wp-json/wc-sibooking/v1/pricing/quote?product_id=123&start=2026-10-03&end=2026-10-06&quantity=2"
{
"product_id": 123,
"start": "2026-10-03 00:00:00",
"end": "2026-10-06 00:00:00",
"quantity": 2,
"days": 3,
"hours": 72,
"unit_price": { "amount": 90, "amount_html": "…" },
"total": { "amount": 180, "amount_html": "…" },
"lines": [
{ "label": "1 day", "kind": "rate", "amount": 50, "amount_html": "…" },
{ "label": "2 extra days", "kind": "rate", "amount": 40, "amount_html": "…" }
],
"currency": "USD",
"currency_symbol": "$"
}
lines is the breakdown shown to the customer: which rate tiers were used and any adjustment. unit_price is one unit for the whole period, total is that multiplied by quantity.
A quote is not a hold. It says what the dates cost, not whether the units are free. Call the availability endpoint for that, and do it in the same breath if you are showing a customer a bookable price.
A price for every day #
GET /pricing/days?product_id=123&start=2026-10-01&end=2026-10-31 returns the price of a one-day hire starting on each day in the range, which is what you need to draw prices onto a calendar. The start defaults to today and the end to thirty days later; ask for at most 366 days at a time.
{
"product_id": 123,
"start": "2026-10-01",
"end": "2026-10-31",
"note": "The price of a one-day hire starting on each day.",
"days": {
"2026-10-01": { "amount": 50, "amount_html": "…" },
"2026-10-02": { "amount": 50, "amount_html": "…" },
"2026-10-03": { "amount": 65, "amount_html": "…" }
},
"currency": "USD"
}
Days whose price cannot be calculated are simply absent from the map.
Orders with rentals on given dates #
GET /orders?start=&end= lists the orders that have a rental running in that window, each with its rental lines and the customer. This is the picking, packing and chasing list: what goes out this week, what is due back, who to call.
“Running in the window” means the hire overlaps it. An order that started last week and comes back next month is listed for every window in between, not only for the window it starts in. Turnover buffers count, so an order whose buffer reaches into the window is included, matching what the calendar blocks.
| Parameter | Value |
|---|---|
start | Window start, Y-m-d or Y-m-d H:i. Defaults to today. |
end | Window end. Defaults to the end of the start day. |
product_id | Only orders containing this product. |
status | Comma-separated WooCommerce statuses, e.g. processing,completed. |
state | upcoming, out, overdue or returned, derived the same way as the Rentals screens. |
is_booked | Default true. Pass false to also list orders whose rentals were released, which is what cancelling, refunding or failing an order does. |
order | asc (default) or desc, by the earliest rental start in the order. |
search, page, per_page | As elsewhere; the totals come back in X-WP-Total and X-WP-TotalPages. |
curl -u "ck_your_key:cs_your_secret" \
"https://your-store.com/wp-json/wc-sibooking/v1/orders?start=2026-10-03&end=2026-10-09&status=processing"
[
{
"id": 4571,
"number": "4571",
"status": "processing",
"date_created": "2026-09-28 11:04:22",
"total": 180,
"currency": "USD",
"payment_method": "stripe",
"customer": { "id": 12, "name": "Jane Smith", "email": "[email protected]", "phone": "0113 496 0000" },
"earliest_start": "2026-10-03 00:00:00",
"latest_end": "2026-10-06 00:00:00",
"edit_url": "https://your-store.com/wp-admin/admin.php?page=wc-orders&action=edit&id=4571",
"rentals": [
{
"booking_id": 8123, "item_id": 91, "product_id": 123,
"product_name": "Canon EOS R6 body", "sku": "CAM-R6",
"quantity": 2,
"start": "2026-10-03 00:00:00", "end": "2026-10-06 00:00:00",
"start_with_buffer": "2026-10-02 00:00:00", "end_with_buffer": "2026-10-07 00:00:00",
"quantity_sent": 0, "quantity_returned": 0,
"is_booked": true, "in_window": true
}
]
}
]
rentalslists every rental on the order, not only the ones in the window, so you see the whole job.in_windowmarks the ones that put it in this list.quantity_sentandquantity_returnedare the send and return progress, the same figures the Send and Return screens work from.- Rental-queue checkouts and reservations created straight through the bookings endpoint have no order, so they are not listed here. Find those through
/bookings.
