SafePilot API v1 OAS 3.0

Esta documentação foi preparada para clientes e parceiros da Aioti que desejam integrar seus sistemas à plataforma SafePilot. A API permite autenticar usuários autorizados, consultar frotas, motoristas e viagens, além de obter dados de telemetria e eventos de condução de forma padronizada.

Visão geral

Todos os endpoints desta versão estão disponíveis sob o prefixo /v1. Os endpoints protegidos exigem o envio do token JWT no header Authorization.

Autenticação

Primeiro, utilize /v1/user/auth para obter um accessToken e um refreshToken. Em seguida, envie o accessToken nas chamadas protegidas:

Utilização

Após obter um accessToken através do endpoint /v1/user/auth, as chamadas subsequentes devem ser realizadas utilizando o header:

Authorization: Bearer seu_access_token

A utilização da API segue um fluxo sequencial simples:

Este fluxo permite navegar de forma estruturada entre frotas, motoristas e viagens, garantindo consultas consistentes e com melhor performance.

Datas e paginação

Datas devem ser informadas em formato ISO 8601, por exemplo: 2026-04-01T00:00:00.000Z. Para consultas de viagens, o período máximo permitido é de 31 dias. Quando aplicável, utilize pageNumber para navegar pela paginação.

Exemplo completo

A seguir, um exemplo completo de utilização da API SafePilot, demonstrando o fluxo desde a autenticação até a consulta de viagens de um motorista.

1. Autenticação

curl -X POST "https://api.safepilot.com.br/v1/user/auth" \
	  -H "Content-Type: application/json" \
	  -d '{
	    "email": "usuario@email.com",
	    "password": "senha"
	  }'

Resposta:

{
	  "accessToken": "SEU_ACCESS_TOKEN",
	  "refreshToken": "SEU_REFRESH_TOKEN"
	}
---

2. Listar frotas

curl -G "https://api.safepilot.com.br/v1/fleets" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN"

Resposta (exemplo):

{
	  "fleets": [
	    {
	      "id": "FLEET_ID_123",
	      "name": "Frota São Paulo"
	    }
	  ]
	}

Neste exemplo, utilizaremos o fleetId = FLEET_ID_123.

---

3. Listar motoristas da frota

curl -G "https://api.safepilot.com.br/v1/drivers" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN" \
	  --data-urlencode "fleetId=FLEET_ID_123" \
	  --data-urlencode "tenantId=TENANT_ID_OPCIONAL"

Resposta (exemplo):

{
		  "drivers": [
		    {
		      "id": "DRIVER_ID_456",
		      "firstName": "João",
		      "lastName": "Silva"
		    }
		  ]
		}
	
---

4. Consultar viagens do motorista

curl -G "https://api.safepilot.com.br/v1/trips" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN" \
	  --data-urlencode "driverId=DRIVER_ID_456" \
	  --data-urlencode "initialDate=2026-04-01T00:00:00.000Z" \
	  --data-urlencode "finalDate=2026-04-30T23:59:59.999Z"

Resposta (exemplo):

{
	  "trips": [
	    {
	      "id": "TRIP_ID_789",
	      "status": "CONSIDERED",
	      "start_time": "2026-04-16T17:07:31.289Z",
	      "end_time": "2026-04-16T17:52:01.385Z",
	      "scores": {
	        "overall": 90,
	        "speeding": 94,
	        "distraction": 100,
	        "harshBraking": 72,
	        "harshAcceleration": 100,
	        "sharpTurn": 100
	      },
	      "trip_info": {
	        "total_distance_km": 15.89,
	        "distance_on_road_km": 15.89,
	        "distance_offroad_km": 0
	      },
	      "events": [
	        {
	          "type": "HARD_BRAKING",
	          "timestamp": "2026-04-16T17:10:19.384Z"
	        }
	      ]
	    },
	    {
	      "id": "TRIP_ID_790",
	      "status": "DISREGARDED",
	      "start_time": "2026-04-17T09:12:04.100Z",
	      "end_time": "2026-04-17T09:38:22.500Z",
	      "scores": {
	        "overall": 0
	      },
	      "trip_info": {
	        "total_distance_km": 8.42
	      },
	      "events": []
	    }
	  ],
	  "pagination": {
	    "currentPage": 1,
	    "totalItems": 2,
	    "totalPages": 1,
	    "hasNextPage": false,
	    "hasPreviousPage": false
	  }
	}

5. Consultar rota da viagem

curl -G "https://api.safepilot.com.br/v1/trips/route" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN" \
	  --data-urlencode "tripId=TRIP_ID_789"

Resposta (exemplo):

{
	  "tripId": "TRIP_ID_789",
	  "route": {
	    "type": "FeatureCollection",
	    "features": [
	      {
	        "type": "Feature",
	        "geometry": {
	          "type": "LineString",
	          "coordinates": [
	            [-46.5292212367, -23.4778878093],
	            [-46.5294478834, -23.4780554473],
	            [-46.5299870074, -23.4784537554]
	          ]
	        }
	      }
	    ]
	  }
	}

6. Desconsiderar uma viagem

curl -X POST "https://api.safepilot.com.br/v1/trips/disregard" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN" \
	  -H "Content-Type: application/json" \
	  -d '{
	    "tripId": "TRIP_ID_789"
	  }'

Resposta (exemplo):

{
	  "tripId": "TRIP_ID_789",
	  "status": "DISREGARDED"
	}

7. Reconsiderar uma viagem

curl -X POST "https://api.safepilot.com.br/v1/trips/reconsider" \
	  -H "Authorization: Bearer SEU_ACCESS_TOKEN" \
	  -H "Content-Type: application/json" \
	  -d '{
	    "tripId": "TRIP_ID_789"
	  }'

Resposta (exemplo):

{
	  "tripId": "TRIP_ID_789",
	  "status": "RECONSIDERED"
	}
---

Este fluxo demonstra a navegação entre os principais recursos da API: frotas → motoristas → viagens.