New
Apps 1,078Makers 1,076This week 1,078
Promote your app−30%
0views in
the last 30 days

inter-pj

Unofficial Rust CLI for Banco Inter business accounts: balance, statements, Pix and boletos.

Built with Claude Code

by edusouza · from BRBrazil · added Oct 29, 2026
no ratings0 comments

inter-pj

CLI em Rust para acessar a sua conta PJ do Inter Empresas pela linha de comando, usando as APIs oficiais do Inter (OAuth2 + mTLS).

Projeto não oficial. Não tem vínculo com o Banco Inter. Use por sua conta e risco e comece pelo ambiente sandbox.

Documentação: https://edusouza.github.io/inter-pj-cli/ (instalação, guias, referência de comandos e arquitetura).

$ inter-pj saldo
Saldo disponível          R$ 2.850,55
Bloqueado em cheque         R$ 240,25
Bloqueado judicialmente     R$ 510,35
Bloqueado administrativo      R$ 0,00
Limite                    R$ 1.000,00

$ inter-pj saldo --json | jq .disponivel
2850.55

$ inter-pj extrato --inicio 2026-08-01 --fim 2026-08-31
Extrato de 01/08/2026 a 31/08/2026

Data        Tipo       Descrição                                   Valor
03/08/2026  Pix        Pix recebido · Cliente Exemplo Ltda   R$ 1.500,00
05/08/2026  Pagamento  Pagamento efetuado · Boleto; energia   -R$ 250,10

Entradas              R$ 1.500,00
Saídas                 -R$ 250,10
Resultado do período  R$ 1.249,90
2 transações

O que já funciona

Versão Funcionalidades
0.1.0 Autenticação OAuth2 com mTLS e cache de token · saldo · auth token/auth limpar · config init/caminho/mostrar
0.1.1 config verificar [--corrigir]: confere o arquivo de configuração e o perfil e corrige caminhos do Windows entre aspas duplas
0.2.0 extrato · extrato completo (detalhes, filtros, todas as páginas e modo scroll) · extrato pdf · saída CSV · retentativas automáticas
0.3.0 pix enviar (chave, copia e cola ou dados bancários) com resumo, confirmação, simulação, idempotência e limite por operação · pix consultar (com --aguardar)
0.4.0 pagamento boleto pagar (boletos, contas e tributos pelo código, conferido localmente) · boleto listar/cancelar · pagamento darf pagar/listar · pagamento lote enviar (JSON ou planilha CSV), consultar e modelo · os trilhos de segurança do Pix
0.5.0 cobranca emitir (pelas opções ou por arquivo JSON, com modelo) com resumo, confirmação e --aguardar · cobranca consultar com o QR Code do Pix no terminal ou em PNG · cobranca pdf · cobranca listar/sumario · cobranca cancelar/editar/edicao · cobranca pagar no sandbox
0.6.0 pix cob e pix cobv (cobranças Pix imediatas e com vencimento, com multa, juros e descontos): criar, com um txid que torna segura a repetição, revisar, consultar com o QR Code e listar; pix cobv também por arquivo, com modelo · pix recebidos · pix devolucao com os trilhos de segurança do Pix · pix loc · pix lote-cobv (JSON ou planilha CSV) · pagamentos no sandbox
0.6.1 conta: banco, agência e conta, das chaves numero_conta e digito_conta do perfil, sem chamar a API
0.6.2 extrato --formato ofx e extrato completo --todas-paginas --formato ofx: o extrato em OFX 1.02, com a conta do perfil, o saldo do fim do período e um FITID estável por transação

O plano completo — webhooks e Pix Automático — está em docs/roadmap.md e é acompanhado pelas issues do projeto.

Instalação

Binários prontos: baixe o pacote do seu sistema na página de releases (Linux x86_64 glibc/musl, macOS Apple Silicon/Intel e Windows), confira o SHA256SUMS e coloque o inter-pj no seu PATH.

Com Cargo (Rust 1.88 ou superior):

$ cargo install --locked --git https://github.com/edusouza/inter-pj-cli --tag v0.6.2 inter-pj-cli

Configuração

1. Crie a integração no Internet Banking PJ

No Internet Banking do Inter Empresas, crie uma integração com os escopos que você vai usar (para saldo e extrato: extrato.read) e baixe:

  • o certificado (.crt) e a chave privada (.key);
  • o client_id e o client_secret (o segredo só é mostrado uma vez).

