Skip to main content

GET /guestrides/:id

A GET to the /guestrides/:id endpoint allows your application to fetch a specific guest ride by its identifier. Requests made to this endpoint require an authorization header using your authentication token:

Auth Header
curl --request GET \
--url https://api.hopdrive.com/v1/guestrides/:id \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <your token>'

Example Request

GET /v1/guestrides/42

Example Response

200 /v1/guestrides/42
{
"id": 42,
"rooftop": 108,
"status": "completed",
"guest_name": "Jamie Guest",
"guest_phone": "+15555550123",
"pickup_address": "123 Dealer Way, Richmond, VA 23220",
"pickup_lat": 37.5407,
"pickup_lng": -77.436,
"dropoff_address": "456 Guest St, Richmond, VA 23220",
"dropoff_lat": 37.5538,
"dropoff_lng": -77.4603,
"notes": "Guest waiting at service entrance",
"reference_num": "RO-8891",
"created_at": "2026-08-01T12:00:00+00:00",
"updated_at": "2026-08-01T12:30:00+00:00",
"ride": {
"provider": "lyft",
"product_type": "lyft",
"attempt_number": 1,
"quality_rejection_reason": null,
"tracking_link": "https://ride.lyft.com/csl/abc123",
"driver_name": "Sandra",
"driver_phone": "+12265550123",
"driver_rating": 5,
"driver_photo_url": "https://.../driver.jpg",
"vehicle_year": 2018,
"vehicle_make": "GMC",
"vehicle_model": "Yukon XL",
"vehicle_color": null,
"vehicle_license_plate": "3LYF123",
"vehicle_photo_url": "https://.../vehicle.png",
"booked_at": "2026-08-01T12:01:15+00:00",
"driver_assigned_at": "2026-08-01T12:01:18+00:00",
"pickup_at": "2026-08-01T12:02:31+00:00",
"dropoff_at": "2026-08-01T12:20:49+00:00"
},
"charge": {
"invoice_id": 4501,
"type": "guestride",
"status": "partial",
"disputed": false,
"dispute_reason": null,
"discount_amount": 3.00,
"discount_reason": "goodwill",
"due_amount": 27.75,
"paid_amount": 20.00,
"balance_remaining": 4.75,
"details": [
{
"name": "Ridehail",
"notes": "Price for ridehail service",
"amount": 27.00
},
{
"name": "Platform Fee",
"notes": "Per use fee for ridehail",
"amount": 0.75
}
]
}
}

The status field follows the guest ride lifecycle: newpendingbookeddriver_assigneddriver_arrivedin_progresscompleted, with cancelled and failed as terminal exceptions. These are the same status words the guestride.* webhook events use, so the status a webhook reports is the status this endpoint returns.

The ride object is the guest ride's current provider ride. A guest ride is delivered by one rideshare booking, but if the first provider cannot complete it the trip is re-booked with another; ride always describes the attempt that is actually happening, and attempt_number says which one it is. It is null until the first booking is confirmed. product_type is the provider's product (lyft, UberXL, LyftPremier), and quality_rejection_reason explains a cancellation or failure when there is one. There is one status on the payload, the guest ride's, and one place for money, charge.

This is the identical object the guestride.* webhooks deliver, so a webhook body can be treated as a free call to this endpoint.

The charge object follows the same shape as the charge object on a move, rolled up from the guest ride's billing line items; its type is guestride. It is null until the guest ride has been billed, and invoice_id is null until the charge lands on an invoice. A guest ride's details contain the rideshare cost (Ridehail) and, when your contract includes one, a per-use Platform Fee. The fee is charged once per guest ride, however many provider rides it took to deliver it — a trip that was re-booked with a second provider is still one fee. An attempt that was cancelled after the provider charged a cancellation fee adds its own line for that fee; an attempt that never ran is not billed at all. Guest ride charge details carry no mileage_band; mileage bands only apply to moves.

A 404 is returned when the guest ride does not exist, has been deleted, or your token is not authorized for its rooftop. These cases are deliberately indistinguishable.