ApiBrasil (APIBrasil v0.0.1)

Copy Markdown View Source

SDK oficial Elixir da plataforma APIBrasil — WhatsApp, SMS, consultas de CPF/CNPJ, veículos, CEP, correios, pagamentos PIX/boleto e muito mais.

client =
  ApiBrasil.new(
    bearer_token: "SEU_BEARER_TOKEN",
    device_token: "SEU_DEVICE_TOKEN"
  )

# WhatsApp
{:ok, _envelope} =
  ApiBrasil.Messaging.WhatsApp.send_text(client, %{
    "number" => "5511999999999",
    "text" => "Olá! 👋"
  })

# Consulta CNPJ (por créditos)
{:ok, empresa} = ApiBrasil.Data.Consulta.cnpj(client, %{"cnpj" => "00000000000000"})
ApiBrasil.Core.CreditResponse.data(empresa)

Credenciais não informadas são lidas das variáveis de ambiente APIBRASIL_BEARER_TOKEN, APIBRASIL_DEVICE_TOKEN, APIBRASIL_SECRET_KEY e APIBRASIL_BASE_URL — basta from_env/0.

Como a plataforma funciona

FamíliaAutenticaçãoExemplos
Device-basedAuthorization: Bearer + header DeviceTokenWhatsApp, SMS, veículos, CEP, correios, DDD, clima, OCR
Por créditosapenas Authorization: Bearer (debita saldo)ApiBrasil.Data.Consulta: CPF, CNPJ, veículos, Serasa, CNH

Convenções

  • toda função devolve {:ok, resultado} ou {:error, %ApiBrasil.Core.Error{}};
  • toda função tem uma variante ! que devolve o resultado direto e levanta em caso de falha;
  • todas aceitam uma keyword list final com as opções da requisição (:query, :headers, :bearer_token, :device_token, :secret_key, :timeout, :response_type) — veja ApiBrasil.Core.HTTP;
  • o cliente é um valor imutável: put_bearer_token/2 e with_device/2 devolvem um novo cliente.

Serviços

MóduloDescrição
ApiBrasil.Messaging.WhatsAppWhatsApp: start, qrcode, send_text, send_file, fila...
ApiBrasil.Messaging.EvolutionEvolution API (/evolution/{controller}/{action})
ApiBrasil.Messaging.WhatsMeowWhatsMeow (/whatsmeow/{action})
ApiBrasil.Messaging.SMSSMS device-based e por créditos
ApiBrasil.Data.DadosDados cadastrais device-based (CPF, CNPJ, sócios...)
ApiBrasil.Data.VehiclesVeículos por placa
ApiBrasil.Data.FipeTabela FIPE
ApiBrasil.Data.CorreiosCorreios
ApiBrasil.Data.CepCEP + geolocalização
ApiBrasil.Data.GeolocationGeocoding
ApiBrasil.Data.GeomatrixMatriz de distâncias
ApiBrasil.Data.RecognizeOCR / Google Vision
ApiBrasil.Data.DddDDD
ApiBrasil.Data.HolidaysFeriados
ApiBrasil.Data.TranslateTradução
ApiBrasil.Data.WeatherClima
ApiBrasil.Data.LoteriasLoterias
ApiBrasil.Data.DatabaseIpGeoIP
ApiBrasil.Data.ConsultaConsultas por crédito (CPF, CNPJ, CNH, veículos, Serasa...)
ApiBrasil.Data.UraURA reversa / ligações
ApiBrasil.Data.ChipVirtualChip virtual
ApiBrasil.Data.BulkExecução em lote
ApiBrasil.Platform.AuthLogin, 2FA, cadastro, recuperação de senha, perfil
ApiBrasil.Platform.DevicesCRUD de devices
ApiBrasil.Platform.CatalogCatálogo de APIs, planos, documentações, servidores
ApiBrasil.Platform.AccountSaldo, faturas, notificações, tickets
ApiBrasil.Platform.PaymentsRecargas e pagamentos PIX/boleto/cartão
ApiBrasil.Platform.IpWhitelistWhitelist de IPs da conta
ApiBrasil.Platform.BearerRateLimitRate limit por Bearer Token
ApiBrasil.Platform.ReportsRelatórios e dashboard de consumo

Summary

Functions

Configuração atual do cliente.

Baixa os bytes crus de uma rota (PDF de boleto, imagens...).

Como request/5, mas devolve o corpo decodificado sem normalizar em objeto JSON (útil quando a rota responde uma lista, texto ou bytes).

Cria o cliente apenas com as credenciais do ambiente.

Autentica por email/senha e devolve um cliente já autenticado, junto da sessão retornada pela plataforma.

Como login/2, mas levanta ApiBrasil.Core.Error em caso de falha.

Cria o cliente. Campos não informados vêm do ambiente e da configuração da aplicação.

Define/atualiza o Bearer Token, devolvendo um novo cliente.

Define/atualiza o DeviceToken, devolvendo um novo cliente.

Define/atualiza a SecretKey, devolvendo um novo cliente.

Porta de saída genérica: chama qualquer endpoint do gateway com os headers de autenticação já configurados. Use para rotas que ainda não têm função dedicada na SDK.

Monta a URL completa de um caminho do gateway.

