top of page

Como criar uma API com o banco Inter

Foto do escritor: Amanda NascimentoAmanda Nascimento

Atualizado: há 2 dias


Obtendo as chaves para a API


Logado na conta do inter empresas no canto superior direito clique em: "Soluções para sua empresa"


Clique em nova integração









Selecione o que deseja permitir via acesso API e depois clique em "Criar integração"



Com a integração criada, você terá a opção de fazer o download uma única vez da chave de acesso (guarde com cuidado)







Em detalhar, você terá acesso as credenciais de acesso como clienteID e clienteSecret.


O certificado que baixamos, dependendo do banco, precisa ser instalado na máquina local.


Outro item que é importante, é converter o arquivo .CRT (certificado de segurança) em um arquivo .PEM

O formato CRT é um tipo de arquivo que pode armazenar um certificado, mas ele pode estar em diferentes codificações, como DER (Distinguished Encoding Rules) ou PEM (Privacy Enhanced Mail). A codificação DER é binária e geralmente usada para armazenar certificados.

O formato PEM é um formato de texto codificado em Base64 e começa e termina com um marcador, como -----BEGIN CERTIFICATE----- e -----END CERTIFICATE----

Se quiser conferir, abra o arquivo com o bloco de notas e ele deverá estar no formato:

-----BEGIN CERTIFICATE-----

(conteúdo codificado)

 -----END CERTIFICATE-----



Script em Python para converter .crt para .pem



Segue script em Python para converter o arquivo de certificado .CRT para .PEM para que eu possa fazer a conexão com a API do banco inter.

Lembrando que é necessário ter uma IDE para executar o script (estou utilizando o vs code), ter python instalado na máquina e no terminal do vs code, tive que instalar a biblioteca: pip install cryptography


import tkinter as tk
from tkinter import filedialog
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

# Função para converter o arquivo
def converter_certificado():
    # Abrir a tela para selecionar o arquivo .crt
    crt_path = filedialog.askopenfilename(title="Selecionar Certificado CRT", filetypes=[("Arquivo CRT", "*.crt")])
    if not crt_path:
        print("Nenhum arquivo selecionado.")
        return

    # Abrir a tela para salvar o arquivo .pem
    pem_path = filedialog.asksaveasfilename(defaultextension=".pem", filetypes=[("Arquivo PEM", "*.pem")])
    if not pem_path:
        print("Nenhum arquivo de saída selecionado.")
        return

    try:
        # Ler o arquivo .crt
        with open(crt_path, "rb") as crt_file:
            crt_data = crt_file.read()

        # Carregar o certificado .crt
        cert = x509.load_pem_x509_certificate(crt_data, default_backend())

        # Salvar como .pem
        with open(pem_path, "wb") as pem_file:
            pem_file.write(cert.public_bytes(
                encoding=serialization.Encoding.PEM
            ))

        print(f"Certificado convertido e salvo em {pem_path}")
    except Exception as e:
        print(f"Ocorreu um erro: {e}")

# Configuração da interface gráfica
root = tk.Tk()
root.withdraw()  # Ocultar a janela principal do Tkinter
converter_certificado()

Script em Python para testar credenciais e conexão com a API



Será necessário instalar a biblioteca no terminal: pip install requests

Não esqueça de alterar o caminho dos arquivos no seu computador e inserir o ID e senha.

import requests

# Caminho do certificado e chave
CERT_PATH = r"C:\Users\amand\Downloads\Inter_API-Chave_e_Certificado\Inter_API-Certificado.pem"  # Arquivo PEM
KEY_PATH = r"C:\Users\amand\Downloads\Inter_API-Chave_e_Certificado\Inter API_Chave.key"  # Chave privada

# URL da API para obter o token
url = "https://cdpj.partners.bancointer.com.br/oauth/v2/token"

# Credenciais da API
client_id = "seuIDaqui_mantenha_as_aspas_duplas"
client_secret = "senhaAqui_mantenha_as_aspas_duplas"

# Parâmetros da requisição
data = {
    "grant_type": "client_credentials"
}

# Headers
headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}

# Fazendo a requisição com o certificado
response = requests.post(url, headers=headers, data=data, auth=(client_id, client_secret), cert=(CERT_PATH, KEY_PATH))

# Mostrando a resposta
print(f"Status Code: {response.status_code}")
print(response.json())

Saída no terminal: Status Code: 200


O código de status 200 significa que a requisição foi bem-sucedida e o retorno trouxe um access_token, que pode ser utilizado para acessar os recursos da API.




Script em Python para trazer o extrato da conta


Lembrando que conforme imagens acima, logada no internet banking do inter, eu habilitei a parte que a API tem permissão para consultar extratos.

Criei a pasta certificados para manter a chave .key e o certificado .pem e renomeei o arquivo com a chave .key inserindo no espaço, ficando assim Inter_API_...




import requests
from datetime import datetime

# Caminho do certificado e chave
CERT_PATH = r"C:\\certificados\Inter_API-Certificado.pem"  # Arquivo PEM
KEY_PATH = r"C:\\certificados\Inter_API_Chave.key"  # Chave privada

# Credenciais da API
client_id = "seuIDaqui_mantenha_as_aspas_duplas"
client_secret = "senhaAqui_mantenha_as_aspas_duplas"

# URL para obter o token
token_url = "https://cdpj.partners.bancointer.com.br/oauth/v2/token"

# Parâmetros para obter o token de acesso
token_data = {
    'grant_type': 'client_credentials',
    'scope': 'extrato.read'
}

# Fazendo a requisição para obter o token
try:
    token_response = requests.post(token_url, data=token_data, auth=(client_id, client_secret), cert=(CERT_PATH, KEY_PATH))
    token_response.raise_for_status()  # Levanta uma exceção para códigos de status HTTP 4xx/5xx
