DocsBookingAPIStatus Updates

Ride status updates

Use the status endpoint to report progress on a ride — driver en route, passenger on board, journey complete. Status changes are visible in real time on the MoovLogic dispatch screen.

Status lifecycle

Pending  →  Allocated  →  DriverEnRoute  →  PassengerOnBoard  →  Completed
                                                               ↘  NoShow
Pending / Allocated  →  Cancelled
CodeStatus nameMeaning
0 Pending Booking created, awaiting driver assignment.
1 Allocated Driver has been assigned to this booking.
2 DriverEnRoute Driver is heading to the pickup location.
3 PassengerOnBoard Passenger has been collected and the journey is underway.
5 Completed Journey finished — passenger dropped off at destination.
6 NoShow Driver arrived at pickup but passenger did not appear.
ℹ️
Status code 4 is not used. The sequence jumps from 3 (PassengerOnBoard) to 5 (Completed).

Update ride status

POST /api/v1/bookings/{tagName}/status

Request body

ParameterTypeRequiredDescription
status integer Required New status code (see table above). Valid values: 0, 1, 2, 3, 5, 6.
notes string Optional Additional context for the status change (e.g. "Driver arrived 10 minutes early").
Request — passenger on board
curl -X POST https://api.moovlogic.com/api/v1/bookings/MV-20260501-4821/status \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "status": 3 }'
import requests

response = requests.post(
    f'https://api.moovlogic.com/api/v1/bookings/{tag_name}/status',
    json={'status': 3},
    headers={'Authorization': f'Bearer {token}'}
)
result = response.json()
print(f"{result['previousStatus']} → {result['currentStatus']}")
<?php
$ch = curl_init("https://api.moovlogic.com/api/v1/bookings/$tagName/status");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $token",
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode(['status' => 3])
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
const response = await fetch(`https://api.moovlogic.com/api/v1/bookings/${tagName}/status`, {
    method: 'POST',
    headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ status: 3 })
});
const { previousStatus, currentStatus } = await response.json();
console.log(`${previousStatus} → ${currentStatus}`);

Response — 200 OK

Response 200 OK
{
  "tagName":        "MV-20260501-4821",
  "previousStatus": "DriverEnRoute",
  "currentStatus":  "PassengerOnBoard",
  "updatedAt":      "2026-05-01T14:07:00Z"
}

Valid status transitions

Status transitions are validated — you cannot move backwards or skip ahead.

⚠️
Attempting an invalid transition (e.g. moving from Completed back to PassengerOnBoard, or jumping from Pending directly to Completed) returns 422 Unprocessable Entity with error code invalid_status_transition.

Completing a ride

To mark a ride as complete, progress through the statuses in order:

Complete ride sequence
import requests, time

def update_status(tag_name, status, token):
    return requests.post(
        f'https://api.moovlogic.com/api/v1/bookings/{tag_name}/status',
        json={'status': status},
        headers={'Authorization': f'Bearer {token}'}
    ).json()

# Driver heading to pickup
update_status(tag_name, 2, token)   # DriverEnRoute

# Passenger collected
update_status(tag_name, 3, token)   # PassengerOnBoard

# Journey complete
update_status(tag_name, 5, token)   # Completed
async function updateStatus(tagName, status) {
    const res = await fetch(`https://api.moovlogic.com/api/v1/bookings/${tagName}/status`, {
        method: 'POST',
        headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
        body: JSON.stringify({ status })
    });
    return res.json();
}

await updateStatus(tagName, 2); // DriverEnRoute
await updateStatus(tagName, 3); // PassengerOnBoard
await updateStatus(tagName, 5); // Completed

Recording a no-show

If the driver arrived at the pickup location but the passenger did not appear:

No-show
curl -X POST https://api.moovlogic.com/api/v1/bookings/MV-20260501-4821/status \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "status": 6, "notes": "Waited 15 minutes — no contact from passenger" }'