Guarde esses arquivos fora de qualquer repositório, com permissão restrita (chmod 600).

2. Crie o arquivo de configuração

$ inter-pj config init
Arquivo de configuração criado em /home/voce/.config/inter-pj/config.toml

Edite o perfil criado:

perfil_padrao = "padrao"

[perfis.padrao]
ambiente = "sandbox"              # ou "producao"
client_id = "<seu client_id>"
certificado = '~/inter/certificado.crt'
chave_privada = '~/inter/chave.key'
# conta_corrente = "<numero>"     # só se a integração tiver mais de uma conta
# numero_conta = "<numero>"       # opcional: número da conta, sem o dígito (`conta` e OFX)
# digito_conta = "<digito>"       # opcional: dígito verificador da conta
# escopos = ["extrato.read"]      # opcional: escopos pedidos em todo token
# limite_por_operacao = "1.000,00" # opcional: valor máximo de cada Pix ou pagamento

Escreva os caminhos entre aspas simples, principalmente no Windows (certificado = 'C:\inter\certificado.crt'). Entre aspas duplas, a barra invertida começa um escape do TOML. "C:\Users\..." impede a leitura do arquivo (\U pede 8 dígitos hexadecimais). Já "C:\novo\teste.crt" é lido, mas com uma quebra de linha e uma tabulação no lugar de \n e \t. Caminhos relativos são relativos ao arquivo de configuração, e ~/ é a sua pasta pessoal.

3. Informe o segredo pela variável de ambiente

$ export INTER_CLIENT_SECRET='<seu client_secret>'
$ inter-pj config verificar   # confere o arquivo, o perfil, o certificado e a chave
$ inter-pj config mostrar     # mostra a configuração efetiva (segredos ocultos)
$ inter-pj saldo

No PowerShell, defina o segredo com $env:INTER_CLIENT_SECRET = '<seu client_secret>'.

O client_secret nunca é aceito como flag (evita que fique no histórico do shell). Ele pode, alternativamente, ficar no arquivo de configuração — nesse caso a CLI avisa se o arquivo puder ser lido por outros usuários.

Se o arquivo de configuração não for lido

O config verificar aponta cada problema com a linha e a correção. Com --corrigir, ele troca as aspas duplas dos caminhos do Windows por aspas simples e guarda o original em config.toml.bak:

PS> inter-pj config mostrar
erro: arquivo de configuração inválido (C:\Users\voce\AppData\Roaming\inter-pj\config.toml, linha 7): o valor de certificado está entre aspas duplas e tem uma barra invertida, que em TOML começa um escape; nos caminhos do Windows, use aspas simples (certificado = 'C:\pasta\arquivo')
dica: `inter-pj config verificar` mostra a correção de cada linha; com `--corrigir`, ele a aplica e guarda uma cópia do arquivo original

PS> inter-pj config verificar
Arquivo: C:\Users\voce\AppData\Roaming\inter-pj\config.toml

erro      linha 7, certificado: caminho do Windows entre aspas duplas: em TOML, a barra invertida começa um escape (\U pede 8 dígitos hexadecimais), e o arquivo não é lido
          corrija para: certificado = 'C:\Users\voce\inter\certificado.crt'
erro      linha 8, chave_privada: caminho do Windows entre aspas duplas: em TOML, a barra invertida começa um escape (\U pede 8 dígitos hexadecimais), e o arquivo não é lido
          corrija para: chave_privada = 'C:\Users\voce\inter\chave.key'

2 erros e 0 avisos.
Para trocar as aspas: inter-pj config verificar --corrigir
erro: a configuração tem 2 erros

PS> inter-pj config verificar --corrigir
Arquivo: C:\Users\voce\AppData\Roaming\inter-pj\config.toml

corrigido linha 7, certificado: aspas simples no lugar das aspas duplas
corrigido linha 8, chave_privada: aspas simples no lugar das aspas duplas
ok        sintaxe: o arquivo é TOML válido
ok        perfil: padrao (arquivo)
ok        ambiente: sandbox (arquivo)
ok        client_id: *****************4e5f (arquivo)
ok        client_secret: definido, oculto (variável INTER_CLIENT_SECRET)
ok        certificado: C:\Users\voce\inter\certificado.crt (arquivo)
ok        chave_privada: C:\Users\voce\inter\chave.key (arquivo)
ok        certificado e chave: lidos e aceitos pela biblioteca TLS

