Aller au contenu

BONS EMPREGOS / DOCUMENTAÇÃO

As suas ofertas. Uma integração.

Integre o seu software de recrutamento. Consulte categorias e regiões, publique ofertas e mantenha os dados atualizados através da API.

Sandbox disponívelREST · v1HTTPS
URL BASE · SANDBOXhttps://www.bonsempregos.com/api/sandbox/v1

Comece com uma credencial be_test_…
Testes separados das ofertas reais.

Criar a primeira credencial
01

Da credencial à primeira oferta

1

Crie uma credencial

Na área da empresa, abra API e MCP, confirme a palavra-passe e escolha Sandbox.

Gerir credenciais →
2

Consulte as referências

Obtenha os IDs de categorias e regiões e os valores aceites nos campos da oferta.

Ver endpoints →
3

Envie a primeira oferta

Teste a criação e as atualizações com dados fictícios, antes de pedir acesso à produção.

Ver exemplo →

A sandbox está disponível para contas principais de empresa verificadas e em bom estado, incluindo empresas sem plano pago.

02

Dois ambientes, a mesma API

Qualquer conta principal de empresa verificada e em bom estado pode testar, mesmo antes de subscrever um plano de produção. Crie uma credencial Sandbox em Gerir credenciais.

SandboxTestes
https://www.bonsempregos.com/api/sandbox/v1

Credenciais be_test_…

Ofertas isoladas e quota de teste própria.
ProduçãoOfertas reais
https://www.bonsempregos.com/api/v1

Credenciais be_live_…

Plano elegível e aprovação individual.

Os dois ambientes têm os mesmos endpoints e validações. As categorias, regiões e opções são referências reais apenas de leitura; ofertas, chaves de idempotência e quotas de teste são separadas. Uma credencial de teste nunca funciona em produção, nem o contrário. As respostas identificam o ambiente em X-API-Environment.

A sandbox permite 100 ofertas por empresa e usa limites de pedidos separados. As ofertas de teste ficam pendentes; DELETE simula a retirada. Não há publicação pública, candidaturas, emails, destaques, consumo de quotas reais ou verificações geográficas de publicação. Use dados fictícios. Pode limpar as ofertas e as chaves de idempotência no painel, escrevendo RESET; as credenciais continuam válidas.

Depois de testar a criação, peça acesso à produção no painel. A equipa analisa e aprova cada empresa. É necessário um plano com API incluída. Pode preparar uma credencial de produção antecipadamente; os pedidos só serão autorizados quando o plano e a aprovação estiverem válidos. Depois, altere a URL e a credencial na integração. Nenhuma oferta de teste é promovida ou copiada automaticamente.

Acesso de cortesia: a administração pode conceder acesso à API e ao MCP de produção a uma empresa, independentemente do plano. A cortesia tem limite mensal próprio (incluindo ilimitado) e pode ter data de validade. Consulte /account ou get_account para conhecer o limite efetivo. A cortesia não altera os benefícios do site nem os limites de pedidos.

03

Autenticação entre servidores

O painel de credenciais está disponível em todos os planos de empresa. O acesso de produção à API e ao MCP exige um plano elegível (Pro, VIP e Especial por defeito) e aprovação administrativa. O titular da conta cria uma credencial após confirmar a palavra-passe. As subcontas não podem emitir credenciais.

Envie a credencial em cada pedido: Authorization: Bearer be_test_… (sandbox) ou be_live_… (produção). Use exclusivamente HTTPS e guarde o segredo no servidor. Não utilize a palavra-passe da conta, cookies, parâmetros de URL ou código JavaScript público. Cada segredo é apresentado uma única vez, tem validade máxima de 365 dias e pode ser revogado imediatamente.

Escolha acesso de leitura ou leitura e escrita. Para rodar credenciais, crie uma nova, atualize a integração e revogue a anterior. Pode manter até cinco credenciais válidas por ambiente. A produção exige sempre aprovação administrativa individual, além do plano elegível.

Pedido de exemplo JSON
Authorization: Bearer YOUR_TOKEN
Accept: application/json
Content-Type: application/json
04

Categorias, regiões e opções

Estas consultas devolvem os dados necessários para preencher uma oferta. Funcionam nos dois ambientes e devolvem a lista completa em data.

MétodoEndpointO que devolve
GET/categoriesÁreas e especialidades ativas, com id e parent_id. Escolha uma especialidade com categoria principal ativa.
GET/regionsDistritos e outras localizações. Use o id em district_id. /districts é um alias.
GET/optionsContratos, modalidades de trabalho, escolaridade, tipos de salário e métodos de candidatura.
GET/accountPlano, limite e utilização do ambiente atual.

Consulte estes endpoints durante a integração. Não assuma que os IDs dos exemplos existem ou representam a categoria pretendida.

05

Criar uma oferta de teste

Consulte primeiro as categorias e regiões. Use uma especialidade ativa (categoria com parent_id) e envie o identificador da região em district_id. Os IDs abaixo são exemplos: substitua-os pelos valores devolvidos pela API.

