Master Data

Sincronize colaboradores, gestores, departamentos, cargos e regiões com a Plataforma Fhinck.

Endpoint

POST https://integrations.fhinck.com/masterData

Cria ou atualiza dados de estrutura organizacional. Operação idempotente — enviar o mesmo registro duas vezes não gera duplicidade.

Envio recomendado: Envie deltas diários — apenas registros criados, atualizados ou desativados desde o último envio. Não é necessário enviar a base completa a cada dia (dump full). Dumps frequentes aumentam latência e consumo de quota sem benefício.

Request body

CampoTipoObrigatórioDescrição
keystringSimChave criptografada de autenticação da empresa.
dataobjectNão*Objeto contendo as listas de entidades a gravar. *Obrigatório se read não for enviado.
readarrayNão*O que devolver na resposta: "employees" (consulta por ids) e/ou "shifts" (todos os turnos da empresa). *Obrigatório se data não for enviado.
idsarrayNãoLogins a consultar. Obrigatório quando read inclui "employees". Máximo 5.000 itens por chamada.
data.employeesarraySimLista de colaboradores. Pode ser vazia [].
data.managersarrayNãoLista de gestores.
data.departmentsarrayNãoLista de departamentos.
data.regionsarrayNãoLista de regiões.
data.rolesarrayNãoLista de cargos.

Exemplo mínimo — apenas colaboradores

Começar com o envio mínimo é a forma mais rápida de validar a integração. Apenas key + data.employees com campos obrigatórios:

cURL — mínimo
curl -X POST https://integrations.fhinck.com/masterData \
  -H "Content-Type: application/json" \
  -d '{
    "key": "SUA_CHAVE_DE_INTEGRACAO",
    "data": {
      "employees": [
        {
          "login": "joao.silva",
          "name": "João Silva",
          "department": "COORD",
          "role": "ANALISTA",
          "active": true
        }
      ]
    }
  }'

Schema: Employee

CampoTipoObrigatórioDescrição
loginstringSimIdentificador único do colaborador.
namestringSimNome completo.
departmentstringSimCódigo do departamento folha.
department_pathstringNãoCadeia hierárquica de códigos separados por _. Ex.: DIR_GER_SUP.
rolestringSimCódigo do cargo.
regionstringNãoCódigo da região.
activebooleanSimtrue para colaborador ativo.
vacationbooleanNãotrue se em férias. Default: false.
vacation_date_instring (date)NãoInício das férias. Formato YYYY-MM-DD.
vacation_date_outstring (date)NãoFim das férias. Formato YYYY-MM-DD.
interfaceobjectNãoConfigurações de jornada e controle de ponto. Ver schema detalhado.

Configuração detalhada de interface

O objeto interface em cada Employee controla jornada, controle de ponto e comportamento do coletor no dispositivo. Todos os campos têm default — envie apenas os que quiser sobrescrever.

Jornada

CampoTipoDefaultDescrição
journey_typestringflexclassic (jornada fixa) ou flex (flexível).
begin_journeyobject—Horário de início por dia da semana (monday..sunday). Ex.: {"monday": "08:00:00"}.
end_journeyobject—Horário de fim por dia da semana. Formato HH:MM:SS.
begin_lunch_timeobject—Horário de início do almoço por dia da semana.
end_lunch_timeobject—Horário de fim do almoço por dia da semana.
journey_timeobject—Duração total da jornada em minutos por dia. Ex.: {"monday": 540} (9h).
journey_first_period_timeinteger0Duração do primeiro período em minutos (antes do almoço).
journey_interval_timeinteger0Duração do intervalo de almoço em minutos.
margin_for_time_limitsinteger0Tolerância em minutos para limites de horário.
journey_edit_enabledbooleanfalsePermite que o colaborador edite a jornada registrada.
journey_max_historyinteger31Dias máximos de histórico de jornada acessível ao colaborador.

Controle de ponto

CampoTipoDefaultDescrição
punch_clock_activebooleantrueControle de ponto ativado para o colaborador.
lock_by_punchbooleantrueBloqueia a estação entre batidas (ex.: durante almoço).
lock_by_punch_delayinteger0Atraso em segundos antes do bloqueio automático.
lock_out_of_journeybooleanfalseBloqueia a estação fora do horário de jornada.
collector_control_disabledbooleantrueDesabilita controles manuais do coletor.
ask_journey_extension_timeoutinteger0Timeout em segundos para solicitar extensão automaticamente.

Extra time e justificativas

CampoTipoDefaultDescrição
extra_time.allowedbooleantruePermite solicitação de horas extras.
justification_listarray—Lista de justificativas pré-aprovadas. Cada item: { "activity": "Reunião externa" }.

Autenticação do coletor

CampoTipoDefaultDescrição
auth.token_periodstring—Período de validade do token (ex.: "24h", "7d").
auth.token_scopestring—Escopo do token do coletor.

Schema: Manager

CampoTipoObrigatórioDescrição
emailstringSimEmail corporativo do gestor.
namestringSimNome completo.
departmentstringSimCódigo do departamento.
department_pathstringNãoCadeia hierárquica. Ex.: DIR_GER.
rolestringSimCódigo do cargo.
regionstringNãoCódigo da região.
activebooleanSimtrue para gestor ativo.
profilestringSimadmin, analytics, approver2, ti ou approver6. approver6 identifica o sócio: tem o mesmo acesso de approver2 e é quem aprova extensões acima de 2 horas.

