Zelo Saúde - Documentação da API

API da Clínica
URL da API
https://sua-clinica.zelosaude.com.br/api/clinic/
Exemplo de URL base para acessar os endpoints da API da clínica.
Bearer Token

Você poderá gerar um Token de API no painel administrativo.

Atenção: Ao gerar um novo token, o anterior irá parar de funcionar imediatamente.
Endpoints Disponíveis
POST Criar Paciente
https://sua-clinica.zelosaude.com.br/api/clinic/create-patient/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Content-Type: application/json
Body (JSON):
Campos Obrigatórios: name, cpf Campos Opcionais: email, birth_date, phone, address, insurance_card_number, insurance_plan_code, plan_adherence_date, plan_expiry_date, extra_fields
{
  /* Campos Obrigatórios */
  "name": "João da Silva",     /* OBRIGATÓRIO */
  "cpf": "123.456.789-00",     /* OBRIGATÓRIO */

  /* Campos Opcionais */
  "email": "joao@email.com",   /* opcional */
  "birth_date": "1990-01-01",  /* opcional */
  "phone": "11999999999",      /* opcional */
  "insurance_card_number": "123456789",  /* opcional */
  "insurance_plan_code": "PLANO001",     /* opcional */
  "plan_adherence_date": "2023-01-01",   /* opcional - Data de adesão do plano */
  "plan_expiry_date": "2024-12-31",     /* opcional - Data de expiração do plano */
  "extra_fields": {            /* opcional - Campos customizados */
    "custom_field_1": "valor1",
    "custom_field_2": "valor2",
    "any_field": "any_value"
  },
  "address": {                 /* opcional */
    "street": "Rua Exemplo",
    "number": "123",
    "neighborhood": "Centro",
    "city": "São Paulo",
    "state": "SP",
    "zip_code": "01234-567"
  }
}
POST Login de Paciente (Magic Link)
https://sua-clinica.zelosaude.com.br/api/clinic/login-patient/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Content-Type: application/json
Descrição:

Este endpoint permite gerar um link para o paciente acessar o painel diretamente sem autenticar.

A URL gerada poderá ser embedada em um iframe, exibindo o painel completo do paciente.

Caso deseje exibir somente o botão de Pronto Atendimento escondendo todo o restante do painel, será necessário passar a flag "?mode=attendance_only" apos a última / da url gerada no src do iframe.
Exemplo: https://sua-clinica.zelosaude.com.br/paciente/patient-login/3945.1766785341.3896a0ac0946d2821cf3c88d2087a90b/?mode=attendance_only

Por questões de segurança os browsers modernos não permitem coockies third-party dentro de iframes em janelas anônimas. Portanto, os testes deverão ser efetuados no browser aberto normalmente.

💡 Importante: É necessário a inclusão do allow="camera; microphone" no iframe para que o browser permita o uso da camera e microfone para a consulta. Caso não tenha, o browser barra o uso e o atendimento não será possível.
Body (JSON):
Campos Obrigatórios: cpf
{
  "cpf": "123.456.789-00"  /* OBRIGATÓRIO */
}
Resposta:

                        {
  "magic_link": "https://sua-clinica.exemplo.com/patient-login/token_gerado/",
  "expires_at": "2025-08-29T12:00:00Z",
  "message": "Magic link gerado com sucesso"
}
POST Ativar Paciente
https://sua-clinica.zelosaude.com.br/api/clinic/activate-patient/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Content-Type: application/json
Descrição:

Este endpoint permite ativar um paciente que esteja com o status desativado na plataforma.

Body (JSON):
Campos Obrigatórios: cpf
{
  "cpf": "123.456.789-00"  /* OBRIGATÓRIO */
}
Resposta:
{
    "success": true,
    "message": "Paciente reativado com sucesso"
}
POST Desativar Paciente
https://sua-clinica.zelosaude.com.br/api/clinic/deactivate-patient/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Content-Type: application/json
Descrição:

Este endpoint permite desativar um paciente que esteja com o status ativo na plataforma.

Body (JSON):
Campos Obrigatórios: cpf
{
  "cpf": "123.456.789-00"  /* OBRIGATÓRIO */
}
Resposta:
{
    "success": true,
    "message": "Paciente desativado com sucesso"
}
GET Filtrar Pacientes
https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Descrição:

Este endpoint permite filtrar pacientes por diversos critérios, incluindo dados pessoais, status, datas, endereço e campos customizados. Você pode combinar múltiplos parâmetros para refinar a busca. As datas também podem ser filtradas por intervalos. Os campos customizados (extra_fields) permitem filtrar por qualquer campo JSON armazenado no paciente.

