API — Agendou
Endpoints do painel exigem um token do Supabase Auth no header. Endpoints públicos (agendamento pelo link) não exigem autenticação.
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).
| Nome | Local | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
| prestador_id | query | uuid | Sim | Prestador 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).
| Nome | Local | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
| servico_id | query | uuid | Sim | Serviço desejado |
| data | query | date | Sim | Data (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 HTTP | Significado | Quando ocorre |
|---|---|---|
| 400 | Bad Request | Dados inválidos. |
| 401 | Unauthorized | Token ausente/inválido. |
| 403 | Forbidden | Sem permissão para o recurso. |
| 404 | Not Found | Recurso não encontrado. |
| 409 | Conflict | Horário indisponível. |
| 500 | Internal Server Error | Erro inesperado. |
Arquitetura: ARCHITECTURE.md · Modelo de dados: DATABASE.md
Agendou
Agendamento online simples para pequenos prestadores de serviço. O profissional cria seus serviços, compartilha um link e recebe agendamentos sem precisar de telefone ou planilha.
ARCHITECTURE — Agendou
Aplicação Next.js única (frontend + API routes) conversando com o Supabase (PostgreSQL + Auth). Sem serviços extras: o MVP não precisa de cache nem fila.