Desenvolvedores

Referência da API v1

Todas as rotas da API v1 do CliLink com permissões, parâmetros, corpo e exemplos em curl e JavaScript. Gerada da OpenAPI 3.1.

Como ler

Base: https://app.clilink.bio/api/v1. Toda rota pede o token (autenticação) e responde { ok: true, data } ou { ok: false, erro }. A mesma referência, para máquinas, em openapi.json.

Conta

GET/api/v1/eu

Conta do token

Perfil básico da conta e a página. Vale para qualquer token, inclusive os criados antes dos escopos.

Permissão: qualquer token.

Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring ou null
planofree, pro
paginaobject ou null
curl
curl "https://app.clilink.bio/api/v1/eu" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/eu", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

GET/api/v1/eu/modulos

Módulos ligados na conta

Permissão: qualquer token.

Campos da resposta (data)
CampoTipoDescrição
moduloslista de string
disponiveislista de string
curl
curl "https://app.clilink.bio/api/v1/eu/modulos" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/eu/modulos", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

Agenda

GET/api/v1/agenda/consultas

Listar consultas

Consultas de um período (padrão: hoje e os próximos 6 dias), em ordem de início. Paginado por cursor.

Permissão: agenda:read (ver a agenda). Paginada por cursor.

ParâmetroOndeTipoDescrição
de (opcional)querystringPrimeiro dia (AAAA-MM-DD, no fuso da agenda). Padrão: hoje.
ate (opcional)querystringÚltimo dia, incluído. Padrão: 7 dias depois de `de`. Até 93 dias.
status (opcional)querypendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
paciente_id (opcional)queryuuid
cursor (opcional)querystring
limite (opcional)queryinteger
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/agenda/consultas?de=2026-10-27&ate=2026-10-31" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas?de=2026-10-27&ate=2026-10-31", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

GET/api/v1/agenda/consultas/{id}

Ver uma consulta

Permissão: agenda:read (ver a agenda).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

POST/api/v1/agenda/consultas

Marcar consulta

Marca como a equipe marca no painel (já confirmada). Por padrão só aceita um horário livre da agenda (veja horários livres); `fora_da_agenda: true` marca mesmo assim. Horário ocupado é sempre recusado. Cadastrar o paciente junto (`novo_paciente`) pede também o escopo pacientes:write.

Permissão: agenda:write (mudar a agenda). Responde 201. Aceita Idempotency-Key.

Campo do corpoTipoDescrição
paciente_id (opcional)uuidPaciente já cadastrado. Ou mande `novo_paciente`.
novo_paciente (opcional)NovoPacienteCadastra o paciente junto (pede também o escopo pacientes:write).
tipo_iduuid
local_id (opcional)uuid ou null
online (opcional)booleanPadrão: true só quando o tipo é só online.
diastringDia no fuso da agenda.
horastringHora no fuso da agenda (HH:MM).
avisar_paciente (opcional)booleanManda a confirmação ao paciente (e-mail e WhatsApp do consultório, se ligado).
fora_da_agenda (opcional)booleantrue marca mesmo fora dos horários livres (como a equipe faz no painel). Horário já ocupado continua recusado.
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/agenda/consultas" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"paciente_id":"5e8a2b44-7c1d-4f3e-8b9a-2c3d4e5f6a7b","tipo_id":"3c5d1f20-8a7b-4c1e-9f00-1a2b3c4d5e6f","dia":"2026-10-28","hora":"10:00"}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"paciente_id":"5e8a2b44-7c1d-4f3e-8b9a-2c3d4e5f6a7b","tipo_id":"3c5d1f20-8a7b-4c1e-9f00-1a2b3c4d5e6f","dia":"2026-10-28","hora":"10:00"}),
});
const { ok, data, erro } = await r.json();

POST/api/v1/agenda/consultas/{id}/confirmar

Confirmar consulta

Aprova um pedido que aguardava a aprovação do consultório.

Permissão: agenda:write (mudar a agenda). Aceita Idempotency-Key.

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
avisar_paciente (opcional)boolean
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/confirmar" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"avisar_paciente":true}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/confirmar", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"avisar_paciente":true}),
});
const { ok, data, erro } = await r.json();

POST/api/v1/agenda/consultas/{id}/remarcar

Remarcar consulta

