Check-ins de visita
Registra a visita de um representante a um cliente, com GPS, observação e foto, e lista os check-ins de um representante.
O check-in é o registro de que o representante esteve em um lugar: coordenadas, hora, uma observação e, opcionalmente, uma foto. Cada check-in pertence a uma rota do próprio representante. O app envia o check-in da rua; estas rotas existem para o painel registrar ou conferir.
Registrar um check-in
/api/v1/admin/trade-reps/checkinsAdminRegistra um check-in de visita
Corpo da requisição
route_idintegerobrigatórioRota da visita. Precisa existir e pertencer ao
rep_id.rep_idintegerobrigatórioRepresentante que visitou.
latitudenumberobrigatórioLatitude em graus decimais. Latitude e longitude ambas
0 são recusadas.longitudenumberobrigatórioLongitude em graus decimais.
customer_iduuidCliente visitado. Pode ficar vazio (check-in sem cliente, por exemplo em trânsito).
notesstringObservação livre.
photo_urlstringFoto da visita: URL pública ou
data:image/...;base64,....client_checkin_idstringId gerado pelo app para este check-in. Reenviar o mesmo id devolve o registro já gravado em vez de criar outro.
bash
curl -X POST "$BASE_URL/api/v1/admin/trade-reps/checkins" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"route_id": 2, "rep_id": 2, "customer_id": "8a20f4fa-442b-46bc-a2b3-360e365f4b75", "latitude": -23.624, "longitude": -46.6995, "notes": "Foto da loja e checklist de merchandising", "client_checkin_id": "app-2026-10-11-0001"}'201Check-in registrado
json
{
"id": 21,
"route_id": 2,
"rep_id": 2,
"customer_id": "8a20f4fa-442b-46bc-a2b3-360e365f4b75",
"latitude": -23.624,
"longitude": -46.6995,
"notes": "Foto da loja e checklist de merchandising",
"client_checkin_id": "app-2026-10-11-0001",
"checked_at": "2026-10-11T22:15:00Z"
}Campos da resposta
idintegerId do check-in.
route_idintegerRota.
rep_idintegerRepresentante.
customer_iduuidCliente visitado. Ausente se não houve.
latitudenumberLatitude.
longitudenumberLongitude.
notesstringObservação.
photo_urlstringFoto, quando enviada.
client_checkin_idstringId do app, quando enviado.
checked_atstringQuando o check-in foi registrado (RFC 3339).
Listar os check-ins de um representante
/api/v1/admin/trade-reps/{id}/checkinsAdminLista os check-ins de um representante
Parâmetros de caminho
idintegerobrigatórioId do representante.
Parâmetros de consulta
route_idintegerSó os check-ins desta rota. Vazio ou
0 lista todos.200Check-ins
json
{
"checkins": [
{
"id": 9,
"route_id": 2,
"rep_id": 2,
"customer_id": "8a20f4fa-442b-46bc-a2b3-360e365f4b75",
"latitude": -23.624,
"longitude": -46.6995,
"notes": "Foto da loja e checklist de merchandising",
"checked_at": "2026-07-14T21:10:48Z"
}
],
"total": 1
}A lista não tem paginação e vem do mais recente para o mais antigo.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não é inteiro. | {"error":"invalid trade rep ID"} |
| 400 | Falta route_id ou rep_id. | {"error":"create checkin failed","detail":"route_id and manager_id are required"} |
| 400 | Latitude e longitude zeradas. | {"error":"create checkin failed","detail":"latitude and longitude are required"} |
| 400 | A rota não existe. | {"error":"create checkin failed","detail":"route not found"} |
| 400 | A rota é de outro representante. | {"error":"create checkin failed","detail":"route does not belong to this representative"} |
| 401 / 403 | Sem token, módulo desligado ou sem privilégio. | {"error":"module_disabled","module":"trade-reps"} |