Bem vindo

Bem vindo a documentação da API Intermeio. Em caso de dúvidas, contate-nos nos canais de atendimento:

E-mail: suporte@intermeio.com
Skype: suporte@intermeio.com

A versão 3 da api, traz vários novos recursos, como:

  • Boletos em lote
  • Cartão tokenizado
  • Personalização da comunicação digital
  • Frentes personalizáveis de cobrança

Nota: Esta documentação está sendo atualizada progressivamente da versão 2.1 para 3.0

Ambientes e requisições

Com a finalidade de garantir um melhor serviço, a Intermeio disponibiliza a seus clientes um ambiente de desenvolvimento. Diferentemente das versões anteriores, o [EndPoint] de desenvolvimento tem o mesmo endereço do [EndPoint] de produção.

Agora o que indica se a transação está sendo gerada em desenvolvimento ou produção, é o parâmetro no header da requição [Env=dev]. Veja como assinar uma transação como desenvolvimento. Ex.:

Authorization: Intermeio Base64(AppKey:[SUAAPPKEY], Signature: [SUASIGNATURE], Env:dev )
Content-Type: application/Json
Importante: Caso o Env=dev não seja informado em uma transação, automaticamente essa transação é redirecionada para produção.

Validações dos ambientes

Desenvolvimento
Gerais
- A validação de ip do requisitante é desabilitada para facilitar o desenvolvimento;

- Todas as requisições devem conter em seu header o content-type: application/Json;

- Todas as transações são automaticamente excluídas após 48 horas;

- Não é possível fazer requisições via ajax para api, por baixa segurança e a exposição de dados sensíveis no browser do cliente;

Boletos
- O valor máximo para boletos em desenvolvimento é de R$ 2,99;
Produção
Gerais
- A validação de ip do requisitante é habilitada;

- Todas as requisições devem conter em seu header o content-type: application/Json;

- Não é possível fazer requisições via ajax para api, por baixa segurança e a exposição de dados sensíveis no browser do cliente;

Hubs Intermeio

A Intermeio disponibiliza 2 hubs para requisições api, cuja finalidade é aumentar a disponibilidade e manutenção dos canais sem prejudicar a demanda.

Recomendamos ao integrante implementar uma lógica a seus sistemas de modo que, se uma requisição falhar (retornar algum erro não tratado), a url de [EndPoint] seja alternada e a mesma requisição seja efetuada novamente.

https://api.intermeio.com
https://api.intermeio.com.br

Token

O token de autenticação é uma chave gerada na API Intermeio permitindo que uma transação seja realizada, e tem por objetivo garantir a segurança das transações realizadas, ele também é a identificação da transação entre a API e o requisitante. Uma vez que o token for criado ele tem um prazo de validade de (1 hora) e só poderá ser utilizado para uma única transação neste período.

Nota: O token é o identificador único da transação entre a o Requisitante e a Intermeio
Importante: O token deve ser armazenado pelo requisitante para consultas futuras e confirmações de pagamento.

Url da chamada - POST

[EndPoint]/[Versao]/Token/Gerar

Header da requisição

O header da requisição deverá ter o seguinte formato:

Authorization: Intermeio Base64(AppKey:[SUAAPPKEY], Signature: [SUASIGNATURE] )
Content-Type: application/Json
Parâmetro Tipo Obrigatório Descrição
AppKey String
Sim
Identificador do requisitante.
Signature String
Sim
Contra-chave do requisitante.
Environment String
Não
Caso o requisitante queira criar um token no ambiente de desenvolvimento ele deverá informar o parâmetro [Env:dev] com o valor dev. Ex: Authorization Intermeio Base64(AppKey: [SUAAPPKEY], Signature: [SUASIGNATURE], Env:dev)

Retorno

PARÂMETRO TIPO OBRIGATÓRIO DESCRIÇÃO
Requisição String
Sim
Status da resposta do servidor
Paginação String
Sim
Paginação da requisição
Resultado String
Sim
Resultado da requisição

                    
                                    using  System;
                                    using  System.Text;
                                    using  System.Net.Http;  
                                    using  System.Net.Http.Headers; 

                                    /*Exemplo POST API para gerar token
                                            Nota: Os dados neste exemplo são apenas para ilustração, -
                                            deve-se substituir pelas credenciais válidas*/
                        
                                                            public class  ApiIntermeio   {
                                                            public dynamic GerarTokenApi()   {
                                                            var bytes = Encoding.UTF8.GetBytes(  
                                                            "AppKey:d54fd5, Signature:sded8f8ef8e8ee8e8e8g4g4g46e6e98, Env:dev");  
                                                            var base64 = Convert.ToBase64String(bytes);  
                                                            using (var requisicao = new HttpClient()) {  
                                                            try   {  
                                                        requisicao.DefaultRequestHeaders.Accept.Clear();  
                                                        requisicao.DefaultRequestHeaders.Authorization  = new AuthenticationHeaderValue("Intermeio", base64);  
                                                        requisicao.DefaultRequestHeaders.Add("Accept", "application/json");  
                                                        var result = requisicao.PostAsJsonAsync( "https://api.intermeio.com.br/V3/Token/Gerar",new object()).Result;  
                                                        return result.Content.ReadAsAsync<dynamic>().Result;  
                                                                                                      } 
                                                            catch (Exception ex){  
                                                                return ex;;  
                                                                      }
                            }  
                                                                                                                                                                            }
                                                                                                                }   
                                  
                                            

Exemplo de retorno em JSON:

                        
                                       
                                        
                                         
                                             {  
                                                             "requisicao":[
   "200 - Requisição efetuada com sucesso"
 ],  "paginacao" :null,  "resultado" :{    "token" : "dasd213-as1-2133-b482-a73ada123cfd05"
  } }
                                         <?php 
                                        class ApiIntermeio {
                                            
                                            private $api_url = 'https://api.intermeio.com.br/v3/';
                                            private $appKey = 'd54fd5';
                                            private $signature = 'sded8f8ef8e8ee8e8e8g4g4g46e6e98';

                                            public function apiRequest($endpoint, $headers)
                                            {
                                                //Inicia o curl
                                                $ch = curl_init();

                                                //URL da API
                                                $url = $this->api_url . $endpoint;

                                                //CURL Options
                                                curl_setopt_array($ch, array(
                                                    CURLOPT_URL => $url,
                                                    CURLOPT_RETURNTRANSFER => true,
                                                    CURLOPT_ENCODING => "",
                                                    CURLOPT_MAXREDIRS => 10,
                                                    CURLOPT_TIMEOUT => 30,
                                                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                                    CURLOPT_HTTPHEADER => $headers,
                                                    CURLOPT_POST => true
                                                ));

                                                // caso necessário, use está configuração a mais no options do CURL: CURLOPT_SSL_VERIFYPEER => FALSE

                                                //Pega o retorno
                                                $jsonRetorno = curl_exec($ch);

                                                //Decodifica o JSON
                                                $arrayRetorno = json_decode($jsonRetorno, true);

                                                //Retorna o Array
                                                return $arrayRetorno;
                                            }

                                            public function getToken()
                                            {
                                                // Gera o autenticador em base 64
                                                $auth = base64_encode("AppKey:$this->appKey, Signature:$this->signature, Env:dev");
                                                // Faz a requisição na api chamando o metodo apiRequest
                                                $requisicao = self::apiRequest('Token/Gerar', [
                                                    'Content-Type: application/json',
                                                    'Content-Length: 0',
                                                    "Authorization: Intermeio $auth",
                                                ]);

                                                // Retorno da função com valor do token
                                                return $requisicao['resultado']['token'];
                                            }
                                        }
                                    
                                        

Exemplo de retorno em JSON:

{  "requisicao":[
   "200 - Requisição efetuada com sucesso"
 ],  "paginacao" :null,  "resultado" :{    "token" : "dasd213-as1-2133-b482-a73ada123cfd05"
  } }
                                            import java.io.IOException;
                                            import javax.servlet.ServletException;
                                            import javax.servlet.annotation.WebServlet;
                                            import javax.servlet.http.HttpServlet;
                                            import javax.servlet.http.HttpServletRequest;
                                            import javax.servlet.http.HttpServletResponse;
                                            import javax.ws.rs.client.Client;
                                            import javax.ws.rs.client.ClientBuilder;
                                            import javax.ws.rs.client.Entity;
                                            import javax.ws.rs.core.HttpHeaders;
                                            import javax.ws.rs.core.MediaType;
                                            import javax.xml.bind.DatatypeConverter;
                                            
                                            @WebServlet("/ApiIntermeio")
                                            public class ApiIntermeio extends HttpServlet {
                                            
                                                public ApiIntermeio() {
                                                    super();
                                                }
                                            
                                                protected void doPost(HttpServletRequest request, HttpServletResponse response)
                                                    throws ServletException, IOException {
                                                        try {
                                            
                                                        Client client = ClientBuilder.newClient();
                                            
                                                        client = ClientBuilder.newClient();
                                                        Token token = new Token();
                                                        String auth = "AppKey:d54fd5, Signature:sded8f8ef8e8ee8e8e8g4g4g46e6e98, Env:dev";
                                            
                                                        String base64 = "Intermeio " + DatatypeConverter.printBase64Binary(auth.getBytes());
                                                        javax.ws.rs.core.Response responsePost = client.target("https://api.intermeio.com/v3/Token/Gerar")
                                                                .request(MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))
                                                                .header(HttpHeaders.AUTHORIZATION, base64).post(Entity.json(token));
                                            
                                                        String result = responsePost.readEntity(String.class);
                                            
                                                        response.getWriter().append(result);
                                                    } catch (Exception e) {
                                                        response.getWriter().append(e.getMessage());
                                                    }
                                                }
                                            
                                            }
                                        
                                            // Classe declarada apenas para mandar o POST null
                                            public class Token {

                                            }
                                        
                                        

