Exemplos de API
Introducao ao documento
Exemplos de request/response derivados dos controladores e validacoes da API. Onde o contrato nao esta totalmente inferivel, a lacuna e registrada em Pendencias.
Versionamento
- Versao do documento: 1.0.0
- Ultima atualizacao: 2026-03-17
- Responsavel: GitHub Copilot
Referencial teorico
- OpenAPI 3.0.3
- HTTP/JSON APIs
- Validacao de entrada Laravel
Autenticacao
A maioria dos endpoints em /api exige header Authorization validado contra tabela api_keys.
Authorization: <API_KEY>
- Evidencia: routes/api.php:26
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:22
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:39
1) Criar agendamento
Endpoint: POST /api/appointments
Request
{
"start_time": "2026-03-20T14:00:00",
"finish_time": "2026-03-20T15:00:00",
"comments": "Atendimento inicial",
"additional_fields": "{\"course_name\":\"Mentoria X\",\"link\":\"https://hub.sebraeingresse.com.br\"}",
"class_id": "123",
"client_id": "12345678909",
"employee_id": "98765432100",
"type_id": 3
}
Response 201
{
"status": 201,
"message": "Appointment created successfully",
"data": {
"id": 100,
"start_time": "2026-03-20T14:00:00.000000Z",
"finish_time": "2026-03-20T15:00:00.000000Z",
"class_id": "123",
"client_id": 12,
"employee_id": 5,
"type_id": 3
}
}
Response 409 (conflito)
{
"status": 409,
"message": "There is another appointment within the specified time range.",
"data": true
}
- Evidencia: app/Http/Controllers/AppointmentController.php:161
- Evidencia: app/Http/Controllers/AppointmentController.php:167
- Evidencia: app/Http/Controllers/AppointmentController.php:176
- Evidencia: app/Http/Controllers/AppointmentController.php:213
2) Listar slots disponiveis
Endpoint: GET /api/appointments/slots/2026-03-20/employee/98765432100/client/12345678909
Response 200
{
"status": 200,
"message": "Available appointments slots. Data from db",
"data": [
{"id": "2026-03-20 09:00:00", "date": "2026-03-20", "time": "09:00:00"},
{"id": "2026-03-20 10:00:00", "date": "2026-03-20", "time": "10:00:00"}
]
}
- Evidencia: routes/api.php:30
- Evidencia: app/Http/Controllers/AppointmentController.php:583
- Evidencia: app/Http/Controllers/AppointmentController.php:601
- Evidencia: app/Models/Appointment.php:117
3) Mover agendamentos futuros
Endpoint: POST /api/appointments/move/from/98765432100/to/11122233344/class/123
Response 200
{
"status": 200,
"message": "Upcoming appointments moved successfully.",
"data": {
"moved": [],
"unmoved": []
}
}
- Evidencia: routes/api.php:38
- Evidencia: app/Http/Controllers/AppointmentController.php:475
- Evidencia: app/Http/Controllers/AppointmentController.php:503
4) Buscar cliente por CPF
Endpoint: GET /api/clients/cpf/12345678909
Response 200
{
"status": 200,
"message": "Usuario encontrado.",
"data": {
"id": 12,
"name": "Cliente Exemplo",
"cpf": "12345678909"
}
}
- Evidencia: routes/api.php:40
- Evidencia: app/Http/Controllers/ClientController.php:46
- Evidencia: app/Http/Controllers/ClientController.php:54
5) Limpar cache
Endpoint: GET /api/cache/flush
Response 200
{
"status": "success",
"message": "Cache flushed successfully.",
"data": true
}
- Evidencia: routes/api.php:42
- Evidencia: app/Http/Controllers/CacheController.php:15
6) Exportar agendamentos para S3
Endpoint: GET /api/export-appointments
Response 200
{
"message": "Arquivo exportado e enviado ao S3 com sucesso. 42 Agendamentos.",
"url": "https://bucket.s3.amazonaws.com/appointments/last-update.csv"
}
- Evidencia: routes/api.php:46
- Evidencia: app/Http/Controllers/ExportAppointmentsController.php:91
- Evidencia: app/Http/Controllers/ExportAppointmentsController.php:98
Endpoints sem cobertura completa nesta versao
- Grupo /api/v1/* com auth:api (permissions, roles, users, services, employees, clients, appointments): cobertura parcial no openapi por falta de visibilidade completa dos resources/serializacao e de metodos aparentes ausentes como updateDate.
- Evidencia: routes/api.php:55
- Evidencia: routes/api.php:76
- Evidencia: app/Http/Controllers/Api/V1/Admin/AppointmentsApiController.php:12
Pendencias
- Parametro client nas rotas de slots nao e utilizado no metodo correspondente.
- Evidencia: routes/api.php:30
- Evidencia: app/Http/Controllers/AppointmentController.php:577
- Existe potencial divergencia entre validacao de update (class_id existe em clients) e regra de dominio de class_id textual/numerico.
- Evidencia: app/Http/Controllers/AppointmentController.php:331
- Evidencia: app/Http/Controllers/AppointmentController.php:166