AEX Engineering
ExamplesSample projectDocs

API — Agendou

Endpoints do painel exigem um token do Supabase Auth no header. Endpoints públicos (agendamento pelo link) não exigem autenticação.

2 min de leitura

Exemplo da AEX Engineering (projeto fictício).

Visão geral

  • Base URL: https://agendou.aexhubcapital.com/api
  • Formato: JSON
  • Versionamento: prefixo /api (MVP em v1 implícito)

Autenticação

Endpoints do painel exigem um token do Supabase Auth no header. Endpoints públicos (agendamento pelo link) não exigem autenticação.

Authorization: Bearer <supabase-access-token>

Convenções

  • Métodos HTTP conforme a semântica.
  • Datas em ISO 8601 (UTC).
  • Erros no formato padrão da AEX (ver seção Erros).

Endpoints

GET /servicos

Lista os serviços de um prestador (público, usado pela página de agendamento).

NomeLocalTipoObrigatórioDescrição
prestador_idqueryuuidSimPrestador dono dos serviços

Response — 200

[
  { "id": "d1f...", "nome": "Corte masculino", "duracao_min": 30, "preco": 40.0 }
]

POST /servicos

Cria um serviço (requer autenticação).

Request

{ "nome": "Barba", "duracao_min": 20, "preco": 25.0 }

Response — 201

{ "id": "a92...", "nome": "Barba", "duracao_min": 20, "preco": 25.0 }

GET /disponibilidade

Retorna horários livres de um serviço em uma data (público).

NomeLocalTipoObrigatórioDescrição
servico_idqueryuuidSimServiço desejado
dataquerydateSimData (AAAA-MM-DD)

Response — 200

{ "data": "2026-07-10", "horarios": ["09:00", "09:30", "10:00"] }

POST /agendamentos

Cria um agendamento (público, pelo link).

Request

{
  "servico_id": "d1f...",
  "inicio": "2026-07-10T09:00:00Z",
  "cliente_nome": "João",
  "cliente_email": "joao@email.com"
}

Response — 201

{ "id": "f77...", "status": "confirmado", "inicio": "2026-07-10T09:00:00Z" }

Response — 409 (horário ocupado)

{ "error": { "code": "HORARIO_INDISPONIVEL", "message": "Horário já reservado." } }

PATCH /agendamentos/:id

Atualiza o status de um agendamento (requer autenticação).

Request

{ "status": "cancelado" }

Erros

Formato padrão:

{ "error": { "code": "CODIGO", "message": "Descrição legível." } }
Código HTTPSignificadoQuando ocorre
400Bad RequestDados inválidos.
401UnauthorizedToken ausente/inválido.
403ForbiddenSem permissão para o recurso.
404Not FoundRecurso não encontrado.
409ConflictHorário indisponível.
500Internal Server ErrorErro inesperado.

Arquitetura: ARCHITECTURE.md · Modelo de dados: DATABASE.md

On this page