Empieza en un minuto
La búsqueda funciona sin clave y sin registro. Copia y ejecuta en la terminal:
curl "https://www.joonow.com/api/v1/jobs?q=analista%20de%20dados&l=Campinas&work=Remote&limit=5"
La respuesta trae las vacantes, el total, el cursor de la página siguiente y cómo 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 son GET y responden JSON. Los enlaces de las respuestas son absolutos y canónicos: úsalos tal como vienen.
| Endpoint | Qué devuelve |
|---|---|
GET / | Búsqueda de vacantes abiertas, con filtros y paginación por cursor. |
GET / | Una vacante, con la descripción en texto y en HTML limpio. |
GET / | Una empresa con vacantes abiertas: totales, ciudades, cargos, salarios informados y la primera página de vacantes. |
GET / | Las vacantes abiertas de una empresa, con paginación por cursor. |
GET / | La edición más reciente del Índice Joonow de Empleos (o la preliminar del mes). |
GET / | Una edición mensual del Índice. |
GET / | La lista de ediciones publicadas. |
GET / | piezas más nuevas de Joonow Tendencias (reportajes, resumen del día, Encuesta Voz del Candidato) |
GET / | qué cambió para un puesto y una ciudad |
GET / | La descripción de la API en OpenAPI 3.1, para generar clientes y probar. |
Filtros de la búsqueda
Los mismos de la búsqueda del sitio. Los filtros con varios valores aceptan la clave repetida (work=Remote&work=Hybrid) o valores separados por coma; vale cualquiera de ellos.
| Parámetro | Valores |
|---|---|
q | Palabras clave o frase corta: cargo, habilidad o empresa (hasta 200 caracteres). |
l | Ciudad o estado de Brasil (UF), por ejemplo Campinas o SP. Hasta 12. |
work | Remote, Hybrid, OnSite o Anywhere (remotas desde cualquier lugar; con country, también las remotas de fuera abiertas al país). |
type | FullTime, PartTime, Contractor, Temporary, Intern, Volunteer, PerDiem u Other. |
level | Apprentice, Intern, Entry, Operational, Professional, Management o Executive. |
days | Publicadas en los últimos N días, de 1 a 365. |
salary | Salario mensual mínimo en la moneda de la búsqueda (currency); solo entran vacantes con salario informado en esa moneda, sin tipo de cambio. |
sort | relevance (predeterminado), date (más recientes) o salary (mayor salario). |
lang | Idioma de las vacantes: pt, en o es. Sin él, todos. |
limit | Vacantes por página, de 1 a 50 (predeterminado 20). |
cursor | El valor de nextCursor de la respuesta anterior. |
country | País de las vacantes (ISO 3166-1 alfa-2, solo de las Américas: BR, US, MX, CA, AR...), como la sección del país en el sitio. Sin él, todas las Américas. |
currency | Moneda de salary y del orden por salario (ISO 4217: BRL, USD, MXN, CAD...). Sin ella, la del país; sin país, BRL. |
Paginación
Cada respuesta trae nextCursor. Para la página siguiente, repite la misma búsqueda con cursor=valor. El cursor solo vale para la misma búsqueda y el mismo limit, y nulo significa última página. Como en el sitio, la búsqueda llega hasta 50 páginas: para ir más allá, ajusta los filtros.
Errores
Los errores siguen el formato problem+json (RFC 9457), siempre con un campo code estable y, cuando es un parámetro, el campo param.
| code | Estado | Cuándo ocurre |
|---|---|---|
invalid_ | 400 | Un parámetro tiene un valor inválido (el campo param dice cuál). |
invalid_ | 400 | El cursor está mal formado o es de otra búsqueda. |
invalid_ | 401 | La clave enviada no existe, fue revocada o está mal formada. |
job_ | 404 | La vacante no existe o ya cerró. |
company_ | 404 | La empresa no existe o no tiene vacantes abiertas. |
edition_ | 404 | La edición del Índice todavía no se publicó. |
rate_ | 429 | Pasaste el límite por minuto. Espera el tiempo de Retry-After. |
daily_ | 429 | La clave pasó la cuota del día, que vuelve a la medianoche UTC. |
search_ | 503 | La búsqueda está caída por unos instantes. Intenta de nuevo después de Retry-After. |
Claves y límites
Sin clave, la API y el MCP ya funcionan, con límites por IP. Con una clave gratis, los límites suben y sigues el uso en tu cuenta.
| Acceso | Por minuto | Por día |
|---|---|---|
| Sin clave, API | 10 por IP | sin cuota diaria |
| Sin clave, MCP | 30 por IP | sin cuota diaria |
| Con clave gratis | 60 | 10.000 |
Crea la clave en tu cuenta y envíala en el encabezado X-Api-Key (o Authorization: Bearer). Aparece una sola vez; guárdala en un lugar seguro y nunca la publiques. Crear mi clave
curl -H "X-Api-Key: jnk_..." "https://www.joonow.com/api/v1/jobs/k3j9x2m4pq"
Cada respuesta trae RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset; con clave, también X-Daily-Limit y X-Daily-Remaining. Si pasas el límite, la respuesta es 429 con Retry-After.
Servidor MCP para asistentes de IA
El Model Context Protocol (MCP) permite que los asistentes de IA consulten Joonow en medio de la conversación: "busca vacantes remotas de analista de datos" se vuelve una búsqueda real, con el enlace de cada vacante. El servidor es remoto, solo de lectura y no pide inicio de sesión.
Dirección (HTTP streamable):
https://www.joonow.com/mcp
Herramientas
search_jobs: busca vacantes por cargo, país, lugar, modalidad, contrato, nivel, fecha y salario.get_job: devuelve una vacante completa por id o por enlace.get_company: devuelve una empresa que está contratando, con números y sus primeras vacantes.market_index: devuelve los números del Índice Joonow de Empleos del mes.market_insights: qué cambió para un puesto o una ciudad: la radiografía del puesto, quién está contratando y los reportajes de Joonow Tendencias.latest_stories: las piezas más nuevas de Joonow Tendencias, cada una con tres frases para citar y el enlace.
Cómo 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: en Configuración › Conectores, agrega un conector personalizado con la dirección de arriba.
ChatGPT: en Configuración › Apps y conectores, activa el modo desarrollador y crea un conector con la dirección de arriba.
Con clave, los límites del MCP son los de tu clave: envía el encabezado X-Api-Key, como en el ejemplo de Claude Code.
Cómo citar a Joonow
Al mostrar los datos, muestra "Empleos vía Joonow" con enlace junto a las vacantes y usa el enlace de cada vacante (url) y el de postulación (applyUrl) tal como los entrega la API. Actualiza las vacantes guardadas en hasta 24 horas. Revender la base, en todo o en parte, no está permitido.