Muda o horário pelas regras da agenda (regras, folgas, feriados, outras consultas e Google). Horário com aviso responde 409 `confirmar_avisos` com a lista; mande de novo com `confirmar_avisos: true`.

Permissão: agenda:write (mudar a agenda). Aceita Idempotency-Key.

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
avisar_paciente (opcional)boolean
diastring
horastring
confirmar_avisos (opcional)booleanO novo horário tem avisos (fora do horário, folga): mande true depois de conferir.
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/remarcar" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"dia":"2026-10-29","hora":"14:30"}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/remarcar", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"dia":"2026-10-29","hora":"14:30"}),
});
const { ok, data, erro } = await r.json();

POST/api/v1/agenda/consultas/{id}/cancelar

Cancelar consulta

Cancela pelo consultório: o sinal pago volta inteiro e o horário vai para a lista de espera, como no painel.

Permissão: agenda:write (mudar a agenda). Aceita Idempotency-Key.

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
avisar_paciente (opcional)boolean
motivo (opcional)stringFica só no painel (não vai para webhooks nem para a API).
Campos da resposta (data)
CampoTipoDescrição
iduuid
iniciostringInício em ISO 8601 (UTC).
fimstring
diastringDia no fuso da agenda (AAAA-MM-DD).
horastringHora no fuso da agenda (HH:MM).
fusostring
statuspendente, confirmado, cancelado, remarcado, chegou, faltou, atendido
onlineboolean
origemstring ou null
tipoobject ou null
localobject ou null
pacienteobject ou null
valor_centavosinteger ou null
presenca_confirmada_emstring ou null
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/cancelar" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"avisar_paciente":true}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/consultas/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/cancelar", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"avisar_paciente":true}),
});
const { ok, data, erro } = await r.json();

GET/api/v1/agenda/horarios-livres

Horários livres

Os mesmos horários que o paciente vê na página (regras, antecedência, folgas, feriados, consultas e Google).

Permissão: agenda:read (ver a agenda).

ParâmetroOndeTipoDescrição
tipo_idqueryuuidTipo de consulta (GET /agenda/tipos).
local_id (opcional)queryuuidLocal (GET /agenda/locais). Sem ele: o único local do tipo, ou sem local.
de (opcional)querystringPadrão: hoje.
ate (opcional)querystringPadrão: 14 dias depois de `de`. Até 31 dias.
Campos da resposta (data)
CampoTipoDescrição
fusostring
tipo_iduuid
local_iduuid ou null
diaslista de object
curl
curl "https://app.clilink.bio/api/v1/agenda/horarios-livres?tipo_id=3c5d1f20-8a7b-4c1e-9f00-1a2b3c4d5e6f&de=2026-10-27" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/horarios-livres?tipo_id=3c5d1f20-8a7b-4c1e-9f00-1a2b3c4d5e6f&de=2026-10-27", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

GET/api/v1/agenda/tipos

Tipos de consulta

Permissão: agenda:read (ver a agenda).

Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
duracao_mininteger
modalidadepresencial, online, ambos
valor_centavosinteger ou null
local_iduuid ou null
ativoboolean
curl
curl "https://app.clilink.bio/api/v1/agenda/tipos" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/tipos", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

GET/api/v1/agenda/locais

Locais de atendimento

Permissão: agenda:read (ver a agenda).

Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
onlineboolean
principalboolean
cidadestring ou null
ufstring ou null
curl
curl "https://app.clilink.bio/api/v1/agenda/locais" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/agenda/locais", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

Pacientes

GET/api/v1/pacientes

Listar ou buscar pacientes

Só o cadastro (nunca prontuário, anotações, CPF ou observação). Mais novos primeiro. Paginado por cursor.

Permissão: pacientes:read (ver pacientes). Paginada por cursor.

ParâmetroOndeTipoDescrição
busca (opcional)querystringParte do nome ou do WhatsApp (4 números ou mais).
cursor (opcional)querystring
limite (opcional)queryinteger
Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
whatsappstringE.164, ex.: +5511987654321.
emailstring ou null
nascimentostring ou nullAAAA-MM-DD.
origemstring ou null
aceita_comunicacaobooleanAceitou receber mensagens de relacionamento (LGPD).
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/pacientes?busca=Maria" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pacientes?busca=Maria", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

GET/api/v1/pacientes/{id}

Ver um paciente

