Install
openclaw skills install @olegantonov/senado-federalResearch Brazil's Federal Senate using its official legislative and administrative open-data APIs. Use for senators, Senate bills and processes, votes, agendas, committees, speeches, mandates, CEAP expenses, contracts, or transparency records; use camara-deputados for Chamber-only records.
openclaw skills install @olegantonov/senado-federalUse official Senate data for factual legislative research and reproducible integrations.
https://legis.senado.leg.br/dadosabertoshttps://legis.senado.leg.br/dadosabertos/api-docs/swagger-ui/index.htmlhttps://adm.senado.gov.br/adm-dadosabertospython3 scripts/senado.py <command>.SenadoClient or SenadoAdmClient from senado_client.py./senador/lista/atual.json only for current officeholders. For a historical cohort, query /senador/lista/legislatura/{legislatura}/{legislatura}.json?exercicio=S; the single-legislature route has produced a single record instead of the cohort./processo for searches by author and for cross-house status. The autor parameter on /materia/pesquisa/lista is not reliable.as_list. Never use the first arbitrary list found by a depth-first search as a business result.IdentificacaoProcesso and a Senate CodigoMateria; they are not interchangeable.America/Sao_Paulo and state the retrieval date when freshness matters..json suffix; /processo search is queried without it.dataIni and dataFim in YYYYMMDD. Query one calendar year at a time because broad multi-year ranges can fail or time out.DiscursosParlamentar, MateriasAutoriaParlamentar, MateriasRelatoriaParlamentar, VotacaoParlamentar, MembroComissaoParlamentar, and MandatoParlamentar.{ "data": [...] }; reject other success shapes instead of silently treating them as empty.valorReembolsado, not valor.from senado_client import SenadoAdmClient, SenadoClient
client = SenadoClient()
try:
senadores = await client.buscar_senador_por_nome("nome")
processos = await client.pesquisar_processos(
autor=senadores[0]["IdentificacaoParlamentar"]["NomeParlamentar"],
tramitando=True,
)
autorias = await client.get_autorias_senador(senadores[0]["IdentificacaoParlamentar"]["CodigoParlamentar"])
finally:
await client.close()
adm = SenadoAdmClient()
try:
despesas = await adm.get_ceap(2026)
total = sum(float(item["valorReembolsado"]) for item in despesas)
finally:
await adm.close()