# Brazil Congress Bills Tracker – Projetos de Lei Câmara/Senado (`cairolabs/brazil-bills-monitor`) Actor

Brazil Congress bills tracker: follow the tramitação of projetos de lei (PL, PEC, MPV) in the Câmara dos Deputados and Senado Federal. Current status + andamentos history, alerts only when a bill moves. Search new bills by keyword, type, author, party, UF. Official open data. Pay per bill.

- **URL**: https://apify.com/cairolabs/brazil-bills-monitor.md
- **Developed by:** [Cairo Labs](https://apify.com/cairolabs) (community)
- **Categories:** Business, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 bill returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Brazil Congress bills tracker and bill tracking API**: follow the tramitação of Brazilian bills (projetos de lei) in the **Câmara dos Deputados** and the **Senado Federal** in one run. Give it a list like `PL 2338/2023` and get each bill's **current status and andamentos (history), newest first, in both houses**. Schedule it with `onlyNew: true` and you get, and **pay for, only the bills that moved**. A **search mode** finds new bills by keyword, type, author, party, state (UF) and date. Built on the two houses' **official open-data APIs** (Dados Abertos): no login, no API key, no browser.

### What does this Brazilian legislation tracker do?

- 📌 **Track specific bills (track mode)**: `"mode": "track"`, `"bills": ["PL 2338/2023", "PEC 45/2019"]`. Each bill is looked up in **both houses**; you get **one item per bill per house** where it exists (since 2019 a bill keeps the same number in both houses).
- 🧭 **Current status**: situação, órgão (committee/body) and date, plus the last action and despacho for the Câmara.
- 🗂️ **History**: andamentos newest first, each with date, órgão, description, situação in force and a document link. `maxHistory` (default 20) limits how many are included; `totalEvents` always gives the full count.
- 🔔 **Only new andamentos**: with `onlyNew: true` the actor remembers each bill's andamentos per house (named key-value store, one per `stateKey`). Next runs return only **new** andamentos (`newEvents`). **Bills with nothing new are not returned and not charged.** The first run returns everything as new.
- 🔍 **Search new bills (search mode, default)**: accent/case-insensitive **keywords** on the ementa (`saude` matches `Saúde`) + **exclude terms**; filters by **bill type** (PL, PLP, PEC, MPV, PDL…), **year**, **presentation date** window (default: last 7 days), **author name**, **party** and **state (UF)**.
- 🏛️ **Both houses, one schema**: Câmara dos Deputados and Senado Federal (including Congresso Nacional items such as MPV and PLN), normalized to the same English field names.
- 📄 **Status, authors, last update, full-text (inteiro teor) link** and public bill page.
- 🛡️ Polite rate limiting (3 req/s), timeouts, retries with backoff on 429/5xx; if one house's API is down, the other still delivers.

**Use cases**: government relations and public affairs, lobbying and advocacy, compliance and regulatory monitoring, newsrooms and political journalism, NGOs, legal teams tracking legislation in their sector. Send alerts to Slack/Email via Apify webhooks, n8n, Make or Zapier.

### How to track Brazilian bills step by step?

1. **Follow specific bills**: set `"mode": "track"` and list them in `bills` as `SIGLA NUMBER/YEAR` (`PL 2338/2023`, `pl 5607/2026`, `PL nº 1.234/2025`).
2. **Or find new bills**: keep `"mode": "search"`, choose `sources` (`camara`, `senado`), `keywords` and optional filters (types, author, party, UF, dates).
3. Run it once and check the results (`maxItems` caps the number of items and the cost).
4. For daily alerts, create an Apify **Schedule** with `onlyNew: true` and attach a webhook/integration. Use a different `stateKey` (monitor name) per independent watch list.

### Input example (JSON)

Track mode:

```json
{ "mode": "track", "bills": ["PL 2338/2023", "PL 5607/2026"], "onlyNew": true, "stateKey": "my-watchlist", "maxHistory": 3 }
```

Search mode:

```json
{ "sources": ["camara", "senado"], "keywords": ["inteligência artificial", "dados pessoais"], "excludeKeywords": ["denomina"], "types": ["PL", "PLP", "PEC"], "party": "PT", "uf": "SP", "onlyNew": true, "maxItems": 50 }
```

- **Bill types**: PL Projeto de Lei · PLP Projeto de Lei Complementar · PEC Proposta de Emenda à Constituição · MPV Medida Provisória · PDL Projeto de Decreto Legislativo · PLN (Congresso, budget) · REQ/RQS requerimentos. If you omit `types`, the default is **PL, PLP, PEC, MPV, PDL** (no requerimentos). Any list you pass replaces the default; `[]` returns every type, including REQ/RQS. `types` is case-insensitive; every sigla listed by the official Câmara and Senado APIs is accepted.
- **Dates** are presentation dates (`YYYY-MM-DD`). Without dates, the last 7 days are searched; `year` alone searches that whole year. Long windows are split automatically (the Câmara API accepts at most 3 months per query).
- **Balanced houses**: when both houses have matches, `maxItems` is split between them round-robin (newest first in each house); if one house has fewer matches, the other fills the rest.
- `includeDetails` (default `true`) adds status, authors and full-text link to Câmara bills (2 extra API calls per bill returned); Senado data already includes them.
- **Validation**: a bill not written as `SIGLA NUMBER/YEAR`, or an unknown sigla, fails the run with a clear message before any request is made or anything is charged, e.g. `Invalid input: unknown bill type(s): XYZ. Valid types: PL, PLP, PEC, MPV, ...`.

### Output example

#### Track mode (real run, 2026-10-19, history trimmed to 3)

PL 2338/2023 (the AI framework bill) exists in both houses, so it returns two items. PL 5607/2026 exists only in the Senado, so the Câmara lookup is free and returns nothing.

```json
{
  "mode": "track", "bill": "PL 2338/2023", "source": "camara", "id": "camara-2487262", "type": "PL", "number": 2338, "year": 2023,
  "title": "PL 2338/2023",
  "ementa": "Dispõe sobre o desenvolvimento, o fomento e o uso ético e responsável da inteligência artificial com base na centralidade da pessoa humana.",
  "url": "https://www.camara.leg.br/propostas-legislativas/2487262",
  "currentStatus": { "situation": "Aguardando Parecer", "organ": "MESA", "date": "2026-09-02T15:06", "lastAction": "Notificação de Apensação",
                     "dispatch": "Apensação da proposição PL 1542/2026 à proposição PL 904/2026." },
  "lastUpdate": "2026-09-02T15:06", "regime": "Prioridade (Art. 151, II, RICD)",
  "history": [
    { "date": "2026-09-02T15:06", "organ": "MESA", "situation": "Aguardando Parecer",
      "description": "Notificação de Apensação – Apensação da proposição PL 1542/2026 à proposição PL 904/2026.",
      "url": "https://www.camara.leg.br/proposicoesWeb/prop_mostrarintegra?codteor=3154148" },
    { "date": "2026-09-01T20:10", "organ": "MESA", "situation": "Aguardando Parecer",
      "description": "Notificação de Apensação – Apense-se a este o PL 3060/2026",
      "url": "https://www.camara.leg.br/proposicoesWeb/prop_mostrarintegra?codteor=3157537" },
    { "date": "2026-06-17T19:25", "organ": "MESA", "situation": "Aguardando Parecer",
      "description": "Notificação de Apensação – Apensação da proposição PL 5433/2025 à proposição PL 3782/2025.",
      "url": "https://www.camara.leg.br/proposicoesWeb/prop_mostrarintegra?codteor=3107056" }
  ],
  "newEvents": 386, "totalEvents": 386
}
```

```json
{
  "mode": "track", "bill": "PL 2338/2023", "source": "senado", "id": "senado-8441243", "type": "PL", "number": 2338, "year": 2023,
  "title": "PL 2338/2023", "ementa": "Dispõe sobre o uso da Inteligência Artificial.", "nickname": "Marco Legal da Inteligência Artificial",
  "url": "https://www25.senado.leg.br/web/atividade/materias/-/materia/157233",
  "currentStatus": { "situation": "REMETIDA À CÂMARA DOS DEPUTADOS", "organ": "SEXPE", "date": "2025-03-17" },
  "lastUpdate": "2026-09-09T17:43:42.548", "inProgress": false,
  "history": [
    { "date": "2025-03-17T15:53:41", "organ": "SEXPE", "situation": "REMETIDA À CÂMARA DOS DEPUTADOS",
      "description": "Remetido Ofício SF nº 235, de 17/03/25, ao Senhor Primeiro-Secretário da Câmara dos Deputados, encaminhando autógrafo do projeto para revisão, nos termos do art. 65 da Constituição Federal." },
    { "date": "2024-12-19T18:49:43", "organ": "SEXPE", "situation": "APROVADO O SUBSTITUTIVO", "description": "Anexado o texto revisado." },
    { "date": "2024-12-10T21:14:59", "organ": "PLEN", "situation": "APROVADO O SUBSTITUTIVO",
      "description": "(Sessão Deliberativa Ordinária, realizada em 10/12/2024) Encaminhadas à publicação as Emendas nºs 200 a 244-PLEN. ..." }
  ],
  "newEvents": 375, "totalEvents": 375
}
```

On a second `onlyNew` run with no news, nothing is pushed or charged, and the run ends **Succeeded** with the status message `0 items: no new andamentos since last run: PL 2338/2023 (Câmara), PL 2338/2023 (Senado), PL 5607/2026 (Senado).`

#### Search mode (real sample)

```json
{
  "source": "camara", "id": "camara-2648397", "type": "PL", "typeName": "Projeto de Lei", "number": 5608, "year": 2026,
  "title": "PL 5608/2026",
  "ementa": "Dispõe sobre a dispensa de inscrição suplementar para advogados que atuem em processos fora da jurisdição do Conselho Seccional ...",
  "presentationDate": "2026-10-19T16:24", "authors": ["Kim Kataguiri"],
  "status": "Apresentação de Proposição", "statusBody": "MESA", "lastUpdate": "2026-10-19T16:24",
  "urlInteiroTeor": "https://www.camara.leg.br/proposicoesWeb/prop_mostrarintegra?codteor=3185011",
  "url": "https://www.camara.leg.br/propostas-legislativas/2648397",
  "rawIds": { "camaraId": 2648397, "codTipo": 139 }
}
```

```json
{
  "source": "senado", "id": "senado-9115291", "type": "PL", "typeName": "Projeto de Lei Ordinária", "number": 5607, "year": 2026,
  "title": "PL 5607/2026", "ementa": "Altera a Lei nº 4.737, de 15 de julho de 1965 (Código Eleitoral) ...",
  "presentationDate": "2026-10-19", "authors": ["Senadora Damares Alves (REPUBLICANOS/DF)"],
  "status": "AGUARDANDO DESPACHO", "statusBody": "SF", "lastUpdate": "2026-10-19T16:22:16.605", "inProgress": true,
  "urlInteiroTeor": "https://legis.senado.gov.br/sdleg-getter/dadosabertos/documento/b89c0c71-...",
  "url": "https://www25.senado.leg.br/web/atividade/materias/-/materia/175989",
  "rawIds": { "senadoProcessoId": 9115291, "codigoMateria": 175989, "casa": "SF" }
}
```

Each search item also has `matchedKeywords` (which of your keywords matched; empty when you set none), plus `lastAction`, `lastActionDispatch` (despacho), `regime`, `appreciation`, `nickname` (Senado "apelido"), `apiUrl`, `scrapedAt`. The same bill can appear once per house (`source` tells which). Dates are Brasília time. Export to JSON, CSV or Excel, or read it via the Apify API.

### How much does it cost? (Pricing)

One event, **`bill-result` = US$0.010** ($10 / 1,000), charged **once per item written to the dataset**:

| Mode | 1 charged item = | Free (not charged) |
|---|---|---|
| `search` | 1 bill in 1 house matching your filters | bills already returned earlier (with `onlyNew`), bills over `maxItems` |
| `track` | 1 bill in 1 house **with andamentos to report** (with `onlyNew`: only if it has **new** andamentos) | bills not found in a house, bills with no new andamentos, invalid input |

Example: tracking `PL 2338/2023` without `onlyNew` = 2 items (Câmara + Senado) = US$0.020. A daily `onlyNew` watch-list of 20 bills where 3 moved = US$0.030 that day. `maxItems` is a hard cap on the number of items, and the run stops cleanly when your **max total charge** is reached.

### FAQ

#### Is it legal to use Câmara and Senado data?

Yes – it is public data (Lei de Acesso à Informação) published by both houses through their official open-data APIs (Dados Abertos da Câmara dos Deputados and Dados Abertos do Senado Federal).

#### How do I follow a specific bill's tramitação?

Use `"mode": "track"` with `"bills": ["PL 2338/2023"]`. You get the current status and the andamentos in the Câmara and in the Senado. Add `onlyNew: true` and a daily Schedule to be alerted (and charged) only when the bill moves.

#### How do I get daily alerts for new bills?

Create an Apify Schedule with `onlyNew: true` and attach a webhook/integration. Use a different `stateKey` (monitor name) for each independent watch list.

#### Can I filter bills by party or state?

Yes. For the Câmara the API filters by the author's party and UF; for the Senado they are matched in the author string, e.g. "Senador Fulano (MDB/PA)".

#### Why don't I see requerimentos (REQ/RQS)?

By default `types` is PL, PLP, PEC, MPV and PDL. Set `types` to `[]` for all types, or list the ones you want (e.g. `["REQ", "RQS"]`).

#### What if a bill is not found?

A bill that doesn't exist in one house is just logged (free). If it isn't found in either house, you get a warning and the run's status message tells you which bills to check.

#### Why did my run return 0 items?

The run still ends **Succeeded** and the status message says why: no bill matched (with the counts scanned per house and what to loosen, e.g. `0 bills matched (Câmara scanned 63, Senado scanned 12). Try: widen dateFrom/dateTo or year, remove/loosen keywords, check types, or turn off onlyNew.`), all matches were already returned (`onlyNew`), or the tracked bills had no new andamentos or weren't found. Empty runs cost nothing for results.

#### Does it return the bill's current status?

Yes: the current situação, the body where it sits and the last update. For the Câmara in search mode it comes from the last tramitação (`includeDetails: true`).

### Related actors

- [Brazil Company Due Diligence Report by CNPJ (KYB)](https://apify.com/cairolabs/brazil-company-due-diligence) – Receita data + CEIS/CNEP sanctions + PNCP public contracts + risk level, $0.10 per report.

***

### 🇧🇷 Acompanhamento de tramitação de projetos de lei – Câmara dos Deputados e Senado Federal

**Acompanhe a tramitação** de projetos de lei, PEC, PLP, MPV e PDL na **Câmara dos Deputados** e no **Senado Federal** em uma só execução, com os **dados abertos oficiais**. Informe a lista (`"mode": "track"`, `"bills": ["PL 2338/2023"]`) e receba, **para cada Casa**, a **situação atual** (situação, órgão e data) e o **histórico de andamentos**, do mais recente para o mais antigo.

- 🔔 Com `onlyNew: true` e um agendamento diário, você recebe **só os andamentos novos**. Projetos sem novidade **não aparecem e não são cobrados**.
- 🔍 **Modo busca** de proposições novas: **palavra-chave na ementa** (sem acento/maiúsculas), termos excluídos, **tipo** (PL, PEC…), ano, **data de apresentação**, **autor, partido e UF**; situação atual, autores, **link do inteiro teor** e da página da proposição.
- 💰 **US$ 0,010 por item**: no acompanhamento, 1 item = 1 projeto em 1 Casa com andamentos (novos); na busca, 1 item = 1 proposição em 1 Casa. Projetos não encontrados ou sem andamentos novos são gratuitos.
- ⚠️ Formato `SIGLA NÚMERO/ANO` (ex.: `PL 2338/2023`). Formato ou sigla inválidos encerram a execução com mensagem clara, sem cobrança.
- Exporte para Excel/CSV ou envie para Slack, e-mail, n8n, Make, Zapier. Ideal para relações governamentais, advocacy, compliance regulatório, jornalismo político e escritórios de advocacia.

*Actor comunitário não oficial; sem vínculo com a Câmara dos Deputados, o Senado Federal ou o Congresso Nacional.*

# Actor input Schema

## `mode` (type: `string`):

'search' lists bills matching your filters. 'track' follows the tramitação (andamentos) of the bills listed in 'Bills to track' in both houses: current status + history; with 'Only new' it returns only new andamentos since the last run.

## `bills` (type: `array`):

Used only when mode = track. Format 'SIGLA NUMBER/YEAR', e.g. 'PL 2338/2023', 'PEC 45/2019', 'MPV 1303/2025'. Each bill is looked up in the Câmara and in the Senado; you get one item per house where it exists.

## `maxHistory` (type: `integer`):

Track mode: how many andamentos (newest first) to include in each item's 'history'. 'newEvents' and 'totalEvents' always give the full counts.

## `sources` (type: `array`):

Which houses to monitor. If one API fails, the other still returns results.

## `keywords` (type: `array`):

Accent/case-insensitive match on the bill ementa (summary), e.g. 'inteligencia artificial', 'saúde'. Empty = all.

## `excludeKeywords` (type: `array`):

Drop bills whose ementa contains any of these terms, e.g. 'denomina' (naming of roads/buildings).

## `types` (type: `array`):

Default: PL (projeto de lei), PLP (lei complementar), PEC (emenda constitucional), MPV (medida provisória), PDL (decreto legislativo). Any list you set replaces the default. Empty list \[] = all types, including requerimentos (REQ/RQS). Unknown siglas make the run fail with the list of valid types (case-insensitive).

## `year` (type: `integer`):

Bill year (e.g. 2026). Without dates, searches the whole year.

## `dateFrom` (type: `string`):

Presentation date start. Default: 7 days before 'Presented until'.

## `dateTo` (type: `string`):

Presentation date end. Default: today (Brasília).

## `authorName` (type: `string`):

Part of the author's name, e.g. 'Tabata Amaral' (Câmara: API filter; Senado: API + local match).

## `party` (type: `string`):

Party acronym, e.g. PT, PL, MDB (Câmara: API filter; Senado: matched in the author string).

## `uf` (type: `string`):

Two-letter code, e.g. SP (Câmara: API filter; Senado: matched in the author string).

## `includeDetails` (type: `boolean`):

Fetches the current status (last tramitação), authors and full-text link for each Câmara bill returned (2 extra requests per bill). Senado data already includes them.

## `onlyNew` (type: `boolean`):

Search mode: remembers returned bills and returns only fresh ones. Track mode: remembers each bill's andamentos per house and returns only bills with new andamentos (bills with nothing new are not returned and not charged). State is kept in a named key-value store.

## `stateKey` (type: `string`):

Use different names for independent monitors (search and track keep separate state under the same name).

## `maxItems` (type: `integer`):

Cost cap: max dataset items (search: bills; track: bill-per-house items).

## `maxPagesPerSource` (type: `integer`):

Max pages per date chunk (Câmara, 100 items/page).

## `requestsPerSecond` (type: `integer`):

Polite rate limit for the public APIs.

## `maxRetries` (type: `integer`):

Retries with exponential backoff on timeouts, 429 and 5xx.

## Actor input object example

```json
{
  "mode": "search",
  "bills": [
    "PL 2338/2023"
  ],
  "maxHistory": 5,
  "sources": [
    "camara",
    "senado"
  ],
  "keywords": [
    "inteligência artificial",
    "saúde"
  ],
  "types": [
    "PL",
    "PLP",
    "PEC",
    "MPV",
    "PDL"
  ],
  "includeDetails": true,
  "onlyNew": false,
  "stateKey": "default",
  "maxItems": 10,
  "maxPagesPerSource": 20,
  "requestsPerSecond": 3,
  "maxRetries": 3
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per bill (proposição) matching the filters: house, bill id, ementa, authors, presentation date, status, last update, full-text and public page links.

## `tracking` (type: `string`):

One row per bill per house: current status, number of new andamentos and the andamentos history (newest first).

## `results` (type: `string`):

All dataset items with every field.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "bills": [
        "PL 2338/2023"
    ],
    "maxHistory": 5,
    "keywords": [
        "inteligência artificial",
        "saúde"
    ],
    "types": [
        "PL",
        "PLP",
        "PEC",
        "MPV",
        "PDL"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("cairolabs/brazil-bills-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "bills": ["PL 2338/2023"],
    "maxHistory": 5,
    "keywords": [
        "inteligência artificial",
        "saúde",
    ],
    "types": [
        "PL",
        "PLP",
        "PEC",
        "MPV",
        "PDL",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cairolabs/brazil-bills-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "bills": [
    "PL 2338/2023"
  ],
  "maxHistory": 5,
  "keywords": [
    "inteligência artificial",
    "saúde"
  ],
  "types": [
    "PL",
    "PLP",
    "PEC",
    "MPV",
    "PDL"
  ],
  "maxItems": 10
}' |
apify call cairolabs/brazil-bills-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cairolabs/brazil-bills-monitor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mu6VyTAVbntJ0a2bM/builds/LIbL9c6rexqSYaocJ/openapi.json