Permissão: pacientes:read (ver pacientes).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
whatsappstringE.164, ex.: +5511987654321.
emailstring ou null
nascimentostring ou nullAAAA-MM-DD.
origemstring ou null
aceita_comunicacaobooleanAceitou receber mensagens de relacionamento (LGPD).
criado_emstring
proxima_consultastring ou nullInício (ISO) da próxima consulta ativa.
ultima_consultastring ou null
total_consultasinteger
curl
curl "https://app.clilink.bio/api/v1/pacientes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pacientes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

POST/api/v1/pacientes

Cadastrar paciente

Mesmas regras do painel: WhatsApp com DDD (vira E.164), e-mail opcional, um paciente por WhatsApp. Entra sem aceite de comunicação.

Permissão: pacientes:write (cadastrar pacientes). Responde 201. Aceita Idempotency-Key.

Campo do corpoTipoDescrição
nomestring
whatsappstringCom DDD. Ex.: (11) 98765-4321 ou +5511987654321.
email (opcional)string ou null
nascimento (opcional)string ou null
Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
whatsappstringE.164, ex.: +5511987654321.
emailstring ou null
nascimentostring ou nullAAAA-MM-DD.
origemstring ou null
aceita_comunicacaobooleanAceitou receber mensagens de relacionamento (LGPD).
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/pacientes" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"nome":"Maria Exemplo","whatsapp":"(11) 98765-4321","email":"maria@exemplo.com"}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pacientes", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"nome":"Maria Exemplo","whatsapp":"(11) 98765-4321","email":"maria@exemplo.com"}),
});
const { ok, data, erro } = await r.json();

PATCH/api/v1/pacientes/{id}

Atualizar paciente

Permissão: pacientes:write (cadastrar pacientes).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
nome (opcional)string
whatsapp (opcional)stringCom DDD. Ex.: (11) 98765-4321 ou +5511987654321.
email (opcional)string ou null
nascimento (opcional)string ou null
Campos da resposta (data)
CampoTipoDescrição
iduuid
nomestring
whatsappstringE.164, ex.: +5511987654321.
emailstring ou null
nascimentostring ou nullAAAA-MM-DD.
origemstring ou null
aceita_comunicacaobooleanAceitou receber mensagens de relacionamento (LGPD).
criado_emstring
curl
curl -X PATCH "https://app.clilink.bio/api/v1/pacientes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Content-Type: application/json"
  -d '{"email":"maria.nova@exemplo.com"}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pacientes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "PATCH",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify({"email":"maria.nova@exemplo.com"}),
});
const { ok, data, erro } = await r.json();

Contatos

GET/api/v1/contatos

Pedidos de contato

Quem pediu contato pela página (WhatsApp ou formulário). A mensagem livre não sai pela API.

Permissão: contatos:read (ver pedidos de contato). Paginada por cursor.

ParâmetroOndeTipoDescrição
desde (opcional)querystringSó os pedidos a partir deste instante (ISO 8601).
cursor (opcional)querystring
limite (opcional)queryinteger
Campos da resposta (data)
CampoTipoDescrição
iduuid
origemwhatsapp, formulario
nomestring ou null
whatsappstring ou null
emailstring ou null
respondido_emstring ou null
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/contatos" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/contatos", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

Pagamentos

GET/api/v1/pagamentos/sinais

Sinais das consultas

Permissão: pagamentos:read (ver pagamentos). Paginada por cursor.

ParâmetroOndeTipoDescrição
status (opcional)querypendente, pago, expirado, devolvido, cancelado
consulta_id (opcional)queryuuid
cursor (opcional)querystring
limite (opcional)queryinteger
Campos da resposta (data)
CampoTipoDescrição
iduuid
consulta_iduuid
metodopix_manual, asaas, mercadopago
formapix, cartao
valor_centavosinteger
statuspendente, pago, expirado, devolvido, cancelado
link_pagamentostring ou nullPágina de pagamento do provedor (Asaas, Mercado Pago), quando houver.
pix_copia_e_colastring ou null
expira_emstring
pago_emstring ou null
devolvido_centavosinteger ou null
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/pagamentos/sinais?status=pendente" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagamentos/sinais?status=pendente", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

POST/api/v1/pagamentos/sinais

Cobrar o sinal de uma consulta

A mesma ação "Cobrar de novo" do painel: consulta futura, sem sinal aberto ou pago, com uma forma de pagamento ligada. O paciente recebe o link.

Permissão: pagamentos:write (cobrar sinal). Responde 201. Aceita Idempotency-Key.

