API Examples (Request/Response)
Introdução ao documento
Este documento apresenta exemplos práticos de requests/responses da API para facilitar consumo e troubleshooting.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-09
- Responsável: Marivaldo Vinicius
Referencial teórico
Base URL: /api/v1
Autenticação
- Tipo: Bearer Token (Laravel Sanctum)
- Aplicação: Endpoints de cache (
/cache/*) requerem autenticação - Header:
Authorization: Bearer {token} - Endpoints públicos: Maioria dos endpoints de leitura não requerem autenticação
Exemplo 1 - Health Check
GET /health-check
Request:
curl --request GET \
--url '/api/v1/health-check'
Response 200:
{
"status": "OK",
"timestamp": "2026-03-09T10:30:00.000000Z"
}
Exemplo 2 - Análise de Sentimento
POST /sentiment
Request:
curl --request POST \
--url '/api/v1/sentiment' \
--header 'Content-Type: application/json' \
--data '{
"text": "Os alunos gostaram muito do curso, mas acharam o material desatualizado e a plataforma lenta",
"key": "nps-up-marketing-sugestao-123",
"refresh": false
}'
Response 200:
{
"sentiment": "RESUMO: Os alunos demonstraram satisfação com o conteúdo do curso, porém identificaram problemas técnicos e de atualização do material.\n\nPONTOS POSITIVOS:\n- Alunos gostaram do curso\n- Conteúdo foi bem recebido\n\nPONTOS NEGATIVOS:\n- Material desatualizado\n- Plataforma com problemas de performance"
}
Nota: O resultado é cacheado pela chave key. Se refresh: true, força nova análise mesmo com cache existente.
Exemplo 3 - Listar Inscrições
GET /inscricoes
Request:
curl --request GET \
--url '/api/v1/inscricoes' \
--header 'Accept: text/plain'
Response 200:
- Content-Type:
text/plain - Content-Encoding:
gzip - Body: Dados comprimidos em gzip (necessário descomprimir)
Nota: Dados são retornados comprimidos em gzip para otimizar transferência. É necessário descomprimir o conteúdo antes de processar.
Response 204:
- Nenhum conteúdo (cache vazio)
Exemplo 4 - Estatísticas de Inscrições por Ciclo
GET /ao-vivo/stats/{cycle_id}
Request:
curl --request GET \
--url '/api/v1/ao-vivo/stats/123?page=1&per_page=100'
Response 200:
{
"data": [
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"cycle_id": 123,
"enrollment_date": "2026-01-15"
}
],
"meta": {
"page": 1,
"per_page": 100,
"total": 1500
}
}
Response 500:
{
"error": "Unable to retrieve enrollment stats"
}
Exemplo 5 - Listar Cursos Disponíveis
GET /ao-vivo/courses
Request:
curl --request GET \
--url '/api/v1/ao-vivo/courses'
Response 200:
[
{
"id": 1,
"name": "UP Marketing",
"slug": "up-marketing"
},
{
"id": 2,
"name": "UP Finanças",
"slug": "up-financas"
}
]
Exemplo 6 - Configurar Colunas Visíveis
POST /colunas
Request:
curl --request POST \
--url '/api/v1/colunas' \
--header 'Content-Type: application/json' \
--data '{
"columns": ["name", "phone", "city", "uf", "progress"]
}'
Response 200:
{
"success": true,
"message": "Configuração salva com sucesso",
"columns": ["name", "phone", "city", "uf", "progress"]
}
Response 422 (validação):
{
"success": false,
"message": "Dados inválidos",
"errors": {
"columns": ["The columns field is required."]
}
}
Exemplo 7 - Listar Colunas Visíveis
GET /colunas
Request:
curl --request GET \
--url '/api/v1/colunas'
Response 200:
{
"success": true,
"columns": ["name", "phone", "city", "uf", "progress"]
}
Response 200 (sem configuração):
{
"success": true,
"columns": null
}
Exemplo 8 - Atualizar Cache (Autenticado)
GET /cache/inscricoes
Request:
curl --request GET \
--url '/api/v1/cache/inscricoes?year=2026' \
--header 'Authorization: Bearer {seu-token-aqui}'
Response 200:
{
"message": "Atualização de Cache de Inscrições foi iniciada!"
}
Response 401 (não autenticado):
{
"message": "Unauthenticated."
}
Exemplo 9 - Logs Administrativos
GET /admin-logs
Request:
curl --request GET \
--url '/api/v1/admin-logs?page=1&per_page=20&user_id=123&action=created&start_date=2026-01-01&end_date=2026-03-09'
Response 200:
{
"data": [
{
"id": 1,
"user_id": 123,
"action": "created",
"context": "post",
"created_at": "2026-03-09T10:00:00Z"
}
],
"meta": {
"page": 1,
"per_page": 20,
"total": 150
}
}
Exemplo 10 - NPS por Produto
GET /nps-up-marketing
Request:
curl --request GET \
--url '/api/v1/nps-up-marketing' \
--header 'Accept: text/plain'
Response 200:
- Content-Type:
text/plain - Content-Encoding:
gzip - Body: Dados de NPS comprimidos em gzip
Nota: Mesmo padrão se aplica a /nps-up-financas, /nps-decola-mei, /nps-mulheres-em-foco.
Exemplo 11 - Integração AoVivo (Ciclos)
GET /dhedalos/v1/live/cycles
Request:
curl --request GET \
--url '/api/v1/dhedalos/v1/live/cycles'
Response 200:
[
{
"id": 1,
"name": "Ciclo 2026.1",
"start_date": "2026-01-15",
"end_date": "2026-04-15"
}
]
Nota: Cache de 30 segundos. Dados vêm diretamente da API AoVivo.