Pular para o conteúdo principal

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.