Contents
On this page

Create Location - Plugixa Car Wash

POST /plugixa-carwash/v1/locations

Create a location.

Needs the plugixa_carwash_create capability.

Note. closures are saved after the location itself. When they are refused, the answer is 422 but the location has already been created without them.

Request

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

Request body

Content type: application/json

Field Type Required Description
name string Yes At most 190 characters.
description string No Defaults to empty.
mode string No stationary (customers come to you), mobile (you go to them, the booking asks for an address) or hybrid. Defaults to stationary.
address string No At most 255 characters. Defaults to empty.
city string No At most 120 characters. Defaults to empty.
postcode string No At most 30 characters. Defaults to empty.
country string No Two letters. Defaults to empty.
latitude number No -90 to 90.
longitude number No -180 to 180.
phone string No At most 50 characters. Defaults to empty.
email string No A valid address when given. Defaults to empty.
timezone string No A time zone name such as America/Chicago. Empty uses the site’s. Defaults to empty.
currency string No Three capital letters such as USD. Empty uses the site’s. Defaults to empty.
tax_rate number No Percent, 0 to 100. Defaults to 0.
prices_include_tax boolean No Defaults to true.
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. Defaults to 08:00 to 18:00 Monday to Saturday.
slot_minutes integer No 5 to 240. Defaults to 30.
buffer_minutes integer No 0 to 240. Defaults to 0.
lead_minutes integer No 0 to 43200. Defaults to 60.
window_days integer No 1 to 365. Defaults to 30.
image_id integer No A media library attachment id.
sort_order integer No 0 to 100000. Defaults to 0.
status string No published or unpublished. Defaults to published.
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.

Note. A schedule that is not an object is not refused: it is replaced by the default hours.

{
  "name": "Riverside",
  "address": "48 River Street",
  "city": "Springfield",
  "country": "US",
  "timezone": "America/Chicago",
  "currency": "USD",
  "tax_rate": 6.25,
  "prices_include_tax": false,
  "buffer_minutes": 10,
  "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": []
  },
  "closures": [
    {
      "start_date": "2026-12-25",
      "end_date": "2026-12-26",
      "note": "Christmas"
    }
  ]
}

Responses

201 Created. data is the new 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
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.

Plus the errors every endpoint can return.

Examples

curl -s -X POST "https://your-site.example/wp-json/plugixa-carwash/v1/locations" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"name":"Riverside","address":"48 River Street","city":"Springfield","country":"US","timezone":"America/Chicago","currency":"USD","tax_rate":6.25,"prices_include_tax":false,"buffer_minutes":10,"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":[]},"closures":[{"start_date":"2026-12-25","end_date":"2026-12-26","note":"Christmas"}]}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-carwash/v1/locations');
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([
        'name'               => 'Riverside',
        'address'            => '48 River Street',
        'city'               => 'Springfield',
        'country'            => 'US',
        'timezone'           => 'America/Chicago',
        'currency'           => 'USD',
        'tax_rate'           => 6.25,
        'prices_include_tax' => false,
        'buffer_minutes'     => 10,
        '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' => [],
        ],
        'closures'           => [
            [
                'start_date' => '2026-12-25',
                'end_date'   => '2026-12-26',
                'note'       => 'Christmas',
            ],
        ],
    ]),
]);
$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', {
  method: 'POST',
  headers: {
    'Authorization': `Basic ${auth}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Riverside',
    address: '48 River Street',
    city: 'Springfield',
    country: 'US',
    timezone: 'America/Chicago',
    currency: 'USD',
    tax_rate: 6.25,
    prices_include_tax: false,
    buffer_minutes: 10,
    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: [],
    },
    closures: [
      { start_date: '2026-12-25', end_date: '2026-12-26', note: 'Christmas' },
    ],
  }),
});
const { data } = await response.json();

Quick Links

Share