FedNow instant payments — the Federal Reserve's real-time gross settlement service. Supports both sending and receiving, 24/7/365, with funds available within seconds. Unlike ACH and wire, FedNow payments are irrevocable the moment they're sent and are not subject to banking-hours cutoffs. Availability depends on your bank partner's FedNow participation.
Incoming FedNow payments and the lifecycle of outgoing ones are both
represented as TreasuryPrime.FedNow objects and show up tied to a
TreasuryPrime.Transaction via its fednow_id field. Both directions
fire fednow.create / fednow.update webhooks (see
TreasuryPrime.Webhook).
Sending a payment
{:ok, payment} =
TreasuryPrime.FedNow.create(client, %{
account_id: "acct_1234567890",
counterparty_id: "cp_0987654321",
amount: "100.00",
remittance_information: "Invoice #4421"
}, idempotency_key: TreasuryPrime.Idempotency.generate_key())Checking whether a receiving bank supports FedNow
{:ok, status} = TreasuryPrime.FedNow.routing_number_status(client, "021000021")
Summary
Functions
Sends a FedNow payment. Required: account_id, counterparty_id, amount.
Fetches a single FedNow payment by id.
Lists FedNow payments (both sent and received).
Checks whether a given receiving-bank routing_number currently
participates in the FedNow network — useful to call before attempting a
send, since FedNow requires the receiving institution to also be a
FedNow participant.
Types
@type t() :: %TreasuryPrime.FedNow{ account_id: String.t() | nil, amount: String.t() | nil, counterparty_id: String.t() | nil, created_at: String.t() | nil, direction: String.t() | nil, error: String.t() | nil, id: String.t() | nil, org_id: String.t() | nil, remittance_information: String.t() | nil, status: String.t() | nil, updated_at: String.t() | nil, userdata: map() | nil }
Functions
@spec create(TreasuryPrime.Client.t(), map(), keyword()) :: {:ok, t()} | {:error, TreasuryPrime.Error.t()}
Sends a FedNow payment. Required: account_id, counterparty_id, amount.
@spec create!(TreasuryPrime.Client.t(), map(), keyword()) :: t()
@spec get(TreasuryPrime.Client.t(), String.t()) :: {:ok, t()} | {:error, TreasuryPrime.Error.t()}
Fetches a single FedNow payment by id.
@spec get!(TreasuryPrime.Client.t(), String.t()) :: t()
@spec list(TreasuryPrime.Client.t(), map()) :: {:ok, TreasuryPrime.Page.t()} | {:error, TreasuryPrime.Error.t()}
Lists FedNow payments (both sent and received).
Filterable params
account_id, counterparty_id, direction, status.
@spec list!(TreasuryPrime.Client.t(), map()) :: TreasuryPrime.Page.t()
@spec routing_number_status(TreasuryPrime.Client.t(), String.t()) :: {:ok, map()} | {:error, TreasuryPrime.Error.t()}
Checks whether a given receiving-bank routing_number currently
participates in the FedNow network — useful to call before attempting a
send, since FedNow requires the receiving institution to also be a
FedNow participant.