---
title: "Lista o catálogo com o texto de cada anúncio"
method: GET
path: "/api/v1/agent/jobs"
tags: ["Catálogo"]
---

# Lista o catálogo com o texto de cada anúncio

`GET /api/v1/agent/jobs`

## Request

- Base URL: `https://rebasedev.com.br`
- URL: `https://rebasedev.com.br/api/v1/agent/jobs`
- Auth: HTTP bearer

Mesmos filtros da listagem normal (inclusive `esconder_ocultas`), o mesmo `oculta` por vaga, e o texto completo de cada anúncio junto. Existe por uma conta: ler 20 vagas custa 1 request aqui e 21 na listagem normal. A resposta é grande por natureza, então gasta o limite da conta mais rápido. Com `formato=markdown`, cada vaga traz também `description_md` (a resposta quase dobra).

## Query parameters

- `q` string
- `titulo` boolean
- `onde` 'titulo' | 'tudo'
- `esconder_ocultas` boolean
- `minhas_skills` boolean
- `empresa` string
- `skill` string[]
- `nivel` string[]
- `modelo` string[]
- `pagina` integer
- `por_pagina` integer
- `formato` 'texto' | 'markdown'

## Response `200`

Sucesso.

- JobDetailListResponse
  - `data` JobDetailNaBusca[], required
    - `slug` string, required
    - `title` string, required
    - `company` object, nullable, required
      - `name` string, required
      - `slug` string, required
    - `location` string, nullable, required
    - `hires_in_brazil` 'unknown' | 'yes' | 'no', required: O veredito do catálogo sobre a vaga contratar no Brasil. Vaga que a curadoria publicou à mão sai `yes`, e `decidido_pela_curadoria` diz que a decisão é nossa, não prova no texto. Na prática é sempre `yes`; as outras só aparecem em `eu/vagas`, na vaga que saiu do catálogo depois de acompanhada.
    - `decidido_pela_curadoria` boolean, required: `true` quando o `hires_in_brazil: yes` desta vaga é decisão da curadoria (a vaga foi publicada à mão, com motivo) e não prova achada no texto do anúncio. A prova e o motivo não saem na API. `false` na vaga que a regra do catálogo aprovou sozinha.
    - `remote` boolean, nullable, required: O campo cru do ATS, sem interpretação nossa. Nulo quando o ATS não declarou, que é o comum: **não quer dizer que a vaga não é remota**. A prova do catálogo está em `remoto_comprovado`.
    - `work_mode` 'remote' | 'hybrid' | 'onsite' | 'null', nullable, required: Como o ATS declarou o modelo de trabalho, normalizado. Campo cru do ATS: nulo quando ele não declarou, e isso não diz nada sobre a vaga ser remota. A prova do catálogo está em `remoto_comprovado`.
    - `remoto_comprovado` boolean, required: A vaga tem remoto comprovado: pela regra do catálogo (evidência no campo do ATS ou no texto do anúncio) ou pela curadoria, que a publicou à mão com motivo. Toda vaga que a API devolve passou por isso, então na prática é sempre `true`. É o fato do catálogo; `remote` e `work_mode` são o que o ATS declarou.
    - `seniority` 'júnior' | 'pleno' | 'sênior' | 'staff' | 'liderança' | 'null', nullable, required: O nível que o título anuncia; quando o título não diz, `pleno` se o anúncio pede de 2 a 4 anos de experiência. Nulo quando nem um nem outro diz: o catálogo não chuta.
    - `skills` string[], required
    - `skills_no_titulo` unknown[], required
      - unknown
    - `hiring_models` string[], required: O modelo de contrato no Brasil: `clt` (CLT, pago em reais), `pj` (PJ ou contractor), `eor` (employer of record). São os que o anúncio afirma ou, quando ele não diz, os da empresa. Vazia quando nem um nem outro diz (o `nao-informado` do filtro `modelo`). Lido do texto do anúncio com padrões fixos, sem IA.
    - `salary` string, nullable, required
    - `salary_min` integer, nullable, required
    - `salary_max` integer, nullable, required
    - `salary_currency` string, nullable, required
    - `salary_interval` 'YEAR' | 'MONTH' | 'HOUR' | 'null', nullable, required: A que período `salary_min` e `salary_max` se referem.
    - `published_at` string, date-time, nullable, required
    - `first_seen_at` string, date-time, nullable, required
    - `apply_url` string, required
    - `url` string, uri, required: A página da vaga no catálogo, em URL absoluta. É o link pra repassar a uma pessoa ou citar como fonte.
    - `description` string, required
    - `closed_at` string, date-time, nullable, required: Quando a vaga saiu do ATS. Nulo enquanto está aberta.
    - `tambem_publicada` object[], required: O mesmo anúncio, publicado pela empresa pra outras regiões. O catálogo mostra uma vaga só (esta) e lista aqui as outras publicações abertas, com o local e o link de candidatura de cada uma: às vezes o recrutador separa as candidaturas pelo anúncio. Vazia quando a vaga não tem outra publicação.
      - `local` string, nullable, required: O local que o ATS deu a essa publicação. Nulo quando não deu.
      - `url_de_candidatura` string, uri, required
    - `oculta` boolean, required: Você (a conta dona do token) ocultou esta vaga. Com `esconder_ocultas=true` nenhuma vem com `true`.
    - `skills_em_comum` integer: Só com `minhas_skills=true`: quantas skills do seu perfil a vaga cita (a primeira chave da ordem). Ausente sem o filtro.
    - `description_md` string, nullable: Só com `formato=markdown`: o mesmo anúncio de `description` em markdown restrito, com títulos (`##`, `###`), parágrafos, `**negrito**`, `_itálico_`, listas (`-` e `1.`, um nível de recuo) e links `http`, `https` ou `mailto`. Nunca traz HTML. Nulo quando o ATS só entregou texto puro; aí vale `description`. Ausente sem o parâmetro.
  - `meta` Meta, required
    - `total` integer, required: Quantas vagas o filtro casou, no catálogo inteiro.
    - `pagina` integer, required
    - `paginas` integer, required
    - `por_pagina` integer, required
    - `busca` object: Só com `q`. O modo de busca que valeu e o que o outro acharia, pra você não concluir "não há vagas" por ter buscado só no título. **Se `total` for pouco ou 0 e `total_no_outro_modo` for maior, repita com o outro modo** (`onde=tudo` ou `onde=titulo`).
      - `onde` 'titulo' | 'tudo' | 'padrao', required: `titulo` (só o título), `tudo` (título ou descrição, por data) ou `padrao` (sem `onde`: título ou descrição, título primeiro).
      - `total` integer, required: O mesmo `total` da lista.
      - `total_no_outro_modo` integer, required: Quantas o outro modo acharia, com os mesmos filtros: de `titulo`, o `tudo`; de `tudo` e `padrao`, o `titulo`.
      - `dica` string, required: Uma frase em português, pronta pra agir.
    - `ignored_params` object[]: Os parâmetros que a API não conhece, devolvidos em vez de engolidos. **Confira este campo**: um filtro que não existiu faz o `total` responder uma pergunta mais ampla do que a que você fez. Sai só quando há algum.
      - `param` string, required
      - `did_you_mean` string: O parecido, quando há um a distância 2.

