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"
}
| Campo | Descrição |
|---|---|
jobId / jobName | Vaga do candidato |
talentId | Identificador do talento |
previousStageName | Etapa de onde o candidato saiu |
stageName | Etapa para onde o candidato entrou |
stageOriginId | Identificador da etapa de destino (estável — não muda ao renomear) |
stageType / phaseType | Tipo da etapa e da fase |
jobOriginId / jobTalentOriginId | Identificadores externos, se houver (opcionais) |
source | Origem da candidatura (opcional) |
userId / userName | Quem 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.