Tink.Payments (Tink v1.0.0)

Copy Markdown View Source

One-time payment initiation (PIS).

Requires payment:write and payment:read scopes.

Typical server-side flow

# 1. Create a payment request
{:ok, client} = Tink.Auth.client_credentials(scope: "payment:write payment:read")
{:ok, %{"id" => payment_id}} = Tink.Payments.create(client, %{
  "destinationUri"        => "sort-code://12-34-56/87654321",
  "amount"                => %{
    "value"        => %{"unscaledValue" => 100, "scale" => 0},
    "currencyCode" => "GBP"
  },
  "market"                => "GB",
  "recipientName"         => "John Doe",
  "remittanceInformation" => %{"type" => "UNSTRUCTURED", "value" => "Invoice #123"}
})

# 2. Poll to completion
{:ok, completed} = Tink.Payments.poll_until_terminal(client, payment_id)

Summary

Functions

Cancel a payment. Requires payment:write.

Create a payment request. Requires payment:write.

Create a settlement account payment request. Requires payment:write.

Get a payment request by ID. Requires payment:read.

Get payment conditions for a provider. Requires payment:read.

Get transfer details for a payment request. Requires payment:read.

Poll a payment request until it reaches a terminal status.

Functions

cancel(client, payment_id)

@spec cancel(Tink.Client.t(), String.t()) :: {:ok, map()} | {:error, Tink.Error.t()}

Cancel a payment. Requires payment:write.

create(client, params)

@spec create(Tink.Client.t(), map()) :: {:ok, map()} | {:error, Tink.Error.t()}

Create a payment request. Requires payment:write.

create_settlement_payment(client, params)

@spec create_settlement_payment(Tink.Client.t(), map()) ::
  {:ok, map()} | {:error, Tink.Error.t()}

Create a settlement account payment request. Requires payment:write.

get(client, payment_id)

@spec get(Tink.Client.t(), String.t()) :: {:ok, map()} | {:error, Tink.Error.t()}

Get a payment request by ID. Requires payment:read.

get_conditions(client, provider_name)

@spec get_conditions(Tink.Client.t(), String.t()) ::
  {:ok, map()} | {:error, Tink.Error.t()}

Get payment conditions for a provider. Requires payment:read.

get_transfers(client, payment_id)

@spec get_transfers(Tink.Client.t(), String.t()) ::
  {:ok, map()} | {:error, Tink.Error.t()}

Get transfer details for a payment request. Requires payment:read.

poll_until_terminal(client, payment_id, opts \\ [])

@spec poll_until_terminal(Tink.Client.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Tink.Error.t() | :timeout}

Poll a payment request until it reaches a terminal status.

Terminal statuses: SUCCESSFUL, FAILED, CANCELLED.

Options

  • :timeout_ms — default 60_000
  • :interval_ms — default 2_000