Listar Arquivos de Remessa
Listar Remessas Disponíveis
Seção intitulada “Listar Remessas Disponíveis”Lista os arquivos de remessa disponíveis para uma conta bancária em uma determinada data. Retorna os tokens dos arquivos que podem ser recuperados posteriormente.
O Que Faz
Seção intitulada “O Que Faz”Este endpoint:
- Lista os arquivos de remessa gerados para uma conta bancária
- Filtra por data de geração
- Retorna os tokens dos arquivos em formato JSON
- Permite descobrir tokens de remessas para recuperação posterior
Quando Usar
Seção intitulada “Quando Usar”Cenários Recomendados
Seção intitulada “Cenários Recomendados”| Cenário | Descrição |
|---|---|
| Token perdido | Você gerou uma remessa mas não guardou o token retornado |
| Auditoria | Verificar quais remessas foram geradas em um determinado dia |
| Reconciliação | Listar remessas para conferência com registros internos |
| Recuperação | Descobrir o token para usar no endpoint Obter Remessa |
Pré-requisitos
Seção intitulada “Pré-requisitos”- Possuir o token da conta bancária
- Estar em um plano personalizado
- Saber a data aproximada da geração da remessa
Posição no Ciclo de Vida
Seção intitulada “Posição no Ciclo de Vida” ┌──────────────────┐ │ Criar Remessa │ POST /arquivos/cnab/remessas │ (token perdido) │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ ★ LISTAR │ ◄── VOCÊ ESTÁ AQUI │ REMESSAS │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Obter Remessa │ GET /arquivos/cnab/remessas/{token} │ com token │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Enviar arquivo │ Internet Banking │ ao banco │ ou VAN └──────────────────┘Fluxo de Requisição
Seção intitulada “Fluxo de Requisição”Endpoint
Seção intitulada “Endpoint”GET https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas?data={data}&conta={token_conta}Produção:
GET https://app.boletocloud.com/api/v1/arquivos/cnab/remessas?data={data}&conta={token_conta}Parâmetros de Query
Seção intitulada “Parâmetros de Query”| Parâmetro | Tipo | Obrigatório | Formato | Exemplo | Descrição |
|---|---|---|---|---|---|
data | string | Sim | YYYY-MM-DD | 2024-01-15 | Data de geração das remessas |
conta | string | Sim | api-key_{base64} | api-key_abc123... | Token da conta bancária |
Headers da Requisição
Seção intitulada “Headers da Requisição”| Header | Valor | Obrigatório | Descrição |
|---|---|---|---|
Content-Type | application/x-www-form-urlencoded; charset=utf-8 | Sim | Tipo do conteúdo |
Authorization | Basic {credenciais} | Sim | Autenticação HTTP Basic com API Key |
Validações
Seção intitulada “Validações”| Validação | Regra | Código | Mensagem |
|---|---|---|---|
| Data obrigatória | Parâmetro data deve ser informado | 400 | Data é obrigatória |
| Formato de data | Data deve estar no formato YYYY-MM-DD | 400 | Formato de data inválido |
| Conta obrigatória | Parâmetro conta deve ser informado | 400 | Token da conta é obrigatório |
| Conta válida | Token deve corresponder a uma conta existente | 404 | Conta bancária não encontrada |
| Permissão | API Key deve ter acesso à conta | 401 | Não autorizado |
| Plano | Conta deve estar no plano personalizado | 403 | Recurso não disponível para seu plano |
Respostas
Seção intitulada “Respostas”Sucesso: 200 OK
Seção intitulada “Sucesso: 200 OK”Indica que a consulta foi realizada com sucesso. Retorna um JSON com a lista de remessas.
Headers de Resposta
Seção intitulada “Headers de Resposta”| Header | Exemplo | Descrição |
|---|---|---|
Content-Type | application/json; charset=utf-8 | Tipo do conteúdo retornado |
X-BoletoCloud-Version | 1.x.x | Versão da plataforma |
Corpo da Resposta
Seção intitulada “Corpo da Resposta”{ "remessas": { "meta": { "conta": "api-key_xYz123AbCdEfGhIjKlMnOpQrStUvWxYz-A1B2C3D4E5F=", "data": "2024-01-15" }, "arquivos": [ { "token": "7kLmN2pQrStUvWxYz-A1B2C3D4E5FgHiJkLmNoPq=", "dataHoraCriacao": "2024-01-15T09:30:45Z", "numeroOrdemNoDia": 1, "numeroSequencial": 1, "quantidadeDeBoletos": 15 }, { "token": "9aBcDeFgHiJkLmNoPqRsTuVwXyZ-1234567890Ab=", "dataHoraCriacao": "2024-01-15T17:45:12Z", "numeroOrdemNoDia": 2, "numeroSequencial": 2, "quantidadeDeBoletos": 8 } ] }}Campos da Resposta
Seção intitulada “Campos da Resposta”| Campo | Tipo | Descrição |
|---|---|---|
remessas | object | Objeto contendo metadados e lista de arquivos |
remessas.meta | object | Metadados da consulta |
remessas.meta.conta | string | Token da conta bancária consultada |
remessas.meta.data | string | Data da consulta no formato YYYY-MM-DD |
remessas.arquivos | array | Lista de arquivos de remessa encontrados |
remessas.arquivos[].token | string | Token identificador do arquivo (use para Obter Remessa) |
remessas.arquivos[].dataHoraCriacao | string | Data e hora da criação no formato ISO 8601 |
remessas.arquivos[].numeroOrdemNoDia | number | Número de ordem do arquivo no dia |
remessas.arquivos[].numeroSequencial | number | Número sequencial do arquivo |
remessas.arquivos[].quantidadeDeBoletos | number | Quantidade de boletos incluídos no arquivo |
| Código | Status | Causa | Solução |
|---|---|---|---|
400 | Bad Request | Parâmetros ausentes ou inválidos | Verifique data e conta |
401 | Unauthorized | API Key inválida ou ausente | Verifique as credenciais |
403 | Forbidden | Plano não permite este recurso | Contate o suporte para upgrade |
404 | Not Found | Conta não encontrada | Verifique o token da conta |
500 | Internal Server Error | Erro interno | Tente novamente ou contate o suporte |
Exemplo de Erro
Seção intitulada “Exemplo de Erro”{ "erro": { "status": 400, "mensagem": "Formato de data inválido. Use YYYY-MM-DD" }}Exemplos de Código
Seção intitulada “Exemplos de Código”curl "https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas?data=2024-01-15&conta=api-key_SEU-TOKEN-DA-CONTA" \ -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" \ -u "api-key_SUA-API-KEY:token"Resposta:
{ "remessas": [ { "token": "EX-abc123def456", "nome": "CB070401.REM", "dataCriacao": "2024-01-15T09:30:00Z", "quantidadeBoletos": 15 } ]}import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.core.Response;import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
public class ListarRemessas { public static void main(String[] args) throws Exception { String data = "2024-01-15"; String tokenConta = "api-key_SEU-TOKEN-DA-CONTA";
Response response = ClientBuilder.newClient() .target("https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas") .queryParam("data", data) .queryParam("conta", tokenConta) .register(HttpAuthenticationFeature.basic( "api-key_SUA-API-KEY", "token" )) .request(APPLICATION_JSON) .get();
System.out.println("HTTP Status: " + response.getStatus());
if (response.getStatus() == 200) { String json = response.readEntity(String.class); System.out.println("Remessas: " + json); } else { System.err.println("Erro: " + response.readEntity(String.class)); } }}import okhttp3.*
fun main() { val data = "2024-01-15" val tokenConta = "api-key_SEU-TOKEN-DA-CONTA" val client = OkHttpClient() val credential = Credentials.basic("api-key_SUA-API-KEY", "token")
val url = HttpUrl.Builder() .scheme("https") .host("sandbox.boletocloud.com") .addPathSegments("api/v1/arquivos/cnab/remessas") .addQueryParameter("data", data) .addQueryParameter("conta", tokenConta) .build()
val request = Request.Builder() .url(url) .header("Authorization", credential) .get() .build()
client.newCall(request).execute().use { response -> when (response.code) { 200 -> println("Remessas: " + response.body?.string()) else -> println("Erro: " + response.code + " - " + response.body?.string()) } }}using System;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Threading.Tasks;using System.Web;
class Program{ static async Task Main(string[] args) { var data = "2024-01-15"; var tokenConta = "api-key_SEU-TOKEN-DA-CONTA";
using var client = new HttpClient(); var credentials = Convert.ToBase64String( Encoding.ASCII.GetBytes("api-key_SUA-API-KEY:token")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
var query = HttpUtility.ParseQueryString(string.Empty); query["data"] = data; query["conta"] = tokenConta;
var response = await client.GetAsync( "https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas?" + query.ToString());
var body = await response.Content.ReadAsStringAsync();
if ((int)response.StatusCode == 200) { Console.WriteLine("Remessas: " + body); } else { Console.WriteLine("Erro: " + (int)response.StatusCode + " - " + body); } }}const https = require('https');
const data = '2024-01-15';const tokenConta = 'api-key_SEU-TOKEN-DA-CONTA';
const options = { hostname: 'sandbox.boletocloud.com', path: '/api/v1/arquivos/cnab/remessas?data=' + encodeURIComponent(data) + '&conta=' + encodeURIComponent(tokenConta), method: 'GET', auth: 'api-key_SUA-API-KEY:token', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' }};
const req = https.request(options, (res) => { let body = ''; res.on('data', chunk => body += chunk); res.on('end', () => { if (res.statusCode === 200) { console.log('Remessas:', JSON.parse(body)); } else { console.log('Erro:', res.statusCode, '-', body); } });});
req.end();package main
import ( "fmt" "io" "net/http" "net/url")
func main() { data := "2024-01-15" tokenConta := "api-key_SEU-TOKEN-DA-CONTA"
baseURL := "https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas" params := url.Values{} params.Add("data", data) params.Add("conta", tokenConta)
req, _ := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil) req.SetBasicAuth("api-key_SUA-API-KEY", "token") req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
if resp.StatusCode == 200 { fmt.Println("Remessas:", string(body)) } else { fmt.Printf("Erro: %d - %s\n", resp.StatusCode, string(body)) }}<?php$data = '2024-01-15';$tokenConta = 'api-key_SEU-TOKEN-DA-CONTA';$api_key = 'api-key_SUA-API-KEY';
$url = 'https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas?' . http_build_query([ 'data' => $data, 'conta' => $tokenConta ]);
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded; charset=utf-8']);curl_setopt($ch, CURLOPT_USERPWD, "$api_key:token");curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);
if ($http_code == 200) { $dados = json_decode($response, true); echo "Conta: {$dados['remessas']['meta']['conta']}\n"; echo "Data: {$dados['remessas']['meta']['data']}\n"; echo "Remessas encontradas:\n"; foreach ($dados['remessas']['arquivos'] as $arquivo) { echo "- Token: {$arquivo['token']}\n"; echo " Data/Hora: {$arquivo['dataHoraCriacao']}\n"; echo " Boletos: {$arquivo['quantidadeDeBoletos']}\n"; }} else { echo "Erro ($http_code): $response\n";}?>import requestsfrom requests.auth import HTTPBasicAuth
data = '2024-01-15'token_conta = 'api-key_SEU-TOKEN-DA-CONTA'
response = requests.get( 'https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas', auth=HTTPBasicAuth('api-key_SUA-API-KEY', 'token'), params={ 'data': data, 'conta': token_conta })
if response.status_code == 200: dados = response.json() meta = dados['remessas']['meta'] print(f"Conta: {meta['conta']}") print(f"Data: {meta['data']}") print('Remessas encontradas:') for arquivo in dados['remessas']['arquivos']: print(f"- Token: {arquivo['token']}") print(f" Data/Hora: {arquivo['dataHoraCriacao']}") print(f" Boletos: {arquivo['quantidadeDeBoletos']}")else: print('Erro:', response.status_code, '-', response.text)require 'net/http'require 'uri'require 'json'
data = '2024-01-15'token_conta = 'api-key_SEU-TOKEN-DA-CONTA'
uri = URI('https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas')uri.query = URI.encode_www_form(data: data, conta: token_conta)
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| request = Net::HTTP::Get.new(uri) request.basic_auth('api-key_SUA-API-KEY', 'token') request['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
response = http.request(request)
if response.code == '200' dados = JSON.parse(response.body) meta = dados['remessas']['meta'] puts "Conta: #{meta['conta']}" puts "Data: #{meta['data']}" puts 'Remessas encontradas:' dados['remessas']['arquivos'].each do |arquivo| puts "- Token: #{arquivo['token']}" puts " Data/Hora: #{arquivo['dataHoraCriacao']}" puts " Boletos: #{arquivo['quantidadeDeBoletos']}" end else puts "Erro: #{response.code} - #{response.body}" endend(require '[clj-http.client :as client])(require '[clojure.data.json :as json])
(let [data "2024-01-15" token-conta "api-key_SEU-TOKEN-DA-CONTA" response (client/get "https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas" {:basic-auth ["api-key_SUA-API-KEY" "token"] :query-params {:data data :conta token-conta} :throw-exceptions false})]
(if (= 200 (:status response)) (let [dados (json/read-str (:body response) :key-fn keyword) meta (get-in dados [:remessas :meta]) arquivos (get-in dados [:remessas :arquivos])] (println "Conta:" (:conta meta)) (println "Data:" (:data meta)) (println "Remessas encontradas:") (doseq [arquivo arquivos] (println (str "- Token: " (:token arquivo))) (println (str " Data/Hora: " (:dataHoraCriacao arquivo))) (println (str " Boletos: " (:quantidadeDeBoletos arquivo))))) (println "Erro:" (:status response) "-" (:body response))))Exemplo Prático
Seção intitulada “Exemplo Prático”Cenário: Descobrir Token de Remessa Perdido
Seção intitulada “Cenário: Descobrir Token de Remessa Perdido”Um operador gerou uma remessa pela manhã mas não guardou o token. Agora precisa reenviar o arquivo ao banco.
- Listar remessas do dia usando este endpoint
- Identificar a remessa correta pelo horário e quantidade de boletos
- Copiar o token da remessa desejada
- Usar o token no endpoint Obter Remessa
- Baixar o arquivo e enviar ao banco
Requisição
Seção intitulada “Requisição”curl "https://sandbox.boletocloud.com/api/v1/arquivos/cnab/remessas?data=2024-01-15&conta=api-key_SEU-TOKEN-DA-CONTA" \ -u "api-key_SUA-API-KEY:token"Resposta
Seção intitulada “Resposta”{ "remessas": { "meta": { "conta": "api-key_xYz123AbCdEfGhIjKlMnOpQrStUvWxYz-A1B2C3D4E5F=", "data": "2024-01-15" }, "arquivos": [ { "token": "7kLmN2pQrStUvWxYz-A1B2C3D4E5FgHiJkLmNoPq=", "dataHoraCriacao": "2024-01-15T09:30:45Z", "numeroOrdemNoDia": 1, "numeroSequencial": 1, "quantidadeDeBoletos": 15 }, { "token": "9aBcDeFgHiJkLmNoPqRsTuVwXyZ-1234567890Ab=", "dataHoraCriacao": "2024-01-15T17:45:12Z", "numeroOrdemNoDia": 2, "numeroSequencial": 2, "quantidadeDeBoletos": 8 } ] }}O operador identifica que a remessa da manhã (09:30) é a que precisa e usa o token 7kLmN2pQrStUvWxYz-A1B2C3D4E5FgHiJkLmNoPq= para recuperar o arquivo.
Veja Também
Seção intitulada “Veja Também” Criar Remessa Gerar novo arquivo de remessa
Obter Remessa Recuperar arquivo pelo token
Visão Geral Remessa Conceitos sobre arquivos de remessa
Arquivos de Retorno Processar retornos bancários