Exemplo de retorno em JSON:

{  "requisicao":[
   "200 - Requisição efetuada com sucesso"
 ],  "paginacao" :null,  "resultado" :{    "token" : "dasd213-as1-2133-b482-a73ada123cfd05"
  } }
                                             #Exemplo POST API para gerar token
                                            Nota: Os dados neste exemplo são apenas para ilustração, -
                                            deve-se substituir pelas credenciais válidas
    
                                            import requests, json, base64
                                            
                                            def GerarToken():
                                            
                                            
 url = 'https://api.intermeio.com.br/v3/'
 chamada = 'V3/Token/Gerar'
  appkey = "d54fd5" signature = "sded8f8ef8e8ee8e8e8g4g4g46e6e98" string = "AppKey:"+appkey+", Signature:"+signature+", Env:dev" auth_base64 = base64.b64encode(string.encode('utf-8', errors='strict')) auth_string = auth_base64.decode("utf-8") headers = '{ 'Authorization': "Intermeio " + auth_string + , 'Content-Type': "application/json", 'Cache-Control': "no-cache"}'; req = requests.request("POST", url+chamada, headers=headers) if req.status_code == 200:    json_data = json.loads(req.text)    data_lista = list(json_data.values())    json_lista_2 = (json_lista[2])    token_dump = json.dumps(json_lista_2)    token = token_dump.replace('"', "").replace('{',"").replace('}',"").replace('token', 'Token')) # string para trazer o token sem outros caracteres adicionais return token;

Versionamento

O versionamento funciona como um agrupador de ferramentas, garantindo a autenticidade dos métodos consumidos.

Quando a API é atualizada, a versão anterior continua em funcionamento, permitindo que você escolha o momento adequado para mudar sua versão.

Você será notificado a cada nova versão disponível, e informado das alterações e novas ferramentas disponíveis, que poderão ou não requerer mudanças contratuais.

Para que uma nova versão possa ser utilizada, um novo processo de Homologação será solicitado.

A versão deve ser informada na URL logo após o Endpoint do ambiente com nomenclatura V seguido pelo número da versão. Ex.:

[EndPoint]/V3
Versão atual: V3

Fluxos

O token é a chave indispensável para transações, consultas e notificações de pagamentos. Seguem alguns fluxogramas para os processos:

Boleto unitário

O boleto unitário consiste em uma ferramenta para emissão de boletos de pagamento, sem parcelamento ou recorrência.

Url da chamada - POST

[EndPoint]/[Versao]/Boleto/Gerar

Header da requisição

O header da requisição deverá ter o seguinte formato:

Authorization: Intermeio Base64(Token:[TOKENGERADO])
Content-Type: application/Json
Parâmetro Tipo Obrigatório Descrição
Token String
Sim
Identificador do requisitante.
Environment String
Não
Caso o requisitante queira criar um token no ambiente de desenvolvimento ele deverá informar o parâmetro [Env:dev] com o valor dev. Ex: Authorization Intermeio Base64(Token:[TokenGerado], Env:dev)

Objeto - Boleto Obrigatório
Parâmetro Tipo Tamanho Descrição Obrigatório
Valor String 17 Formato: "0027" = R$ 0,27. Os dois últimos números representam a casa decimal.
Sim
DataVencimento String 10 Data de Vencimento maior ou igual data atual.
Sim
NumeroDocumento String 10 Identificador único do cliente em sistema próprio.
Sim
CONFIGURAÇÃO DE JUROS

Para configurar multa e juros na emissão do boleto, deve-se informar uma propriedade entre: [PercentualJuros] e [ValorJuros] para Juros e/ou ([PercentualMulta] e [ValorMulta]) para Multa.
Não é permitido informar porcentagem e valor para cada encargo.

Parâmetro Tipo Tamanho Descrição Obrigatório
PercentualJuros String 8 Porcentagem de juros ao mês, aplicado ao valor do boleto.
Formato: "10,23". Máximo de: 40%
Não
ValorJuros String 17 Valor em R$ de juros ao dia, aplicado ao valor do boleto. Formato: "0023" = R$ 0,23. Os dois últimos números representam a casa decimal.
Não
QntDiasJuros integer 3 O cálculo dos juros será iniciado a partir da quantidade de dias informada
Não
PercentualMulta String 8 Porcentagem de multa ao mês, aplicado ao valor do boleto.
Formato: "10,23". Máximo de: 40%
Não
ValorMulta String 17 Valor em R$ de multa após o vencimento do titulo, aplicado ao valor do boleto. Formato: "0023" = R$ 0,23. Os dois últimos números representam a casa decimal.
Não
QntDiasMulta integer 3 O cálculo das multas será iniciado a partir da quantidade de dias informada
Não
Obs:
É possivel escolher apenas uma opção entre PercentualMulta e ValorMulta
Objeto - Cliente Obrigatório
NomeRazao String 70 Nome do sacado. -
Sim
CpfCnpj String 14 Cpf ou Cnpj do sacado. -
Sim
Email String 70 E-mail válido do sacado. -
Sim
Sexo String 1 Sexo do sacado em caso de pessoa física. "M" para Masculino e "F" para Feminino -
Não
DataDeNascimento String 10 Data de nascimento do sacado no caso de pessoa física. -
Não
Celular String 12 Número de celular do sacado. -
Não
ApelidoEndereco String 200 Apelido identificador para o endereço do sacado. Ex.: "Casa" -
Sim
CEP String 8 Cep do endereço do sacado. É necessário informar um cep válido. -
Sim
Logradouro String 40 Logradouro do sacado. Ex.: "Av" -
Sim
Endereco String 40 Endereço do sacado. -
Sim
Bairro String 40 Bairro do endereço sacado. -
Sim
Numero String 10 Número do endereço do sacado. -
Sim
Complemento String 15 Complemento do endereço do sacado. -
Sim
Cidade String 30 Cidade do endereço do sacado. -
Sim
Estado String 2 Estado do endereço do sacado. Ex.: "SP" -
Sim
Legendas:
- Não utilizar caracteres especiais.
Parâmetros Split OPCIONAL
AbortarEmCasoDeErro Booleano Caso ocorra um erro toda a operação é abortada.
Sim
Clientes Lista N Lista clientes do split.
Sim
Clientes > CASO OPTE EM INFORMAR OS CLIENTES DO O PARTICIPANTE DO SPLIT
NomeRazao String 70 Nome do sacado.
Sim
CpfCnpj String 14 Documento do participante do split.
Sim
Email String 70 Email do participante do split.
Sim
Taxa String 8 Porcentagem que o cliente split deverá receber em cima do valor da cobrança.
Sim
Descricao String 200 Descrição.
Não
NotificarPorSms Booleano Caso queira notificar por SMS ao participante do split sobre a quantia recebida. O SMS só será enviado caso a cobrança seja paga. As tarifas de envio serão cobradas do emissor da cobrança.
Sim
NotificarPorEmail Booleano Caso queira notificar por e-mail ao participante do split sobre a quantia recebida.
Sim
Telefones Lista N Lista telefone do cliente.
Não
ClienteContaBancaria Objeto Dados conta Bancaria.
Não
TransferenciaAutomatica Objeto Dados para transferencia aturomática.
Não
Parâmetros Split- Telefones > CASO OPTE EM INFORMAR OS TELEFONES DO O PARTICIPANTE DO SPLIT
Apelido String 200 Apelido para o telefone informado, exemplo:(Comercial / Celular)
Sim
DDD String 2 DDD para o número informado.
Sim
Numero String 11 Número do telefone.
Sim
Parâmetros Split- Conta Bancária > CASO OPTE EM INFORMAR A CONTA BANCÁRIA DO PARTICIPANTE DO SPLIT
CodigoBanco String 4 Código do banco a que pertence a conta.
Sim
Agencia String 10 Número da agência.
Sim
DigAgencia String 3 Dígito da agência.
Sim
Conta String 10 Número da conta.
Sim
DigConta String 3 Dígito da conta.
Sim
Parâmetros Split- Transferência Automática > CASO OPTE EM EFETUAR A TRANSFERÊNCIA AUTOMÁTICA PARA O PARTICIPANTE DO SPLIT
EfetuarTEFAutomatica Booleano True para habilitar a TEF automática e false para desabilitar. Caso não informe esse objeto o default é FALSE.
Sim
ACobrar Booleano True para transferir a cobrança da tarifa para o participante do split e False para cobrar a tarifa do emissor.
Sim
Periodicidade Int Indica a periodicidade TEFs automáticas para o cliente participante do split. 1 - Todo 1º dia útil do mês; 2 - Todo 1º dia útil da semana; 3 - Diariamente;
Sim
ValorMinimo String Indica o valor mínimo para que as TEFs automáticas sejam efetuadas ao participante do split.
Sim
Objeto - Configuracoes Opcional
EmissaoDigital Objeto Emissão Digital para enviar Sms e email para o cliente.
Não
Objeto - Configuracoes > EmissaoDigital Opcional
Email string Email do participante do split.
Não
Sms objeto Enviar sms participante do split.
Não
Objeto - Configuracoes > EmissaoDigital > Sms Opcional
Celular String 20 Número para envio do SMS.
Não
Msg String Mensagem personalizada pelo requisitante. Caso informe esse parâmetro, o parâmetro [Padrao] será substituído por este.
Não

