Pular para o conteúdo.

Nosso Numero

Campos da API

A API retorna 3 campos para cada boleto gerado:

Campo Descricao Exemplo (BB)
nosso_numero Valor padronizado "000000123"
nosso_numero_formatado Valor impresso no boleto "01234567000000123"
nosso_numero_dv Digito verificador "9"

Enviar na requisicao: apenas nosso_numero (valor curto, sem formatacao).

Receber na resposta: os 3 campos acima.

Exemplo

# Enviar
curl "http://localhost:9292/api/boleto/data?bank=banco_brasil&data={\"nosso_numero\":\"123\",\"convenio\":\"01234567\",...}"
{
  "nosso_numero": "000000123",
  "nosso_numero_formatado": "01234567000000123",
  "nosso_numero_dv": "9",
  "codigo_barras": "00196131200001500...",
  "linha_digitavel": "00190.00009 00123..."
}

Formato por Banco

Banco Entrada nosso_numero nosso_numero_formatado nosso_numero_dv
Banco do Brasil (001) "123" "000000123" "01234567000000123" 9
Sicoob (756) "7890" "0007890" "00078900" 0
Bradesco (237) "12345" "00000012345" "09/00000012345-8" 8
Itau (341) "12345678" "12345678" "175/12345678-4" 4
Caixa (104) "000000000000001" "000000000000001" "14000000000000001-4" 4
Santander (033) "1234567" "1234567" "1234567-9" 9
Banco C6 (336) "12345678" "0012345678" "0012345678-9" 9

Composicao do nosso_numero_formatado

Banco Formato
BB convenio(8) + nosso_numero(9)
Sicoob nosso_numero(7) + DV(1)
Bradesco carteira(2) / nosso_numero(11) - DV(1)
Itau carteira(3) / nosso_numero(8) - DV(1)
Caixa carteira(2) + nosso_numero(15) - DV(1)
Santander nosso_numero(7) - DV(1)
C6 nosso_numero(10) - DV(1)

Tamanho Maximo

Banco Maximo Observacao
BB 17 Depende do tamanho do convenio
Sicoob 7  
Bradesco 11  
Itau 8  
Caixa 15 Sempre 15 digitos
Santander 7  
C6 10  

Uso em Cada Fluxo

Gerar Boleto

Envie o valor curto. A API formata automaticamente.

Opcao 1 — JSON com dados (sem PDF):

dados = {"nosso_numero": "123", ...}
response = requests.get(f"{API}/api/boleto/data", params={"bank": "banco_brasil", "data": json.dumps(dados)})
data = response.json()
nn     = data['nosso_numero']             # "000000123"
nn_fmt = data['nosso_numero_formatado']    # "01234567000000123"
nn_dv  = data['nosso_numero_dv']           # 9

Opcao 2 — PDF + dados em headers (1 chamada):

response = requests.get(f"{API}/api/boleto", params={
    "bank": "banco_brasil", "type": "pdf", "data": json.dumps(dados)
})
pdf_bytes = response.content
nn     = response.headers['X-Nosso-Numero']            # "000000123"
nn_fmt = response.headers['X-Nosso-Numero-Formatado']  # "01234567000000123"
nn_dv  = response.headers['X-Nosso-Numero-DV']         # "9"

Opcao 3 — JSON com dados + PDF em base64 (1 chamada, recomendada):

import base64
response = requests.get(f"{API}/api/boleto", params={
    "bank": "banco_brasil", "type": "pdf",
    "data": json.dumps(dados), "include_data": "true"
})
result = response.json()
nn     = result['nosso_numero']             # "000000123"
nn_fmt = result['nosso_numero_formatado']    # "01234567000000123"
nn_dv  = result['nosso_numero_dv']           # 9
pdf    = base64.b64decode(result['content_base64'])

Multiplos Boletos

Opcao 1 — PDF + metadados em headers:

response = requests.post(f"{API}/api/boleto/multi",
    data={"type": "pdf"},
    files={"data": open("boletos.json", "rb")}
)
pdf_bytes = response.content
total = int(response.headers['X-Boletos-Count'])
info = json.loads(response.headers['X-Boletos-Info'])
# info[i] = {"bank":..., "nosso_numero":..., "nosso_numero_formatado":..., ...}

Opcao 2 — JSON com tudo (recomendada):

response = requests.post(f"{API}/api/boleto/multi",
    data={"type": "pdf", "include_data": "true"},
    files={"data": open("boletos.json", "rb")}
)
result = response.json()
total = result['total']
boletos = result['boletos']  # array com {bank, nosso_numero, nosso_numero_formatado, ...}
pdf = base64.b64decode(result['content_base64'])

Remessa CNAB

Envie o mesmo valor curto no campo pagamentos[].nosso_numero.

{"pagamentos": [{"nosso_numero": "123", "valor": 100.0, ...}]}

Retorno CNAB

O banco retorna nosso_numero com zeros a esquerda. Para conciliar:

match = int(retorno['nosso_numero']) == int(seu_boleto['nosso_numero'])

Extrato OFX

O nosso_numero vem do campo MEMO via regex. O formato depende do banco:

Banco O que aparece no OFX Corresponde a
BB "01234567000000123" (17 dig) nosso_numero_formatado
Sicoob "00078900" (8 dig) nosso_numero_formatado
Itau "12345678" (8 dig) nosso_numero
Bradesco "00000012345" (11 dig) nosso_numero
Caixa "14000000000000001" (17 dig) nosso_numero_formatado (sem DV)
Santander "1234567" (7 dig) nosso_numero
C6 "0012345678" (10 dig) nosso_numero

Conciliacao

Armazene nosso_numero e nosso_numero_formatado ao gerar o boleto. Para conciliar:

nn = boleto_salvo['nosso_numero']           # "000000123"
nn_fmt = boleto_salvo['nosso_numero_formatado']  # "01234567000000123"

# Retorno CNAB
match_cnab = int(retorno['nosso_numero']) == int(nn)

# OFX
nn_ofx = transacao['nosso_numero']
match_ofx = nn_ofx == nn_fmt or nn_ofx == nn or int(nn_ofx) == int(nn)

Mantido por: Maxwell da Silva Oliveira (@maxwbh) — M&S do Brasil LTDA