Conceitos principais
As regras que valem para todas as operações: endereço, formato das respostas, datas, auditoria e cabeçalhos.
URL base e versão
A versão faz parte do caminho. Todas as operações de dados ficam sob /v1; mudanças incompatíveis só entram numa nova versão.
URL base
https://myclinc.leadpoint.com.br/v1Convenções
Texto publicado no próprio contrato OpenAPI da API.
- Respostas:
{ "data": ... }; listas:{ "data": [...], "meta": { hasNext, nextCursor, total, limit } }com paginação por cursor (?limit=&cursor=). - Ordenação:
?sort=-campo,outro. Filtros múltiplos: valores separados por vírgula (?status=agendado,confirmado). Busca:?q=. - Erros:
{ "error": { code, message, details?, requestId } }— 400, 401, 402, 403, 404, 409, 422, 429, 500, 502, 503. - Datas locais da clínica em
YYYY-MM-DDe horas emHH:MM; instantes em ISO 8601 UTC. Valores monetários em reais (número). - Toda escrita gera registro no histórico de ações (auditoria) com antes/depois mascarado e origem humano/agente.
- Ações que disparam fluxos devolvem
meta.webhooks[]com o status do envio do evento ao motor de automação (sent|failed|disabled). - Teste grátis do plano encerrado sem ativação: o painel fica em somente leitura — escritas respondem 402
trial_expired(cobrança em/v1/billing*e dados pessoais em/v1/me*continuam liberados; leituras seguem normais). - Rate limit: padrão 120 req/min por token (cabeçalhos
X-RateLimit-*; 429 comRetry-After). Exportações e convites têm limites menores.
Formato da resposta
Exemplo de lista: GET /v1/patients. O conteúdo fica em data e a paginação em meta (como paginar).
{ "data": [ { "id": "<id>", "name": "<name>", "age": 1, "sex": "Feminino", "birthDate": "2026-09-18", "cpf": "<cpf>", "phone": "<phone>", "email": "<email>", "city": "<city>", "address": "<address>", "status": "ativo", "isNew": true, "tags": [ "<tag>" ], "service": { "key": "<key>", "name": "<name>" }, "plan": "Particular", "origin": "Lead (Instagram)", "professional": { "key": "<key>", "name": "<name>" }, "lastVisitAt": "2026-09-18T14:00:00.000Z", "lastVisitDaysAgo": 1, "nextAppointment": { "id": "<id>", "date": "2026-09-18", "time": "<time>", "professional": "<professional>", "type": "<type>" }, "leadId": "<leadId>", "lgpdConsentAt": "2026-09-18T14:00:00.000Z", "createdAt": "2026-09-18T14:00:00.000Z", "updatedAt": "2026-09-18T14:00:00.000Z" } ], "meta": { "hasNext": true, "nextCursor": "<nextCursor>", "total": 1, "limit": 1 }}Cabeçalhos de resposta
X-Request-Id- Id da requisição, em toda resposta. Informe ao suporte; é o mesmo valor de error.requestId.
Cache-Control: no-store- Em toda resposta de /v1: dados de clínica não ficam em cache intermediário.
X-RateLimit-Limit / -Remaining / -Reset- Cota da janela atual. Veja Limites e rate limit.
Retry-After- Segundos para tentar de novo, em 429 e 503.
Location- Endereço do recurso criado, em respostas 201.
Server-Timing / X-Response-Time- Tempo de processamento no servidor, útil para medir latência.
Status de sucesso
- 200
- Leitura ou alteração concluída; corpo em { data }.
- 201
- Recurso criado; corpo em { data } e cabeçalho Location.
- 202
- Pedido aceito para processamento assíncrono (mudança de plano, cancelamento, conexão de integração).
- 204
- Exclusão concluída; sem corpo.
Os erros seguem um formato único; veja Tratamento de erros.