Retorno

PARÂMETRO TIPO OBRIGATÓRIO DESCRIÇÃO
Requisição String
Sim
Status da resposta do servidor.
Paginação String
Sim
Paginação da requisição.
Resultado String
Sim
Resultado da requisição.

Renderização do boleto

HTML CLEAN

Para renderizar o boleto em HTML CLEAN utilize a url:

[EndPoint]/[hashBoleto]

ou

[EndPoint]/[hashSimplificado]
INTERFACE DE PAGAMENTO PERSONALIZADA

Para renderizar o boleto na INTERFACE PERSONALIZADA DE PAGAMENTO utilize a url:

[EndPoint]/Boleto/[hashBoleto]

ou

[EndPoint]/Boleto/[hashSimplificado]

NOTA: Para envio da url por e-mail e/ou sms, recomendamos o envio utilzando o [hashSimplificado] . Este hash é um redirecionador para o [hashBoleto] e é válido por 60 dias após a emissão do boleto.


                                    /*Exemplo POST API para gerar boleto
                                    Nota: Os dados neste exemplo são apenas para ilustração, -
                                    deve-se substituir pelas credenciais válidas*/
                                     //Chamada a API Intermeio para gerar o Boleto
                                    public void GerarBoleto()
                                    {
                                        //Após ter um token válido como o exemplo acima mostra, é necessário transformalo em Base64
                                        string token = (string)GerarTokenApi().resultado.token;           
                                        var desenvolvimento = ", Env:dev";            
                                        var bytes = Encoding.UTF8.GetBytes($"Token:{token}{desenvolvimento}");
                                        var base64 = Convert.ToBase64String(bytes);

                                        using (var requisicao = new HttpClient())
                                        {
                                            try
                                            {
                                                //Para que a API possa gerar um boleto com sucesso ela precisa de um objeto com os dados do boleto neste exemplo chamamos no método MontarBoleto, e também precisa de um token válido
                                                var boletoModel = MontarBoleto();

                                                requisicao.DefaultRequestHeaders.Accept.Clear();
                                                requisicao.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Intermeio", base64);
                                                requisicao.DefaultRequestHeaders.Add("Accept", "application/json");
                                                var result = requisicao.PostAsJsonAsync( "https://api.intermeio.com.br/V3/Boleto/Gerar/", boletoModel).Result;
                                                //Retorno com dados se o boleto foi gerado com sucesso ou não.
                                                var resultado = result.Content.ReadAsAsync<Object>().Result;
                                            }
                                            catch (Exception)
                                            {
                                            }
                                        }
                                    }

                                     //Criando um método que vai retornar o Objeto já preenchido
                                    private object MontarBoleto()
                                    { 
                                    //Criando um objeto do tipo Boleto
                                    //Exemplo com dados fictícios
                                    // Objeto boleto - OBRIGATÓRIO  
                                    var Boleto = new {
                                    DataVencimento = "10/10/2020",
                                    NumeroDocumento = "123456789",
                                    PercentualJuros = "0",
                                    PercentualMulta = "0",
                                    QntDiasJuros = 0,
                                    QntDiasMulta = 0,
                                    Valor = "020", //Ex: R$ 0,20 caso queira colocar um valor de R$ 4500,68 colocar número inteiro sem pontuação Ex.450068
                                    ValorJuros = 0,
                                    ValorMulta =0
                                    };   
                                    //Criando um objeto do tipo Cliente
                                    //Exemplo com dados fictícios
                                    // Objeto cliente(sacado) - OBRIGATÓRIO  
                                    var Cliente = new{
                                    NomeRazao = "Zezinho Juarez",
                                    ApelidoEndereco = "endereco 01",
                                    Bairro = "Tatuape",
                                    Celular = "11944445555",
                                    CEP = "03633020",
                                    Cidade = "Sao Paulo",
                                    Complemento = "Casa",
                                    CpfCnpj = "14386172084",
                                    DataDeNascimento = "27/02/1987",
                                    Email = "jose@gmail.com",
                                    Endereco = "Francisco Gonzales",
                                    Estado = "SP",
                                    Logradouro = "Rua",
                                    Sexo = "M",
                                    Numero = "94"
                                    };
                                    var Clientes = new List<Object>();
                                    //Criando o primeiro objeto do cliente que vai ficar dentro do Split
                                    var clientSplit = new {
                                    NomeRazao = "Fabio Santos",
                                    CpfCnpj = "14386172084",
                                    Descricao = "teste",
                                    Email = "teste@teste.com.br",
                                    Taxa = "16",
                                    NotificarPorEmail = true,
                                    NotificarPorSms = false,
                                    //Criando um objeto lista do tipo telefone onde 1 cliente pode ter varios telefones
                                    Telefones = new List<Object>(),
                                    //Criando o objeto do tipo conta do cliente para o split
                                    ClienteContaBancaria = new {                    
                                    Conta = "11111",
                                    DigConta = "1",
                                    Agencia = "2222",
                                    DigAgencia = "2",
                                    CodigoBanco = "12345"
                                    },                    
                                    //Criando um objeto do tipo transferência automatica
                                    TransferenciaAutomatica = new {                    
                                    ACobrar = true,
                                    EfetuarTefAutomatica = true,
                                    Periodicidade = 1,
                                    ValorMinimo = "100"
                                    }
                                    };
                                    //Criando objeto do tipo telefone
                                    clientSplit.Telefones.Add(new {                    
                                    Apelido = "Fabio",
                                    DDD = "11",
                                    Numero = "988886666"
                                    });
                                    //Criando o segundo objeto do tipo cliente split
                                    var clientSplit2 = new {
                                    NomeRazao = "Fulano da Silva",
                                    CpfCnpj = "14386172084",
                                    Descricao = "teste",
                                    Email = "Fulano@teste.com.br",
                                    Taxa = "20",
                                    NotificarPorEmail = true,
                                    NotificarPorSms = true,
                                    //Criando objeto do tipo telefone para o segundo cliente split
                                    Telefones = new List<Object>(),
                                    //Criar o objeto do tipo conta bancaria para o segundo cliente split
                                    ClienteContaBancaria = new {
                                    Conta = "11111",
                                    DigConta = "1",
                                    Agencia = "2222",
                                    DigAgencia = "2",
                                    CodigoBanco = "12345"
                                    },                    
                                    //Criando um objeto do tipo transferência automatica para o segundo cliente split
                                    TransferenciaAutomatica = new {
                                    ACobrar = true,
                                    EfetuarTefAutomatica = true,
                                    Periodicidade = 1,
                                    ValorMinimo = "100"
                                    }
                                    };
                                    //Criando objeto do tipo telefone
                                    clientSplit2.Telefones.Add(new{
                                        Apelido = "Split 2",
                                        DDD = "11",
                                        Numero = "922221111"
                                    });
                                    //Adicionando na lista de split o cliente 1 e 2
                                    Clientes.Add(clientSplit);
                                    Clientes.Add(clientSplit2);    
                                                        
                                    //Criando objeto configurações do modelo boleto                    
                                    var Configuracoes = new {                    
                                    //Criando um objeto Emissão Digital para enviar Sms e email para o cliente
                                    EmissaoDigital = new {
                                        Email = "teste@live.com",
                                    //Criando um objeto SMS
                                    Sms = new{
                                    Celular = "11977446699",
                                    Msg = "Prezado cliente segue boleto referênte ao pagamento."
                                    }
                                    }
                                    };                                    
                                    //Criando um Objeto Split Model
                                    //Adicionando no objeto Split Model o split preenchido com os dados dos clientes
                                    //Este parametro é muito importante quando está marcado como true, qualquer erro que houver na hora do split ele aborta o processo de geração do boleto                    
                                    var splitModel = new{AbortarEmCasoDeErro = true, Clientes};                                        
                                    //Dentro do Split um dos objetos que ele recebe é uma lista de clientes, aqui estamos criando uma lista para preencher 2 clientes
                                    //Criando o objeto modelo onde será passado objetos do tipo Boleto, Cliente, SplitModel, Configuracoes
                                    var boletoModel = new {Boleto, Cliente,Split = splitModel, Configuracoes};
                                    //Retornando o objeto(Boleto) todo preenchido pronto para gerar o boleto
                                    return boletoModel;
                                    } 
                                

