FutPythonTrader API

Acesse dados históricos de 3 fontes via API REST

📊 Planos de Acesso
🆓 Plano Gratuito

Acesso às ligas:

  • BRAZIL 1
  • ENGLAND 1
  • FRANCE 1
  • GERMANY 1
  • ITALY 1
  • PORTUGAL 1
  • SPAIN 1
⭐ Plano Premium

Usuários que fazem parte da Comunidade FutPythonTrader ou assinam o Software de Backtesting têm acesso premium gratuito a esta API com todas as ligas liberadas!

Ligas por fonte:

  • ARGENTINA 1
  • AUSTRALIA 1
  • AUSTRIA 1
  • AUSTRIA 2
  • BELGIUM 1
  • BELGIUM 2
  • BOSNIA 1
  • BRAZIL 1
  • BRAZIL 2
  • BULGARIA 1
  • CHILE 1
  • CHINA 1
  • COPA LIBERTADORES
  • CROATIA 1
  • CZECH 1
  • DENMARK 1
  • EGYPT 1
  • ENGLAND 1
  • ENGLAND 2
  • ENGLAND 3
  • ENGLAND 4
  • ESTONIA 1
  • EUROPA CHAMPIONS LEAGUE
  • FINLAND 1
  • FRANCE 1
  • FRANCE 2
  • FRANCE 3
  • GERMANY 1
  • GERMANY 2
  • GERMANY 3
  • GREECE 1
  • ICELAND 1
  • IRELAND 1
  • IRELAND 2
  • ISRAEL 1
  • ITALY 1
  • ITALY 2
  • ITALY 3
  • JAPAN 1
  • JAPAN 2
  • NETHERLANDS 1
  • NETHERLANDS 2
  • NORTHERN IRELAND 1
  • NORWAY 1
  • NORWAY 2
  • PARAGUAY 1
  • POLAND 1
  • PORTUGAL 1
  • PORTUGAL 2
  • ROMANIA 1
  • SAUDI ARABIA 1
  • SCOTLAND 1
  • SCOTLAND 2
  • SERBIA 1
  • SLOVAKIA 1
  • SLOVENIA 1
  • SOUTH AFRICA 1
  • SOUTH KOREA 1
  • SOUTH KOREA 2
  • SPAIN 1
  • SPAIN 2
  • SWEDEN 1
  • SWEDEN 2
  • SWITZERLAND 1
  • TURKEY 1
  • UKRAINE 1
  • USA 1
  • WALES 1
  • ARGENTINA 1
  • AUSTRALIA 1
  • AUSTRIA 1
  • AUSTRIA 2
  • BELGIUM 1
  • BELGIUM 2
  • BOSNIA 1
  • BRAZIL 1
  • BRAZIL 2
  • BULGARIA 1
  • CHILE 1
  • CHINA 1
  • CROATIA 1
  • CZECH 1
  • DENMARK 1
  • EGYPT 1
  • ENGLAND 1
  • ENGLAND 2
  • ENGLAND 3
  • ENGLAND 4
  • ESTONIA 1
  • EUROPA CHAMPIONS LEAGUE
  • FINLAND 1
  • FRANCE 1
  • FRANCE 2
  • FRANCE 3
  • GERMANY 1
  • GERMANY 2
  • GERMANY 3
  • GREECE 1
  • ICELAND 1
  • IRELAND 1
  • IRELAND 2
  • ISRAEL 1
  • ITALY 1
  • ITALY 2
  • ITALY 3
  • JAPAN 1
  • JAPAN 2
  • NETHERLANDS 1
  • NETHERLANDS 2
  • NORTHERN IRELAND 1
  • NORWAY 1
  • NORWAY 2
  • PARAGUAY 1
  • POLAND 1
  • PORTUGAL 1
  • PORTUGAL 2
  • PORTUGAL 3
  • ROMANIA 1
  • SAUDI ARABIA 1
  • SCOTLAND 1
  • SCOTLAND 2
  • SERBIA 1
  • SLOVAKIA 1
  • SLOVENIA 1
  • SOUTH AFRICA 1
  • SOUTH KOREA 1
  • SOUTH KOREA 2
  • SPAIN 1
  • SPAIN 2
  • SPAIN 3
  • SWEDEN 1
  • SWEDEN 2
  • SWITZERLAND 1
  • SWITZERLAND 2
  • TURKEY 1
  • TURKEY 2
  • UKRAINE 1
  • USA 1
  • WALES 1
  • ARGENTINA 1
  • AUSTRALIA 1
  • AUSTRIA 1
  • AUSTRIA 2
  • BELGIUM 1
  • BELGIUM 2
  • BOSNIA 1
  • BRAZIL 1
  • BRAZIL 2
  • BULGARIA 1
  • CHILE 1
  • CHINA 1
  • CROATIA 1
  • CZECH 1
  • DENMARK 1
  • EGYPT 1
  • ENGLAND 1
  • ENGLAND 2
  • ENGLAND 3
  • ENGLAND 4
  • ESTONIA 1
  • EUROPA CHAMPIONS LEAGUE
  • FRANCE 1
  • FRANCE 2
  • FRANCE 3
  • GERMANY 1
  • GERMANY 2
  • GERMANY 3
  • GREECE 1
  • ICELAND 1
  • IRELAND 1
  • IRELAND 2
  • ISRAEL 1
  • ITALY 1
  • ITALY 2
  • ITALY 3
  • JAPAN 1
  • JAPAN 2
  • NETHERLANDS 1
  • NETHERLANDS 2
  • NORTHERN IRELAND 1
  • NORWAY 1
  • NORWAY 2
  • POLAND 1
  • PORTUGAL 1
  • PORTUGAL 2
  • PORTUGAL 3
  • ROMANIA 1
  • SAUDI ARABIA 1
  • SCOTLAND 1
  • SCOTLAND 2
  • SERBIA 1
  • SLOVENIA 1
  • SOUTH AFRICA 1
  • SOUTH KOREA 1
  • SOUTH KOREA 2
  • SPAIN 1
  • SPAIN 2
  • SPAIN 3
  • SWEDEN 1
  • SWEDEN 2
  • SWITZERLAND 1
  • SWITZERLAND 2
  • TURKEY 1
  • TURKEY 2
  • USA 1
