API de resultados · JSON
API do TSE: como pegar o resultado da eleição em JSON
Por Voto Aberto · atualizado em 27/10/2026 · fonte: Tribunal Superior Eleitoral (TSE)
Resposta curta
O resultado oficial fica em arquivos JSON públicos em resultados.tse.jus.br/oficial/ele2026/. Não precisa de cadastro nem de chave.
O endereço segue um padrão: <eleição>/dados/<uf>/<uf><município>-c0001-e<eleição com 6 dígitos>-u.json. Para presidente, a eleição 6257 é o 1º turno e a 6258, o 2º.
E a API do Portal de Dados Abertos?
O Portal de Dados Abertos do TSE usa o CKAN, que tem API própria. Para listar os arquivos de um conjunto, com endereço e data de atualização, abra https://dadosabertos.tse.jus.br/api/3/action/package_show?id=resultados-2026 (troque o final por resultados-2026-boletim-de-urna ou eleitorado-2026). Use essa API para achar o arquivo e a API de Resultados para o número da noite da apuração.
Passo a passo com os arquivos do TSE
- Escolha a eleição. 6257 para o 1º turno de presidente (04/10/2026) e 6258 para o 2º (25/10/2026).
- Pegue o código do município. A lista com código TSE (5 dígitos), código IBGE (7) e nome está em
<eleição>/config/mun-e<eleição>-cm.json. - Monte o endereço do resultado.
brpara o Brasil,sppara o estado ousp71072para a cidade de São Paulo. O cargo 1 (c0001) é presidente. - Leia os campos.
straz as seções (tstotal,sttotalizadas),eo eleitorado (ccomparecimento) ecarg[0].agr[].par[].cand[]os candidatos, com os votos emvap.
Código pronto para copiar
# Resultado oficial da eleição de 2026 direto da API JSON do TSE (só biblioteca padrão)
import json, urllib.request
BASE = "https://resultados.tse.jus.br/oficial/ele2026"
ELEICAO = 6258 # presidente: 6257 = 1º turno, 6258 = 2º turno
def tse(caminho):
req = urllib.request.Request(f"{BASE}/{caminho}", headers={"User-Agent": "estudo-dados-tse/1.0"})
with urllib.request.urlopen(req, timeout=30) as r:
return json.load(r)
def resultado(uf="br", municipio=""):
"""uf='br' para o país; uf='sp', municipio='71072' para a cidade de São Paulo."""
d = tse(f"{ELEICAO}/dados/{uf}/{uf}{municipio}-c0001-e{ELEICAO:06d}-u.json")
cands = sorted((c for agr in d["carg"][0]["agr"] for par in agr["par"] for c in par["cand"]), key=lambda c: int(c["n"]))
return {
"atualizado": f'{d["dg"]} {d["hg"]}',
"secoes_totalizadas": f'{d["s"]["st"]} de {d["s"]["ts"]}',
"comparecimento": int(d["e"]["c"]),
"votos": {f'{c["n"]} {c["nmu"]}': int(c["vap"]) for c in cands},
}
# Lista de municípios: código TSE (5 dígitos), código IBGE (7) e nome
cfg = tse(f"{ELEICAO}/config/mun-e{ELEICAO:06d}-cm.json")
municipios = [(uf["cd"], m["cd"], m["cdi"], m["nm"]) for uf in cfg["abr"] for m in uf["mu"]]
print(len(municipios), "municípios e localidades; ex.:", municipios[0])
print(resultado()) # Brasil
print(resultado("sp", "71072")) # São Paulo (SP)# Resultado oficial da eleição de 2026 direto da API JSON do TSE (pacote jsonlite)
library(jsonlite)
base <- "https://resultados.tse.jus.br/oficial/ele2026"
eleicao <- 6258L # presidente: 6257 = 1º turno, 6258 = 2º turno
resultado <- function(uf = "br", municipio = "") {
url <- sprintf("%s/%d/dados/%s/%s%s-c0001-e%06d-u.json", base, eleicao, uf, uf, municipio, eleicao)
d <- fromJSON(url, simplifyVector = FALSE)
cands <- list()
for (a in d$carg[[1]]$agr) for (p in a$par) cands <- c(cands, p$cand)
r <- data.frame(numero = as.integer(sapply(cands, `[[`, "n")),
nome = sapply(cands, `[[`, "nmu"),
votos = as.numeric(sapply(cands, `[[`, "vap")))
r[order(r$numero), ]
}
resultado() # Brasil
resultado("sp", "71072") # São Paulo (SP)O código em R usa os pacotes jsonlite e data.table (install.packages(c("jsonlite", "data.table"))).
Saída do Python em 26/10/2026: Brasil com 499.248 de 499.248 seções totalizadas, 13 LULA 64.256.232 e 22 FLAVIO BOLSONARO 59.826.041 votos. O código em Python foi executado pelo Voto Aberto em 26/10/2026.
Erros comuns
- Número da eleição sem zeros: no nome do arquivo ele tem 6 dígitos (
e006258), mas na pasta vai sem zeros (6258/). - Os números vêm como texto:
"64256232". Converta comint()ouas.numeric()antes de somar. - Esta API é a da noite da apuração. Para análise por seção, prefira os arquivos dos Dados Abertos (veja os outros guias).
- Erro de certificado no Mac (
CERTIFICATE_VERIFY_FAILED): no Python do python.org, rode oInstall Certificates.commandda pasta do Python. - Muitas chamadas seguidas podem ser bloqueadas. Baixe uma vez, guarde e espaçe as consultas.
Quer o dado já limpo?
O Voto Aberto publica o resultado de presidente em 2026 por município e por local de votação, com endereço e coordenadas, conferido com o total oficial do TSE. Licença CC BY 4.0.
Baixar o datasetTodos os dadosPerguntas frequentes
O TSE tem API de dados abertos?
Tem duas. O site de Resultados publica arquivos JSON por município, estado e país. O Portal de Dados Abertos usa o CKAN, cuja API (package_show) lista os arquivos de cada conjunto com endereço e data de atualização.
A API do TSE é oficial e gratuita?
Sim. São os mesmos arquivos JSON que alimentam o site de resultados do TSE. O acesso é livre, sem cadastro e sem chave.
Qual o código da eleição de presidente em 2026?
6257 para o 1º turno (04/10/2026) e 6258 para o 2º turno (25/10/2026).
Onde acho o código do município?
No arquivo de configuração mun-e006258-cm.json, que traz o código do TSE, o do IBGE e o nome de cada município.
Dá para pegar o resultado por seção nessa API?
Por seção, use os Dados Abertos do TSE (arquivo votacao_secao) ou os boletins de urna. A API de resultados agrega por município, estado e país.
Outros guias
Fontes: Resultados — TSE · Configuração de municípios (2º turno). Como citar: “Voto Aberto, com dados do TSE”.



