Peráta SDK para Elixir

SDK oficial da API da Peráta para Elixir 1.18+, sem dependências: só :httpc, :crypto e o módulo JSON. É gerado a partir do contrato da API (openapi.json, na raiz de perata-sh/sdk) por generator/. Não edite os arquivos desta pasta: regenere.

# mix.exs
{:perata_sdk, "~> 0.1.1"}
client = Perata.new(System.fetch_env!("PERATA_API_KEY")) # prk_test_… ou prk_live_…

{:ok, product} = Perata.Products.create(client, %{name: "Curso"}, idempotency_key: "produto-curso")

client
|> Perata.Products.list_stream()
|> Enum.each(&IO.puts(&1.name))

Recursos

Módulo Funções
Perata.Checkouts create
Perata.Customers create, get, list, list_stream
Perata.Orders list, list_stream
Perata.PaymentMethods detach, list, list_stream
Perata.Payments get, list, list_stream
Perata.Prices create, list, list_stream
Perata.Products create, get, list, list_stream
Perata.Refunds create
Perata.Subscriptions cancel, get, list, list_stream

Cada função recebe o cliente primeiro e devolve {:ok, valor} ou {:error, %Perata.Error{}}. Os modelos são structs com os nomes da API (payment.amount_cents). O corpo de uma escrita é a struct de parâmetros do método (%Perata.ProductsCreateParams{name: "Curso"}), uma keyword list ou um mapa com chaves atom; um campo opcional não informado fica fora do JSON. As funções _stream devolvem um Stream preguiçoso que percorre todas as páginas a partir de page: e levantam Perata.Error numa recusa.

As escritas aceitam idempotency_key:, e todas aceitam api_key: para usar a chave de outra organização numa chamada. Perata.new/2 aceita base_url:, timeout: (30 segundos, em milissegundos) e transport:.

Erros

Uma recusa da API é um {:error, %Perata.Error{}}, com status, code (invalid_request, not_found…), message, fields (o problema de cada campo) e, num 429, retry_after em segundos.

Webhooks

{:ok, event} = Perata.verify_webhook(System.fetch_env!("PERATA_WEBHOOK_SECRET"), conn.req_headers, raw_body)

A assinatura é a do Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature), com tolerância de 5 minutos. Passe o corpo cru, antes de interpretar. Uma assinatura que não confere devolve {:error, %Perata.WebhookVerificationError{}}.

Versão do SDK: 0.1.1 · contrato da API: 0.1.0