ClearBank.Payments.FasterPayments (ClearBank v1.0.0)

Copy Markdown View Source

Faster Payments Service (FPS) — the UK's 24/7/365 real-time payment rail.

Key facts

  • Limit: £1,000,000 per payment
  • Speed: Near-instant (typically < 90 seconds)
  • Availability: 24/7/365
  • Confirmation: Via TransactionSettled webhook

APP Scam routing

The :enforce_send_to_scheme option controls liability:

  • false (default) — if recipient is a ClearBank client, routed as an internal transfer. Faster and not subject to APP scam reimbursement rules.
  • true — always routed via the FPS scheme. Subject to Pay.UK APP scam reimbursement liability.

Abusive message filtering

References are screened against the Pay.UK abusive message filter list. Entries that match are blanked rather than rejected.

Payment types

  • :sip — Single Immediate Payment (default)
  • :sop — Standing Order Payment
  • :fdp — Forward-Dated Payment

Examples

# Single payment
{:ok, result} = ClearBank.Payments.FasterPayments.send(client, %{
  account_id: "acct-uuid",
  amount: "100.00",
  currency: "GBP",
  destination_sort_code: "040004",
  destination_account_number: "12345678",
  destination_account_name: "Jane Smith",
  reference: "INV-001"
})

# Bulk payment
{:ok, result} = ClearBank.Payments.FasterPayments.send_bulk(client, "acct-uuid", [
  %{amount: "50.00", destination_sort_code: "040004", ...},
  %{amount: "75.00", destination_sort_code: "060400", ...}
])

Summary

Functions

Sends a single Faster Payment.

Sends multiple Faster Payments in one request (bulk).

Types

payment()

@type payment() :: %{
  :amount => String.t(),
  :currency => String.t(),
  :destination_sort_code => String.t(),
  :destination_account_number => String.t(),
  :destination_account_name => String.t(),
  optional(:reference) => String.t(),
  optional(:payment_type) => :sip | :sop | :fdp,
  optional(:enforce_send_to_scheme) => boolean(),
  optional(:end_to_end_id) => String.t()
}

Functions

send(client, payment)

Sends a single Faster Payment.

Required fields

  • :account_id - source account UUID
  • :amount - decimal string, e.g. "100.00"
  • :currency - "GBP"
  • :destination_sort_code - 6-digit sort code
  • :destination_account_number - 8-digit account number
  • :destination_account_name - payee name (max 140 chars; truncated to 35 at scheme)

Optional fields

  • :reference - payment reference (max 35 chars; truncated to 18 at scheme)
  • :payment_type - :sip | :sop | :fdp (default: :sip)

  • :enforce_send_to_scheme - boolean (default: false)
  • :end_to_end_id - your internal end-to-end reference

Examples

{:ok, resp} = ClearBank.Payments.FasterPayments.send(client, %{
  account_id: "acct-uuid",
  amount: "250.00",
  currency: "GBP",
  destination_sort_code: "040004",
  destination_account_number: "12345678",
  destination_account_name: "Jane Smith",
  reference: "SALARY-MAY"
})

send_bulk(client, account_id, payments)

@spec send_bulk(ClearBank.Client.t(), String.t(), [map()]) :: ClearBank.HTTP.result()

Sends multiple Faster Payments in one request (bulk).

Params

  • account_id - source account UUID (applies to all payments in batch)
  • payments - list of payment maps (same fields as send/2 minus :account_id)

Examples

{:ok, resp} = ClearBank.Payments.FasterPayments.send_bulk(client, "acct-uuid", [
  %{amount: "100.00", currency: "GBP", destination_sort_code: "040004",
    destination_account_number: "12345678", destination_account_name: "Alice"},
  %{amount: "200.00", currency: "GBP", destination_sort_code: "060400",
    destination_account_number: "87654321", destination_account_name: "Bob"}
])