🔐 Autenticação por Token
  1. Crie sua conta em Cadastro
  2. Obtenha seu token via página de perfil ou endpoint `POST /api/auth/login/`
  3. Use o header Authorization: Token <seu_token> em todas as chamadas
Exemplo - Obter token:
curl -X POST https://api.futpythontrader.com/api/auth/login/ \
    -H "Content-Type: application/json" \
    -d '{"username": "SEU_USUARIO", "password": "SUA_SENHA"}'

Resposta: {"token": "abc123...", "perfil": {...}}

🔌 Fontes de Dados Disponíveis

Escolha uma das fontes disponíveis:

bet365

Base de Dados Bet365

betfair

Base de Dados Betfair Exchange

footystats

Base de Dados FootyStats

Listar fontes disponíveis:
GET /api/dados/

Retorna a lista de todas as fontes de dados disponíveis.

🔌 Endpoints Disponíveis

Formato: Substitua {fonte} por uma das opções: bet365, betfair ou footystats

📊 Dados Históricos
1. Consultar dados (JSON)
GET /api/dados/{fonte}/?league=…&season=…&date=…

Retorna dados em formato JSON com filtros opcionais.

2. Download de dados (CSV)
GET /api/dados/{fonte}/download/?league=…&season=…&date=…

Baixa os dados filtrados em CSV.

3. Metadados das ligas
GET /api/dados/{fonte}/metadata/

Lista todas as ligas e temporadas disponíveis na fonte.

⚽ Jogos do Dia
4. Listar datas disponíveis
GET /api/dados/jogos-do-dia/{fonte}/datas/

Retorna lista de datas com jogos disponíveis.

5. Consultar jogos do dia (JSON)
GET /api/dados/jogos-do-dia/{fonte}/{data}/?league=…

Retorna jogos de uma data específica em JSON. Data no formato: YYYY-MM-DD

6. Download de jogos do dia (CSV)
GET /api/dados/jogos-do-dia/{fonte}/{data}/download/?league=…

Baixa jogos de uma data específica em CSV.

🐍 Códigos Prontos por Fonte

Copie, cole no seu Notebook e troque apenas o TOKEN.

⚽ Jogos do Dia — Bet365
import requests
import pandas as pd

TOKEN = "SEU_TOKEN_AQUI"
DIA   = "2026-04-08"

