Skip to main content
Jarbas exposes a public JSON REST API that serves all the data collected and analyzed by Serenata de Amor. No authentication is required. Base URL: https://jarbas.serenata.ai/api/
All endpoints return JSON and support pagination. No API key or authentication header is needed.

Available resources

Reimbursements

Browse every expense reimbursement claimed by Brazilian congresspeople, with suspicion flags and Rosie’s probability scores.

Subquotas

List the official expense categories (subquotas) under which reimbursements can be claimed.

Applicants

Look up congresspeople and party leaderships by name or applicant ID.

Companies

Retrieve registration details for Brazilian companies that appear as suppliers in reimbursement records.

Quick example

Fetch all reimbursements from 2016 that Rosie has flagged as suspicious:
GET https://jarbas.serenata.ai/api/chamber_of_deputies/reimbursement/?year=2016&suspicions=1
Filter by multiple criteria at once:
GET https://jarbas.serenata.ai/api/chamber_of_deputies/reimbursement/?year=2016&cnpj_cpf=11111111111111&subquota_number=42&order_by=probability
This returns all 2016 reimbursements made to the supplier with CNPJ 11.111.111/1111-11 under subquota 42, sorted by highest suspicion probability.

Filtering parameters

Most list endpoints on /api/chamber_of_deputies/reimbursement/ accept these query parameters:
ParameterTypeDescription
yearintegerFilter by reimbursement year
monthintegerFilter by reimbursement month
issue_date_startdateInclusive lower bound on issue date
issue_date_enddateExclusive upper bound on issue date
ParameterTypeDescription
applicant_idstringFilter by applicant (congressperson or leadership) ID
cnpj_cpfstringFilter by supplier CNPJ or CPF (digits only)
document_idstringFilter by specific document ID; accepts comma-separated values
statestringFilter by the congressperson’s state
subquota_numberintegerFilter by subquota category ID
ParameterTypeDescription
suspicionsboolean (1/0)1 returns only reimbursements flagged as suspicious
receipt_urlboolean (1/0)1 returns only reimbursements with a digitalized receipt
in_latest_datasetboolean (1/0)1 returns only records present in the most recent dataset

Response format

All list endpoints return a paginated JSON object:
{
  "count": 4823901,
  "next": "https://jarbas.serenata.ai/api/chamber_of_deputies/reimbursement/?page=2",
  "previous": null,
  "results": [
    {
      "document_id": "6238850",
      "congressperson_name": "ABEL MESQUITA JR.",
      "year": 2016,
      "month": 11,
      "supplier": "TAM LINHAS AEREAS S.A.",
      "cnpj_cpf": "02012862000160",
      "document_value": 1842.50,
      "total_net_value": 1842.50,
      "subquota_description": "Flight ticket issue",
      "suspicions": null,
      "probability": null,
      "receipt": {
        "fetched": true,
        "url": "http://www.camara.gov.br/cota-parlamentar/documentos/publ/..."
      },
      "rosies_tweet": null
    }
  ]
}

Python wrapper

The tapioca-jarbas package provides a Python client for the API built on tapioca-wrapper.
pip install tapioca-jarbas
from tapioca_jarbas import Jarbas

api = Jarbas()

# List suspicious reimbursements from 2016
reimbursements = api.reimbursements().get(params={
    'year': 2016,
    'suspicions': 1,
    'order_by': 'probability'
})

for item in reimbursements().data()['results']:
    print(item['congressperson_name'], item['document_value'])

Endpoints at a glance

EndpointDescription
GET /api/chamber_of_deputies/reimbursement/List all reimbursements with filters
GET /api/chamber_of_deputies/reimbursement/<document_id>/Single reimbursement by document ID
GET /api/chamber_of_deputies/reimbursement/<document_id>/receipt/Fetch the digitalized receipt URL
GET /api/chamber_of_deputies/reimbursement/<document_id>/same_day/All reimbursements from the same day as this document
GET /api/chamber_of_deputies/subquota/List all expense subquota categories
GET /api/chamber_of_deputies/applicant/List all applicants (congresspeople and leaderships)
GET /api/company/<cnpj>/Company details by CNPJ (digits only)
Receipt URLs point to PDF files hosted on the Brazilian Chamber of Deputies server. Not all receipts have been digitalized — receipt.url may be null. Append ?force=1 to the receipt endpoint to re-fetch the URL from the Chamber’s server.

Build docs developers (and LLMs) love