Campo do corpoTipoDescrição
consulta_iduuid
valor_centavos (opcional)integerSem ele, o valor pela regra do sinal do tipo de consulta.
Campos da resposta (data)
CampoTipoDescrição
iduuid
consulta_iduuid
metodopix_manual, asaas, mercadopago
formapix, cartao
valor_centavosinteger
statuspendente, pago, expirado, devolvido, cancelado
link_pagamentostring ou nullPágina de pagamento do provedor (Asaas, Mercado Pago), quando houver.
pix_copia_e_colastring ou null
expira_emstring
pago_emstring ou null
devolvido_centavosinteger ou null
criado_emstring
curl
curl -X POST "https://app.clilink.bio/api/v1/pagamentos/sinais" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"consulta_id":"9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10","valor_centavos":5000}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagamentos/sinais", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"consulta_id":"9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10","valor_centavos":5000}),
});
const { ok, data, erro } = await r.json();

GET/api/v1/pagamentos/recebimentos

Recebimentos do mês

Permissão: pagamentos:read (ver pagamentos).

ParâmetroOndeTipoDescrição
mes (opcional)querystringPadrão: o mês atual.
Campos da resposta (data)
CampoTipoDescrição
messtring
fusostring
disponivelbooleanfalse: o recebimento por consulta ainda não está ligado (só os sinais entram).
recebido_centavosinteger
recebido_consultas_centavosinteger
recebido_sinais_centavosinteger
a_receber_centavosinteger
consultas_a_receberinteger
por_formaobject
curl
curl "https://app.clilink.bio/api/v1/pagamentos/recebimentos?mes=2026-10" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagamentos/recebimentos?mes=2026-10", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

Página

GET/api/v1/pagina

Página e textos das seções

Cada seção traz os campos de texto com o endereço (`campo`) usado para editar.

Permissão: pagina:read (ver a página).

Campos da resposta (data)
CampoTipoDescrição
iduuid
slugstring
urlstring
nomestring ou null
especialidadestring ou null
publicadaboolean
secoeslista de Secao
curl
curl "https://app.clilink.bio/api/v1/pagina" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagina", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

PATCH/api/v1/pagina/secoes/{id}

Editar textos de uma seção

Só texto que a seção já tem (título, frase de apresentação, nome e descrição de serviço, pergunta e resposta...). Links, imagens, ordem e ligar ou desligar seção continuam no editor. Volta com os avisos do CFM/CFO, se houver.

Permissão: pagina:write (editar a página).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
textosobject{ "campo": "texto novo" }. Os campos vêm em GET /pagina (secoes[].textos[].campo).
Campos da resposta (data)
CampoTipoDescrição
secaoSecao
mudoulista de string
avisoslista de AvisoConselho
curl
curl -X PATCH "https://app.clilink.bio/api/v1/pagina/secoes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Content-Type: application/json"
  -d '{"textos":{"tagline":"Dermatologista em Porto Alegre. Atendimento particular."}}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagina/secoes/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "PATCH",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify({"textos":{"tagline":"Dermatologista em Porto Alegre. Atendimento particular."}}),
});
const { ok, data, erro } = await r.json();

POST/api/v1/pagina/publicar

Publicar ou tirar do ar

Permissão: pagina:write (editar a página). Aceita Idempotency-Key.

Campo do corpoTipoDescrição
publicadabooleantrue publica; false tira do ar.
Campos da resposta (data)
CampoTipoDescrição
publicadaboolean
urlstring
avisoslista de AvisoConselho
curl
curl -X POST "https://app.clilink.bio/api/v1/pagina/publicar" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"publicada":true}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagina/publicar", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"publicada":true}),
});
const { ok, data, erro } = await r.json();

GET/api/v1/pagina/numeros

Números da página

Visitas, cliques, agendamentos, sinais, comparecimento, faltas e contatos dos últimos dias.

Permissão: pagina:read (ver a página).

ParâmetroOndeTipoDescrição
dias (opcional)queryinteger
Campos da resposta (data)
CampoTipoDescrição
diasinteger
visitasinteger
cliques_agendarinteger
cliques_whatsappinteger
agendaraminteger
pagaram_sinalinteger
compareceraminteger
consultasinteger
faltasinteger
taxa_faltanumber ou nullFaltas sobre (compareceram + faltas), em %.
contatosinteger
curl
curl "https://app.clilink.bio/api/v1/pagina/numeros?dias=30" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/pagina/numeros?dias=30", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