## Other responses

- `401`: Sem token, ou token inválido ou revogado. `code` é `unauthorized`, e a resposta traz `WWW-Authenticate: Bearer`. Gere um token em `/vagas/perfil/agentes` (entrando com o LinkedIn) e mande em `Authorization: Bearer <token>`.
- `403`: O token é válido, mas a conta não tem acesso ao catálogo pela API. `code` é `forbidden`. Gerar outro token não resolve: é a conta que precisa de acesso.
- `422`: Parâmetro inválido, com `code` `invalid_params`: valor fora do teto (`por_pagina`, ou `pagina` acima de 500), número fracionário em `pagina` ou `por_pagina`, slug de skill, de nível ou de empresa inexistente, busca curta demais, `titulo` ou `esconder_ocultas` que não é booleano, `onde` fora de `titulo` e `tudo`; nas rotas de escrita, etapa desconhecida, skill fora do dicionário, campo desconhecido no corpo ou corpo que não é objeto JSON. Em qualquer rota, parâmetro com o caractere nulo (`\u0000`). No texto do CV (`.../cv`), `cv_ilegivel`: o PDF não tem texto que se leia.
- `429`: Mais de 60 chamadas no minuto, pela mesma conta (com token) ou pelo mesmo IP (sem). `code` é `rate_limited`. Espere o `Retry-After`; melhor ainda, leia o `X-RateLimit-Remaining` das respostas de sucesso e se autorregule antes de chegar aqui.

---

[API](https://skmtc.dev/rebasedev/apis/rebase-jobs-api.md) · [All operations](https://skmtc.dev/rebasedev/apis/rebase-jobs-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rebasedev/apis/rebase-jobs-api/revisions/ec4ed03ac794?raw)