Cópia do arquivo original: C:\Users\voce\AppData\Roaming\inter-pj\config.toml.bak

Nenhum problema encontrado.

O comando sai com código 3 se encontrar algum erro, e --json dá o resultado para scripts. O client_secret nunca aparece, e a conta corrente sai mascarada, como no config mostrar.

Perfis, variáveis e precedência

Vários perfis (ex.: sandbox e producao) podem conviver no mesmo arquivo; escolha com --perfil ou INTER_PERFIL. Cada valor é resolvido na ordem flag > variável de ambiente > arquivo:

Configuração Flag Variável de ambiente
Perfil -p, --perfil INTER_PERFIL
Arquivo de configuração --config INTER_CONFIG
Ambiente (sandbox/producao) --ambiente INTER_AMBIENTE
client_id --client-id INTER_CLIENT_ID
client_secret — INTER_CLIENT_SECRET
Certificado (.crt) --certificado INTER_CERTIFICADO
Chave privada (.key) --chave-privada INTER_CHAVE_PRIVADA
Conta corrente --conta-corrente INTER_CONTA_CORRENTE
Tentativas por requisição --tentativas INTER_TENTATIVAS
Diretório de cache — INTER_CACHE_DIR

Locais padrão: configuração em ~/.config/inter-pj/config.toml (Windows: %APPDATA%\inter-pj\config.toml) e cache em ~/.cache/inter-pj (Windows: %LOCALAPPDATA%\inter-pj). Veja com inter-pj config caminho.

Uso

$ inter-pj saldo                        # saldo atual, bloqueios e limite
$ inter-pj saldo --data 2026-08-31      # saldo disponível ao fim do dia
$ inter-pj saldo --json                 # JSON com os nomes de campo da API
$ inter-pj conta                        # banco, agência e conta (número e dígito do perfil)

$ inter-pj auth token --escopo extrato.read      # valida credenciais e mostra a validade
$ inter-pj auth limpar                           # apaga os tokens em cache do perfil

$ inter-pj --perfil producao saldo
$ inter-pj --help                                # ajuda de todos os comandos

Extrato

$ inter-pj extrato                                          # últimos 30 dias, hoje incluído
$ inter-pj extrato --inicio 2026-01-01 --fim 2026-12-31 --dividir-periodo

$ inter-pj extrato completo --inicio 2026-08-01 --fim 2026-08-31            # 1ª página, com contraparte
$ inter-pj extrato completo --tipo-operacao D --tipo-transacao pix --pagina 1 --tamanho-pagina 100
$ inter-pj extrato completo --inicio 2026-08-01 --fim 2026-08-31 --todas-paginas --formato csv > agosto.csv

$ inter-pj extrato --inicio 2026-08-01 --fim 2026-08-31 --formato ofx -o agosto.ofx     # para a contabilidade

$ inter-pj extrato pdf --inicio 2026-08-01 --fim 2026-08-31                 # extrato-2026-08-01-a-2026-08-31.pdf
$ inter-pj extrato pdf --inicio 2026-08-01 --fim 2026-08-31 --saida - | lpr
  • A API aceita no máximo 90 dias por consulta (contando o primeiro e o último dia). A CLI confere o período antes de chamar a API; --dividir-periodo consulta períodos maiores em partes consecutivas.
  • extrato completo traz os detalhes de cada transação (pagador/recebedor do Pix, dados do boleto, do pagamento...). --todas-paginas percorre todas as páginas e, acima de 10.000 transações, passa para o modo scroll da API (um por conta, expira após 6 minutos sem uso).
  • --formato ofx (no extrato e no extrato completo --todas-paginas) gera o extrato em OFX 1.02, para importar em programas de contabilidade, ERPs e de finanças pessoais: com a conta do perfil (numero_conta e digito_conta) e o saldo do fim do período, e com um FITID por transação que é o mesmo a cada execução, para o importador não repetir o que já tem. Sem -o/--saida, o OFX vai para a saída padrão.
  • extrato pdf e o OFX de --saida são gravados com permissão 600, e um arquivo existente nunca é substituído sem --sobrescrever.

Pix

