Pular para o conteúdo

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 basehttps://myclinc.leadpoint.com.br/v1

Convençõ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-DD e horas em HH: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 com Retry-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).

JSON
{  "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.