DocsBookingAPIManage Bookings

Manage bookings

After creating a booking, use the management endpoints to retrieve its details, make changes to passenger information or timing, or cancel the booking entirely.

Get a booking

GET /api/v1/bookings/{tagName}

Returns the full details for a booking, including current status and assigned driver information when available.

Path parameter

ParameterTypeDescription
tagName string The booking reference returned when the booking was created (e.g. MV-20260501-4821).
Request
curl https://api.moovlogic.com/api/v1/bookings/MV-20260501-4821 \
  -H "Authorization: Bearer YOUR_TOKEN"
tag_name = 'MV-20260501-4821'
response = requests.get(
    f'https://api.moovlogic.com/api/v1/bookings/{tag_name}',
    headers={'Authorization': f'Bearer {token}'}
)
booking = response.json()
<?php
$tagName = 'MV-20260501-4821';
$ch = curl_init("https://api.moovlogic.com/api/v1/bookings/$tagName");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ["Authorization: Bearer $token"]
]);
$booking = json_decode(curl_exec($ch), true);
curl_close($ch);
const tagName = 'MV-20260501-4821';
const response = await fetch(`https://api.moovlogic.com/api/v1/bookings/${tagName}`, {
    headers: { 'Authorization': `Bearer ${token}` }
});
const booking = await response.json();

Response — 200 OK

Response 200 OK
{
  "tagName":           "MV-20260501-4821",
  "bookingId":         "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "status":            "Allocated",
  "statusLabel":       "Driver assigned",
  "serviceTypeName":   "Standard Saloon",
  "quotedFare":        85.00,
  "currency":          "GBP",
  "passengerName":     "Jane Smith",
  "passengerEmail":    "jane@example.com",
  "passengerPhone":    "+447911123456",
  "pickupDateTimeUtc": "2026-05-01T14:00:00Z",
  "pickupAddress": {
    "premiseName":  "Heathrow Airport Terminal 5, Longford, Hounslow TW6 2GA, UK",
    "addressLine1": "Heathrow Airport Terminal 5",
    "town":         "Hounslow",
    "postCode":     "TW6 2GA",
    "country":      "United Kingdom"
  },
  "dropoffAddress": {
    "premiseName":  "10 Downing Street, Westminster, London SW1A 2AA, UK",
    "addressLine1": "10 Downing Street",
    "town":         "London",
    "postCode":     "SW1A 2AA",
    "country":      "United Kingdom"
  },
  "flightNumber":      "BA286",
  "notes":             "Meet in arrivals, holding name sign",
  "externalReference": "HOTEL-2026-04821",
  "driver": {
    "name":                "James Wilson",
    "phone":               "+447900000000",
    "vehicleRegistration": "AB21 XYZ",
    "vehicleColour":       "Black",
    "vehicleModel":        "Mercedes E-Class"
  },
  "createdAt": "2026-04-19T10:23:00Z"
}
ℹ️
The driver object is only present once a driver has been assigned (status Allocated or later). It is null for Pending bookings.

Update a booking

PUT /api/v1/bookings/{tagName}

Use this to amend the booking. Omit any fields you do not want to change — only included fields will be updated.

Updatable fields

ParameterTypeDescription
pickupDateTimeUtc string (ISO 8601) New pickup time in UTC.
passengerName string Updated passenger name.
passengerPhone string Updated passenger phone.
flightNumber string Updated flight number.
notes string Updated driver notes.
passengers integer Updated passenger count.
luggage integer Updated luggage count.
⚠️
You cannot change the pickup or drop-off addresses after a driver has been allocated (status Allocated or later). Cancel the booking and create a new one if addresses need to change at that stage.
Request — change pickup time
curl -X PUT https://api.moovlogic.com/api/v1/bookings/MV-20260501-4821 \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "pickupDateTimeUtc": "2026-05-01T15:30:00Z",
    "notes": "Flight delayed — meet in terminal 5 Arrivals"
  }'
response = requests.put(
    f'https://api.moovlogic.com/api/v1/bookings/{tag_name}',
    json={
        'pickupDateTimeUtc': '2026-05-01T15:30:00Z',
        'notes': 'Flight delayed — meet in terminal 5 Arrivals'
    },
    headers={'Authorization': f'Bearer {token}'}
)
await fetch(`https://api.moovlogic.com/api/v1/bookings/${tagName}`, {
    method: 'PUT',
    headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        pickupDateTimeUtc: '2026-05-01T15:30:00Z',
        notes: 'Flight delayed — meet in terminal 5 Arrivals'
    })
});

Cancel a booking

DELETE /api/v1/bookings/{tagName}

Cancels the booking. A cancellation reason body is optional but recommended.

Request — cancel booking
curl -X DELETE https://api.moovlogic.com/api/v1/bookings/MV-20260501-4821 \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Customer cancelled — change of plans" }'
response = requests.delete(
    f'https://api.moovlogic.com/api/v1/bookings/{tag_name}',
    json={'reason': 'Customer cancelled — change of plans'},
    headers={'Authorization': f'Bearer {token}'}
)
print(response.json()['status'])  # "Cancelled"
<?php
$ch = curl_init("https://api.moovlogic.com/api/v1/bookings/$tagName");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $token",
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode(['reason' => 'Customer cancelled'])
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
const response = await fetch(`https://api.moovlogic.com/api/v1/bookings/${tagName}`, {
    method: 'DELETE',
    headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ reason: 'Customer cancelled — change of plans' })
});
const { status } = await response.json(); // "Cancelled"

Response — 200 OK

Response 200 OK
{
  "tagName":      "MV-20260501-4821",
  "status":       "Cancelled",
  "cancelledAt":  "2026-04-19T11:00:00Z"
}
ℹ️
Cancellation reason is optional but recommended — it is visible to the dispatch team and helps track cancellation patterns over time.