Contents
On this page
List Bookings - Plugixa Chauffeur
GET /plugixa-chauffeur/v1/bookings
List bookings one page at a time, with a search, a status filter and a count of bookings per status.
Needs a signed-in user with the plugixa_chauffeur_manage capability (administrators have it after activation).
Note. Bookings carry customer personal data (name, e-mail, phone, addresses). Give the capability only to accounts that should see it.
Request
GET https://your-site.example/wp-json/plugixa-chauffeur/v1/bookings?status=pending&orderby=pickup_datetime&order=ASC
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
search |
string |
Matches part of the booking number, the customer name or the customer e-mail. | |
status |
string |
One exact booking status, for example pending. |
Plus the list parameters every list accepts. orderby accepts created_at (the default), pickup_datetime, status, price_total and booking_number. The default order is newest first.
Responses
200 OK. data.items is one page of bookings.
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": "42",
"booking_number": "PXC-20261112-0815",
"booking_form_id": 1,
"service_type": "distance",
"transfer_type": "one_way",
"status": "processing",
"vehicle_id": 3,
"driver_id": 2,
"pickup_address": "Paris Charles de Gaulle Airport, Terminal 2E",
"pickup_lat": null,
"pickup_lng": null,
"dropoff_address": "Hotel Lutetia, 45 Boulevard Raspail, Paris",
"dropoff_lat": null,
"dropoff_lng": null,
"pickup_datetime": "2026-11-20 14:30:00",
"return_datetime": null,
"duration_hours": null,
"distance_km": 32.5,
"travel_minutes": null,
"passengers": 2,
"luggage": 3,
"customer_name": "Claire Martin",
"customer_email": "claire.martin@example.com",
"customer_phone": "+33 6 12 34 56 78",
"notes": "Flight AF1234, arriving 14:05.",
"price_base": 20.0,
"price_distance": 58.5,
"price_time": 0.0,
"price_total": 78.5,
"currency": "EUR",
"payment_method": "stripe",
"payment_status": "paid",
"payment_reference": "pi_3QaBcD2eZvKYlo2C1x9yAbCd",
"created_at": "2026-11-12 09:30:00",
"modified_at": "2026-11-12 09:34:10",
"vehicle_name": "Mercedes E-Class",
"driver_name": "Thomas Leroy"
}
],
"total": 37,
"limit": 20,
"offset": 0,
"status_counts": {
"cancelled": 2,
"completed": 21,
"pending": 5,
"processing": 9
}
}
}
| Field | Type | Meaning |
|---|---|---|
data.items |
array |
One page of rows |
data.total |
integer |
Rows matching the filters, before paging |
data.limit |
integer |
Rows per page used. 999999 when you asked for every row |
data.offset |
integer |
Rows skipped |
data.items[] |
object |
A booking, with vehicle_name and driver_name joined in. Fields as in Get Booking |
data.status_counts |
object |
Bookings per status across the whole site. It ignores search and status, and a status with no bookings is absent |
Errors
Plus the errors every endpoint can return.
Examples
curl -s "https://your-site.example/wp-json/plugixa-chauffeur/v1/bookings?status=pending&orderby=pickup_datetime&order=ASC" \
-u "admin:$WP_APP_PASSWORD"
<?php
$query = http_build_query([
'status' => 'pending',
'orderby' => 'pickup_datetime',
'order' => 'ASC',
]);
$ch = curl_init('https://your-site.example/wp-json/plugixa-chauffeur/v1/bookings?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => 'admin:' . getenv('WP_APP_PASSWORD'),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const auth = Buffer.from(`admin:${process.env.WP_APP_PASSWORD}`).toString('base64');
const query = new URLSearchParams({ status: 'pending', orderby: 'pickup_datetime', order: 'ASC' });
const response = await fetch(`https://your-site.example/wp-json/plugixa-chauffeur/v1/bookings?${query}`, {
headers: {
'Authorization': `Basic ${auth}`,
},
});
const { data } = await response.json();
Quick Links
Share