---
title: "Fund a Transfer"
method: POST
path: "/v3/profiles/{profileId}/transfers/{transferId}/payments"
tags: ["transfer"]
---

# Fund a Transfer

`POST /v3/profiles/{profileId}/transfers/{transferId}/payments`

{% admonition type="warning" %}
      This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you.
      Please read more about [implementing SCA](/guides/developer/auth-and-security/sca-and-2fa).
    {% /admonition %}

    This API call is the final step for executing payouts when using a balance with Wise. Upon calling the endpoint, Wise will begin the processing of the transfer, depending on the status of funds.

    When using the transfer by transfer settlement model, the following funding type(s) must be used:

    * **BALANCE** — Funds are pulled from a multi-currency account held with Wise.

    When funding through the Bulk Settlement model, the following funding type(s) must be used:

    * **TRUSTED_PRE_FUND_BULK** — Funds for the transfer will be settled through a bulk payment at a later date. This method is not applicable for First Party partner account transfers.

    If funding from `BALANCE`, and your multi-currency account does not have the required funds to complete the action, then this call will fail with an "insufficient funds" error. Once funds are added and available, you must call this endpoint again.

## Path parameters

- `profileId` integer, required — Profile Id
- `transferId` integer, required — Transfer Id

## Headers

- `X-External-Correlation-Id` string, uuid

## Request body

- union
  - FundingRequestBalance
    - `balanceId` integer — ID of the balance to debit.
    - `type` string, required
  - FundingRequestTrustedPreFundBulk
    - `partnerReference` string — The transaction/payment identifier in your system. Required for the Cross Currency Bulk Settlement model.
    - `status` string — Internal status field.
    - `type` string, required
  - FundingRequestTrustedPreFund
    - `partnerReference` string — The transaction/payment identifier in your system. Required for the Cross Currency Bulk Settlement model.
    - `status` string — Internal status field.
    - `type` string, required

## Response `201`

FundTransfer 201 response

- union
  - FundingResponseBalance
    - `status` 'CREATED' | 'COMPLETED' | 'REJECTED' — Outcome of a funding attempt.
    - `errorCode` 'transfer.not-found' | 'transfer.invalid-state' | 'payment.exists' | 'transfer.not-accessible-for-user' | 'balance.unauthorised.missing-security-role' | 'payment.not-found' | 'invalid.request' | 'unexpected.error' | 'payment.option-unavailable' | 'balance.payment-option-unavailable' | 'balance.account-not-found' | 'balance.account-inactive' | 'balance.insufficient-funds' | 'balance.no-balance-for-currency' | 'balance.currency-unsupported' | 'trustedprefundbulk.payment-option-unavailable' | 'trustedprefundtx.payment-option-unavailable' — Machine-readable error code returned with `status: REJECTED`. Each member's documentation notes the `type` values that can produce it and the underlying HTTP status. This is the complete set of error codes the API can return today. Consumers should treat unknown codes defensively (new codes may be added); a wildcard fallback to a generic 'funding failed' UI is recommended.
    - `errorMessage` string — Free-form human-readable explanation of a `REJECTED` outcome. Suitable for logging and developer-facing tools; not localised and not safe to surface to end users. May be absent.
    - `balanceTransactionId` integer — ID of the balance transaction created to settle the transfer.
    - `type` string, required
  - FundingResponseTrustedPreFundBulk
    - `status` 'CREATED' | 'COMPLETED' | 'REJECTED' — Outcome of a funding attempt.
    - `errorCode` 'transfer.not-found' | 'transfer.invalid-state' | 'payment.exists' | 'transfer.not-accessible-for-user' | 'balance.unauthorised.missing-security-role' | 'payment.not-found' | 'invalid.request' | 'unexpected.error' | 'payment.option-unavailable' | 'balance.payment-option-unavailable' | 'balance.account-not-found' | 'balance.account-inactive' | 'balance.insufficient-funds' | 'balance.no-balance-for-currency' | 'balance.currency-unsupported' | 'trustedprefundbulk.payment-option-unavailable' | 'trustedprefundtx.payment-option-unavailable' — Machine-readable error code returned with `status: REJECTED`. Each member's documentation notes the `type` values that can produce it and the underlying HTTP status. This is the complete set of error codes the API can return today. Consumers should treat unknown codes defensively (new codes may be added); a wildcard fallback to a generic 'funding failed' UI is recommended.
    - `errorMessage` string — Free-form human-readable explanation of a `REJECTED` outcome. Suitable for logging and developer-facing tools; not localised and not safe to surface to end users. May be absent.
    - `partnerReference` string — Partner-supplied reference echoed back.
    - `type` string, required
  - FundingResponseTrustedPreFund
    - `status` 'CREATED' | 'COMPLETED' | 'REJECTED' — Outcome of a funding attempt.
    - `errorCode` 'transfer.not-found' | 'transfer.invalid-state' | 'payment.exists' | 'transfer.not-accessible-for-user' | 'balance.unauthorised.missing-security-role' | 'payment.not-found' | 'invalid.request' | 'unexpected.error' | 'payment.option-unavailable' | 'balance.payment-option-unavailable' | 'balance.account-not-found' | 'balance.account-inactive' | 'balance.insufficient-funds' | 'balance.no-balance-for-currency' | 'balance.currency-unsupported' | 'trustedprefundbulk.payment-option-unavailable' | 'trustedprefundtx.payment-option-unavailable' — Machine-readable error code returned with `status: REJECTED`. Each member's documentation notes the `type` values that can produce it and the underlying HTTP status. This is the complete set of error codes the API can return today. Consumers should treat unknown codes defensively (new codes may be added); a wildcard fallback to a generic 'funding failed' UI is recommended.
    - `errorMessage` string — Free-form human-readable explanation of a `REJECTED` outcome. Suitable for logging and developer-facing tools; not localised and not safe to surface to end users. May be absent.
    - `partnerReference` string — Partner-supplied reference echoed back.
    - `type` string, required

## Other responses

- `400` — InvalidRequestError 400 response
- `403` — UnauthorisedAccessError 403 response
- `404` — EntityNotFoundError 404 response
- `409` — PaymentAlreadyExistsError 409 response
- `422` — UnsupportedOperationError 422 response
- `429` — Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header.
- `500` — UnexpectedError 500 response

---

[API](https://skmtc.net/wise/apis/platform-api.md) · [All operations](https://skmtc.net/wise/apis/platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/wise/platform-api/revisions/4907a1d269ab/schema)
