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
TransactionSettledwebhook
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
Types
@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
@spec send(ClearBank.Client.t(), map()) :: ClearBank.HTTP.result()
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"
})
@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 assend/2minus: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"}
])