Corgi BankDocumentation
OpenAPI

Wire overview

A wire is a Fedwire funds transfer, in or out, carried as ISO 20022 messages. This page covers the messages the bank builds and reads, how to send a wire, and the other kinds of wire the API has.

What a wire is here

The Wire Transfer object holds one Fedwire transfer. Its direction is outbound or inbound, and its kind is customer, bank or return. A simulator plays the Fedwire Funds Service today. The bank exchanges these messages with it, each under a head.001.001.03 header:

MessageWhat the bank does with it
pacs.008.001.08Customer credit transfer: built for a wire a customer sends, read for one that arrives. local_instrument is CTRC.
pacs.009.001.08Bank transfer of the bank's own funds, sent and received. local_instrument is BTRC.
pacs.004.001.10Payment return, sent and received.
pacs.002.001.10The service's status report on a value message: ACSC settled, PDNG pending, RJCT rejected.
camt.056.001.08Return request, sent and received.
camt.029.001.09The answer to a return request: CNCL, RJCR or PDCR.
admi.007.001.01, admi.002.001.01Receipt acknowledgement and message reject, the answers to a nonvalue message.

Send a wire

POST /transfers/wire sends a customer wire from an account. It requires an Idempotency-Key. A customer's token also needs a step-up within the last five minutes, or the answer is step_up_required.

account_idstringRequired

The account that pays. It must be open and free of debit restrictions.

amountintegerRequired

Minor units. Must be positive.

currency_codestringRequired

ISO 4217. It must be the account's currency.

counterpartyobjectRequired

The receiving bank and the beneficiary. aba, bank_name, account_number and name are required. aba is a nine-digit routing number with a valid check digit; any other value answers payments.invalid_routing_number. Optional: address (up to three lines of 35 characters), city, state, postal_code and country.

memostringOptional

Information for the beneficiary. The message carries up to four lines of 35 characters.

What happens to the request

  1. The account's approval policy and payment limits are checked. A refusal is payments.approval_required or payments.limit_exceeded.
  2. A pending_debit hold reserves the amount. If the available balance cannot cover it and the account's overdraft decision does not pay it, the answer is ledger.insufficient_available.
  3. The beneficiary's name is screened against the sanctions lists. Any result other than clear stores the wire as held_for_review and sends nothing. The outbound fraud rules run next and can hold it the same way.
  4. If Fedwire is not taking customer transfers, the wire is stored as queued and leaves at the next opening. A cycle takes them from 9:00 p.m. ET the evening before a banking day until 6:00 p.m. ET.
  5. Otherwise the bank builds the pacs.008, names the originator from the customer record (legal name and address), and sends it. On ACSC the wire is settled: the account is debited and the hold released.

The response is the wire in the state it reached. States and notifications lists every state.

IMAD, OMAD and UETR

imad is the input message accountability data the bank assigns when a message leaves: the cycle date, an eight-character source and a six-digit sequence. omad is the output message accountability data the service returns when it accepts the message. uetr is the unique end-to-end transaction reference, and value_date the Fedwire cycle date the wire settles on.

Bank transfers

Treasury moves the bank's own funds with POST /rails/wire/bank-transfers: a pacs.009 paid from a GL account. It takes gl_code, amount, currency_code (USD), receiver_aba, receiver_name and operator. Only operations staff and the operations service may call it. The transfer is always created held_for_review: a second operator approves it on the review route, and the operator who asked for it is answered forbidden. A bank transfer that arrives is booked to the transit account, GL 2320, as received until operations classify it.

International

Two other resources send money abroad, and neither is a Fedwire. An International Wire (/transfers/international-wire) is a CBPR+ pacs.008 addressed by the creditor agent's BIC, over a network that is also a simulator. An International Transfer (/transfers/iat) is an ACH entry of the IAT class.

Testing

The simulated service settles an outbound wire at once. POST /simulate/transfers/wire/receive plays another bank wiring one of the bank's account numbers, and POST /simulate/transfers/wire/bank-receive delivers a pacs.009. See Sandbox and testing.

to move to open esc to close