Contents
On this page

Update Package - Plugixa Car Wash

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

Change some or all of a package’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/packages/4

Path parameters

Name Type Description
id integer The package’s id

Request body

Content type: application/json

Field Type Required Description
name string No At most 190 characters.
tagline string No At most 190 characters.
description string No Free text.
duration integer No Minutes, 1 to 1440. The package’s own time, not the sum of its services.
price number No 0 to 1000000.
badge string No At most 40 characters.
color string No A hex colour, or empty.
featured boolean No Lift the card on the booking form.
image_id integer No A media library attachment id.
sort_order integer No 0 to 100000.
status string No published or unpublished.
included array No Service ids on its checklist. When sent, replaces the list.
addons array No Service ids offered as extras with it. Empty offers every published add-on. When sent, replaces the list.
vehicle_rules array No Per-vehicle overrides, each {"vehicle_type_id", "location_id", "price", "duration", "available"}. location_id 0 means every location; a rule for one location wins over it. A null price or duration keeps the default arithmetic, available: false hides the item for that vehicle. One rule per vehicle type and location. When sent, it replaces every rule.
modified_at string No The modified_at you last read. When the package has changed since, the update is refused with 409.
{
  "price": 42,
  "modified_at": "2026-11-12 09:30:00"
}

Responses

200 OK. data is the updated package.

{
  "success": true,
  "data": {
    "id": 4,
    "name": "Deluxe",
    "tagline": "Inside and out",
    "description": "",
    "duration": 45,
    "price": 39.0,
    "badge": "Most popular",
    "color": "#F59E0B",
    "featured": true,
    "image_id": null,
    "sort_order": 1,
    "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,
    "included": [
      6,
      7
    ],
    "addons": [],
    "vehicle_rules": [
      {
        "vehicle_type_id": 2,
        "location_id": 0,
        "price": 49.0,
        "duration": 60,
        "available": true
      }
    ]
  }
}
Field Type Meaning
data.id integer The package’s id
data.duration integer Minutes, before the vehicle type’s multiplier
data.price number Base price, before the vehicle type’s fee
data.badge string Short ribbon on the card
data.featured boolean Lifted on the booking form
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.included array Service ids on the package’s checklist
data.addons array Service ids offered as extras with it. Empty offers every published add-on
data.vehicle_rules array Per-vehicle price and time overrides

Errors

Status Code When
404 plugixa_carwash_not_found No package 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_service An id in included or addons is not an existing service.
422 plugixa_carwash_invalid_vehicle_rule A rule has a negative price, or a time outside 0 to 1440.
422 plugixa_carwash_duplicate_vehicle_rule Two rules for the same vehicle type and location.
409 plugixa_carwash_conflict You sent modified_at and somebody saved the package 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/packages/4" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"price":42,"modified_at":"2026-11-12 09:30:00"}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-carwash/v1/packages/4');
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([
        'price'       => 42,
        'modified_at' => '2026-11-12 09:30:00',
    ]),
]);
$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/packages/4', {
  method: 'PUT',
  headers: {
    'Authorization': `Basic ${auth}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ price: 42, modified_at: '2026-11-12 09:30:00' }),
});
const { data } = await response.json();

Quick Links

Share