Evento: Fit da triagem atualizado (JOB_TALENT_FIT_UPDATED)
Dispara quando a triagem por IA (v3) muda a nota, o status ou a cobertura de critérios
de um candidato em uma vaga. Diferente de JOB_TALENT_UPDATED, o payload diz o que
mudou: traz o resultado novo e o anterior.
Novo nos webhooks? Veja a visão geral para o conceito (registrar uma vez, receber sempre que a ação ocorre).
Uma reanálise que devolve o mesmo resultado (mesma nota, mesmo status e mesma cobertura de critérios) não gera o evento. Vagas que não usam a triagem v3 nunca disparam este evento.
Criando o webhook
Registre um webhook para o evento JOB_TALENT_FIT_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": "Fit da triagem atualizado",
"event": "JOB_TALENT_FIT_UPDATED",
"url": "https://seu-sistema.com/webhooks/inhire/fit-da-triagem",
"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",
"jobTalentId": "5dfd3a1e-a5c3-4e53-a3f4-cdb4e311d315*b1c2d3e4-f5a6-7890-bcde-1234567890ab",
"agentVersion": "v3",
"screeningScore": 4.17,
"screeningStatus": "pre-aproved",
"fit": "high",
"previousScreeningScore": 2.5,
"previousScreeningStatus": "need-aproval",
"previousFit": "medium",
"allCriteriaScored": true,
"previousAllCriteriaScored": false,
"analyzedAt": "2026-09-25T12:00:00.000Z",
"agentActions": { "...": true },
"recruiterId": "u-456",
"userId": "InHire",
"userName": "InHire"
}
| Campo | Descrição |
|---|---|
jobId / jobName | Vaga da candidatura (jobName pode vir vazio) |
talentId | Identificador do talento |
jobTalentId | Identificador da candidatura ({jobId}*{talentId}) |
agentVersion | Versão da triagem que produziu o resultado (sempre v3) |
screeningScore | Nota da triagem, de 0 a 5 (pode ter casas decimais) |
screeningStatus | Status da triagem: pre-aproved, need-aproval, pre-rejected, approved-by-hunter ou undefined-fit |
fit | Nível de fit derivado do status: high, medium ou low |
previousScreeningScore / previousScreeningStatus / previousFit | Resultado anterior — ausentes na primeira análise do candidato |
allCriteriaScored | true quando todos os critérios da vaga puderam ser pontuados |
previousAllCriteriaScored | Cobertura da análise anterior — ausente na primeira análise |
analyzedAt | Momento da análise (ISO 8601) |
agentActions | Mapa de toggles booleanos ({ "<ação>": true | false }) com a configuração do agente de triagem na vaga no momento da análise. As chaves são internas e novas podem aparecer a qualquer momento: não dependa de um conjunto fixo de chaves nem falhe ao encontrar uma chave desconhecida. Ausente em vagas antigas |
recruiterId | Recrutador responsável pela vaga |
userId / userName | Sempre "InHire" (a triagem é automática) |
Quando usar
- Automatizar decisões por nota no seu lado: avançar quem ficou com fit alto, revisar quem ficou no meio.
- Alimentar um painel com a distribuição de notas da triagem por vaga.
- Auditar reanálises, comparando o resultado novo com o
previous*.
Filtrando com rules
// Apenas candidatos com fit alto
{ "fit": { "operator": "=", "value": "high" } }
Use apenas campos que existem no payload deste evento. Uma regra apontando para um campo
ausente (por exemplo, previousFit na primeira análise) faz o evento não ser entregue.
Exemplo: recebendo o evento
import express from "express";
const app = express();
app.use(express.json());
app.post("/webhooks/inhire/fit-da-triagem", 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, screeningScore, fit, analyzedAt } = req.body;
// A mesma candidatura pode ser reanalisada: guarde só o resultado mais recente
await salvarFit({ jobId, talentId, screeningScore, fit, analyzedAt }); // sua lógica de upsert
});
app.listen(3000);
Para o estado completo da candidatura, busque-a na API: Obter candidaturas de um talento.
O InHire faz uma tentativa de entrega por evento. Faça o processamento idempotente
(upsert pela chave jobId + talentId, comparando analyzedAt) para descartar entregas
fora de ordem.