Elixir client for the Teya Online Payments API.
Configuration
Add to your application config:
config :teya,
client_id: "your_client_id",
client_secret: "your_client_secret",
token_url: "https://identity.teya.com/connect/token",
base_url: "https://api.teya.com",
scopes: [
"checkout/sessions/create",
"checkout/sessions/id/get",
"payment-links/create",
"payment-links/id/get",
"payment-links/id/update",
"transactions/online/create",
"transactions/online/id/get",
"captures/create",
"refunds/create",
"transactions/id/receipts/create",
"token/delete"
]OAuth tokens are fetched automatically and refreshed before expiry. Only request the scopes your application needs.
API modules
| Module | Purpose |
|---|---|
Teya.Checkout | Hosted checkout — redirect customers to Teya's payment page |
Teya.Transaction | Direct card processing for embedded payment UIs |
Teya.PayByLink | Generate and manage shareable payment links |
Teya.Capture | Capture pre-authorised funds |
Teya.Refund | Refund completed transactions |
Teya.Receipt | Send digital receipts |
Teya.Token | Manage saved payment method tokens |
Error handling
All functions return {:ok, response_body} or {:error, %Teya.Error{}}.
Pattern-match on %Teya.Error{code: code} for Teya-specific error codes.
case Teya.Checkout.create_session(params) do
{:ok, %{"session_url" => url}} -> redirect(conn, external: url)
{:error, %Teya.Error{code: "TOO_MANY_REQUESTS"}} -> {:error, :rate_limited}
{:error, %Teya.Error{} = err} -> {:error, err}
endIdempotency
POST and PATCH requests automatically include a random Idempotency-Key header.
Pass idempotency_key: "your-key" in the options to supply your own:
Teya.Checkout.create_session(params, idempotency_key: order_id)