The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The tesouror package provides a unified R interface to
the Brazilian National Treasury (Tesouro Nacional) open data APIs. It
covers six major data sources:
| API | Data | Prefix |
|---|---|---|
| SICONFI | Fiscal reports (RREO, RGF, DCA, MSC), entities | get_ |
| CUSTOS | Federal government costs | get_custos_ / get_costs_ |
| SADIPEM | Public debt & credit operations | get_pvl / get_opc_ /
get_res_ |
| SIORG | Federal organizational structure (dictionary for CUSTOS) | get_siorg_ |
| Transferências | Constitutional transfers to states/municipalities | get_tc_ |
| SIOPE | Education spending (FNDE/MEC) | get_siope_ |
All functions return tidy tibbles, use in-memory caching, and have both Portuguese-named (matching the API) and English-named versions.
library(tesouror)
# List all government entities
entes <- get_entes()
# Get RREO data for Tocantins (IBGE code 17)
rreo <- get_rreo(
an_exercicio = 2022, nr_periodo = 6,
co_tipo_demonstrativo = "RREO",
no_anexo = "RREO-Anexo 01",
co_esfera = "E", id_ente = 17
)
# Same query using English aliases
rreo <- get_budget_report(
fiscal_year = 2022, period = 6,
report_type = "RREO",
appendix = "RREO-Anexo 01",
sphere = "E", entity_id = 17
)
# Federal government costs (always filter by org to avoid slow queries!)
custos <- get_custos_pessoal_ativo(
ano = 2023, mes = 6,
organizacao_n1 = 244, # MEC (auto-padded)
organizacao_n2 = 249 # INEP
)
# Constitutional transfers (codes are Treasury-internal, NOT IBGE!)
estados <- get_tc_estados()
pe_code <- estados$codigo[estados$nome == "Pernambuco"]
tc <- get_tc_por_estados(p_estado = pe_code, p_ano = 2023)
# Education spending data from SIOPE
indicadores <- get_siope_indicators(year = 2023, period = 6, state = "PE")All functions cache responses in-memory during your R session. This means repeated calls with the same parameters are instantaneous. To clear the cache:
Every function has two versions. The Portuguese version uses the exact API parameter names, while the English version uses descriptive English names:
# Portuguese (API-native)
get_dca(an_exercicio = 2022, id_ente = 17)
# English
get_annual_accounts(fiscal_year = 2022, entity_id = 17)Both call the same endpoint and return the same data. See the
vignette("siconfi"), vignette("custos"),
vignette("sadipem"), vignette("siorg"),
vignette("transferencias"), and
vignette("siope") articles for API-specific details.
verboseEvery function has a verbose parameter that prints the
full API URL being called. This is useful for debugging or testing in a
browser/curl:
# Per call:
get_costs_active_staff(year = 2023, month = 6, org_level1 = 244, verbose = TRUE)
#> ℹ API call: https://apidatalake.tesouro.gov.br/ords/custos/tt/pessoal_ativo?ano=2023&mes=6&organizacao_n1=000244&limit=1000
# Or globally for the session:
options(tesouror.verbose = TRUE)
get_entes() # will print the URL
options(tesouror.verbose = FALSE) # turn offORDS-based APIs (SICONFI, CUSTOS, SADIPEM) return paginated results.
The page_size parameter controls how many rows per
page:
# CUSTOS defaults to 1000 rows/page (server default is only 250)
custos <- get_costs_active_staff(
year = 2023, org_level1 = 244, org_level2 = 249
)
# Lower for quick tests:
custos_sample <- get_costs_active_staff(
year = 2023, org_level1 = 244, org_level2 = 249,
page_size = 100, max_rows = 200
)
# SICONFI/SADIPEM default to server's 5000 rows/page (fast)
entes <- get_entes()All API responses are cleaned with
janitor::clean_names() to ensure consistent snake_case
column names (e.g., CO_IBGE becomes
co_ibge).
Base URL:
https://apidatalake.tesouro.gov.br/ords/siconfi/tt/
Fiscal reports (RREO, RGF, DCA), accounting matrices (MSC), and
entity registry. Maintained by STN. ORDS pagination
(hasMore/offset) with server default of 5,000
rows/page. 18 functions (9 PT + 9 EN).
Base URL:
https://apidatalake.tesouro.gov.br/ords/custos/tt/
Cost data for active/retired staff, pensioners, depreciation,
transfers, and other costs. ORDS pagination with default of
1,000 rows/page (server default of 250 is too slow;
5,000 causes timeouts). SIORG codes are auto-padded (244 →
"000244"). 12 functions (6 PT + 6 EN).
Warning: Always filter by organization level (
organizacao_n1+organizacao_n2) to avoid downloading hundreds of thousands of rows.
Base URL:
https://apidatalake.tesouro.gov.br/ords/sadipem/tt/
PVL (public debt verification letters), credit operations, payment schedules, exchange rates, and debt capacity. ORDS pagination with server default of 5,000 rows/page. 14 functions (7 PT + 7 EN).
Base URL:
https://apiapex.tesouro.gov.br/aria/v1/transferencias_constitucionais/custom/
Constitutional transfers (FPE, FPM, FUNDEB, etc.). No pagination
(single response). Accepts vectors (c(1,2)) or
colon-separated strings ("1:2"). Uses
Treasury-internal codes, not IBGE. 14 functions (7 PT +
7 EN).
Base URL:
https://estruturaorganizacional.dados.gov.br/
Federal organizational structure: ministries, autarchies, foundations. Used as a dictionary for CUSTOS organization codes. No pagination. 6 functions (3 PT + 3 EN).
Base URL:
https://www.fnde.gov.br/olinda-ide/servico/DADOS_ABERTOS_SIOPE/versao/v1/odata/
Education spending data from FNDE/MEC: revenues, expenses,
indicators, staff compensation. OData pagination
($top/$skip) with default of 1,000
rows/page. Supports server-side filter (OData
$filter), orderby, and select. 16
functions (8 PT + 8 EN).
Tip: Use
filter = "NOM_MUNI eq 'Recife'"to narrow results on the server. Column names infilter/select/orderbymust use the original API names (uppercase). Runtoupper(names(result))on amax_rows = 1query to discover them.
All 80 functions share these features:
tesouror_clear_cache().verbose mode: Per call
(verbose = TRUE) or globally
(options(tesouror.verbose = TRUE)).max_rows: Cap the number of rows
returned (adjusts limit or $top
automatically).janitor::clean_names() applied to all responses.filter/select.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.