HEADERS = {"Authorization": f"Token {TOKEN}"}

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

url = f"https://api.futpythontrader.com/api/dados/jogos-do-dia/bet365/{DIA}/"
response = requests.get(url, headers=HEADERS)

if response.status_code == 200:
    data = response.json()
    print(f"Total de jogos: {data['total']}")

    df_jogos = pd.DataFrame(data['dados'])
    df_jogos = df_jogos.sort_values(by=['Date', 'Time'], ascending=[True, True])
    df_jogos = drop_reset_index(df_jogos)
    display(df_jogos)
else:
    print(f"Erro: {response.status_code}")
📊 Base de Dados — Bet365
import requests
import pandas as pd
import io

TOKEN = "SEU_TOKEN_AQUI"

HEADERS  = {"Authorization": f"Token {TOKEN}"}
FONTE    = "bet365"
BASE_URL = f"https://api.futpythontrader.com/api/dados/{FONTE}/download/"

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

def get_dataframe(params=None):
    print(f"Baixando dados da fonte '{FONTE}'...")
    response = requests.get(BASE_URL, headers=HEADERS, params=params)
    if response.status_code == 200:
        df = pd.read_csv(io.BytesIO(response.content))
        print(f"Sucesso! {len(df)} linhas.")
        return df
    print(f"Erro: {response.status_code} — {response.text}")
    return pd.DataFrame()

# --- Carregar base completa ---
base = get_dataframe(params={})

df = base.copy()
df = df.sort_values(by=['Date', 'Time'], ascending=[True, True])
df = drop_reset_index(df)
display(df)
⚽ Jogos do Dia — Betfair Exchange
import requests
import pandas as pd

TOKEN = "SEU_TOKEN_AQUI"
DIA   = "2026-04-08"

HEADERS = {"Authorization": f"Token {TOKEN}"}

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

url = f"https://api.futpythontrader.com/api/dados/jogos-do-dia/betfair/{DIA}/"
response = requests.get(url, headers=HEADERS)

if response.status_code == 200:
    data = response.json()
    print(f"Total de jogos: {data['total']}")

    df_jogos = pd.DataFrame(data['dados'])
    df_jogos = df_jogos.sort_values(by=['Date', 'Time'], ascending=[True, True])
    df_jogos = drop_reset_index(df_jogos)
    display(df_jogos)
else:
    print(f"Erro: {response.status_code}")
📊 Base de Dados — Betfair Exchange
import requests
import pandas as pd
import io

TOKEN = "SEU_TOKEN_AQUI"

HEADERS  = {"Authorization": f"Token {TOKEN}"}
FONTE    = "betfair"
BASE_URL = f"https://api.futpythontrader.com/api/dados/{FONTE}/download/"

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

def get_dataframe(params=None):
    print(f"Baixando dados da fonte '{FONTE}'...")
    response = requests.get(BASE_URL, headers=HEADERS, params=params)
    if response.status_code == 200:
        df = pd.read_csv(io.BytesIO(response.content))
        print(f"Sucesso! {len(df)} linhas.")
        return df
    print(f"Erro: {response.status_code} — {response.text}")
    return pd.DataFrame()

# --- Carregar base completa ---
base = get_dataframe(params={})

df = base.copy()
df = df.sort_values(by=['Date', 'Time'], ascending=[True, True])
df = drop_reset_index(df)
display(df)
⚽ Jogos do Dia — FootyStats
import requests
import pandas as pd

TOKEN = "SEU_TOKEN_AQUI"
DIA   = "2026-04-08"

HEADERS = {"Authorization": f"Token {TOKEN}"}

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

url = f"https://api.futpythontrader.com/api/dados/jogos-do-dia/footystats/{DIA}/"
response = requests.get(url, headers=HEADERS)

if response.status_code == 200:
    data = response.json()
    print(f"Total de jogos: {data['total']}")

    df_jogos = pd.DataFrame(data['dados'])
    df_jogos = df_jogos.sort_values(by=['Date', 'Time'], ascending=[True, True])
    df_jogos = drop_reset_index(df_jogos)
    display(df_jogos)
else:
    print(f"Erro: {response.status_code}")
📊 Base de Dados — FootyStats
import requests
import pandas as pd
import io

TOKEN = "SEU_TOKEN_AQUI"