Schemas: Department, Region, Role

EntidadeCampos obrigatóriosCampos opcionais
Departmentcode, namedepartment_level (integer)
Regioncode, name—
Rolecode, name—

Exemplo completo — todas as entidades

cURL
curl -X POST https://integrations.fhinck.com/masterData \
  -H "Content-Type: application/json" \
  -d '{
    "key": "SUA_CHAVE_DE_INTEGRACAO",
    "data": {
      "employees": [
        {
          "login": "joao.silva",
          "name": "João Silva",
          "department": "COORD",
          "department_path": "DIR_GER_COORD",
          "role": "ANALISTA",
          "region": "SP",
          "active": true,
          "interface": {
            "punch_clock_active": true,
            "journey_type": "flex",
            "begin_journey": { "monday": "08:00:00", "tuesday": "08:00:00" },
            "journey_time": { "monday": 540, "tuesday": 540 }
          }
        }
      ],
      "managers": [
        {
          "email": "maria.gestora@empresa.com",
          "name": "Maria Gestora",
          "department": "GER",
          "department_path": "DIR_GER",
          "role": "GERENTE",
          "region": "SP",
          "active": true,
          "profile": "approver2"
        }
      ],
      "departments": [
        { "code": "DIR", "name": "Diretoria", "department_level": 1 },
        { "code": "GER", "name": "Gerência", "department_level": 2 },
        { "code": "COORD", "name": "Coordenação", "department_level": 3 }
      ],
      "regions": [
        { "code": "SP", "name": "São Paulo" }
      ],
      "roles": [
        { "code": "ANALISTA", "name": "Analista" },
        { "code": "GERENTE", "name": "Gerente" }
      ]
    }
  }'

Consulta — buscar o cadastro por login

O mesmo endpoint devolve o que está armazenado. Envie read: ["employees"] e ids com a lista de logins: a resposta traz o registro mais recente de cada um, com todos os campos do cadastro. É somente leitura — não cria nem altera nada.

cURL — consulta
curl -X POST https://integrations.fhinck.com/masterData \
  -H "Content-Type: application/json" \
  -d '{
    "key": "SUA_CHAVE_DE_INTEGRACAO",
    "read": ["employees"],
    "ids": ["maria.silva", "joao.souza", "ana.pereira"]
  }'
Resposta — 2 encontrados, 1 ausente
{
  "err": false,
  "employees": [
    {
      "employee": "maria.silva",
      "employee_alias": "MARIA SILVA",
      "employee_id": "10482",
      "fk_department_code": "OPS03",
      "department_path": "RAIZ_OPS03",
      "fk_role_code": "ROLE12",
      "fk_region_code": "REG01",
      "active": true,
      "vacation_active": false,
      "vacation_date_in": null,
      "vacation_date_out": null,
      "Entry_Weekday": "09:00:00",
      "Exit_Weekday": "18:00:00",
      "Entry_Saturday": null,
      "Exit_Saturday": null,
      "Entry_Sunday": null,
      "Exit_Sunday": null,
      "creation_user": "integracao-rh",
      "creation_date": { "value": "2026-09-16T13:02:11.000000Z" },
      "search_date":   { "value": "2026-09-16T00:00:00.000000Z" }
    },
    { "employee": "joao.souza", "...": "demais campos" }
  ],
  "read": { "entity": "employees", "requested": 3, "found": 2, "notFound": 1 },
  "notFound": ["ana.pereira"]
}
ComportamentoDetalhe
Login inexistenteVolta nomeado em notFound, com a lista dos que faltaram — não some em silêncio.
Caixa e espaçosMaiúsculas, minúsculas e espaços nas pontas são ignorados; login repetido volta uma vez só no resultado.
Limite5.000 itens por chamada, contados na lista como ela chega: repetição conta. Uma lista com 6.000 entradas do mesmo login é recusada com 422, mesmo virando um único registro depois.
Datascreation_date e search_date vêm como objeto {"value": "<ISO-8601 UTC>"}, não como string. Leia o .value de cada um.
Bloco summaryConta o que foi gravado; numa consulta pura vem zerado. As contagens da consulta ficam em read.
EntidadesHoje a consulta por ids cobre colaboradores. Outras entidades retornam 422 explícito.
Gravar e conferirdata, read e ids podem ir na mesma chamada: grava primeiro, e a resposta traz o que ficou gravado.

Response

Sucesso 200 — gravação
{
  "err": false,
  "message": "Atualização concluída com sucesso!"
}

Quando a chamada inclui read, a resposta ganha os blocos correspondentes: employees, read e notFound (consulta por ids) e/ou shifts (todos os turnos da empresa).

Erros

StatusCausa
400Campo key ausente ou inválido.
422Nenhum dos dois enviado: data (gravação) e read (consulta).
422read inclui "employees" mas ids está ausente ou vazio.
422ids acima de 5.000 itens. A mensagem traz a contagem recebida.
422Entidade em read ainda não disponível para consulta por ids.
500Erro interno ao processar os dados.