Webhooks

GET/api/v1/webhooks

Listar webhooks

Permissão: webhooks:manage (gerenciar webhooks).

Campos da resposta (data)
CampoTipoDescrição
iduuid
urlstring
descricaostring ou null
eventoslista de consulta.criada, consulta.confirmada, consulta.cancelada, consulta.remarcada, sinal.pago, contato.novo, paciente.criado
ativoboolean
falhas_seguidasinteger
segredo_prefixostring
criado_emstring
curl
curl "https://app.clilink.bio/api/v1/webhooks" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/webhooks", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

POST/api/v1/webhooks

Criar webhook

Até 5 por conta. O `segredo` aparece só nesta resposta.

Permissão: webhooks:manage (gerenciar webhooks). Responde 201. Aceita Idempotency-Key.

Campo do corpoTipoDescrição
urlstringhttps público, porta 443.
descricao (opcional)string
eventoslista de consulta.criada, consulta.confirmada, consulta.cancelada, consulta.remarcada, sinal.pago, contato.novo, paciente.criado
Campos da resposta (data)
CampoTipoDescrição
iduuid
urlstring
descricaostring ou null
eventoslista de consulta.criada, consulta.confirmada, consulta.cancelada, consulta.remarcada, sinal.pago, contato.novo, paciente.criado
ativoboolean
falhas_seguidasinteger
segredo_prefixostring
criado_emstring
segredostringAparece só agora. Guarde para conferir a assinatura.
curl
curl -X POST "https://app.clilink.bio/api/v1/webhooks" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json"
  -d '{"url":"https://hooks.zapier.com/hooks/catch/123/abc/","eventos":["consulta.criada","consulta.cancelada"]}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/webhooks", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({"url":"https://hooks.zapier.com/hooks/catch/123/abc/","eventos":["consulta.criada","consulta.cancelada"]}),
});
const { ok, data, erro } = await r.json();

PATCH/api/v1/webhooks/{id}

Mudar webhook

Permissão: webhooks:manage (gerenciar webhooks).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campo do corpoTipoDescrição
url (opcional)string
descricao (opcional)string
eventos (opcional)lista de consulta.criada, consulta.confirmada, consulta.cancelada, consulta.remarcada, sinal.pago, contato.novo, paciente.criado
ativo (opcional)boolean
Campos da resposta (data)
CampoTipoDescrição
iduuid
urlstring
descricaostring ou null
eventoslista de consulta.criada, consulta.confirmada, consulta.cancelada, consulta.remarcada, sinal.pago, contato.novo, paciente.criado
ativoboolean
falhas_seguidasinteger
segredo_prefixostring
criado_emstring
curl
curl -X PATCH "https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Content-Type: application/json"
  -d '{"ativo":false}'
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "PATCH",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify({"ativo":false}),
});
const { ok, data, erro } = await r.json();

DELETE/api/v1/webhooks/{id}

Apagar webhook

Permissão: webhooks:manage (gerenciar webhooks).

ParâmetroOndeTipoDescrição
idcaminhouuid
Campos da resposta (data)
CampoTipoDescrição
iduuid
apagadotrue
curl
curl -X DELETE "https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10" \
  -H "Authorization: Bearer $CLILINK_TOKEN"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10", {
  method: "DELETE",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}` },
});
const { ok, data, erro } = await r.json();

POST/api/v1/webhooks/{id}/testar

Enviar teste

Manda o evento webhook.teste na hora e devolve o resultado.

Permissão: webhooks:manage (gerenciar webhooks). Aceita Idempotency-Key.

ParâmetroOndeTipoDescrição
idcaminhouuid
Campos da resposta (data)
CampoTipoDescrição
entregueboolean
httpinteger ou null
errostring ou null
msinteger
curl
curl -X POST "https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/testar" \
  -H "Authorization: Bearer $CLILINK_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
JavaScript
const r = await fetch("https://app.clilink.bio/api/v1/webhooks/9b2f6c1e-1d2a-4c55-9a51-0d7e3b1c2a10/testar", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CLILINK_TOKEN}`, "Idempotency-Key": crypto.randomUUID() },
});
const { ok, data, erro } = await r.json();

Atualizada em 21/10/2026. Dúvida ou algo faltando? contato@clilink.bio.