Contents
On this page

Change Booking Status - Plugixa Car Wash

POST /plugixa-carwash/v1/bookings/{id}/status

Move a booking to another status, with an optional note in its history.

Needs the plugixa_carwash_edit capability.

Side effects. A status change runs everything the staff app’s buttons do: the e-mails switched on for it, the booking.status_changed webhook PRO, loyalty points when it becomes completed PRO, and closing any online payment still waiting when it becomes cancelled or no_show.

Request

POST https://your-site.example/wp-json/plugixa-carwash/v1/bookings/42/status

Path parameters

Name Type Description
id integer The booking’s id

Request body

Content type: application/json

Field Type Required Description
status string Yes The new status: hold, pending, confirmed, in_progress, completed, cancelled or no_show.
note string No Saved with the change in events, cut to 255 characters.

Sending the status the booking already has changes nothing and answers 200. A booking that no longer holds its bay (a no_show, or a hold whose payment time ran out) is given its bay back, or another free one, when it becomes pending, confirmed, in_progress or completed.

{
  "status": "in_progress",
  "note": "Car in Bay 1"
}

Allowed changes

From Can become
hold pending, confirmed, cancelled
pending confirmed, cancelled
confirmed in_progress, completed, cancelled, no_show
in_progress completed, cancelled
no_show confirmed
completed, cancelled Nothing: these are final

Responses

200 OK. data is the booking after the change.

{
  "success": true,
  "data": {
    "id": 42,
    "number": "CW2026-0042",
    "form_id": null,
    "location_id": 3,
    "resource_id": 5,
    "customer_id": 25,
    "customer_vehicle_id": 31,
    "vehicle_type_id": 2,
    "package_id": 4,
    "start_at": "2026-11-14 15:00:00",
    "end_at": "2026-11-14 16:00:00",
    "blocked_until": "2026-11-14 16:10:00",
    "duration": 60,
    "status": "in_progress",
    "hold_expires_at": null,
    "first_name": "Lucas",
    "last_name": "Bernard",
    "email": "lucas@example.com",
    "phone": "+1 217 555 0199",
    "company": "",
    "vehicle_make": "Toyota RAV4",
    "vehicle_plate": "ABC1234",
    "address": "",
    "message": "",
    "agreements": [],
    "currency": "USD",
    "subtotal": 49.0,
    "discount": 0.0,
    "coupon_code": "",
    "tax": 3.06,
    "total": 52.06,
    "payment_method": "cash",
    "payment_status": "unpaid",
    "source": "staff",
    "page_url": "",
    "staff_notes": "Regular customer",
    "created_by": 1,
    "modified_by": 1,
    "created_at": "2026-11-12 09:30:00",
    "modified_at": "2026-11-14 15:02:00",
    "deleted_at": null,
    "items": [
      {
        "role": "package",
        "item_id": 4,
        "name": "Deluxe",
        "price": 49.0,
        "duration": 60
      }
    ],
    "events": [
      {
        "from": "",
        "to": "confirmed",
        "note": "Booked by staff",
        "user_id": 1,
        "created_at": "2026-11-12 09:30:00"
      },
      {
        "from": "confirmed",
        "to": "in_progress",
        "note": "Car in Bay 1",
        "user_id": 1,
        "created_at": "2026-11-14 15:02:00"
      }
    ],
    "next": [
      "completed",
      "cancelled"
    ],
    "location": {
      "id": 3,
      "name": "Riverside"
    },
    "local_date": "2026-11-14",
    "local_time": "09:00",
    "resource": {
      "id": 5,
      "name": "Bay 1",
      "color": "#0EA5E9"
    },
    "payments": []
  }
}
Field Type Meaning
data.status string The new status
data.next array Where it can go from here
data.events array History, the new change last

Errors

Status Code When
404 plugixa_carwash_not_found No booking with that id, or it is in the trash.
400 rest_invalid_param status is not one of the seven.
400 rest_missing_callback_param status is missing.
409 plugixa_carwash_invalid_transition The change is not in the table above, for example completed to cancelled.
409 plugixa_carwash_slot_taken The booking needs its bay back and the time has been booked since.
503 plugixa_carwash_busy Too many bookings were being made at that location at once. Try again.
409 plugixa_carwash_conflict You sent modified_at and somebody saved the booking since.

A Pro app can refuse a change with its own error, for example Dispatch while a mobile job is under way.

Plus the errors every endpoint can return.

Examples

curl -s -X POST "https://your-site.example/wp-json/plugixa-carwash/v1/bookings/42/status" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"status":"in_progress","note":"Car in Bay 1"}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-carwash/v1/bookings/42/status');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'admin:' . getenv('WP_APP_PASSWORD'),
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'status' => 'in_progress',
        'note'   => 'Car in Bay 1',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const auth = Buffer.from(`admin:${process.env.WP_APP_PASSWORD}`).toString('base64');
const response = await fetch('https://your-site.example/wp-json/plugixa-carwash/v1/bookings/42/status', {
  method: 'POST',
  headers: {
    'Authorization': `Basic ${auth}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'in_progress', note: 'Car in Bay 1' }),
});
const { data } = await response.json();

Quick Links

Share