$ inter-pj pix enviar --chave fornecedor@exemplo.com --valor 150,00 --descricao "NF 123"
Pix a enviar
  Ambiente               sandbox (dados fictícios)
  Chave Pix              fornecedor@exemplo.com (e-mail)
  Valor                  R$ 150,00 (cento e cinquenta reais)
  Quando                 agora
  Descrição              NF 123
  Chave de idempotência  9b2f6c1e-5d0a-4c1b-8f3e-2a7d4e6b8c90
Enviar o Pix? [s/N] s
Pix enviado.
Código da solicitação  c42f0787-02cb-4b31-827e-459ec9d7ece1
Data do pagamento      23/09/2026
Data da operação       23/09/2026
Chave de idempotência  9b2f6c1e-5d0a-4c1b-8f3e-2a7d4e6b8c90

Acompanhe com: inter-pj pix consultar c42f0787-02cb-4b31-827e-459ec9d7ece1 --aguardar

$ inter-pj pix enviar --chave +5511912345678 --valor 1.500,00 --data 2026-10-01   # agendado
$ inter-pj pix enviar --chave 12.345.678/0001-95 --valor 99,90 --simular          # mostra a requisição, não envia
$ inter-pj pix enviar --chave fornecedor@exemplo.com --valor 150 --sim --json     # sem perguntar (scripts)

$ inter-pj pix enviar --copia-e-cola '00020126...6304ABCD'                         # valor e recebedor vêm do código
$ inter-pj pix enviar --valor 250,00 --ispb 00000000 --agencia 0001 --conta 123456-7 \
    --tipo-conta corrente --documento 12.345.678/0001-95 --nome "Fornecedor Exemplo"  # dados bancários

O destino é uma chave (--chave), um código copia e cola (--copia-e-cola) ou dados bancários (--ispb, --agencia, --conta, --tipo-conta — corrente, poupanca, salario ou pagamento —, --documento e --nome). O código copia e cola é decodificado localmente, com o CRC conferido: o resumo mostra recebedor, cidade, chave ou URL da cobrança, identificador e mensagem. Se o código fixa o valor, --valor é dispensável e um valor diferente é recusado; códigos dinâmicos (cobranças) aceitam outro valor, e o resumo mostra os dois. Textos vindos do código passam por um filtro de caracteres de controle, para que não alterem o que o terminal mostra.

Trilhos de segurança de todo envio:

  • Resumo e confirmação: antes de enviar, a CLI mostra destino, valor (também por extenso), data e ambiente (produção em destaque) e pergunta [s/N]; o padrão é não. --sim confirma sem perguntar. Respostas vindas de um pipe não valem: sem terminal e sem --sim, a CLI recusa (código 2).
  • Validação local: chave Pix (CPF/CNPJ com dígitos verificadores, e-mail, celular +55DD9NNNNNNNN, chave aleatória), valor maior que zero com até 2 casas, descrição de até 140 caracteres e data de agendamento. As datas seguem o calendário do banco: "hoje" é o dia em Brasília, qualquer que seja o fuso da máquina, para que um agendamento para amanhã, pedido de um servidor em UTC perto da meia-noite, não seja pago hoje. O valor aceita 150,00, 1.500,00 e 150.00; formas ambíguas como 1.500 são recusadas.
  • --simular: valida e mostra a requisição (sem segredos), sem enviar nada.
  • Idempotência: cada envio leva uma chave (x-id-idempotente), mostrada no resumo. Se a resposta se perder (tempo esgotado, erro 5xx), o Pix pode ter sido feito, e a CLI sai com o código 9: confira o extrato e, para repetir sem risco de pagar duas vezes, use --id-idempotente <chave>. Num script que repete envios que falharam, gere a chave antes (por exemplo, com uuidgen) e passe a mesma --id-idempotente em todas as tentativas; e nunca repita às cegas um comando que saiu com 9.
  • Limite por operação: com limite_por_operacao no perfil, valores acima dele são recusados, mesmo com --sim.
  • Aprovação: conforme a configuração da conta, o Pix aguarda aprovação no Internet Banking (Aprovar > Gestão de Aprovações); a CLI avisa quando for o caso.

A integração precisa do escopo pagamento-pix.write.

Para acompanhar um Pix enviado (últimos 90 dias), use o código da solicitação:

$ inter-pj pix consultar c42f0787-02cb-4b31-827e-459ec9d7ece1                        # status, recebedor, erros e histórico
$ inter-pj pix consultar c42f0787-02cb-4b31-827e-459ec9d7ece1 --aguardar --timeout 5m # até um status final

