TreasuryPrime.FedNow (TreasuryPrime v1.0.0)

Copy Markdown View Source

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

t()

@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

create(client, params, opts \\ [])

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

Sends a FedNow payment. Required: account_id, counterparty_id, amount.

create!(client, params, opts \\ [])

@spec create!(TreasuryPrime.Client.t(), map(), keyword()) :: t()

get(client, id)

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

Fetches a single FedNow payment by id.

get!(client, id)

@spec get!(TreasuryPrime.Client.t(), String.t()) :: t()

list(client, params \\ %{})

@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.

list!(client, params \\ %{})

routing_number_status(client, routing_number)

@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.