Pular para o conteúdo principal

Evento: Talento mudou de etapa (JOB_TALENT_STAGE_ADDED)

Dispara sempre que um candidato é movido de uma etapa para outra no processo seletivo de uma vaga.

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

Criando o webhook​

Registre um webhook para o evento JOB_TALENT_STAGE_ADDED (Criar webhook). O exemplo abaixo usa rules para receber apenas movimentações para a etapa "Teste Técnico":

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": "Mudança de etapa",
"event": "JOB_TALENT_STAGE_ADDED",
"url": "https://seu-sistema.com/webhooks/inhire/etapa",
"headers": { "Authorization": "Bearer UM_SEGREDO_SEU" },
"rules": {
"stageName": { "operator": "=", "value": "Teste Técnico" }
}
}'

Sem rules, você recebe todas as mudanças de etapa. Veja mais opções em Filtrando com rules.

Payload​

{
"tenantId": "suaempresa",
"jobId": "5dfd3a1e-a5c3-4e53-a3f4-cdb4e311d315",
"jobName": "Analista de Logística",
"jobOriginId": "REQ-123",
"jobTalentOriginId": "EXT-987",
"talentId": "b1c2d3e4-f5a6-7890-bcde-1234567890ab",
"previousStageName": "Triagem",
"stageName": "Teste Técnico",
"stageOriginId": "stage-uuid-abc",
"stageType": "default",
"phaseType": "screening",
"source": "career-page",
"userId": "u-123",
"userName": "Recrutador"
}
CampoDescrição
jobId / jobNameVaga do candidato
talentIdIdentificador do talento
previousStageNameEtapa de onde o candidato saiu
stageNameEtapa para onde o candidato entrou
stageOriginIdIdentificador da etapa de destino (estável — não muda ao renomear)
stageType / phaseTypeTipo da etapa e da fase
jobOriginId / jobTalentOriginIdIdentificadores externos, se houver (opcionais)
sourceOrigem da candidatura (opcional)
userId / userNameQuem moveu o candidato (nulos se foi ação automática)

Quando usar​

  • Disparar um teste/assessment externo quando o candidato entra em uma etapa de prova.
  • Atualizar um sistema externo (ATS secundário, CRM) com o progresso do candidato.
  • Notificar um canal (Slack, e-mail interno) quando alguém chega na etapa de proposta.
  • Acionar automações específicas por etapa (agendar entrevista, pedir documentos).

Filtrando com rules​

Para reagir apenas a uma etapa específica:

{ "stageName": { "operator": "=", "value": "Teste Técnico" } }

Prefira stageOriginId se quiser uma regra que não quebra ao renomear a etapa no painel.

Exemplo: recebendo o evento e buscando os dados​

O payload traz só os identificadores e alguns campos resumidos. Quando você precisar dos dados completos, busque-os na API do InHire a partir do jobId e do talentId. Aqui buscamos a vaga, a candidatura (o talento naquela vaga) e o talento:

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/etapa", 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, stageName } = req.body;

const [{ data: vaga }, { data: candidatura }, { data: talento }] = await Promise.all([
inhire.get(`/jobs/${jobId}`), // a vaga
inhire.get(`/job-talents/${jobId}/talents/${talentId}`), // o talento na vaga (candidatura)
inhire.get(`/talents/${talentId}`), // o talento
]);

console.log(`${talento.name} entrou em "${stageName}" da vaga "${vaga.name}"`);

// ...sua lógica aqui (ex.: disparar um teste externo)
});

app.listen(3000);

Endpoints usados: Obter vaga, Obter candidaturas de um talento e Obter talento.