except requests.exceptions.RequestException as e:
    print(f"Erro ao obter o token de acesso: {e}")
    print(f"Resposta da API: {token_response.text}")
    exit()

# Extraindo o token de acesso
access_token = token_response.json().get('access_token')
if not access_token:
    print("Não foi possível obter o token de acesso.")
    exit()

# URL para consultar o extrato
extrato_url = "https://cdpj.partners.bancointer.com.br/banking/v2/extrato"

# Definindo o período de consulta
start_date = "2025-01-01"  # Data de início
end_date = datetime.now().strftime('%Y-%m-%d')  # Data de hoje

# Cabeçalhos para a requisição
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json'
}

# Parâmetros para o extrato
params = {
    'dataInicio': start_date,
    'dataFim': end_date
}

# Realizando a requisição à API
try:
    response = requests.get(extrato_url, headers=headers, params=params, cert=(CERT_PATH, KEY_PATH))
    response.raise_for_status()  # Levanta uma exceção para códigos de status HTTP 4xx/5xx
except requests.exceptions.RequestException as e:
    print(f"Erro ao obter o extrato: {e}")
    print(f"Resposta da API: {response.text}")
    exit()

# Processando a resposta
extrato_data = response.json()
print("Extrato obtido com sucesso:")
print(extrato_data)

Saída:









Script em Python para trazer o extrato da conta em um csv


import requests
import pandas as pd
import os
from datetime import datetime
import unicodedata

# Caminho do certificado e chave
CERT_PATH = r"C:\\certificados\\Inter_API-Certificado.pem"  # Arquivo PEM
KEY_PATH = r"C:\\certificados\\Inter_API_Chave.key"  # Chave privada

# Credenciais da API
client_id = "seuIDaqui_mantenha_as_aspas_duplas"
client_secret = "senhaAqui_mantenha_as_aspas_duplas"

# URL para obter o token
token_url = "https://cdpj.partners.bancointer.com.br/oauth/v2/token"

# Parâmetros para obter o token de acesso
token_data = {
    'grant_type': 'client_credentials',
    'scope': 'extrato.read'
}

# Função para remover acentos e padronizar strings
def tratar_acentos(texto):
    if isinstance(texto, str):
        texto = texto.strip()  # Remover espaços extras
        return unicodedata.normalize('NFKD', texto).encode('ascii', 'ignore').decode('utf-8')
    return texto

# Fazendo a requisição para obter o token
try:
    token_response = requests.post(token_url, data=token_data, auth=(client_id, client_secret), cert=(CERT_PATH, KEY_PATH))
    token_response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"Erro ao obter o token de acesso: {e}")
    exit()

# Extraindo o token de acesso
access_token = token_response.json().get('access_token')
if not access_token:
    print("Não foi possível obter o token de acesso.")
    exit()

# URL para consultar o extrato
extrato_url = "https://cdpj.partners.bancointer.com.br/banking/v2/extrato"

# Definindo o período de consulta
start_date = "2025-01-01"
end_date = datetime.now().strftime('%Y-%m-%d')

# Cabeçalhos para a requisição
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json'
}

# Parâmetros para o extrato
params = {
    'dataInicio': start_date,
    'dataFim': end_date
}

# Realizando a requisição à API
try:
    response = requests.get(extrato_url, headers=headers, params=params, cert=(CERT_PATH, KEY_PATH))
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"Erro ao obter o extrato: {e}")
    exit()

# Processando a resposta da API
extrato_data = response.json()
df = pd.json_normalize(extrato_data['transacoes'])  # Ajuste conforme a estrutura real

# Aplicando a função para remover acentos e espaços extras
df = df.applymap(tratar_acentos)

# Converter colunas numéricas para float antes de salvar
for col in df.select_dtypes(include=['object']).columns:
    try:
        df[col] = df[col].str.replace(',', '.').astype(float)
    except:
        pass  # Ignora colunas que não são realmente numéricas

# Caminho do arquivo de saída
file_path = 'extratointer.csv'

# Verifica se o arquivo já existe
if os.path.exists(file_path):
    try:
        existing_df = pd.read_csv(file_path, sep=';', decimal='.')

        # Garantindo que todas as colunas estão no mesmo formato antes de concatenar
        existing_df.columns = existing_df.columns.str.strip()
        df.columns = df.columns.str.strip()

        # Ordena as colunas para evitar problemas de comparação
        df = df[sorted(df.columns)]
        existing_df = existing_df[sorted(existing_df.columns)]

        # Concatenando os novos dados com os antigos
        combined_df = pd.concat([existing_df, df])

        # **Removendo duplicatas corretamente** (considerando todas as colunas)
        combined_df = combined_df.drop_duplicates(subset=combined_df.columns, keep="first")

        # Salvando o novo arquivo sem duplicatas
        combined_df.to_csv(file_path, index=False, encoding='utf-8', sep=';', decimal='.')
        #df['valor'] = df['valor'].astype(str).str.replace('.', ',')

        print("✅ Dados atualizados e duplicatas removidas com sucesso!")

    except Exception as e:
        print(f"❌ Erro ao processar o arquivo existente: {e}")
        exit()
else:
    try:
        # Criando o arquivo se ele não existir
        df.to_csv(file_path, index=False, encoding='utf-8', sep=';', decimal='.')
        print("✅ Arquivo criado com os dados da API.")
    except Exception as e:
        print(f"❌ Erro ao criar o arquivo: {e}")
        exit()

© 2017-2025  Criado e desenvolvido por Amanda Nascimento

  • Discord
  • GitHub
  • youtube
  • LinkedIn Amanda
bottom of page