Exemplo de retorno em JSON:

                                        {
                                        "requisicao": [
                                            "200 - Requisição efetuada com sucesso"
                                        ],
                                        "paginacao": null,
                                        "resultado": {
                                        "hashBoleto": "cva27c3-be09-4132ad-31ac-b64cad17b50b",
                                        "hashSimplificado": "F6daqNpW4",
                                        "linhaDigitavel": "22123 39225 65521 073129 01000 034007 9 840408430020",
                                        "codigoDeBarras": null,
                                        "nossoNumero":"5523112601",
                                        "refNumeroDocumento": "13216789",
                                        "refToken": "fda321356-e211-4134-asae-a7d31123213e",
                                        "split": true
                                        }
                                        }  
						            
                                         <?php 
                                        class ApiIntermeio {
                                            
                                            private $api_url = 'https://api.intermeio.com.br/v3/';
                                            private $appKey = 'd54fd5';
                                            private $signature = 'sded8f8ef8e8ee8e8e8g4g4g46e6e98';

                                            public function apiRequest($endpoint, $headers, $body)
                                            {
                                                //Inicia o curl
                                                $ch = curl_init();

                                                //URL da API
                                                $url = $this->api_url . $endpoint;

                                                //CURL Options
                                                curl_setopt_array($ch, array(
                                                    CURLOPT_URL => $url,
                                                    CURLOPT_RETURNTRANSFER => true,
                                                    CURLOPT_ENCODING => "",
                                                    CURLOPT_MAXREDIRS => 10,
                                                    CURLOPT_TIMEOUT => 30,
                                                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                                    CURLOPT_HTTPHEADER => $headers,
                                                    CURLOPT_POST => true,
                                                    CURLOPT_POSTFIELDS => json_encode($body) //Body da requisição
                                                ));

                                                // caso necessário, use está configuração a mais no options do CURL: CURLOPT_SSL_VERIFYPEER => FALSE

                                                //Pega o retorno
                                                $jsonRetorno = curl_exec($ch);

                                                //Decodifica o JSON
                                                $arrayRetorno = json_decode($jsonRetorno, true);

                                                //Retorna o Array
                                                return $arrayRetorno;
                                            }

                                            public function getToken()
                                            {
                                                // Gera o autenticador em base 64
                                                $auth = base64_encode("AppKey:$this->appKey, Signature:$this->signature, Env:dev");
                                                // Faz a requisição na api chamando o metodo apiRequest
                                                $requisicao = self::apiRequest('Token/Gerar', [
                                                    'Content-Type: application/json',
                                                    'Content-Length: 0',
                                                    "Authorization: Intermeio $auth",
                                                ]);

                                                // Retorno da função com valor do token
                                                return $requisicao['resultado']['token'];
                                            }

                                            // Declaramos a função gerarBoleto recebendo como parametro o boleto sendo array (na maioria dos casos este array é recebido de um post de formulario)
                                            public function geraBoleto($boleto)
                                            {
                                                // Chama a função getToken para gerar um novo token
                                                $token = self::getToken();

                                            // Montando o body da requisição da api para geração do boleto
                                            $bodyRequest = [
                                                "Boleto" => [
                                                    "Valor" => $boleto['valor'] = "020", // exemplo para R$ 0,20
                                                    "DataVencimento" => $boleto['dataVencimento'] = "10/10/2020",
                                                    "NumeroDocumento" => $boleto['numeroDocumento'] = "123456789",
                                                ],
                                                "Cliente" => [
                                                    "NomeRazao" => $boleto['nomeRazao'] = "Zezinho Juarez",
                                                    "CpfCnpj" => $boleto['cpfCnpj'] = "14386172084",
                                                    "Email" => $boleto['email'] = "jose@gmail.com",
                                                    "ApelidoEndereco" => $boleto['apelidoEndereco'] = "endereco 01",
                                                    "CEP" => $boleto['cep'] = "03633020",
                                                    "Logradouro" => $boleto['logradouro'] = "Rua",
                                                    "Endereco" => $boleto['endereco'] = "Francisco Gonzales",
                                                    "Numero" => $boleto['numero'] = "94",
                                                    "Bairro" => $boleto['bairro'] = "Tatuape",
                                                    "Complemento" => $boleto['complemento'] = "Casa",
                                                    "Cidade" => $boleto['cidade'] = "Sao Paulo",
                                                    "Estado" => $boleto['estado'] = "SP",
                                                ],
                                                "Split" => [
                                                    "AbortarEmCasoDeErro" => $boleto['abortarSplit'] = true,
                                                    "Clientes" => [
                                                        [
                                                            "NomeRazao" => $boleto['nomeRazaoSplit'] = "Fabio Santos",
                                                            "CpfCnpj" => $boleto['cpfCnpjSplit'] = "14386172084",
                                                            "Email" => $boleto['emailSplit'] = "teste@teste.com.br",
                                                            "Taxa" => $boleto['taxaSplit'] = "16", // exemplo de taxa de 16%
                                                            "NotificarPorSms" => $boleto['notificarSmsSplit'] = false,
                                                            "NotificarPorEmail" => $boleto['notificarEmailSplit'] = true,
                                                            "Telefones" => [
                                                                [
                                                                    "Apelido" => $boleto['apelidoTelefoneSplit'] = "Fabio",
                                                                    "DDD" => $boleto['dddSplit'] = "11",
                                                                    "Numero" => $boleto['telefoneSplit'] = "988886666",
                                                                ]
                                                            ],
                                                            "ClienteContaBancaria" => [
                                                                "CodigoBanco" => $boleto['codigoBancoplit'] = "12345",
                                                                "Agencia" => $boleto['agenciaBancoplit'] = "2222",
                                                                "DigAgencia" => $boleto['digitoBancoplit'] = "2",
                                                                "Conta" => $boleto['contaBancoplit'] = "11111",
                                                                "DigConta" => $boleto['digitoContaplit'] = "1",
                                                            ],
                                                            "TransferenciaAutomatica" => null,
                                                        ]
                                                    ]
                                                ]
                                            ];

                                            // Gera o autenticador em base 64
                                            $auth = base64_encode("Token:$token, Env:dev");
                                            // Faz a requisição na api chamando o metodo apiRequest
                                            $requisicao = self::apiRequest('Boleto/Gerar', [
                                                "Content-Type: application/json",
                                                "Authorization: Intermeio $auth",
                                            ], $bodyRequest);

                                            // Retorno da função com valor do hashSimplificado do boleto para poder ser usado na url
                                            return $requisicao['resultado']['hashSimplificado'];

                                            }
                                        }
                                    

