defmodule PomeloEx do
@moduledoc """
`PomeloEx` is an Elixir client library for the [Pomelo API](https://developers.pomelo.la).
Pomelo is a Latin American fintech platform that provides card issuing, digital accounts,
identity verification (KYC/KYB), fraud prevention, loyalty programs, credit products, and more.
## Architecture
This library follows a three-layer design pattern:
1. **Parent modules** (e.g. `PomeloEx.General.Company`) — expose public functions via `defdelegate`
2. **Operation modules** — implement HTTP calls via `execute/1` (hidden from public docs)
3. **Type modules** — define typed request schemas using `TypedEctoSchema` (hidden from public docs)
## Usage
Before making API calls, you must configure the library with your Pomelo credentials:
```elixir
config :pomelo_ex,
client_id: "your_client_id",
client_secret: "your_client_secret",
url: "https://api.pomelo.la",
audience: "https://api.pomelo.la",
grant_type: "client_credentials"
```
### Authentication
Obtain an access token via `PomeloEx.General.Authorization.request_token/0`:
```elixir
{:ok, %PomeloEx.Adapter.Response{body: body}} = PomeloEx.General.Authorization.request_token()
token = body["access_token"]
```
### Making API calls
Pass the token within each request struct:
```elixir
payload = %PomeloEx.Types.General.Companies.CreateCompanyType{
token: token,
legal_name: "My Company",
email: "contact@company.com",
operation_country: "ARG"
}
{:ok, response} = PomeloEx.General.Company.create_company(payload)
```
### Sandbox environment
For development, use the sandbox environment:
```elixir
config :pomelo_ex,
url: "https://sandbox.api.pomelo.la",
...
```
## Configuration
| Key | Description | Default |
|-----|-------------|---------|
| `:http_adapter` | HTTP client module | `"PomeloEx.Adapter.HTTPoison"` |
| `:url` | API base URL | — |
| `:client_id` | OAuth client ID | — |
| `:client_secret` | OAuth client secret | — |
| `:audience` | OAuth audience | — |
| `:grant_type` | OAuth grant type | — |
| `:idempotency_key_length` | Length of generated idempotency keys | — |
## Domains
- `PomeloEx.General.Authorization` — OAuth 2.0 token management
- `PomeloEx.General.Company` — Company management
- `PomeloEx.General.Users` — User management
- `PomeloEx.Identity.KYC` — Know Your Customer sessions
- `PomeloEx.Identity.KYB` — Know Your Business sessions
- `PomeloEx.Cards.Issuing` — Card issuance lifecycle
- `PomeloEx.Cards.Processing` — Transaction authorization and presentment
- `PomeloEx.Cards.Tokenization` — Digital wallet tokenization
- `PomeloEx.Cards.SensitiveInformation` — Sensitive data handling
- `PomeloEx.Cards.Credits` — Credit products and lines
- `PomeloEx.Cards.Associations` — Card-credit line associations
- `PomeloEx.DigitalAccounts` — Digital account management
- `PomeloEx.Finance.Settlements` — Settlement operations
- `PomeloEx.Fraud` — Fraud prevention operations
- `PomeloEx.Loyalty` — Loyalty points and cashback
"""
end