ATS Integration: como integrar a nova API da GeekHunter?
Passo 1: Gerar sua API Key
- Acesse o dashboard da GeekHunter
- Vá em Configurações → Integrações → API Keys
- Clique em Gerar nova chave
- Copie e armazene com segurança
Passo 2: Configurar autenticação
Todas as requisições devem incluir o header:
Authorization: Bearer SUA_API_KEY
Content-Type: application/json
Passo 3: Listar todas as vagas
Endpoint
GET /jobs
Exemplo com cURL
curl -X GET "https://api.geekhunter.com/jobs?page=1&per_page=20" \
-H "Authorization: Bearer SUA_API_KEY"
Exemplo com JavaScript (fetch)
fetch("https://api.geekhunter.com/jobs?page=1&per_page=20", {
headers: {
"Authorization": "Bearer SUA_API_KEY"
}
})
.then(res => res.json())
.then(data => console.log(data));
Resposta (exemplo)
{
"data": [
{
"job_id": "abc123def4",
"title": "Backend Developer",
"created_at": "2026-03-01T09:00:00Z"
}
],
"meta": {
"page": 1,
"per_page": 20,
"total": 100,
"total_pages": 5
}
}
Passo 4: Buscar dados de uma vaga específica
Endpoint
GET /jobs/{job_id}
Exemplo
curl -X GET "https://api.geekhunter.com/jobs/abc123def4" \
-H "Authorization: Bearer SUA_API_KEY"
Passo 5: Listar candidatos de uma vaga
Endpoint
GET /jobs/{job_id}/applications
Exemplo
curl -X GET "https://api.geekhunter.com/jobs/abc123def4/applications" \
-H "Authorization: Bearer SUA_API_KEY"
Resposta (exemplo)
{
"data": [
{
"application_id": "xyz987abcd",
"name": "João Silva",
"applied_at": "2026-03-02T10:00:00Z",
"resume_url": "https://..."
}
]
}
Passo 6: Para rejeitar um candidato
Endpoint
POST /applications/{application_id}/reject
Exemplo
curl -X POST "https://api.geekhunter.com/applications/xyz987abcd/reject" \
-H "Authorization: Bearer SUA_API_KEY"
Possíveis respostas:
- 200 → sucesso
- 422 → candidato já rejeitado
Passo 7: Trabalhando com paginação
Use os parâmetros:
- page → número da página
- per_page → itens por página (máx: 100)
GET /jobs?page=2&per_page=50
Passo 8: Tratamento de erros
Exemplo de erro:
{
"error": "Invalid parameter",
"code": "invalid_request"
}
Principais códigos:
- 400 → requisição inválida
- 401 → API Key inválida
- 404 → recurso não encontrado
- 429 → limite excedido
Passo 9: Rate limit
- Limite: 100 requisições por minuto
Se exceder:
HTTP 429
Retry-After: 30
➡ ️ Aguarde o tempo indicado antes de tentar novamente.
Passo 10: Boas práticas
- Armazene sua API Key em variáveis de ambiente
- Implemente retry automático para erros 429
- Sincronize dados periodicamente (ex: a cada 5 minutos)
- Sempre trate campos null
Exemplo de fluxo completo
1. Buscar vagas
const jobs = await fetch("/jobs");
2. Para cada vaga, buscar candidatos
for (const job of jobs.data) {
const applications = await fetch(`/jobs/${job.job_id}/applications`);
3. Exemplo: rejeitar candidato
for (const app of applications.data) {
if (app.name === "Teste") {
await fetch(`/applications/${app.application_id}/reject`, {
method: "POST"
});
}
}
}