Reservas
Crie, consulte e cancele reservas. Cada reserva tem um booking_code do provedor e um local_number interno do GreenFlow; ambos servem como {code}.
POST /bookings — criar
Consome o tokenc cunhado por POST /fleet/show. No 201, o servidor persiste Booking + Sale, enfileira o job do voucher PDF e envia o email de confirmação.
Campos
| Campo | Tipo | Notas |
|---|---|---|
| brand | int | obrigatório. Same vendor id as in /fleet/list. |
| pickup_location / dropoff_location | string | obrigatório. Office code. |
| pickup_date / dropoff_date | datetime | obrigatório. Format Y-m-d\TH:i:s (no offset). |
| rate | string | obrigatório. From rates[].code. |
| vehicle_code | string | obrigatório. From cars[].vehicle_code. |
| tokenc | uuid | obrigatório. From /fleet/show. |
| coupon_code | string | opcional. See coupons. |
| customer.* | object | obrigatório. See curl below. |
| airline / frequent_flyer | object | opcional. Propagated to ABG/ANE adapters. |
| mail_notification / sms_notification | bool | Defaults true / false. |
bash
curl -X POST https://greenflow.live/api/v1/bookings \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP" \
-H "Content-Type: application/json" \
-d '{
"brand": 11,
"pickup_location": "AACGH", "dropoff_location": "AACGH",
"pickup_date": "2026-05-15T10:00:00", "dropoff_date": "2026-05-18T10:00:00",
"rate": "011880", "vehicle_code": "B",
"tokenc": "836c7fb31f624ca2a8b5a519f26825d2",
"customer": {
"name": "Joao", "lastname": "Silva", "email": "joao@example.com", "age": 30,
"address": { "country_code": "BR" },
"telephone": { "phone_number": "11987654321" }
}
}'
json
{
"data": {
"uuid": "01935f1e-9b0a-7c88-b9e3-3f7c8e9d1a02",
"booking_code": "BR-1234567",
"local_number": "GFC042389XY",
"brand": "LOCALIZA",
"name": "Joao", "last_name": "Silva",
"voucher": { "status": "queued" }
}
}
Efeitos colaterais
- Creates a
Booking(statusRESERVED) andSale(PENDING) in a DB transaction. - Queues the voucher PDF emission + booking confirmation email.
- Dispatches the
booking.createdwebhook event. - Writes a
booking.createdaudit log row.
GET /bookings/{code}
Requer lastname como query param — pseudo-auth leve para que o code sozinho não seja suficiente para ler a reserva.
bash
curl -s "https://greenflow.live/api/v1/bookings/BR-1234567?lastname=Silva" \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP"
json
{
"data": {
"uuid": "01935f1e-9b0a-7c88-b9e3-3f7c8e9d1a02",
"booking_code": "BR-1234567",
"local_number": "GFC042389XY",
"status": "RESERVED",
"pickup_date": "2026-05-15 10:00:00",
"dropoff_date": "2026-05-18 10:00:00",
"gds": { "booking_code": "BR-1234567", "status": "RESERVED" }
}
}
DELETE /bookings/{code}
Cancela upstream. Se havia cupom aplicado, é revertido e o slot de uso é liberado.
bash
curl -X DELETE https://greenflow.live/api/v1/bookings/BR-1234567 \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP"
json
{ "data": { "success": true, "booking_code": "BR-1234567", "local_number": "GFC042389XY" } }
Erros
| HTTP | Body |
|---|---|
| 401 | {"message": "Invalid API key"} |
| 422 | {"error": {"message": "RATE NOT AVAILABLE FOR THIS CAR CLASS"}} |
| 422 | {"error": "coupon_validation_failed", "reason": "coupon_expired"} |
| 404 | Cross-tenant booking or mismatched lastname. |