Exemplo de retorno em JSON:

                                            {
                                            "requisicao": [
                                                "200 - Requisição efetuada com sucesso"
                                            ],
                                            "paginacao": null,
                                            "resultado": {
                                            "hashBoleto": "cva27c3-be09-4132ad-31ac-b64cad17b50b",
                                            "hashSimplificado": "F6daqNpW4",
                                            "linhaDigitavel": "22123 39225 65521 073129 01000 034007 9 840408430020",
                                            "codigoDeBarras": null,
                                            "nossoNumero":"5523112601",
                                            "refNumeroDocumento": "13216789",
                                            "refToken": "fda321356-e211-4134-asae-a7d31123213e",
                                            "split": true
                                            }
                                            }  
                                        
                                            import java.io.IOException;
                                            import java.util.ArrayList;
                                            import java.util.List;
                                            import java.util.UUID;
                                            import javax.servlet.ServletException;
                                            import javax.servlet.annotation.WebServlet;
                                            import javax.servlet.http.HttpServlet;
                                            import javax.servlet.http.HttpServletRequest;
                                            import javax.servlet.http.HttpServletResponse;
                                            import javax.ws.rs.client.Client;
                                            import javax.ws.rs.client.ClientBuilder;
                                            import javax.ws.rs.client.Entity;
                                            import javax.ws.rs.core.HttpHeaders;
                                            import javax.ws.rs.core.MediaType;
                                            import javax.xml.bind.DatatypeConverter;
                                            import org.eclipse.persistence.sessions.serializers.JSONSerializer;
                                            import br.com.apiintermeio.entidade.Boleto;
                                            import br.com.apiintermeio.entidade.BoletoModel;
                                            import br.com.apiintermeio.entidade.Cliente;
                                            import br.com.apiintermeio.entidade.ClienteContaBancaria;
                                            import br.com.apiintermeio.entidade.Configuracoes;
                                            import br.com.apiintermeio.entidade.EmissaoDigital;
                                            import br.com.apiintermeio.entidade.Token;
                                            import br.com.apiintermeio.entidade.TransferenciaAutomatica;
                                            import br.com.apiintermeio.entidade.RetornoToken;
                                            import br.com.apiintermeio.entidade.Sms;
                                            import br.com.apiintermeio.entidade.SplitCliente;
                                            import br.com.apiintermeio.entidade.SplitModel;
                                            import br.com.apiintermeio.entidade.Telefone;
                                            
                                            @WebServlet("/ApiIntermeio")
                                            public class ApiIntermeio extends HttpServlet {
                                            
                                                public ApiIntermeio() {
                                                    super();
                                                }
                                            
                                                protected void doPost(HttpServletRequest request, HttpServletResponse response)
                                                    throws ServletException, IOException {
                                                    String acao = request.getParameter("action").toUpperCase();
                                                    String tokenParametro = request.getParameter("token");
                                                    javax.ws.rs.core.Response responsePost = null;
                                            
                                                    try {
                                            
                                                        Client client = ClientBuilder.newClient();
                                                        String tokenResponse = null;
                                            
                                                        switch (acao) {
                                                            case "BOLETO":
                                            
                                                            tokenResponse = "Token:" + getTokenAPI().resultado.token + ", Env:dev";
                                                            
                                                            String token64 = "Intermeio " + DatatypeConverter.printBase64Binary(tokenResponse.getBytes());
                                                            responsePost = client.target("https://api.intermeio.com/v3/Boleto/Gerar")
                                                                    .request(MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))
                                                                    .header(HttpHeaders.AUTHORIZATION, token64).post(Entity.json(MontarBoleto()));
                                            
                                                                break;
                                                            case "BOLETOTOKEN":
                                            
                                                            tokenResponse = "Token:" + tokenParametro + ", Env:dev";
                                                            String base64 = "Intermeio " + DatatypeConverter.printBase64Binary(tokenResponse.getBytes());
                                                            responsePost = client.target("https://api.intermeio.com/v3/Boleto/Gerar")
                                                                    .request(MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))
                                                                    .header(HttpHeaders.AUTHORIZATION, base64).post(Entity.json(MontarBoleto()));
                                            
                                                                break;
                                                            case "BOLETOLOTE":
                                            
                                                                break;
                                                            default:
                                                                break;
                                                        }
                                            
                                                        String result = responsePost.readEntity(String.class);
                                            
                                                        response.getWriter().append(result);
                                                    } catch (Exception e) {
                                                        response.getWriter().append(e.getMessage());
                                                    }
                                                }
                                            
                                                private RetornoToken getTokenAPI() {
                                                    javax.ws.rs.core.Response responsePost = null;
                                                    Client client = ClientBuilder.newClient();
                                                    client = ClientBuilder.newClient();
                                            
                                                    responsePost = client.target("https://api.intermeio.com/v3/Token/Gerar")
                                                            .request(MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))
                                                            .header(HttpHeaders.AUTHORIZATION, TokenBase64()).post(Entity.json(new Token()));
                                            
                                                    RetornoToken result = responsePost.readEntity(RetornoToken.class);
                                                    return result;
                                                }
                                            
                                                private String TokenBase64() {
                                                    String auth = "AppKey:d54fd5, Signature:sded8f8ef8e8ee8e8e8g4g4g46e6e98, Env:dev";
                                            
                                                    return "Intermeio " + DatatypeConverter.printBase64Binary(auth.getBytes());
                                                }
                                            
                                                // método que retorna um objeto do tipo Boleto
                                                private BoletoModel MontarBoleto() {
                                                    // Objeto do tipo modelo boleto onde vai conter o boleto dentro
                                                    BoletoModel boletoModel = new BoletoModel();
                                                    // Objeto do tipo Boleto
                                                    Boleto boleto = new Boleto();
                                                    // Adicionando valores no objeto Boleto
                                                    boleto.setDataVencimento("10/10/2020");
                                                    boleto.setNumeroDocumento("123456789");
                                                    boleto.setPercentualJuros("0");
                                                    boleto.setPercentualMulta("0");
                                                    boleto.setQntDiasJuros(0);
                                                    boleto.setQntDiasMulta(0);
                                                    boleto.setValor("144");
                                                    boleto.setValorJuros(0);
                                                    boleto.setValorMulta(0);
                                                    // Adicionando dados do boleto ao objeto boleto model
                                                    boletoModel.Boleto = boleto;
                                            
                                                    // objeto cliente que vai dentro do boleto
                                                    Cliente cliente = new Cliente();
                                                    // Populando o objeto cliente que vai dentro do boleto
                                                    cliente.setNomeRazao(UUID.randomUUID().toString());
                                                    cliente.setApelidoEndereco("endereco 01");
                                                    cliente.setBairro("Tatuape");
                                                    cliente.setCelular("11949544145");
                                                    cliente.setCEP("03633020");
                                                    cliente.setCidade("Sao Paulo");
                                                    cliente.setComplemento("Casa");
                                                    cliente.setCpfCnpj("14386172084");
                                                    cliente.setDataDeNascimento("27/02/1987");
                                                    cliente.setEmail("jose@gmail.com");
                                                    cliente.setEndereco("Francisco Gonzales");
                                                    cliente.setEstado("SP");
                                                    cliente.setLogradouro("Rua");
                                                    cliente.setSexo("M");
                                                    cliente.setNumero("94");
                                                    // Adicionando cliente ao objeto boleto
                                                    boletoModel.Cliente = cliente;
                                            
                                                    // Criando objeto do tipo Split
                                                    SplitModel split = new SplitModel();
                                                    // Campo importante para caso houver algum erro na transação a operação seja cancelada
                                                    split.setAbortarEmCasoDeErro(true);
                                                    // Gerar uma lista de split para o modelo do boleto
                                                    List	<SplitCliente> listaSplit = new ArrayList	<SplitCliente>();
                                                    // Criando um objeto cliente split
                                                    SplitCliente clientSplit = new SplitCliente();
                                                    clientSplit.setNomeRazao("Fabio Santos");
                                                    clientSplit.setCpfCnpj("84163307000101");
                                                    clientSplit.setDescricao("teste");
                                                    clientSplit.setEmail("teste@teste.com.br");
                                                    clientSplit.setTaxa("16");
                                                    clientSplit.setNotificarPorEmail(true);
                                                    clientSplit.setNotificarPorSms(false);
                                            
                                                    // Criando uma lista de telefone para adicionar ao cliente do split
                                                    List	<Telefone> telefonesSplit = new ArrayList	<Telefone>();
                                                    // Criando um objeto do tipo telefone para adicionar a lista de telefone do cliente split
                                                    Telefone telefone = new Telefone();
                                                    telefone.setApelido("Fabio");
                                                    telefone.setDDD("11");
                                                    telefone.setNumero("999999999");
                                                    // Adicionando o telefone a lista
                                                    telefonesSplit.add(telefone);
                                                    // Adicionando a lista de telefone ao cliente
                                                    clientSplit.setTelefones(telefonesSplit);
                                            
                                                    // Criando um objeto do tipo conta bancaria do cliente Split
                                                    ClienteContaBancaria clienteContaBancaria = new ClienteContaBancaria();
                                                    clienteContaBancaria.setConta("11111");
                                                    clienteContaBancaria.setDigConta("1");
                                                    clienteContaBancaria.setAgencia("2222");
                                                    clienteContaBancaria.setDigAgencia("2");
                                                    clienteContaBancaria.setCodigoBanco("12345");
                                                    // Adicionando a Conta Bancaria do cliente Split
                                                    clientSplit.setClienteContaBancaria(clienteContaBancaria);
                                            
                                                    // Criando objeto transferencia Automatica do cliente do Split
                                                    TransferenciaAutomatica transferenciaAutomatica = new TransferenciaAutomatica();
                                                    transferenciaAutomatica.setACobrar(true);
                                                    transferenciaAutomatica.setEfetuarTefAutomatica(true);
                                                    transferenciaAutomatica.setPeriodicidade(1);
                                                    transferenciaAutomatica.setValorMinimo("100");
                                                    // Adicionando transferencia automatica do cliente split
                                                    clientSplit.setTransferenciaAutomatica(transferenciaAutomatica);
                                            
                                                    // Adicionando o primeiro cliente do split neste exemplo
                                                    listaSplit.add(clientSplit);
                                            
                                                    // Adicionando a lista de clientes split ao objeto split
                                                    split.Clientes = listaSplit;
                                            
                                                    // Adicionando objeto split ao modelo do boleto
                                                    boletoModel.Split = split;
                                            
                                                    // Criando objeto configurações do objeto modelo
                                                    Configuracoes configuracoes = new Configuracoes();
                                                    // Criando objeto EmissaoDigital que fica dentro das configurações
                                                    EmissaoDigital emissaoDigital = new EmissaoDigital();
                                                    // Criando objeto emissão digital
                                                    emissaoDigital.setEmail("teste@teste.com");
                                                    // Criando objeto para envio de SMS que fica dentro do Emissão Digital
                                                    Sms sms = new Sms();
                                                    // Adicionando o numero do celular que receba a mensagem SMS
                                                    sms.setCelular("11998789223");
                                                    sms.setMsg("Teste Via API classe de teste");
                                                    emissaoDigital.Sms = sms;
                                                    // Adicionando a emissão ao objeto de configuração
                                                    configuracoes.setEmissaoDigital(emissaoDigital);
                                            
                                                    // Adicionando a configuração o boleto model
                                                    boletoModel.Configuracoes = configuracoes;
                                                    
                                                    return boletoModel;
                                                }
                                            
                                            }
                                    
                                            public class Boleto {
                                            
                                                public String Valor;
                                                public String DataVencimento;
                                                public String NumeroDocumento;
                                                public String PercentualJuros;
                                                public int ValorJuros;
                                                public int QntDiasJuros;
                                                public String PercentualMulta;
                                                public int ValorMulta;
                                                public int QntDiasMulta;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class BoletoModel {
                                            
                                                public Boleto Boleto;
                                                public Cliente Cliente;
                                                public SplitModel SplitModel;
                                                public Configuracoes Configuracoes;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Cliente {
                                            
                                                public String NomeRazao;
                                                public String CpfCnpj;
                                                public String Email;
                                                public String Sexo;
                                                public String DataDeNascimento;
                                                public String Celular;
                                                public String ApelidoEndereco;
                                                public String CEP;
                                                public String Logradouro;
                                                public String Endereco;
                                                public String Bairro;
                                                public String Numero;
                                                public String Complemento;
                                                public String Cidade;
                                                public String Estado;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class ClienteContaBancaria {
                                            
                                                public String CodigoBanco;
                                                public String Agencia;
                                                public String DigAgencia;
                                                public String Conta;
                                                public String DigConta;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Configuracoes {
                                            
                                                public EmissaoDigital EmissaoDigital;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Configuracoes {
                                            
                                                public String Email;
                                                public Sms Sms;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Token {
                                            
                                            }
                                    
                                            public class TransferenciaAutomatica {
                                            
                                                public boolean EfetuarTefAutomatica;
                                                public boolean ACobrar;
                                                public int Periodicidade;
                                                public String ValorMinimo;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            import java.util.List;

                                            public class RetornoToken {
                                            
                                                public List<String> requisicao;
                                                public String paginacao;
                                                public APIToken resultado;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Sms {
                                            
                                                public String Celular;
                                                public String Msg;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class SplitCliente {
                                            
                                                public String NomeRazao;
                                                public String CpfCnpj;
                                                public String Email;
                                                public String Taxa;
                                                public String Descricao;
                                                public boolean NotificarPorSms;
                                                public boolean NotificarPorEmail;
                                                public List<Telefone> Telefones;
                                                public ClienteContaBancaria ClienteContaBancaria;
                                                public TransferenciaAutomatica TransferenciaAutomatica;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class SplitModel {
                                            
                                                public boolean AbortarEmCasoDeErro;
	                                            public List<SplitClientee> Clientes;

                                                //...Getters e Setters ocultos...
                                            }
                                    
                                            public class Telefone {
                                            
                                                public String Apelido;
                                                public String DDD;
                                                public String Numero;

                                                //...Getters e Setters ocultos...
                                            }
                                    

Exemplo de retorno em JSON:

                                        {
                                        "requisicao": [
                                            "200 - Requisição efetuada com sucesso"
                                        ],
                                        "paginacao": null,
                                        "resultado": {
                                        "hashBoleto": "cva27c3-be09-4132ad-31ac-b64cad17b50b",
                                        "hashSimplificado": "F6daqNpW4",
                                        "linhaDigitavel": "22123 39225 65521 073129 01000 034007 9 840408430020",
                                        "codigoDeBarras": null,
                                        "nossoNumero":"5523112601",
                                        "refNumeroDocumento": "13216789",
                                        "refToken": "fda321356-e211-4134-asae-a7d31123213e",
                                        "split": true
                                        }
                                        }  
                                    
                                        import requests, json, base64
                                        
                                        def GerarToken():
                                        
                                        
 url = 'https://api.intermeio.com.br/v3/'
 chamada = 'V3/Token/Gerar'
  appkey = "d54fd5" signature = "sded8f8ef8e8ee8e8e8g4g4g46e6e98" string = "AppKey:"+appkey+", Signature:"+signature+", Env:dev" auth_base64 = base64.b64encode(string.encode('utf-8', errors='strict')) auth_string = auth_base64.decode("utf-8") headers = '{ 'Authorization': "Intermeio " + auth_string + , 'Content-Type': "application/json", 'Cache-Control': "no-cache"}'; req = requests.request("POST", url+chamada, headers=headers) if req.status_code == 200:    json_data = json.loads(req.text)    data_lista = list(json_data.values())    json_lista_2 = (json_lista[2])    token_dump = json.dumps(json_lista_2)    token = token_dump.replace('"', "").replace('{',"").replace('}',"").replace('token', 'Token')) # string para trazer o token sem outros caracteres adicionais GerarBoleto(token); def GerarBoleto(token_string_encodado): headers = { 'Authorization': "Intermeio " + token_string_encodado + ", Env:dev" , 'Content-Type': "application/json", 'cache-control': "no-cache" } chamada = "V3/Boleto/Gerar" body = json.dumps( { "Boleto": { "Valor" :"100", "DataVencimento":"16/10/2018", "NumeroDocumento":"102521402154" }, "Cliente": { "NomeRazao" : "José da Silva", "CpfCnpj" : "69049213669", "Email" : "jose@gmail.com", "Sexo" : "M", "DataDeNascimento" : "27/02/1987", "Celular" : "11949544145", "ApelidoEndereco" : "endereço 01", "CEP" : "03633020", "Logradouro" : "Rua", "Endereco" : "Francisco Gonzales", "Numero" : "94", "Bairro" : "Tatuapé", "Complemento" : "Casa", "Cidade" : "São Paulo", "Estado" : "SP" } }) req_boleto = requests.request("POST", url+chamada, headers=headers, data=body) if req_boleto.status_code == 200: json_data = json.loads(req_boleto.text) data_lista = list(json_data.values()) print(data_lista[2-3]) else: print(req_boleto.status_code) print("Requisição gerar o boleto não foi efetuada")

Boleto em Lote

O boleto em lote consiste em uma ferramenta para emissão de boletos de pagamento de forma massiva, sem parcelamento ou recorrência.

As regras para cada boleto contido no lote de boletos, são as mesmas do boleto unitário.

O prazo máximo para processamento e registro dos boletos do lote é de 24 horas, podendo ocorrer em minutos após a solicitação. Este prazo varia de acordo com a quantidade de boletos contidos no lote.

Após o processamento do lote, a API comunicará via POST para uma url pré-configurada do cliente o resultado do processamento.

Url da chamada - POST

[EndPoint]/[Versao]/Boleto/Lote

Header da requisição

O header da requisição deverá ter o seguinte formato:

Authorization: Intermeio Base64(Token:[TOKENGERADO])
Content-Type: application/Json
Parâmetro Tipo Obrigatório Descrição
Token String
Sim
Identificador do requisitante.
Environment String
Não
Caso o requisitante queira criar um token no ambiente de desenvolvimento ele deverá informar o parâmetro [Env:dev] com o valor dev. Ex: Authorization Intermeio Base64(Token:[TokenGerado], Env:dev)

Retorno

PARÂMETRO TIPO OBRIGATÓRIO DESCRIÇÃO
Requisição String
Sim
Status da resposta do servidor
Paginação String
Sim
Paginação da requisição
Resultado String
Sim
Resultado da requisição
                                /*Exemplo POST API para gerar boleto lote
                    Nota: Os dados neste exemplo são apenas para ilustração, - 
                    deve-se substituir pelas credenciais válidas*/
                    public void GerarBoletoLote()
                    {
                        //Após ter um token válido como o exemplo acima mostra, é necessário transformalo em Base64
                        string token = (string)GerarTokenApi().resultado.token;           
                        var desenvolvimento = ", Env:dev";            
                        var bytes = Encoding.UTF8.GetBytes($"Token:{token}{desenvolvimento}");
                        var base64 = Convert.ToBase64String(bytes);

                        using (var requisicao = new HttpClient())
                        {
                            try
                            {                                
                                //Para que a API posso gerar boleto em lote
                                var listaBoleto = new List<Object>();
                                //Este exemplo monta uma lista com 4 boletos para enviar para API
                                for (int i = 0; i < 4; i++)
                                listaBoleto.Add(MontarBoleto());
            
                                //Criando objeto para envio de boletos em lote
                                var BoletoLote = new { Boletos = listaBoleto };

                                requisicao.DefaultRequestHeaders.Accept.Clear();
                                requisicao.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Intermeio", base64);
                                requisicao.DefaultRequestHeaders.Add("Accept", "application/json");
                                var result = requisicao.PostAsJsonAsync( "https://api.intermeio.com.br/V3/Boleto/Lote/", BoletoLote).Result;
                                //Retorno com dados se o boleto foi gerado com sucesso ou não.
                                var resultado = result.Content.ReadAsAsync<Object>().Result;
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }

                     //Criando um método que vai retornar o Objeto já preenchido
                    private object MontarBoleto()
                    { 
                    //Criando um objeto do tipo Boleto
                    //Exemplo com dados fictícios
                    // Objeto boleto - OBRIGATÓRIO  
                    var Boleto = new {
                    DataVencimento = "10/10/2020",
                    NumeroDocumento = "123456789",
                    PercentualJuros = "0",
                    PercentualMulta = "0",
                    QntDiasJuros = 0,
                    QntDiasMulta = 0,
                    Valor = "020", //Ex: R$ 0,20 caso queira colocar um valor de R$ 4500,68 colocar número inteiro sem pontuação Ex.450068
                    ValorJuros = 0,
                    ValorMulta = 0
                    };   
                    //Criando um objeto do tipo Cliente
                    //Exemplo com dados fictícios
                    // Objeto cliente(sacado) - OBRIGATÓRIO  
                    var Cliente = new{
                    NomeRazao = "Zezinho Juarez",
                    ApelidoEndereco = "endereco 01",
                    Bairro = "Tatuape",
                    Celular = "11944445555",
                    CEP = "03633020",
                    Cidade = "Sao Paulo",
                    Complemento = "Casa",
                    CpfCnpj = "14386172084",
                    DataDeNascimento = "27/02/1987",
                    Email = "jose@gmail.com",
                    Endereco = "Francisco Gonzales",
                    Estado = "SP",
                    Logradouro = "Rua",
                    Sexo = "M",
                    Numero = "94"
                    };
                    var Clientes = new List<Object>();
                    //Criando o primeiro objeto do cliente que vai ficar dentro do Split
                    var clientSplit = new {
                    NomeRazao = "Fabio Santos",
                    CpfCnpj = "14386172084",
                    Descricao = "teste",
                    Email = "teste@teste.com.br",
                    Taxa = "16",
                    NotificarPorEmail = true,
                    NotificarPorSms = false,
                    //Criando um objeto lista do tipo telefone onde 1 cliente pode ter varios telefones
                    Telefones = new List<Object>(),
                    //Criar o objeto do tipo conta do cliente para o split
                    ClienteContaBancaria = new {                    
                    Conta = "11111",
                    DigConta = "1",
                    Agencia = "2222",
                    DigAgencia = "2",
                    CodigoBanco = "12345"
                    },                    
                    //Criando um objeto do tipo transferência automatica
                    TransferenciaAutomatica = new {                    
                    ACobrar = true,
                    EfetuarTefAutomatica = true,
                    Periodicidade = 1,
                    ValorMinimo = "100"
                    }
                    };
                    //Criando objeto do tipo telefone
                    clientSplit.Telefones.Add(new {                    
                    Apelido = "Fabio",
                    DDD = "11",
                    Numero = "988886666"
                    });
                    //Criando o segundo objeto do tipo cliente split
                    var clientSplit2 = new {
                    NomeRazao = "Fulano da Silva",
                    CpfCnpj = "14386172084",
                    Descricao = "teste",
                    Email = "Fulano@teste.com.br",
                    Taxa = "20",
                    NotificarPorEmail = true,
                    NotificarPorSms = true,
                    //Criando objeto do tipo telefone para o segundo cliente split
                    Telefones = new List<Object>(),
                    //Criar o objeto do tipo conta bancaria para o segundo cliente split
                    ClienteContaBancaria = new {
                    Conta = "11111",
                    DigConta = "1",
                    Agencia = "2222",
                    DigAgencia = "2",
                    CodigoBanco = "12345"
                    },                    
                    //Criando um objeto do tipo transferência automatica para o segundo cliente split
                    TransferenciaAutomatica = new {
                    ACobrar = true,
                    EfetuarTefAutomatica = true,
                    Periodicidade = 1,
                    ValorMinimo = "100"
                    }
                    };
                    //Criando objeto do tipo telefone
                    clientSplit2.Telefones.Add(new{
                        Apelido = "Split 2",
                        DDD = "11",
                        Numero = "922221111"
                    });
                    //Adicionando na lista de split o cliente 1 e 2
                    Clientes.Add(clientSplit);
                    Clientes.Add(clientSplit2);    
                                        
                    //Criando objeto configurações do modelo boleto                    
                    var Configuracoes = new {                    
                    //Criando um objeto Emissão Digital para enviar Sms e email para o cliente
                    EmissaoDigital = new {
                        Email = "teste@live.com",
                    //Criando um objeto SMS
                   Sms = new{
                       Celular = "11977446699",
                       Msg = "Prezado cliente segue boleto referente ao pagamento."
                    }
                    }
                    };                                    
                    //Criando um Objeto Split Model
                    //Adicionando no objeto Split Model o split preenchido com os dados dos clientes
                    //Este parametro é muito importante quando está marcado como true, qualquer erro que houver na hora do split ele aborta o processo de geração do boleto                    
                    var splitModel = new{AbortarEmCasoDeErro = true, Clientes};                                        
                    //Dentro do Split um dos objetos que ele recebe é uma lista de clientes, aqui estamos criando uma lista para preencher 2 clientes
                    //Criando o objeto modelo onde será passado objetos do tipo Boleto, Cliente, SplitModel, Configuracoes
                    var boletoModel = new {Boleto, Cliente,Split = splitModel, Configuracoes};
                    //Retornando o objeto(Boleto) todo preenchido pronto para gerar o boleto
                    return boletoModel;
                    }             
                    

Exemplo de retorno em JSON:


                                            {
                                                "requisicao": [
                                                "200 - Requisição efetuada com sucesso"
                                                ],
                                                "paginacao":null ,
                                                "resultado": {
                                                    "descricao": "Lote em fila de processamento",
                                                            "loteId": "4277dc2b-5ce4-40e7-853c-9b256175031f"
                                                }
                                            }
						        
                                         <?php 
                                        class ApiIntermeio {
                                            
                                            private $api_url = 'https://api.intermeio.com.br/v3/';
                                            private $appKey = 'd54fd5';
                                            private $signature = 'sded8f8ef8e8ee8e8e8g4g4g46e6e98';

                                            public function apiRequest($endpoint, $headers, $body)
                                            {
                                                //Inicia o curl
                                                $ch = curl_init();

                                                //URL da API
                                                $url = $this->api_url . $endpoint;

                                                //CURL Options
                                                curl_setopt_array($ch, array(
                                                    CURLOPT_URL => $url,
                                                    CURLOPT_RETURNTRANSFER => true,
                                                    CURLOPT_ENCODING => "",
                                                    CURLOPT_MAXREDIRS => 10,
                                                    CURLOPT_TIMEOUT => 30,
                                                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                                    CURLOPT_HTTPHEADER => $headers,
                                                    CURLOPT_POST => true,
                                                    CURLOPT_POSTFIELDS => json_encode($body) //Body da requisição
                                                ));

                                                // caso necessário, use está configuração a mais no options do CURL: CURLOPT_SSL_VERIFYPEER => FALSE

                                                //Pega o retorno
                                                $jsonRetorno = curl_exec($ch);

                                                //Decodifica o JSON
                                                $arrayRetorno = json_decode($jsonRetorno, true);

                                                //Retorna o Array
                                                return $arrayRetorno;
                                            }

                                            public function getToken()
                                            {
                                                // Gera o autenticador em base 64
                                                $auth = base64_encode("AppKey:$this->appKey, Signature:$this->signature, Env:dev");
                                                // Faz a requisição na api chamando o metodo apiRequest
                                                $requisicao = self::apiRequest('Token/Gerar', [
                                                    'Content-Type: application/json',
                                                    'Content-Length: 0',
                                                    "Authorization: Intermeio $auth",
                                                ]);

                                                // Retorno da função com valor do token
                                                return $requisicao['resultado']['token'];
                                            }

                                            // Declaramos a função gerarBoleto recebendo como parametro o boleto sendo array (na maioria dos casos este array é recebido de um post de formulario)
                                            public function geraBoleto($boleto)
                                            {
                                                // Chama a função getToken para gerar um novo token
                                                $token = self::getToken();

                                            // Montando o body da requisição da api para geração do boleto
                                            $bodyRequest = [
                                            "Boletos" => [
                                                [
                                                    "Boleto" => [
                                                    "Valor" => $boleto['valor'] = "020", // exemplo para R$ 0,20
                                                        "DataVencimento" => $boleto['dataVencimento'] = "10/10/2020",
                                                        "NumeroDocumento" => $boleto['numeroDocumento'] = "123456789",
                                                    ],
                                                    "Cliente" => [
                                                        "NomeRazao" => $boleto['nomeRazao'] = "Zezinho Juarez",
                                                        "CpfCnpj" => $boleto['cpfCnpj'] = "14386172084",
                                                        "Email" => $boleto['email'] = "jose@gmail.com",
                                                        "ApelidoEndereco" => $boleto['apelidoEndereco'] = "endereco 01",
                                                        "CEP" => $boleto['cep'] = "03633020",
                                                        "Logradouro" => $boleto['logradouro'] = "Rua",
                                                        "Endereco" => $boleto['endereco'] = "Francisco Gonzales",
                                                        "Numero" => $boleto['numero'] = "94",
                                                        "Bairro" => $boleto['bairro'] = "Tatuape",
                                                        "Complemento" => $boleto['complemento'] = "Casa",
                                                        "Cidade" => $boleto['cidade'] = "Sao Paulo",
                                                        "Estado" => $boleto['estado'] = "SP",
                                                    ],
                                                ],
                                                [
                                                    "Boleto" => [
                                                    "Valor" => $boleto['valor'] = "030", // exemplo para R$ 0,30
                                                        "DataVencimento" => $boleto['dataVencimento'] = "10/10/2020",
                                                        "NumeroDocumento" => $boleto['numeroDocumento'] = "123456789",
                                                    ],
                                                    "Cliente" => [
                                                        "NomeRazao" => $boleto['nomeRazao'] = "Zezinho Ramez",
                                                        "CpfCnpj" => $boleto['cpfCnpj'] = "14386172084",
                                                        "Email" => $boleto['email'] = "jose.r@teste.com",
                                                        "ApelidoEndereco" => $boleto['apelidoEndereco'] = "endereco 01",
                                                        "CEP" => $boleto['cep'] = "03633020",
                                                        "Logradouro" => $boleto['logradouro'] = "Rua",
                                                        "Endereco" => $boleto['endereco'] = "Oswaldo Cruz",
                                                        "Numero" => $boleto['numero'] = "94",
                                                        "Bairro" => $boleto['bairro'] = "Jabaquara",
                                                        "Complemento" => $boleto['complemento'] = "Casa",
                                                        "Cidade" => $boleto['cidade'] = "Sao Paulo",
                                                        "Estado" => $boleto['estado'] = "SP",
                                                    ],
                                                ],
                                            ]
                                        ];

                                            // Gera o autenticador em base 64
                                            $auth = base64_encode("Token:$token, Env:dev");
                                            // Faz a requisição na api chamando o metodo apiRequest
                                            $requisicao = self::apiRequest('Boleto/Gerar', [
                                                "Content-Type: application/json",
                                                "Authorization: Intermeio $auth",
                                            ], $bodyRequest);

                                            // Retorno da função com resultado da requisição
                                            return $requisicao;

                                            }
                                        }
                                    

Exemplo de retorno em JSON:


                                            {
                                                "requisicao": [
                                                "200 - Requisição efetuada com sucesso"
                                                ],
                                                "paginacao":null ,
                                                "resultado": {
                                                    "descricao": "Lote em fila de processamento",
                                                            "loteId": "4277dc2b-5ce4-40e7-853c-9b256175031f"
                                                }
                                            }
						            
                                        import requests, json, base64
                                    
                                        def GerarToken():
                                        
                                        
 url = 'https://api.intermeio.com.br/v3/'
 chamada = 'V3/Token/Gerar'
  appkey = "d54fd5" signature = "sded8f8ef8e8ee8e8e8g4g4g46e6e98" string = "AppKey:"+appkey+", Signature:"+signature+", Env:dev" auth_base64 = base64.b64encode(string.encode('utf-8', errors='strict')) auth_string = auth_base64.decode("utf-8") headers = '{ 'Authorization': "Intermeio " + auth_string + , 'Content-Type': "application/json", 'Cache-Control': "no-cache"}'; req = requests.request("POST", url+chamada, headers=headers) if req.status_code == 200:    json_data = json.loads(req.text)    data_lista = list(json_data.values())    json_lista_2 = (json_lista[2])    token_dump = json.dumps(json_lista_2)    token = token_dump.replace('"', "").replace('{',"").replace('}',"").replace('token', 'Token')) # string para trazer o token sem outros caracteres adicionais GerarBoletoLote(token); def GerarBoletoLote(token_string_encodado): headers = { 'Authorization': "Intermeio " + token_string_encodado + ", Env:dev" , 'Content-Type': "application/json", 'cache-control': "no-cache" } chamada = "V3/Boleto/Lote" body = json.dumps({ "Boletos": [ { "Boleto" : { "Valor" : "100", "DataVencimento" : "12/10/2018", "NumeroDocumento" : "102521402154" }, "Cliente" : { "NomeRazao" : "José da Silva", "CpfCnpj" : "45632444987", "Email" : "jose@gmail.com", "Sexo" : "M", "DataDeNascimento" : "27/02/1987", "Celular" : "11949544145", "ApelidoEndereco" : "endereço 01", "CEP" : "03633020", "Logradouro" : "Rua", "Endereco" : "Francisco Gonzales", "Numero" : "94", "Bairro" : "Tatuapé", "Complemento" : "Casa", "Cidade" : "São Paulo", "Estado" : "SP" } }] }) req_boleto_lote = requests.request("POST", url + chamada, headers=headers, data=body) if req_boleto_lote.status_code == 200: json_data = json.loads(req_boleto_lote.text) data_lista = list(json_data.values()) json_lista_captura = (data_lista[2]) print (json_lista_captura) else: print(req_boleto_lote.status_code) print("Requisição Gerar Boleto em lote não foi efetuada")

Exemplo de retorno em JSON:


                                            {
                                                "requisicao": [
                                                "200 - Requisição efetuada com sucesso"
                                                ],
                                                "paginacao":null ,
                                                "resultado": {
                                                    "descricao": "Lote em fila de processamento",
                                                            "loteId": "4277dc2b-5ce4-40e7-853c-9b256175031f"
                                                }
                                            }
						            

Confirmação de Pagamento

A confirmação do pagamento é realizada de forma automática, ou seja, a API se encarrega de realizar as confirmações para o requisitante.

Confirmação boleto

No caso de pagamentos com boleto, quando o pagamento é efetuado a confirmação pode levar de 1 a 2 dias úteis dependendo da instituição financeira escolhida, e é realizada através de um post um link de retorno informado nas configurações da API através do Painel Merchant passando os seguintes parâmetros:

Parâmetro Tipo Descrição
DataLote DateTime Data de envio do lote
Login String Login para validação informado pelo requisitante nas configurações da API através do Painel Merchant.
Senha String Senha para validação informado pelo requisitante nas configurações da API através do Painel Merchant.
(Lista) de Recebiveis
Token String Token da transação
ValorTitulo Decimal Valor original da transação
ValorPago Decimal Valor pago da transação
DataVencimento DateTime Data do vencimento da transação
DataPagamento DateTime Data do pagamento da transação
DivergenciaDeValores String Indicador de diferenças entre o valor original e o valor pago. ("S" indica que há divergencia e "N" que não há)
CodTipoPagamento String Código informando a instituição do pagamento:
01 - Boleto Bradesco
DescTipoPagamento String Descrição do tipo de pagamento
NDocumento String Número de controle interno do cliente
lstDuplicidades[] String Lista de objetos receveis referentes a boletos pagos duplicados

Retorno de recebimento confirmação

Como resposta ao post a API espera um retorno de confirmação, neste caso o método deverá enviar um tipo (object) com os parâmetros

Parâmetro Tipo Descrição
Resultado Booleano "true" no caso de as informações terem sido recebidas e tratadas corretamente e "false" em caso de falha no recebimento ou tratamento das informações
Descricao String Descrição do erro ocorrido do lado requisitante

Exemplo de retorno em JSON:




							 
							     {  
                                    "Requisicao": "8709f8b5-67c2-44b8-a6a7-105a18444486",  
                                     "Paginacao": 200,  
                                     "Resultado": "Transação de gerado com sucesso!",  
							     }
						        

Consulta Transação

Esta ferramenta destina-se a consulta de transações unitárias. Recomendamos ao cliente integrante não utilizar deste método como o padrão para a atualização de status de pagamento em seu negócio. Opte sempre pelo método "Confirmação de Pagamento" como principal.

Url da chamada - POST

[EndPoint]/[Versao]/Transacoes/ConsultaTransacao

Header da requisição

O header da requisição deverá ter o seguinte formato:

Authorization: Intermeio Base64(Token:[TOKENGERADO])
Content-Type: application/Json
Parâmetro Tipo Obrigatório Descrição
Token String
Sim
Identificador do requisitante.
Environment String
Não
Caso o requisitante queira criar um token no ambiente de desenvolvimento ele deverá informar o parâmetro [Env:dev] com o valor dev. Ex: Authorization Intermeio Base64(Token:[TokenGerado], Env:dev)

Parâmetros da chamada header

Parâmetro Tipo Obrigatório Descrição
Token de Transacao String
Sim
Token de transação recebido na autenticação

Retorno em caso de sucesso

As seguintes informações são retornadas em caso de sucesso:

PARÂMETRO TIPO OBRIGATÓRIO DESCRIÇÃO
Requisição String
Sim
Status da resposta do servidor
Paginação String
Sim
Paginação da requisição
Resultado String
Sim
Resultado da requisição

DadosPagamento

PARÂMETRO TIPO OBRIGATÓRIO DESCRIÇÃO
ValorCobranca String
Sim
Valor inicial da cobrança, sem juros e/ou multa
ValorPago String
Sim
Valor pago pelo sacado
DataCadastro String
Sim
Data do cadastro da cobrança
DataVencimento String
Sim
Data do vencimento da cobrança
DataPagamento String
Sim
Data em que a cobrança foi paga
TipoCobranca String
Sim
Tipo da cobrança: 1 para Boleto; 2 para TEF

                                using  System;
                                using  System.Text;
                                using  System.Net.Http;  
                                using  System.Net.Http.Headers; 

                                /*Exemplo POST API para consultar uma transação
                    Nota: Os dados neste exemplo são apenas para ilustração, - 
                    deve-se substituir pelas credenciais válidas*/

                                public class  ApiIntermeio   {
                                public object ConsultaTokenApi()   {             
                                var bytes = Encoding.UTF8.GetBytes(  
                                "Token = 224efc32-a793-499a-b43f-2bf03a18cac0");  
                                var base64 = Convert.ToBase64String(bytes);  
                                using (var requisicao = new HttpClient() {  
                                try   {  
                                requisicao.DefaultRequestHeaders.Accept.Clear();  
                                requisicao.DefaultRequestHeaders.Authorization  = new AuthenticationHeaderValue("Intermeio", base64);  
                                requisicao.DefaultRequestHeaders.Add("Accept", "application/json");  
                                var result = requisicao.PostAsJsonAsync("https://api.intermeio.com.br/V3/Transacoes/ConsultaTransacao").Result;  
                                return result.Content.ReadAsAsync<object>().Result;  
                                                                              } 
                                catch (Exception ex){  
                                return null;  
                                              }
    }  
                                                                                                                                                    }                                                            }   
                    

Exemplo de retorno em JSON:




							 
							     {  
                                    "Requisicao": "8709f8b5-67c2-44b8-a6a7-105a18444486",  
                                     "Paginacao": 200,  
                                     "Resultado": 
							     }