Parâmetros de Consulta:
Parâmetro Descrição
name Filtra pacientes pelo nome (busca parcial)
email Filtra pacientes pelo email (busca parcial)
cpf Filtra pacientes pelo CPF (aceita formatação com pontos e hífens)
phone Filtra pacientes pelo telefone (busca parcial)
status Filtra pacientes pelo status (ACTIVE/INACTIVE)
is_online Filtra pacientes pelo status online (true/false)
birth_date_min Filtra pacientes com data de nascimento >= valor (YYYY-MM-DD)
birth_date_max Filtra pacientes com data de nascimento <= valor (YYYY-MM-DD)
plan_adherence_date_min Filtra pacientes com data de adesão do plano >= valor (YYYY-MM-DD)
plan_adherence_date_max Filtra pacientes com data de adesão do plano <= valor (YYYY-MM-DD)
plan_expiry_date_min Filtra pacientes com data de expiração do plano >= valor (YYYY-MM-DD)
plan_expiry_date_max Filtra pacientes com data de expiração do plano <= valor (YYYY-MM-DD)
invited_at_min Filtra pacientes com data de convite >= valor (YYYY-MM-DD)
invited_at_max Filtra pacientes com data de convite <= valor (YYYY-MM-DD)
holder_id Filtra pacientes pelo ID do titular
is_holder Filtra pacientes que são titulares (true) ou dependentes (false)
address__street Filtra pacientes pela rua do endereço (busca parcial)
address__city Filtra pacientes pela cidade do endereço
address__state Filtra pacientes pelo estado do endereço
address__zip_code Filtra pacientes pelo CEP do endereço
insurance_card_number Filtra pacientes pelo número da carteirinha (busca parcial)
insurance_plan_code Filtra pacientes pelo código do plano do beneficiário (busca parcial)
extra_fields__field_name Filtra pacientes por campos customizados dentro de extra_fields (busca exata)
Filtros por Campos Customizados (extra_fields):
💡 Importante: Os filtros de campos customizados usam busca exata (não parcial). O valor deve corresponder exatamente ao armazenado no campo JSON.

Sintaxe:

extra_fields__nome_do_campo=valor

Exemplos práticos:

  • extra_fields__department=TI - Filtra pacientes do departamento TI
  • extra_fields__employee_id=EMP001 - Filtra paciente com ID específico
  • extra_fields__status=ativo - Filtra pacientes com status "ativo"
  • extra_fields__priority=alta - Filtra pacientes com prioridade alta
  • extra_fields__company=EmpresaXYZ - Filtra pacientes de empresa específica

Combinando múltiplos filtros:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?extra_fields__department=TI&extra_fields__status=ativo&name=João
Paginação:
📄 Importante: A API retorna no máximo 50 pacientes por chamada. Use a paginação para acessar todos os resultados quando houver mais de 50 pacientes.
Parâmetro Descrição Exemplo
page Número da página a ser retornada page=1, page=2
page_size Número de resultados por página (máximo 50) page_size=10, page_size=50
Exemplos de Requisições:

Primeira página (até 50 pacientes):

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/

Segunda página:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?page=2

Limitar a 25 resultados por página:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?page_size=25

Filtrar pacientes pelo nome:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?name=João

Filtrar pacientes pelo CPF (aceita diferentes formatações):

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?cpf=123.456.789-00
GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?cpf=12345678900
GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?cpf=123456789

Filtrar pacientes por intervalo de data de nascimento:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?birth_date_min=1990-01-01&birth_date_max=2000-12-31

Filtrar pacientes titulares ativos:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?is_holder=true&status=ACTIVE

Filtrar pacientes por cidade e estado:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?address__city=São Paulo&address__state=SP

Filtrar pacientes por número da carteirinha:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?insurance_card_number=123456789

Filtrar pacientes por código do plano:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?insurance_plan_code=PLANO001

Filtrar pacientes por data de adesão do plano:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?plan_adherence_date_min=2023-01-01&plan_adherence_date_max=2023-12-31

Filtrar pacientes por data de expiração do plano:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?plan_expiry_date_min=2024-01-01&plan_expiry_date_max=2024-12-31

Filtrar pacientes por campos customizados:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?extra_fields__custom_field_1=valor1

Filtrar pacientes por departamento:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?extra_fields__department=TI

Filtrar pacientes por ID do funcionário:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?extra_fields__employee_id=EMP001

Filtrar pacientes por múltiplos campos customizados:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?extra_fields__department=TI&extra_fields__status=ativo

Combinar filtros com paginação:

GET https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?status=ACTIVE&page=2&page_size=10
Exemplo de Resposta Paginada:
{
  "count": 150,  // Total de pacientes encontrados
  "next": "https://sua-clinica.zelosaude.com.br/api/clinic/filter-patients/?page=2",  // URL da próxima página
  "previous": null,  // URL da página anterior (null na primeira página)
  "results": [  // Pacientes da página atual (máximo 50)
    {
      "name": "João da Silva",
      "email": "joao@email.com",
      "cpf": "12345678900",
      "birth_date": "1992-05-15",
      "phone": "11999999999",
      "status": "ACTIVE",
      "is_online": false,
      "plan_adherence_date": "2023-01-01",
      "plan_expiry_date": "2024-01-01",
      "is_holder": true,
      "holder_cpf": null,
      "invited_at": null,
      "insurance_card_number": "123456789",
      "insurance_plan_code": "PLANO001",
      "extra_fields": {
        "custom_field_1": "valor1",
        "custom_field_2": "valor2"
      },
      "address": {
        "street": "Rua Exemplo",
        "number": "123",
        "complement": "Apto 45",
        "neighborhood": "Centro",
        "city": "São Paulo",
        "state": "SP",
        "zip_code": "01234-567"
      }
    },
    {
      "name": "Maria Oliveira",
      "email": "maria@email.com",
      "cpf": "98765432100",
      "birth_date": "1995-08-23",
      "phone": "11988888888",
      "status": "ACTIVE",
      "is_online": true,
      "plan_adherence_date": "2023-02-01",
      "plan_expiry_date": "2024-02-01",
      "is_holder": true,
      "holder_cpf": null,
      "invited_at": null,
      "insurance_card_number": "987654321",
      "insurance_plan_code": "PLANO002",
      "extra_fields": {
        "department": "TI",
        "employee_id": "EMP001"
      },
      "address": {
        "street": "Av. Principal",
        "number": "1500",
        "complement": null,
        "neighborhood": "Jardins",
        "city": "São Paulo",
        "state": "SP",
        "zip_code": "04532-000"
      }
    }
    // ... até 48 pacientes mais (total máximo de 50 por página)
  ]
}
Navegando pelas Páginas:
💡 Dica: Use os campos next e previous da resposta para navegar automaticamente entre as páginas.

Estrutura da resposta:

  • count: Número total de pacientes encontrados
  • next: URL da próxima página (null se esta for a última)
  • previous: URL da página anterior (null se esta for a primeira)
  • results: Array com os pacientes da página atual (máximo 50)
GET Histórico de Atendimentos
https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Descrição:

Este endpoint permite obter o histórico completo de atendimentos (consultas) de um paciente específico. Você pode filtrar por diversos critérios incluindo status, tipo, médico, especialidade, datas e pagamento.

Parâmetros de Consulta:
Parâmetro Descrição
cpf CPF do paciente (OBRIGATÓRIO)
status Filtra consultas pelo status (SCHEDULED, PENDING, WAITING_HELPDESK, ONGOING_HELPDESK, WAITING_DOCTOR, ONGOING_DOCTOR, FINISHED, CANCELED)
type Filtra consultas pelo tipo (POOL, SCHEDULED)
doctor_cpf Filtra consultas por CPF do médico
speciality_name Filtra consultas por nome da especialidade
start_date_min Filtra consultas com data de início >= valor (YYYY-MM-DD)
start_date_max Filtra consultas com data de início <= valor (YYYY-MM-DD)
end_date_min Filtra consultas com data de fim >= valor (YYYY-MM-DD)
end_date_max Filtra consultas com data de fim <= valor (YYYY-MM-DD)
scheduled_for_min Filtra consultas agendadas para >= valor (YYYY-MM-DD)
scheduled_for_max Filtra consultas agendadas para <= valor (YYYY-MM-DD)
is_paid Filtra consultas pagas (true/false)
Paginação:
📄 Importante: A API retorna no máximo 50 consultas por chamada. Use a paginação para acessar todos os resultados quando houver mais de 50 consultas.
Parâmetro Descrição Exemplo
page Número da página a ser retornada page=1, page=2
page_size Número de resultados por página (máximo 50) page_size=10, page_size=50
Exemplos de Requisições:

Histórico completo de um paciente:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901

Consultas finalizadas de um paciente:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&status=FINISHED

Consultas de um médico específico:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&doctor_cpf=98765432100

Consultas em um período específico:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&start_date_min=2024-01-01&start_date_max=2024-12-31

Consultas pagas:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&is_paid=true

Com paginação:

GET https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&page=2&page_size=10
Exemplo de Resposta:
{
  "count": 25,  // Total de consultas encontradas
  "next": "https://sua-clinica.zelosaude.com.br/api/clinic/consultation-history/?cpf=12345678901&page=2",  // URL da próxima página
  "previous": null,  // URL da página anterior (null na primeira página)
  "results": [  // Consultas da página atual (máximo 50)
    {
      "code": "ABC1234567",
      "type": "SCHEDULED",
      "meeting_status": "FINISHED",
      "requested_at": "2024-01-15T10:30:00Z",
      "scheduled_for": "2024-01-15T14:00:00Z",
      "start_at": "2024-01-15T14:05:00Z",
      "end_at": "2024-01-15T14:45:00Z",
      "duration_total_seconds": 2400,
      "duration_formatted": "00:40:00",
      "price": 150.00,
      "is_paid": true,
      "paid_at": "2024-01-15T13:30:00Z",
      "chief_complaint": "Dor de cabeça persistente",
      "doctor_notes": "Paciente apresentou melhora após medicação",
      "patient": {
        "name": "João da Silva",
        "cpf": "12345678900"
      },
      "doctor": {
        "name": "Dr. Maria Santos",
        "cpf": "98765432100",
        "crm": "123456"
      },
      "speciality": {
        "name": "Neurologia"
      },
      "helpdesk_agent": {
        "name": "Ana Costa",
        "cpf": "11122233344"
      }
    }
    // ... outras consultas
  ]
}
GET Histórico de Anexos
https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/

Headers:
Authorization: Bearer SEU_TOKEN_AQUI
Descrição:

Este endpoint permite obter o histórico completo de anexos (receitas, atestados, exames, etc) de um paciente específico. Você pode filtrar por tipo de arquivo, origem, consulta específica e datas.

🔗 Links de Download: Os links retornados no campo file_url são URLs temporárias que expiram em 30 minutos e não requerem autenticação para download.
Parâmetros de Consulta:
Parâmetro Descrição
cpf CPF do paciente (OBRIGATÓRIO)
consultation_code Filtra anexos por código da consulta
file_type Filtra anexos por tipo (PATIENT_CERTIFICATE, COMPANION_CERTIFICATE, PRESCRIPTION, EXAM, FORWARDING, PATIENT_UPLOAD)
origin Filtra anexos por origem (PATIENT, DOCTOR, HELPDESK)
created_at_min Filtra anexos criados em >= valor (YYYY-MM-DD)
created_at_max Filtra anexos criados em <= valor (YYYY-MM-DD)
Tipos de Arquivo:
Tipo Descrição
PATIENT_CERTIFICATE Atestado do paciente
COMPANION_CERTIFICATE Atestado do acompanhante
PRESCRIPTION Receita médica
EXAM Exame médico
FORWARDING Encaminhamento
PATIENT_UPLOAD Upload do paciente
Paginação:
📄 Importante: A API retorna no máximo 50 anexos por chamada. Use a paginação para acessar todos os resultados quando houver mais de 50 anexos.
Exemplos de Requisições:

Todos os anexos de um paciente:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901

Apenas receitas médicas:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&file_type=PRESCRIPTION

Anexos de uma consulta específica:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&consultation_code=ABC1234567

Anexos criados pelo médico:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&origin=DOCTOR

Anexos de um período específico:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&created_at_min=2024-01-01&created_at_max=2024-12-31

Com paginação:

GET https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&page=2&page_size=10
Exemplo de Resposta:
{
  "count": 15,  // Total de anexos encontrados
  "next": "https://sua-clinica.zelosaude.com.br/api/clinic/attachment-history/?cpf=12345678901&page=2",  // URL da próxima página
  "previous": null,  // URL da página anterior (null na primeira página)
  "results": [  // Anexos da página atual (máximo 50)
    {
      "file_type": "PRESCRIPTION",
      "origin": "DOCTOR",
      "file_name": "receita_medicamento_20240115.pdf",
      "file_url": "https://sua-clinica.exemplo.com/consultations/attachments/temp/eyJhdHRhY2htZW50X2lkIjoxMDEsImV4cGlyZV90aW1lIjoxNzA0MDY0MDAwLCJzaWduYXR1cmUiOiJhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAifQ/download/",
      "file_icon": "vaccine-bottle",
      "created_at": "2024-01-15T14:30:00Z",
      "consultation": {
        "code": "ABC1234567",
        "type": "SCHEDULED",
        "meeting_status": "FINISHED",
        "scheduled_for": "2024-01-15T14:00:00Z",
        "start_at": "2024-01-15T14:05:00Z",
        "end_at": "2024-01-15T14:45:00Z",
        "patient": {
          "name": "João da Silva",
          "cpf": "12345678900"
        },
        "doctor": {
          "name": "Dr. Maria Santos",
          "cpf": "98765432100",
          "crm": "123456"
        },
        "speciality": {
          "name": "Neurologia"
        }
      }
    }
    // ... outros anexos
  ]
}