Skip to main content
Lead is migrating the Wire API from V1 to V2. All partners must migrate to V2 before Lead’s migration deadline on November 12, 2026. V1 will be deprecated after the migration window closes. This guide describes what changed, what you need to update, and the timeline for completing your migration. This page is updated when additional changes occur, with those changes recorded in the Changelog at the top of the page.
This guide will be updated as decisions are finalized.

Why This Migration is Required

The November 16, 2026 Fedwire ISO 20022 changes are the forcing function for V2. As part of this release, Fedwire is replacing fully unstructured postal addresses with a hybrid address format. The new format supports either fully structured addresses or structured addresses with up to two free-form address lines, but at minimum requires country and town_name as structured fields. Today, the V1 create-wire request accepts a fully unstructured address (line_one, line_two, line_three). After November 16, that shape will no longer be accepted. V2 introduces a new address object that supports the ISO hybrid address format. Since this changes the request schema, it requires a new API version rather than an in-place update to V1. V2 also enforces stricter validation on all rail-bound text fields, rejecting carriage returns, line feeds, tabs, and whitespace-only values. Since this migration already requires a new API version, V2 also introduces a focused set of improvements including corridor classification, consolidated routing identifiers, and enum-based return and rejection reasons so partners only need to migrate once instead of absorbing multiple breaking changes over time.

Timeline

The detailed migration runbook including the per-program cutover sequence, V1 deprecation timing, and maintenance windows will be shared as the migration plan is finalized. Contact your TAM with questions about your specific timeline.

Summary of Breaking Changes

1. Update Wire Creation (POST /v2/wires)

Several fields in the request body have changed. The top-level diff:

1a. corridor_type Is Now Required

Set to "domestic" or "international". This value drives the validation rules for several other fields below. In addition, you may also include the new optional ultimate_debtor object:

1b. Routing Number Moved To local_routing_identifier.value

creditor_agent.routing_number no longer exists in v2. Pass the 9-digit ABA routing number through creditor_agent.local_routing_identifier.value instead. This field is required when corridor_type is "domestic".
The same applies to instructed_agent if you use it.

1c. business_identifier_code (BIC) Is Now Corridor-type Conditional

In v1, BIC was informally required for international wires. In v2 this is enforced:
  • corridor_type: "international"business_identifier_code required
  • corridor_type: "domestic"business_identifier_code not accepted

1d. creditor.address Is Restructured

v2 adopts an ISO 20022 hybrid address format. line_three is removed and two new required fields are added: town_name and country.
If you were putting city/state/country into line_two or line_three, split those values into the new structured fields.

1e. Read-only Fields Removed From Request Schemas

In v1, payment_identifiers and remittance_details included several readOnly fields that were silently ignored in requests. In v2 these are absent from the request schema entirely — sending them will cause an error. If your code serializes a full wire object back into a create request, strip these fields first. payment_identifiers — only end_to_end_identification is accepted; remove:
  • message_identification, uetr, instruction_identification, return_identification
remittance_details — only message_to_creditor and transfer_purpose are accepted; remove:
  • payment_notification, message_to_receiving_fi, fi_to_fi_message

2. Update Wire Return Reasons

POST /v2/wires/{wire_id}/return renames return_code to reason and replaces ISO 20022 codes with human-readable strings. v1 request:
v2 request:

Full Mapping

3. Handle New Response Fields

v2 wire responses include new fields. You don’t have to use them, but you should not break if they appear.

4. V1 Return Window

Wires submitted through the V1 API before the migration deadline will remain returnable for 3 months after November 16. After February 16, 2027, V1 wires can no longer be returned. If you have V1 wires that may need to be returned, submit any return requests before that window closes.

Detailed Changes

Wire V2 Object

The V2 wire object keeps the overall V1 shape and field names, with a focused set of ISO-driven additions and changes. The most significant differences from V1 are the hybrid address model, the consolidation of routing numbers into local_routing_identifier, the new corridor_type and initiating_party fields, and the move from raw ISO codes to normalized enums on return reasons.

Key Changes vs. V1

Statuses

Wire statuses are unchanged from V1 for this migration. The full status set (created, scheduled, processing, posted, under_review, rejected, canceled, cancel_pending) continues to be returned as it is today.
Planned for 2027The wire status lifecycle changes are deferred until after the V2 rollout. Partners will receive at least three months’ notice before any status is removed. No action is required for the V2 migration itself.
The planned changes differ by direction:
  • Outgoing wires: scheduled, processing, and cancel_pending will be deprecated, leaving the lifecycle createdunder_reviewposted / rejected / canceled.
  • Incoming wires: under_review will become an active status (and the wire.under_review webhook will begin firing for incoming wires), leaving the lifecycle under_reviewposted / rejected.

Example Wire V2 Object

Detailed API Changes by Endpoint

Create a Wire: POST /v2/wires V2 Request Example
List All Wires: GET /v2/wires Retrieve a Wire: GET /v2/wires/{wire_id} Update a Wire: PATCH /v2/wires/{wire_id} Cancel a Wire: POST /v2/wires/{wire_id}/cancel Return a Wire: POST /v2/wires/{wire_id}/return Request Return: POST /v2/wires/{wire_id}/request_return For the full request and response schema, see the Return Requests guide. Reject Return Request: POST /v2/wires/{wire_id}/reject_return_request For the full request and response schema, see the Return Requests guide.