---
title: "Create draft transfer"
method: POST
path: "/v2/business-accounts/draft-transfers"
tags: ["Draft Transfers API"]
---

# Create draft transfer

`POST /v2/business-accounts/draft-transfers`

> 🚧 Beta feature
>
> This feature is currently in beta testing, and the final specification may still change.

Creates a draft transfer. The draft transfer immediately enters `pending-review` and appears in the
initiator's queue in Mollie Apps. It carries no legal weight and moves no funds until a human initiator
approves it there.

### Test mode

Creating a draft transfer always returns a synthetic draft in `pending-review`, using synthetic data,
same as in live mode. No real funds move and nothing is sent to Mollie Apps.

Shortly after, you can simulate the initiator's decision by adjusting the transfer amount:

| Amount  | Simulated outcome                                    | Webhook sequence                                                                                  |
|---------|-------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| `13.00` | Declined by the initiator, with a free-text reason     | `business-account-draft-transfer.created` → `business-account-draft-transfer.declined`             |
| Other   | Approved by the initiator                              | `business-account-draft-transfer.created` → `business-account-draft-transfer.approved`              |

The webhooks fire asynchronously, with a short delay between them to mimic real timing. [Get](get-draft-transfer)
and [list](list-draft-transfers) reflect the simulated outcome once it lands.

Cancelling (via `DELETE`) is unaffected by the amount: it always transitions the draft to `declined` with
`statusReason.code` set to `deleted-by-creator`, the same as in live mode.

## Headers

- `idempotency-key` string

## Request body

- CreateDraftTransferRequest
  - `resource` string — Indicates the response contains a draft transfer object. Will always contain the string `business-account-draft-transfer` for this endpoint.
  - `id` string
  - `mode` 'live' | 'test' — Whether this entity was created in live mode or in test mode.
  - `debtorIban` string — The IBAN of the debtor's (sender) Mollie Business Account. Defaults to your organization's primary account if omitted.
  - `debtor` DraftTransferParty — A party involved in the draft transfer, representing either the debtor (sender) or creditor (recipient). Contains the party's name and account details.
    - `fullName` string, required — The full name of the account holder.
    - `account` object, required — The bank account details of the party.
      - `iban` string, required — The IBAN (International Bank Account Number) of the account holder.
  - `creditor` DraftTransferParty, required — A party involved in the draft transfer, representing either the debtor (sender) or creditor (recipient). Contains the party's name and account details.
    - `fullName` string, required — The full name of the account holder.
    - `account` object, required — The bank account details of the party.
      - `iban` string, required — The IBAN (International Bank Account Number) of the account holder.
  - `amount` Amount, required — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `description` string, nullable, required — A short description of the draft transfer. Once approved, this will appear on the bank statement of both the debtor and creditor.
  - `scheduledExecutionDate` string, date, nullable — The date on which the resulting transfer will be executed, once approved. Defaults to same-day if omitted, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date format.
  - `status` 'pending-review' | 'approved' | 'declined' — The status of the draft transfer.
  - `statusReason` DraftTransferStatusReason, nullable — The reason for the draft transfer's current status. `null` unless `status` is `declined`.
    - `code` 'deleted-by-creator' | 'declined-by-initiator' | 'account-closed', required — A machine-readable code that indicates the reason for the draft transfer's current status.
    - `message` string, required — A human-readable explanation of the status reason. For `declined-by-initiator`, this includes the initiator's free-text reason when they provided one.
  - `createdAt` string — The entity's date and time of creation, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `approvedAt` string, nullable — The date and time the draft transfer was approved, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. `null` unless `status` is `approved`.
  - `declinedAt` string, nullable — The date and time the draft transfer was declined by the initiator, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. `null` unless `statusReason.code` is `declined-by-initiator`.
  - `deletedAt` string, nullable — The date and time the draft transfer was deleted via the [Cancel draft transfer](cancel-draft-transfer) endpoint, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. `null` unless `statusReason.code` is `deleted-by-creator`.
  - `testmode` boolean, nullable — Whether to create the entity in test mode or live mode. Most API credentials are specifically created for either live mode or test mode, in which case this parameter must not be sent. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting `testmode` to `true`.
  - `_links` object — Links to related resources.
    - `self` object, required — The URL to this draft transfer.
      - `href` string
      - `type` string
    - `documentation` object — The URL to the documentation of this endpoint.
      - `href` string
      - `type` string

## Response `201`

The newly created draft transfer object.

## Other responses

- `422` — The request contains issues. For example, if a required field is missing, or if the creditor IBAN is invalid.
- `429` — Rate Limit has been reached.

---

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