Contents
On this page

Update Location - Plugixa Car Wash

PUT /plugixa-carwash/v1/locations/{id}

Change some or all of a location’s fields. PATCH does the same as PUT.

Needs the plugixa_carwash_edit capability.

Only what you send changes. A field you leave out keeps its value, so you can send a single field. A field you send is checked exactly as on create.

Request

PUT https://your-site.example/wp-json/plugixa-carwash/v1/locations/3

Path parameters

Name Type Description
id integer The location’s id

Request body

Content type: application/json

Field Type Required Description
name string No At most 190 characters.
description string No Free text.
mode string No stationary (customers come to you), mobile (you go to them, the booking asks for an address) or hybrid.
address string No At most 255 characters.
city string No At most 120 characters.
postcode string No At most 30 characters.
country string No Two letters.
latitude number No -90 to 90.
longitude number No -180 to 180.
phone string No At most 50 characters.
email string No A valid address when given.
timezone string No A time zone name such as America/Chicago. Empty uses the site’s.
currency string No Three capital letters such as USD. Empty uses the site’s.
tax_rate number No Percent, 0 to 100.
prices_include_tax boolean No Whether prices already contain the tax.
schedule object No Opening hours, mon to sun, each a list of {"start": "HH:MM", "end": "HH:MM"}. 24:00 is allowed as an end. A day left out is closed.
slot_minutes integer No 5 to 240.
buffer_minutes integer No 0 to 240.
lead_minutes integer No 0 to 43200.
window_days integer No 1 to 365.
image_id integer No A media library attachment id.
sort_order integer No 0 to 100000.
status string No published or unpublished.
closures array No Closed periods, each {"start_date": "Y-m-d", "end_date": "Y-m-d", "note": "..."}. end_date defaults to start_date. When sent, it replaces every closed period.
modified_at string No The modified_at you last read. When the location has changed since, the update is refused with 409.

Sending closures replaces the whole list; leave it out to keep it.

{
  "buffer_minutes": 15,
  "window_days": 45
}

Responses

200 OK. data is the updated location.

{
  "success": true,
  "data": {
    "id": 3,
    "name": "Riverside",
    "description": "Two drive-through bays.",
    "mode": "stationary",
    "address": "48 River Street",
    "city": "Springfield",
    "postcode": "62701",
    "country": "US",
    "latitude": 39.7990175,
    "longitude": -89.6439575,
    "phone": "+1 217 555 0142",
    "email": "riverside@your-site.example",
    "timezone": "America/Chicago",
    "currency": "USD",
    "tax_rate": 6.25,
    "prices_include_tax": false,
    "schedule": {
      "mon": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "tue": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "wed": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "thu": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "fri": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "sat": [
        {
          "start": "08:00",
          "end": "18:00"
        }
      ],
      "sun": []
    },
    "slot_minutes": 30,
    "buffer_minutes": 10,
    "lead_minutes": 60,
    "window_days": 30,
    "image_id": null,
    "sort_order": 0,
    "status": "published",
    "created_by": 1,
    "modified_by": 1,
    "created_at": "2026-11-10 08:15:00",
    "modified_at": "2026-11-12 09:30:00",
    "deleted_at": null,
    "image_url": null,
    "closures": [
      {
        "start_date": "2026-12-25",
        "end_date": "2026-12-26",
        "note": "Christmas"
      }
    ]
  }
}
Field Type Meaning
data.id integer The location’s id
data.mode string stationary, mobile or hybrid
data.latitude number|null Optional
data.timezone string Empty means the site’s time zone
data.currency string Empty means the site’s currency
data.tax_rate number Percent
data.prices_include_tax boolean Whether prices already contain the tax
data.schedule object Opening hours: one key per day, mon to sun, each a list of {start, end} periods
data.slot_minutes integer The time grid customers book on
data.buffer_minutes integer Kept free after each wash
data.lead_minutes integer Minimum notice for an online booking
data.window_days integer How many days ahead customers can book
data.image_url string|null Medium-size URL of image_id
data.created_at string UTC datetime
data.modified_at string UTC datetime of the last change. Send it back on an update to be warned about a conflicting edit
data.deleted_at string|null null unless the record is in the trash
data.closures array Closed periods: start_date, end_date, note

Errors

Status Code When
404 plugixa_carwash_not_found No location with that id, or it is in the trash.
422 plugixa_carwash_missing_name name is missing or empty.
422 plugixa_carwash_too_long_{field} A text field is too long. The code names the field.
422 plugixa_carwash_too_small_{field} / too_large_{field} A number is outside its range. The code names the field.
422 plugixa_carwash_invalid_{field} A choice field has a value that is not one of its choices. The code names the field.
422 plugixa_carwash_invalid_schedule An opening period is not HH:MM, closes before it opens, or overlaps another on the same day.
422 plugixa_carwash_invalid_timezone timezone is not a known time zone name.
422 plugixa_carwash_invalid_currency currency is not three capital letters.
422 plugixa_carwash_invalid_closure A closed period has no valid start date, or ends before it starts.
409 plugixa_carwash_conflict You sent modified_at and somebody saved the location since. data.expected and data.current hold both values.

Plus the errors every endpoint can return.

Examples

curl -s -X PUT "https://your-site.example/wp-json/plugixa-carwash/v1/locations/3" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"buffer_minutes":15,"window_days":45}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-carwash/v1/locations/3');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'admin:' . getenv('WP_APP_PASSWORD'),
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'buffer_minutes' => 15,
        'window_days'    => 45,
    ]),
]);
$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/locations/3', {
  method: 'PUT',
  headers: {
    'Authorization': `Basic ${auth}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ buffer_minutes: 15, window_days: 45 }),
});
const { data } = await response.json();

Quick Links

Share