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-periodoconsulta períodos maiores em partes consecutivas. extrato completotraz os detalhes de cada transação (pagador/recebedor do Pix, dados do boleto, do pagamento...).--todas-paginaspercorre 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(noextratoe noextrato 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_contaedigito_conta) e o saldo do fim do período, e com umFITIDpor 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 pdfe o OFX de--saidasão gravados com permissão600, 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.--simconfirma 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 aceita150,00,1.500,00e150.00; formas ambíguas como1.500sã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, comuuidgen) e passe a mesma--id-idempotenteem todas as tentativas; e nunca repita às cegas um comando que saiu com 9. - Limite por operação: com
limite_por_operacaono 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