Lojas
Locais de retirada/devolução específicos por marca. Atualmente no standalone endpoint — as lojas aparecem via /places/search (com seu lugar pai) e via a resolução interna do /fleet/list.
GET /api/v1/offices hoje. Os dados são alcançáveis de duas formas: (1) /places/search retorna o pivot de lojas por linha de place; (2) o próprio /fleet/list roda `Office::near()` por marca internamente para traduzir `lat/lng` → código de loja antes de despachar para o adaptador GDS.Semântica de Office::near
Helper interno: `Office::near($lat, $lng, $radiusKm)->where(brand_id, ...)` retorna as lojas da marca dentro do raio, ordenadas por distância. O controlador de fleet o usa para escolher exatamente uma loja por marca para uma latitude/longitude — a mesma loja que sua chamada /places/search teria retornado.
# Get the offices around Congonhas (Sao Paulo) for any brand:
curl -s "https://greenflow.live/api/v1/places/search?lat=-23.6273&lng=-46.6566&radius_km=5" \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP"
{
"data": [
{
"uuid": "c31ec1ee-3fdf-4cb2-8445-6d07e82dacd0",
"name": "Congonhas Airport",
"offices": [
{"code": "AACGH", "name": "AGENCIA AEROPORTO CONGONHAS", "brand_id": 11, "distance_km": 0.142}
]
}
]
}
Resolução por marca
Marcas diferentes mantêm códigos de aeroporto diferentes para o MESMO aeroporto físico. Um `pickup_lat`/`pickup_lng` de `(-23.62, -46.65)` resolve para `AACGH` na LOCALIZA, `SAO01` na MOVIDA, etc. A resolução acontece dentro do /fleet/list; integradores raramente precisam chamá-la diretamente.
# Pass coords directly to /fleet/list — internal Office::near picks the
# right office per brand. No need to call any /offices route.
curl -X POST https://greenflow.live/api/v1/fleet/list \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP" \
-H "Content-Type: application/json" \
-d '{
"pickup_lat": -23.6273, "pickup_lng": -46.6566,
"dropoff_lat": -23.6273, "dropoff_lng": -46.6566,
"pickup_date": "2026-05-15", "pickup_time": "10:00",
"dropoff_date": "2026-05-18", "dropoff_time": "10:00",
"passenger_country_code": "BR", "passenger_age": 30,
"brands": [11]
}'
Erros
| HTTP | Body | Causa |
|---|---|---|
| 404 | {"message": "Not Found"} | Hitting /api/v1/offices directly returns 404 — not yet wired. |
| 200 | {"meta": {"LOCALIZA": {"reason": "no_offices_for_pickup"}}} | /fleet/list meta — no brand-owned office near the lat/lng. |