Comece em um minuto
A busca funciona sem chave e sem cadastro. Copie e rode no terminal:
curl "https://www.joonow.com/api/v1/jobs?q=analista%20de%20dados&l=Campinas&work=Remote&limit=5"
A resposta traz as vagas, o total, o cursor da próxima página e como citar a Joonow:
{
"data": [
{
"id": "k3j9x2m4pq",
"title": "Analista de dados",
"url": "https://www.joonow.com/pt-br/vaga/analista-de-dados-k3j9x2m4pq",
"applyUrl": "https://www.joonow.com/go/k3j9x2m4pq",
"company": { "id": "0f5rb3kg49", "name": "Acme", "url": "https://www.joonow.com/pt-br/empresas/acme-0f5rb3kg49", "logo": null },
"location": { "city": "Campinas", "region": "SP", "country": "BR" },
"workModel": "Remote",
"employmentType": "FullTime",
"seniority": "Professional",
"salary": { "min": 6000, "max": 8000, "currency": "BRL", "period": "Month" },
"language": "pt",
"postedAt": "2026-10-28T12:00:00Z",
"native": false
}
],
"total": 214,
"totalIsLowerBound": false,
"nextCursor": "djEuMi4xYzJm...",
"attribution": { "text": "Vagas via Joonow", "url": "https://www.joonow.com/pt-br/vagas?q=analista%20de%20dados" }
}
Endpoints
Todos são GET e respondem JSON. Os links das respostas são absolutos e canônicos: use-os como vêm.
| Endpoint | O que devolve |
|---|---|
GET / | Busca de vagas abertas, com filtros e paginação por cursor. |
GET / | Uma vaga, com a descrição em texto e em HTML limpo. |
GET / | Uma empresa com vaga aberta: totais, cidades, cargos, salários informados e a primeira página das vagas. |
GET / | As vagas abertas de uma empresa, com paginação por cursor. |
GET / | A edição mais recente do Índice Joonow de Vagas (ou a preliminar do mês). |
GET / | Uma edição mensal do Índice. |
GET / | A lista das edições publicadas. |
GET / | peças mais novas do Joonow Tendências (reportagens, resumo do dia, Pesquisa Voz do Candidato) |
GET / | o que mudou para um cargo e uma cidade |
GET / | A descrição da API em OpenAPI 3.1, para gerar clientes e testar. |
Filtros da busca
Os mesmos da busca do site. Filtros com vários valores aceitam a chave repetida (work=Remote&work=Hybrid) ou valores separados por vírgula; vale qualquer um deles.
| Parâmetro | Valores |
|---|---|
q | Palavras-chave ou frase curta: cargo, habilidade ou empresa (até 200 caracteres). |
l | Cidade ou UF, por exemplo Campinas ou SP. Até 12. |
work | Remote, Hybrid, OnSite ou Anywhere (remotas de qualquer lugar; com country, também as remotas de fora abertas ao país). |
type | FullTime, PartTime, Contractor, Temporary, Intern, Volunteer, PerDiem ou Other. |
level | Apprentice, Intern, Entry, Operational, Professional, Management ou Executive. |
days | Publicadas nos últimos N dias, de 1 a 365. |
salary | Salário mensal mínimo na moeda da busca (currency); só entram vagas com salário informado nessa moeda, sem câmbio. |
sort | relevance (padrão), date (mais recentes) ou salary (maior salário). |
lang | Idioma das vagas: pt, en ou es. Sem ele, todos. |
limit | Vagas por página, de 1 a 50 (padrão 20). |
cursor | O valor de nextCursor da resposta anterior. |
country | País das vagas (ISO 3166-1 alfa-2, só das Américas: BR, US, MX, CA, AR...), como a seção do país no site. Sem ele, todas as Américas. |
currency | Moeda de salary e da ordem por salário (ISO 4217: BRL, USD, MXN, CAD...). Sem ela, a do país; sem país, BRL. |
Paginação
Cada resposta traz nextCursor. Para a próxima página, repita a mesma busca com cursor=valor. O cursor só vale para a mesma busca e o mesmo limit, e nulo quer dizer última página. Como no site, a busca vai até 50 páginas: para ir além, refine os filtros.
Erros
Os erros seguem o formato problem+json (RFC 9457), sempre com um campo code estável e, quando for um parâmetro, o campo param.
| code | Status | Quando acontece |
|---|---|---|
invalid_ | 400 | Um parâmetro tem valor inválido (o campo param diz qual). |
invalid_ | 400 | O cursor está malformado ou é de outra busca. |
invalid_ | 401 | A chave enviada não existe, foi revogada ou está malformada. |
job_ | 404 | A vaga não existe ou já foi encerrada. |
company_ | 404 | A empresa não existe ou não tem vaga aberta. |
edition_ | 404 | A edição do Índice ainda não foi publicada. |
rate_ | 429 | Passou do limite por minuto. Espere o tempo do Retry-After. |
daily_ | 429 | A chave passou da cota do dia, que volta à meia-noite UTC. |
search_ | 503 | A busca está fora do ar por instantes. Tente de novo depois do Retry-After. |
Chaves e limites
Sem chave, a API e o MCP já funcionam, com limites por IP. Com uma chave grátis, os limites sobem e você acompanha o uso na sua conta.
| Acesso | Por minuto | Por dia |
|---|---|---|
| Sem chave, API | 10 por IP | sem cota diária |
| Sem chave, MCP | 30 por IP | sem cota diária |
| Com chave grátis | 60 | 10.000 |
Crie a chave na sua conta e mande no cabeçalho X-Api-Key (ou Authorization: Bearer). Ela aparece uma vez só; guarde num lugar seguro e nunca publique. Criar minha chave
curl -H "X-Api-Key: jnk_..." "https://www.joonow.com/api/v1/jobs/k3j9x2m4pq"
Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; com chave, também X-Daily-Limit e X-Daily-Remaining. Passou do limite, a resposta é 429 com Retry-After.
Servidor MCP para assistentes de IA
O Model Context Protocol (MCP) deixa assistentes de IA consultarem a Joonow no meio da conversa: "ache vagas remotas de analista de dados" vira uma busca de verdade, com o link de cada vaga. O servidor é remoto, só de leitura e não pede login.
Endereço (HTTP streamable):
https://www.joonow.com/mcp
Ferramentas
search_jobs: busca vagas por cargo, país, local, modelo de trabalho, contrato, nível, data e salário.get_job: devolve uma vaga completa pelo id ou pelo link.get_company: devolve uma empresa que está contratando, com números e as primeiras vagas.market_index: devolve os números do Índice Joonow de Vagas do mês.market_insights: o que mudou para um cargo ou uma cidade: Raio-X da profissão, quem está contratando e as reportagens do Joonow Tendências.latest_stories: as peças mais novas do Joonow Tendências, cada uma com três frases para citar e o link.
Como conectar
Claude Code
claude mcp add --transport http joonow https://www.joonow.com/mcp
claude mcp add --transport http joonow https://www.joonow.com/mcp --header "X-Api-Key: jnk_..."
VS Code (.vscode/mcp.json)
{
"servers": {
"joonow": { "type": "http", "url": "https://www.joonow.com/mcp" }
}
}
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"joonow": { "url": "https://www.joonow.com/mcp" }
}
}
Claude: em Configurações › Conectores, adicione um conector personalizado com o endereço acima.
ChatGPT: em Configurações › Apps e conectores, ligue o modo desenvolvedor e crie um conector com o endereço acima.
Com chave, os limites do MCP são os da sua chave: mande o cabeçalho X-Api-Key, como no exemplo do Claude Code.
Como citar a Joonow
Ao mostrar os dados, mostre "Vagas via Joonow" com link junto das vagas e use o link de cada vaga (url) e o de candidatura (applyUrl) como a API entrega. Atualize as vagas guardadas em até 24 horas. Revender a base, no todo ou em parte, não é permitido.