Outgoing wire transfers

Create an outgoing wire transfer

Use this when you need to move funds out of the Weavr platform to an external bank account.

It transfers funds from one of the identity's managed accounts to a destination bank account over SEPA, Faster Payments, SWIFT, or RIX. The rails are chosen from the destination's bank details and reported back as type.

A transfer isn't submitted the moment you create it. Depending on the destination and the amount, it may first need payee confirmation, a transaction confirmation challenge, or both. Always read state in the response to decide what to do next.

Prerequisites

The source managed account must have an IBAN, otherwise the request fails with IBAN_UPGRADE_REQUIRED. See Add an IBAN to an account.

The Outgoing Wire Transfer Profile referenced by profileId, configured in the Multi Portal, must be active and must support the payment type being used. It determines the fees and restrictions applied to the transfer.

Fields

Source

sourceInstrument must be a managed account; cards can't fund a wire transfer. transferAmount is taken from that account and must be in the account's currency, or the request fails with CURRENCY_MISMATCH. Any fee is charged separately and reported as fee on the transfer.

Destination

destinationBeneficiary accepts the destination in one of three ways:

  • Bank details: a SEPABeneficiary, FasterPaymentsBeneficiary, SWIFTBeneficiary, or RIXBeneficiary, supplied inline. The rails follow from the details you provide.
  • A trusted payee: beneficiaryId, referencing a payee the identity has already added and verified. See Add payees.
  • A linked account: an ExternalAccountId of type linked_accounts, referencing an external account the identity has already proven it owns.

Reference and purpose

description is passed to the beneficiary as the payment reference. It is mandatory for SEPA and SWIFT, and the length limit depends on the rails: 35 characters for SEPA and SWIFT, 18 for Faster Payments. purpose is mandatory for SWIFT; omitting it where it's required fails with PURPOSE_OF_PAYMENT_REQUIRED.

Scheduling

Set scheduledTimestamp to an epoch timestamp to execute the transfer at a future time. The transfer is held in SCHEDULED until then and can be canceled with Cancel an outgoing wire transfer.

Payee confirmation

Weavr checks the payee name before executing the transfer. GBP Faster Payments use Confirmation of Payee (CoP), and EUR SEPA transfers use Verification of Payee (VoP).

When confirmation is required, the transfer is created in PENDING_CONFIRMATION. Show the result to the user, then either confirm the transfer or cancel it. Where the name is close but not exact, you can correct it with Update the beneficiary name before confirming.

GBP transfers to linked accounts skip this confirmation, because ownership was already checked when the account was linked. EUR transfers to linked accounts still require confirmation.

Transaction confirmation

The user must complete a transaction confirmation challenge before the transfer is submitted. A transfer waiting on this is in PENDING_CHALLENGE; issue a challenge with one-time password or push notification, then verify it.

States

A newly created transfer is in one of:

StateMeaning
PENDING_CONFIRMATIONPayee confirmation is required. Show the result, then confirm or cancel.
PENDING_CHALLENGEA transaction confirmation challenge is required before submission.
SCHEDULEDAccepted and waiting for scheduledTimestamp.
SUBMITTEDSent to the financial institution for processing.
INVALIDFailed initial validation and won't proceed.

Once submitted, the transfer moves on to APPROVED, then COMPLETED, or to REJECTED, FAILED, or RETURNED. Track it with Get an outgoing wire transfer.

post/outgoing_wire_transfers

Request

  • Base URL: https://sandbox.weavr.io/multi
  • URL: https://sandbox.weavr.io/multi/outgoing_wire_transfers
  • Auth: HTTP bearer and API key in header api-key

Headers

idempotency-refstring
Example:transfer-2026-08-07-001

A unique call reference generated by the caller that, taking into consideration the payload as well as the operation itself, helps avoid duplicate operations. Idempotency reference uniqueness is maintained for at least 24 hours.

Request body

profileIdstring required

The profile Id which a specific identity, instrument, or transaction type is linked to.

Profiles contain configuration and determine behavioral aspects of the newly created transaction, for example, fees that may apply.

You can have one or more profiles linked to your application, and these can be used to drive different behaviors according to your product's needs.

Profile Ids can be found in the Multi Portal, in the API Credentials page.

tagstring

The tag field is a custom field that can be used to search and filter.

purposestring

The purpose of the payment. Mandatory for wire transfers executed over SWIFT.

descriptionstring

These details are passed to the beneficiary as the reference . This field is mandatory for wire transfers executed over SEPAand SWIFT. The allowed length is dependent on the payment type:

SEPA <= 35 characters. An extended character set is accepted to cater for all European languages. If SEPA does not support a particular character, it is automatically converted to an acceptable alternative, in line with SEPA scheme guidance.

SWIFT <= 35 characters

Faster Payments <= 18 characters

scheduledTimestampstring

The epoch timestamp at which the transaction is scheduled to be executed.

Example request

