Pular para o conteúdo principal

Evento: Candidatura atualizada (JOB_TALENT_UPDATED)

Dispara sempre que algo muda em uma candidatura — currículo enviado ou reprocessado, análise de currículo concluída, triagem aplicando tags, resposta de formulário registrada, feedback enviado, transferência entre vagas, entre outros.

Novo nos webhooks? Veja a visão geral para o conceito (registrar uma vez, receber sempre que a ação ocorre).

Evento de alto volume e sem discriminador

Este é o evento mais genérico da candidatura: uma única candidatura pode gerar várias ocorrências ao longo do processo, e operações em lote (reprocessamento de currículos, transferência em massa, unificação de talentos) disparam muitas de uma vez.

Além disso, o payload não diz o que mudou — ele identifica a candidatura, não a alteração. Se você precisa reagir a uma mudança específica, prefira o evento dedicado (JOB_TALENT_STAGE_ADDED para etapa, FORM_RESPONSE_ADDED para formulário). Use este aqui quando o objetivo for manter uma cópia sincronizada da candidatura: ao receber, busque o estado atual na API.

Criando o webhook​

Registre um webhook para o evento JOB_TALENT_UPDATED (Criar webhook):

curl -X POST https://api.inhire.app/integrations/webhooks \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "X-Tenant: suaempresa" \
-H "Content-Type: application/json" \
-d '{
"name": "Candidatura atualizada",
"event": "JOB_TALENT_UPDATED",
"url": "https://seu-sistema.com/webhooks/inhire/candidatura-atualizada",
"headers": { "Authorization": "Bearer UM_SEGREDO_SEU" }
}'

A partir daí, o InHire chamará a sua URL sempre que este evento ocorrer. Para filtrar quais ocorrências recebe, adicione rules (ver abaixo).

Payload​

{
"tenantId": "suaempresa",
"jobId": "5dfd3a1e-a5c3-4e53-a3f4-cdb4e311d315",
"jobName": "Analista de Logística",
"talentId": "b1c2d3e4-f5a6-7890-bcde-1234567890ab",
"userId": "u-123",
"userName": "Recrutador"
}
CampoDescrição
jobIdVaga da candidatura
jobNameNome da vaga — pode vir vazio ("") em alguns disparos
talentIdIdentificador do talento
userId / userNameQuem provocou a alteração (nulos, ou "InHire", quando foi ação automática)

O payload identifica qual candidatura mudou, não o que mudou. Para saber o estado atual, busque a candidatura na API (exemplo abaixo).

Quando usar​

  • Manter uma cópia sincronizada da candidatura em um sistema externo (data warehouse, ATS secundário, planilha operacional).
  • Reprocessar um registro sempre que o currículo ou a análise forem atualizados.
  • Invalidar cache de um candidato no seu lado.

Filtrando com rules​

// Apenas alterações em uma vaga específica
{ "jobId": { "operator": "=", "value": "5dfd3a1e-a5c3-4e53-a3f4-cdb4e311d315" } }
dica

Use apenas campos que existem no payload deste evento (jobId, jobName, talentId, tenantId, userId, userName). Uma regra apontando para um campo inexistente faz o evento não ser entregue.

Exemplo: recebendo o evento e ressincronizando​

import express from "express";
import axios from "axios";

const app = express();
app.use(express.json());

// Cliente autenticado da API do InHire (use um service account — ver guia de Autenticação)
const inhire = axios.create({
baseURL: "https://api.inhire.app",
headers: {
Authorization: `Bearer ${process.env.INHIRE_TOKEN}`,
"X-Tenant": "suaempresa",
},
});

app.post("/webhooks/inhire/candidatura-atualizada", async (req, res) => {
// Valide a origem usando o header secreto configurado no webhook
if (req.headers.authorization !== "Bearer UM_SEGREDO_SEU") {
return res.sendStatus(401);
}
res.sendStatus(200); // responda rápido e processe de forma assíncrona

const { jobId, talentId } = req.body;

// O evento não diz o que mudou — busque o estado atual e sobrescreva sua cópia
const { data: candidatura } = await inhire.get(`/job-talents/${jobId}/talents/${talentId}`);

await salvarCandidatura(candidatura); // sua lógica de upsert
});

app.listen(3000);

Endpoint usado: Obter candidaturas de um talento.

Como o mesmo candidato pode gerar várias chamadas em sequência, faça o processamento idempotente (upsert pela chave jobId + talentId) e considere agrupar as chamadas em uma fila do seu lado.