Com --aguardar, a CLI consulta a cada 6 segundos (dentro do limite de requisições da API) até o Pix ser pago, agendado ou terminar sem pagamento, e sai com o código 0 (pago ou agendado), 5 (terminou sem ser pago: reprovado, expirado, cancelado, falha...) ou 8 (o tempo acabou antes de um status final; padrão: 60 s). A consulta precisa do escopo pagamento-pix.read.

Pagamentos

Boletos, contas de consumo e tributos com código de barras:

$ inter-pj pagamento boleto pagar '07797.77705 11678.471159 90071.126347 1 15950000003010'
Pagamento a enviar
  Ambiente         sandbox (dados fictícios)
  Tipo             boleto do banco 077
  Linha digitável  07797.77705 11678.471159 90071.126347 1 15950000003010
  Valor            R$ 30,10 (trinta reais e dez centavos)
  Vencimento       10/10/2026
  Quando           agora
Confirmar o pagamento? [s/N] s
Pagamento realizado.
Código da transação  3414f226-36fb-4d87-811e-cfd99911d845

Acompanhe com: inter-pj pagamento boleto listar --codigo-transacao 3414f226-36fb-4d87-811e-cfd99911d845

$ inter-pj pagamento boleto pagar 82670000000653301602023123106000000002830894 --vencimento 2026-10-10   # conta de água
$ inter-pj pagamento boleto pagar '<linha digitável>' --valor 31,20 --data 2026-10-09 --beneficiario 12.345.678/0001-95

O código — linha digitável (47 dígitos nos boletos, 48 nas contas e tributos) ou código de barras (44) — tem todos os dígitos verificadores conferidos localmente. Valor e vencimento vêm do próprio código quando ele os traz; contas de consumo e tributos não trazem o vencimento, então precisam de --vencimento (a data impressa no documento). O resumo mostra o valor por extenso e, quando --valor ou --vencimento diferem do código, os dois lados com um aviso (juros, multa ou desconto); também avisa quando o pagamento fica para depois do vencimento. --data agenda o pagamento, e --beneficiario pede à API que confira o CPF/CNPJ de quem recebe. Os trilhos de segurança são os do Pix: confirmação [s/N] ou --sim, --simular e o limite por operação do perfil.

Esta API não tem chave de idempotência. Se o resultado ficar incerto (tempo esgotado, erro 5xx ou resposta ilegível depois do envio), o pagamento pode ter sido feito e repetir o comando pode pagar duas vezes: a CLI sai com o código 9 e mostra o pagamento boleto listar --codigo ... que confere isso antes de uma nova tentativa, com as opções que escolheram a conta (-p, --config, --ambiente...). Essa consulta precisa do escopo pagamento-boleto.read, e uma lista vazia logo depois do erro não prova que nada foi pago: espere alguns minutos e confira também o extrato. Um script não deve repetir às cegas um pagamento que saiu com 9; um 429 ou uma conexão recusada, que certamente não pagaram, saem com 6. Uma falha ao pedir o token de acesso também não pagou nada: o pagamento só é enviado depois dele. "Hoje", para --data e para o aviso de pagamento vencido, é o dia em Brasília, qualquer que seja o fuso da máquina. Conforme a configuração da conta, o pagamento aguarda aprovação no Internet Banking. O pagamento precisa do escopo pagamento-boleto.write; no sandbox, a documentação oferece os códigos 03395988500000666539201493990000372830030102 (boleto vencido) e 82670000000653301602023123106000000002830894 (conta de água).

$ inter-pj pagamento boleto listar --inicio 2026-09-01 --fim 2026-09-30
Pagamentos incluídos de 01/09/2026 a 30/09/2026

Vencimento  Pagamento   Beneficiário        Status        Valor  Código da transação
10/10/2026  09/10/2026  Fornecedor Exemplo  agendado   R$ 30,10  3414f226-36fb-4d87-811e-cfd99911d845

1 pagamento

$ inter-pj pagamento boleto listar --filtrar-por vencimento --inicio 2026-12-01 --fim 2026-12-31
$ inter-pj pagamento boleto listar --codigo '07797.77705 11678.471159 90071.126347 1 92950

Description taken from the repository README.

Ratings

–
0 ratings
5 0
4 0
3 0
2 0
1 0

Rate this app

Sign in to rate

Comments 0

Sign in to comment

No comments yet.

Related apps

#cli · #rust · #banking