Lugares
Dois endpoints para resolver locais de retirada/devolução: uma busca por raio com PostGIS e um autocompletar tipo typeahead. Ambos alimentam `pickup_place_uuid` direto em POST /fleet/list.
GET /places — autocompletar
LIKE econômico sobre a tabela `places` carregada. Retorna até limit (default 10, max 25) linhas ordenadas por correspondência de prefixo e depois alfabeticamente. Cacheado por 5 minutos por (q, country, limit). Aliasado em GET /api/v1/places/autocomplete para quem prefere o nome mais explícito.
Request
bash
curl -s "https://greenflow.live/api/v1/places?q=miami&country=US&limit=5" \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP"
Response
json
{
"data": [
{
"uuid": "9566c9fe-a2d6-451b-a754-e2fee27a2c8f",
"name": "Miami Downtown",
"latitude": 25.77125531,
"longitude": -80.19186806,
"country_id": 254,
"country_code": "US",
"place_type": 2
}
]
}
GET /places/search — busca por raio
Lookup PostGIS `ST_DWithin` sobre a coluna geográfica `location`. Passe `lat` + `lng` (obrigatórios) e um `radius_km` opcional (padrão 50, máx 500). Cada resultado inclui as lojas pivotadas para aquele lugar para você ir direto a POST /fleet/list.
Request
bash
curl -s "https://greenflow.live/api/v1/places/search?lat=-23.6273&lng=-46.6566&radius_km=25" \
-H "Authorization: Bearer gfc_7s2wprmy_DWTZRBGBEV6La4dTOoFdMkEhWmWCsXdwc3zVMnqP"
Response
json
{
"data": [
{
"uuid": "c31ec1ee-3fdf-4cb2-8445-6d07e82dacd0",
"name": "Congonhas Airport",
"latitude": -23.62799975,
"longitude": -46.65703389,
"distance_km": 0.089,
"place_type": 1,
"offices": [
{"code": "AACGH", "name": "AGENCIA AEROPORTO CONGONHAS", "brand_id": 11, "distance_km": 0.142}
]
}
]
}
Erros
| HTTP | Body | Causa |
|---|---|---|
| 401 | {"message": "Invalid API key"} | Missing or invalid Bearer token. |
| 422 | {"message": "The q field is required."} | Autocomplete needs `q` (min 2 chars). |
| 422 | {"message": "The lat field is required."} | Search needs both `lat` and `lng`. |