Para desarrolladores

API de empleos y servidor MCP de Joonow

Las vacantes abiertas de sitios de empleo y sistemas de reclutamiento de Brasil, las empresas que están contratando y el Índice Joonow de Empleos, en JSON o directo en tu asistente de IA. Gratis y solo de lectura.

  • API REST en JSON

    Búsqueda con los mismos filtros del sitio, vacante, empresa e Índice, con OpenAPI.

  • Servidor MCP

    Claude, ChatGPT, Copilot y Cursor buscan vacantes en la conversación.

  • Gratis, con límites

    Funciona sin clave. Con una clave gratis, los límites suben.

En esta página
  1. Empieza en un minuto
  2. Endpoints
  3. Filtros de la búsqueda
  4. Paginación
  5. Errores
  6. Claves y límites
  7. Servidor MCP para asistentes de IA
  8. Cómo citar a Joonow

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.

EndpointQué devuelve
GET /api/v1/jobsBúsqueda de vacantes abiertas, con filtros y paginación por cursor.
GET /api/v1/jobs/{id}Una vacante, con la descripción en texto y en HTML limpio.
GET /api/v1/companies/{id}Una empresa con vacantes abiertas: totales, ciudades, cargos, salarios informados y la primera página de vacantes.
GET /api/v1/companies/{id}/jobsLas vacantes abiertas de una empresa, con paginación por cursor.
GET /api/v1/market-indexLa edición más reciente del Índice Joonow de Empleos (o la preliminar del mes).
GET /api/v1/market-index/{yyyy-MM}Una edición mensual del Índice.
GET /api/v1/market-index/editionsLa lista de ediciones publicadas.
GET /api/v1/trends/storiespiezas más nuevas de Joonow Tendencias (reportajes, resumen del día, Encuesta Voz del Candidato)
GET /api/v1/trends/insights?role=&city=qué cambió para un puesto y una ciudad
GET /api/v1/openapi.jsonLa 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ámetroValores
qPalabras clave o frase corta: cargo, habilidad o empresa (hasta 200 caracteres).
lCiudad o estado de Brasil (UF), por ejemplo Campinas o SP. Hasta 12.
workRemote, Hybrid, OnSite o Anywhere (remotas desde cualquier lugar; con country, también las remotas de fuera abiertas al país).
typeFullTime, PartTime, Contractor, Temporary, Intern, Volunteer, PerDiem u Other.
levelApprentice, Intern, Entry, Operational, Professional, Management o Executive.
daysPublicadas en los últimos N días, de 1 a 365.
salarySalario mensual mínimo en la moneda de la búsqueda (currency); solo entran vacantes con salario informado en esa moneda, sin tipo de cambio.
sortrelevance (predeterminado), date (más recientes) o salary (mayor salario).
langIdioma de las vacantes: pt, en o es. Sin él, todos.
limitVacantes por página, de 1 a 50 (predeterminado 20).
cursorEl valor de nextCursor de la respuesta anterior.
countryPaí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.
currencyMoneda 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.

codeEstadoCuándo ocurre
invalid_parameter400Un parámetro tiene un valor inválido (el campo param dice cuál).
invalid_cursor400El cursor está mal formado o es de otra búsqueda.
invalid_api_key401La clave enviada no existe, fue revocada o está mal formada.
job_not_found404La vacante no existe o ya cerró.
company_not_found404La empresa no existe o no tiene vacantes abiertas.
edition_not_found404La edición del Índice todavía no se publicó.
rate_limited429Pasaste el límite por minuto. Espera el tiempo de Retry-After.
daily_quota_exceeded429La clave pasó la cuota del día, que vuelve a la medianoche UTC.
search_unavailable503La 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.

AccesoPor minutoPor día
Sin clave, API10 por IPsin cuota diaria
Sin clave, MCP30 por IPsin cuota diaria
Con clave gratis6010.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.

Términos de la API