Devolve um novo cliente com as mesmas credenciais, mas apontando para outro device — útil para gerenciar vários números/instâncias.

Devolve um cliente que aplica opts em todas as chamadas — mesma base, mesmas credenciais.

Functions

config(client)

Configuração atual do cliente.

download(client, path, opts \\ [])

@spec download(ApiBrasil.Client.t(), String.t(), keyword()) ::
  {:ok, binary()} | {:error, ApiBrasil.Core.Error.t()}

Baixa os bytes crus de uma rota (PDF de boleto, imagens...).

execute(client, method, path, body \\ nil, opts \\ [])

@spec execute(
  ApiBrasil.Client.t(),
  ApiBrasil.Core.Transport.method(),
  String.t(),
  term(),
  keyword()
) ::
  {:ok, term()} | {:error, ApiBrasil.Core.Error.t()}

Como request/5, mas devolve o corpo decodificado sem normalizar em objeto JSON (útil quando a rota responde uma lista, texto ou bytes).

from_env()

@spec from_env() :: ApiBrasil.Client.t()

Cria o cliente apenas com as credenciais do ambiente.

login(credentials, config \\ [])

@spec login(map() | keyword(), keyword() | map() | ApiBrasil.Core.Config.t()) ::
  {:ok, ApiBrasil.Client.t(), map()} | {:error, ApiBrasil.Core.Error.t()}

Autentica por email/senha e devolve um cliente já autenticado, junto da sessão retornada pela plataforma.

{:ok, client, sessao} =
  ApiBrasil.login(%{"email" => "voce@empresa.com.br", "password" => "******"})

Devolve erro quando a conta exige 2FA — nesse caso use ApiBrasil.Platform.Auth.login/3 + ApiBrasil.Platform.Auth.send_2fa/3 + ApiBrasil.Platform.Auth.verify_2fa/3.

login!(credentials, config \\ [])

@spec login!(map() | keyword(), keyword() | map() | ApiBrasil.Core.Config.t()) ::
  {ApiBrasil.Client.t(), map()}

Como login/2, mas levanta ApiBrasil.Core.Error em caso de falha.

new(config \\ [])

Cria o cliente. Campos não informados vêm do ambiente e da configuração da aplicação.

ApiBrasil.new(bearer_token: "jwt", device_token: "device")

ApiBrasil.new(
  base_url: "https://gateway.apibrasil.io/api/v2",
  timeout: 60_000,
  headers: %{"X-Correlation-Id" => "abc-123"},
  retry: %ApiBrasil.Core.Retry{retries: 3},
  hooks: %{response: &IO.inspect/1}
)

Veja ApiBrasil.Core.Config para a lista completa de opções.

put_bearer_token(client, token)

@spec put_bearer_token(ApiBrasil.Client.t(), String.t() | nil) :: ApiBrasil.Client.t()

Define/atualiza o Bearer Token, devolvendo um novo cliente.

put_device_token(client, token)

@spec put_device_token(ApiBrasil.Client.t(), String.t() | nil) :: ApiBrasil.Client.t()

Define/atualiza o DeviceToken, devolvendo um novo cliente.

put_secret_key(client, key)

@spec put_secret_key(ApiBrasil.Client.t(), String.t() | nil) :: ApiBrasil.Client.t()

Define/atualiza a SecretKey, devolvendo um novo cliente.

request(client, method, path, body \\ nil, opts \\ [])

@spec request(
  ApiBrasil.Client.t(),
  ApiBrasil.Core.Transport.method(),
  String.t(),
  term(),
  keyword()
) ::
  {:ok, map()} | {:error, ApiBrasil.Core.Error.t()}

Porta de saída genérica: chama qualquer endpoint do gateway com os headers de autenticação já configurados. Use para rotas que ainda não têm função dedicada na SDK.

ApiBrasil.request(client, :post, "/consulta/cpf/credits", %{"cpf" => "00000000000"})
ApiBrasil.request(client, :get, "/reports/quick-stats")

request!(client, method, path, body \\ nil, opts \\ [])

Como request/5, mas levanta ApiBrasil.Core.Error em caso de falha.

url(client, path)

@spec url(ApiBrasil.Client.t(), String.t()) :: String.t()

Monta a URL completa de um caminho do gateway.

with_device(client, device_token)

@spec with_device(ApiBrasil.Client.t(), String.t()) :: ApiBrasil.Client.t()

Devolve um novo cliente com as mesmas credenciais, mas apontando para outro device — útil para gerenciar vários números/instâncias.

bot1 = ApiBrasil.with_device(client, "device_token_1")
bot2 = ApiBrasil.with_device(client, "device_token_2")

ApiBrasil.Messaging.WhatsApp.send_text(bot1, %{"number" => n, "text" => "do bot 1"})
ApiBrasil.Messaging.WhatsApp.send_text(bot2, %{"number" => n, "text" => "do bot 2"})

with_options(client, opts)

@spec with_options(
  ApiBrasil.Client.t(),
  keyword()
) :: ApiBrasil.Client.t()

Devolve um cliente que aplica opts em todas as chamadas — mesma base, mesmas credenciais.

client
|> ApiBrasil.with_options(secret_key: "SUA_SECRET_KEY")
|> ApiBrasil.Platform.Devices.store(%{"device_name" => "meu-bot"})