HEADERS  = {"Authorization": f"Token {TOKEN}"}
FONTE    = "footystats"
BASE_URL = f"https://api.futpythontrader.com/api/dados/{FONTE}/download/"

def drop_reset_index(df):
    df = df.dropna()
    df = df.reset_index(drop=True)
    df.index += 1
    return df

def get_dataframe(params=None):
    print(f"Baixando dados da fonte '{FONTE}'...")
    response = requests.get(BASE_URL, headers=HEADERS, params=params)
    if response.status_code == 200:
        df = pd.read_csv(io.BytesIO(response.content))
        print(f"Sucesso! {len(df)} linhas.")
        return df
    print(f"Erro: {response.status_code} — {response.text}")
    return pd.DataFrame()

# --- Carregar base completa ---
base = get_dataframe(params={})

df = base.copy()
df = df.sort_values(by=['Date', 'Time'], ascending=[True, True])
df = drop_reset_index(df)
display(df)
📊 Integração com Excel — Power Query

Conecte a API diretamente no Excel ou Power BI via Power Query. Os dados serão importados como tabela e podem ser atualizados com um clique.

Passo a passo no Excel
  1. Aba DadosObter DadosDe Outras FontesConsulta em Branco
  2. Clique em Editor Avançado e cole o código abaixo
  3. Substitua SEU_TOKEN_AQUI pelo seu token e ajuste os filtros
  4. Clique em ConcluídoFechar e Carregar
Base completa — Bet365
let
    TOKEN  = "SEU_TOKEN_AQUI",
    FONTE  = "bet365",
    URL    = "https://api.futpythontrader.com/api/dados/" & FONTE & "/download/",

    Resposta = Web.Contents(URL, [
        Headers = [Authorization = "Token " & TOKEN]
    ]),

    Tabela   = Csv.Document(Resposta, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]),
    Resultado = Table.PromoteHeaders(Tabela, [PromoteAllScalars=true])
in
    Resultado
Filtrar por liga e temporada
let
    TOKEN     = "SEU_TOKEN_AQUI",
    FONTE     = "bet365",
    LIGA      = "ENGLAND 1",
    TEMPORADA = "2024/2025",
    URL       = "https://api.futpythontrader.com/api/dados/" & FONTE & "/download/"
                & "?league=" & Uri.EscapeDataString(LIGA)
                & "&season=" & Uri.EscapeDataString(TEMPORADA),

    Resposta  = Web.Contents(URL, [
        Headers = [Authorization = "Token " & TOKEN]
    ]),

    Tabela    = Csv.Document(Resposta, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]),
    Resultado = Table.PromoteHeaders(Tabela, [PromoteAllScalars=true])
in
    Resultado
Passo a passo no Excel
  1. Aba DadosObter DadosDe Outras FontesConsulta em Branco
  2. Clique em Editor Avançado e cole o código abaixo
  3. Substitua SEU_TOKEN_AQUI, a FONTE e a DATA
  4. Clique em ConcluídoFechar e Carregar
Jogos do dia — qualquer fonte
let
    TOKEN = "SEU_TOKEN_AQUI",
    FONTE = "bet365",           // "bet365" | "betfair" | "footystats"
    DATA  = "2026-04-08",       // formato YYYY-MM-DD
    URL   = "https://api.futpythontrader.com/api/dados/jogos-do-dia/"
            & FONTE & "/" & DATA & "/",

    Resposta  = Web.Contents(URL, [
        Headers = [Authorization = "Token " & TOKEN]
    ]),

    JSON      = Json.Document(Resposta),
    ListaDados = JSON[dados],
    Tabela    = Table.FromList(ListaDados, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Resultado = Table.ExpandRecordColumn(
                    Tabela, "Column1",
                    Record.FieldNames(Tabela[Column1]{0})
                )
in
    Resultado
⚠️ Credenciais no Power Query: Ao executar pela primeira vez, o Excel pedirá autenticação para a URL. Escolha "Anônimo" — o token já está incluído no código via header Authorization.
🔍 Exemplos de Filtros

Passe params para filtrar os dados retornados pela função get_dataframe().

Filtrar por liga
df = get_dataframe(params={"league": "ENGLAND 1"})
Filtrar por liga e temporada
df = get_dataframe(params={"league": "BRAZIL 1", "season": "2024/2025"})
Filtrar por data
df = get_dataframe(params={"date": "2026-04-08"})