{
  "profileId": "10001",
  "tag": "customer-123",
  "sourceInstrument": {
    "id": "123456789"
  },
  "transferAmount": {
    "currency": "GBP",
    "amount": 1250
  },
  "purpose": "Invoice payment",
  "description": "Invoice 1042",
  "destinationBeneficiary": {
    "name": "Alex Smith",
    "address": "1 High Street, London W1A 1AA",
    "bankName": "National Westminster Bank PLC",
    "bankAddress": "250 Bishopsgate, London EC2M 4AA",
    "bankCountry": "GB",
    "bankAccountDetails": {
      "iban": "GB29NWBK60161331926819",
      "bankIdentifierCode": "NWBKGB2L"
    },
    "nationality": "GB",
    "dateOfBirth": "1990-01-01"
  },
  "scheduledTimestamp": "1786118400000"
}

Response

Success

idstring required

The unique identifier of an Outgoing Wire Transfer transaction.

profileIdstring required

The profile Id which a specific identity, instrument, or transaction type is linked to.

Profiles contain configuration and determine behavioral aspects of the newly created transaction, for example, fees that may apply.

You can have one or more profiles linked to your application, and these can be used to drive different behaviors according to your product's needs.

Profile Ids can be found in the Multi Portal, in the API Credentials page.

tagstring

The tag field is a custom field that can be used to search and filter.

purposestring

The purpose of the payment.

descriptionstring

Transaction description.

type'SEPA' | 'FASTER_PAYMENTS' | 'SWIFT' | 'RIX'

The wire transfer rails used, from SEPA, Faster Payments, SWIFT or RIX.

state'INVALID' | 'PENDING_CHALLENGE' | 'SUBMITTED' | 'REJECTED' | 'APPROVED' | 'FAILED' | 'COMPLETED' | 'RETURNED' | 'SCHEDULED' | 'DEFERRED' | 'CANCELLED' | 'PENDING_CONFIRMATION' required

The state of the Outgoing wire transfer transaction, as follows:

  • INVALID: The wire transfer has failed initial validation checks.
  • PENDING_CHALLENGE: The wire transfer requires the completion of a transaction confirmation challenge before it can be submitted.
  • SUBMITTED: The wire transfer is being processed, including transaction monitoring, before it is sent to the sending financial institution.
  • REJECTED: The wire transfer that was submitted was rejected.
  • APPROVED: The wire transfer that was submitted has been approved and is being processed by the sending financial institution.
  • FAILED: There was an issue with the wire transfer, and the transaction has failed.
  • COMPLETED: The requested funds have been sent from the source instrument.
  • RETURNED: The wire transfer has been returned to the sender.
  • SCHEDULED: The wire transfer will be executed at the scheduled time.
  • CANCELLED: The wire transfer was canceled before completion.
  • PENDING_CONFIRMATION: The wire transfer requires manual confirmation by the user before proceeding. It may be canceled if confirmation is not completed in time.
rejectedInfo'SYSTEM' | 'USER'

Additional info when the outgoing wire transfer has been rejected, as follows:

  • SYSTEM: The wire transfer was rejected by the system.
  • USER: The wire transfer was rejected by the user.
challengeExemptionReason'LOW_VALUE' | 'TRUSTED_BENEFICIARY'

The Reason the transaction was exempted from SCA verification

creationTimestampinteger required

The time when the transaction was created, expressed in Epoch timestamp using millisecond precision.

scheduledTimestampstring

The epoch timestamp at which the transaction is scheduled to be executed.

executionTimestampstring

The epoch timestamp at which the transaction was executed, transitioning to a final state such as COMPLETED, REJECTED, or FAILED.

cancellationReasonstring

The reason the scheduled transaction was canceled.

Example response

{
  "id": "123456789",
  "profileId": "10001",
  "tag": "customer-123",
  "sourceInstrument": {
    "id": "123456789"
  },
  "transferAmount": {
    "currency": "GBP",
    "amount": 1250
  },
  "fee": {
    "currency": "GBP",
    "amount": 1250
  },
  "purpose": "Invoice payment",
  "description": "Invoice 1042",
  "destination": {
    "name": "Alex Smith",
    "address": "1 High Street, London W1A 1AA",
    "bankName": "National Westminster Bank PLC",
    "bankAddress": "250 Bishopsgate, London EC2M 4AA",
    "bankCountry": "GB",
    "bankAccountDetails": {
      "iban": "GB29NWBK60161331926819",
      "bankIdentifierCode": "NWBKGB2L"
    },
    "nationality": "GB",
    "dateOfBirth": "1990-01-01"
  },
  "creationTimestamp": 1786118400000,
  "scheduledTimestamp": "1786118400000",
  "executionTimestamp": "1786118401250",
  "cancellationReason": "Payment no longer required",
  "validationOutcomes": [
    {
      "categoryResult": {
        "accountName": "Alex J Smith"
      }
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.