Pedido de exemplo Shell
curl 'https://www.bonsempregos.com/api/sandbox/v1/jobs' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: ats-vaga-2026-001' \
  --data '{
    "title": "Programador PHP",
    "body": "<p>Procuramos uma pessoa para a nossa equipa.</p>",
    "contact_instructions": "Candidate-se através do Bons Empregos.",
    "category_id": 123,
    "district_id": 1,
    "application_method": "system",
    "work_modality": "hibrido"
  }'
06

Campos da oferta

A empresa proprietária é identificada pela credencial. Envie estes seis campos na criação.

Campo obrigatórioTipoRegra
titlestringAté 255 caracteres.
bodystringDescrição, até 30 000 caracteres e 65 535 bytes UTF-8. O HTML é sanitizado.
contact_instructionsstringInstruções de candidatura, até 10 000 caracteres.
category_idintegerID de uma especialidade ativa em /categories.
district_idintegerID de uma localização em /regions.
application_methodstringValor devolvido em /options.
Candidaturas e campos condicionais

Para candidaturas por email, telefone ou ligação externa, envie respetivamente contact_email, contact_phone ou external_application_url (HTTPS). Com system, a candidatura utiliza o Bons Empregos.

Salário, condições e requisitos opcionais

salary_min e salary_max são valores em euros; o máximo deve ser igual ou superior ao mínimo. As respostas representam estes decimais como strings. Também pode enviar salary_type, salary_negotiable e salary_benefits.

As condições incluem contract_type, work_modality, remote_policy, experience_years e education_level. Consulte os valores permitidos em /options.

requirements recebe texto. education_details, professional_requirements e language_requirements recebem arrays de texto.

valid_until usa YYYY-MM-DD, posterior ao dia atual; null significa sem data definida.

Consulte todos os tipos, limites e esquemas na especificação OpenAPI.

07

Consultar, atualizar e retirar

URL base: https://www.bonsempregos.com/api/v1. Envie Accept: application/json e, nos pedidos com corpo, Content-Type: application/json.

MétodoEndpointUtilização
GET/accountPlano, limite e utilização atual
GET/categoriesÁreas e especialidades, com parent_id
GET/regionsDistritos e outras localizações; /districts é um alias
GET/optionsContratos, modalidades, escolaridade, salários e métodos de candidatura
GET/jobsOfertas da sua empresa, incluindo pendentes e retiradas
POST/jobsCriar uma oferta
GET/jobs/{id}Consultar uma oferta da sua empresa
PATCH/jobs/{id}Atualizar apenas os campos enviados
DELETE/jobs/{id}Retirar a oferta, preservando candidaturas e histórico

As listagens de ofertas aceitam page, per_page (25 por defeito, máximo 100) e status (active, pending, inactive, expired). A resposta contém data e meta com current_page, per_page, total e last_page. As referências devolvem a lista completa em data.

As ofertas entram em revisão, exceto quando a empresa tem autorização de publicação automática. Atualizar uma oferta ativa volta a colocá-la em revisão se a empresa não tiver essa autorização. Ofertas retiradas ou expiradas não são republicadas pelo PATCH. A API não permite alterar o proprietário, estado de aprovação, destaques ou publicação anónima.

08

Limites e pedidos repetidos

60pedidos / minuto / empresa / ambiente
100ofertas de teste até limpar a sandbox
5credenciais válidas por ambiente

Cada criação exige um Idempotency-Key único por empresa, com 1–128 caracteres (letras, números, ponto, hífen, sublinhado ou dois-pontos). Repita a mesma chave e o mesmo JSON quando houver um timeout: não será criada outra oferta. Uma criação devolve 201; uma repetição devolve 200 com Idempotent-Replayed: true e o estado atual da oferta. Uma chave com conteúdo diferente devolve 409. A chave fica reservada mesmo que a oferta seja removida (410).

As publicações pelo site e pela API partilham o limite do plano. Retirar uma oferta não devolve a utilização. Consulte /account: -1 significa ilimitado. O acesso termina quando a subscrição deixa de ser elegível. São permitidos 60 pedidos por minuto por empresa, partilhados entre credenciais; existe também proteção por IP.

09

Interpretar os erros

Pedido de exemplo JSON
{"error":{"status":422,"message":"…","details":{"title":["…"]}}}
HTTPSignificado
400HTTPS obrigatório.
401Credencial inválida, expirada, revogada ou do ambiente errado.
403Acesso, plano, aprovação, quota ou permissão insuficiente.
404Oferta não encontrada ou de outra empresa.
409Chave de idempotência já utilizada com outros dados.
410A oferta original foi removida; a chave continua reservada.
413 / 415Corpo acima de 128 KiB ou conteúdo não JSON.
422Campos inválidos. Consulte error.details.
429Limite de pedidos atingido. Respeite Retry-After.
503API temporariamente indisponível.

Em caso de 429, aguarde os segundos indicados em Retry-After. Após timeout ou erro 5xx, use espera progressiva e repita a criação com a mesma chave. Não repita automaticamente erros de validação.

Precisa de ajuda com a integração?

Indique o ambiente, endpoint e código de erro. Não envie a sua credencial.

Contactar a equipa