> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Get dynamic bank transfer requirements

POST https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements
Content-Type: application/json

Returns the progressive field requirements needed to configure a bank transfer payout method, based on the data provided in the request. The `is_final` flag in the response indicates whether all requirements have been satisfied; callers should continue submitting updated data until `is_final` is `true` before calling `POST /payouts/employees/methods`.

 **Token scopes**: `worker:read`, `worker:write`

Reference: https://developer.deel.com/api/reference/endpoints/payouts/dynamic-requirements-v-2026-01-01

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Body (application/json)

This endpoint expects an object.

- `data` (PayoutsEmployeesMethodsBankTransfersRequirementsPostRequestBodyContentApplicationJsonSchemaData, optional) — Request data

## Response

### 200

Dynamic Requirements

- `data` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaData, optional) — Response data

## Errors

### 400 Bad Request Error

Invalid request parameters.

- `errors` (list of PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaErrorsItems, optional)

### 401 Unauthorized Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 403 Forbidden Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 404 Not Found Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 500 Internal Server Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

## Types

### PayoutsEmployeesMethodsBankTransfersRequirementsPostRequestBodyContentApplicationJsonSchemaData

Request data

- `current_state` (PayoutsEmployeesMethodsBankTransfersRequirementsPostRequestBodyContentApplicationJsonSchemaDataCurrentState, optional) — Current state of the bank details

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaData

Response data

- `steps` (list of PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItems, optional) — Steps to fulfill the requirements
- `is_final` (boolean, optional) — Indicates if the requirements are final
- `requirements_id` (double, optional) — ID of the requirements

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, optional) — Machine-readable error code.
- `message` (string, optional) — Human-readable explanation.

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

### PayoutsEmployeesMethodsBankTransfersRequirementsPostRequestBodyContentApplicationJsonSchemaDataCurrentState

Current state of the bank details

- `payment_type` (string, optional) — Type of payment
- `currency_code` (string, optional) — Currency code
- `bank_country_code` (string, optional) — Country code of the bank

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItems

- `name` (string, optional) — Step name
- `banner` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsBanner, optional, nullable) — Banner information (present when there is additional guidance to show; null otherwise).
- `header` (string, optional) — Step header
- `categories` (list of PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItems, optional) — Categories of the steps
- `right_side_placeholder` (string, optional) — Right side placeholder

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsBanner

Banner information (present when there is additional guidance to show; null otherwise).

- `placement` (string, optional) — Where the banner should be displayed
- `banner_type` (string, optional) — Banner type
- `additional_data` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsBannerAdditionalData, optional) — Additional banner-specific data

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItems

- `name` (string, optional) — Category name
- `alert` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsAlert, optional) — Alert information
- `banner` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsBanner, optional, nullable) — Banner information (present when there is additional guidance to show; null otherwise).
- `fields` (list of PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsFieldsItems, optional) — Fields in the category
- `header` (string, optional) — Category header
- `priority` (double, optional) — Category priority

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsBannerAdditionalData

Additional banner-specific data

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsAlert

Alert information

- `type` (string, optional) — Alert type
- `title` (string, optional) — Alert title
- `message` (string, optional) — Alert message

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsBanner

Banner information (present when there is additional guidance to show; null otherwise).

- `placement` (string, optional) — Where the banner should be displayed
- `banner_type` (string, optional) — Banner type
- `additional_data` (PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsBannerAdditionalData, optional) — Additional banner-specific data

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsFieldsItems

- `id` (double, optional) — Field ID
- `key` (string, optional) — Field key
- `name` (string, optional) — Field name
- `type` (string, optional) — Field type
- `example` (string, optional, nullable) — Example value
- `tooltip` (string, optional, nullable) — Tooltip information
- `category` (string, optional) — Field category
- `disabled` (boolean, optional) — Indicates if the field is disabled
- `required` (boolean, optional) — Indicates if the field is required
- `sensitive` (boolean, optional) — Indicates if the field is sensitive
- `max_length` (string, optional) — Maximum length of the field
- `min_length` (string, optional) — Minimum length of the field
- `values_allowed` (list of PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsFieldsItemsValuesAllowedItems, optional, nullable) — Allowed values for the field (present for select-type fields; null otherwise).
- `validation_regexp` (string, optional, nullable) — Validation regex pattern
- `validation_regex_flags` (string, optional, nullable) — Validation regex flags

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsBannerAdditionalData

Additional banner-specific data

### PayoutsEmployeesMethodsBankTransfersRequirementsPostResponsesContentApplicationJsonSchemaDataStepsItemsCategoriesItemsFieldsItemsValuesAllowedItems

- `key` (string, required) — Machine-readable option key.
- `name` (string, required) — Human-readable option label.

## Examples

**Request**

```json
{
  "data": {
    "current_state": {
      "payment_type": "bank_transfer",
      "currency_code": "EUR",
      "bank_country_code": "LT"
    }
  }
}
```

**Response**

```json
{
  "data": {
    "steps": [
      {
        "name": "CUSTOMIZE_ACCOUNT",
        "banner": null,
        "header": "Custom account name",
        "categories": [
          {
            "name": "CUSTOMIZATION",
            "alert": {
              "type": "INFO",
              "title": "Account Name",
              "message": "Add custom account name"
            },
            "banner": null,
            "fields": [
              {
                "id": 1678,
                "key": "custom_name",
                "name": "Account Custom Name",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "CUSTOMIZATION",
                "disabled": false,
                "required": false,
                "sensitive": false,
                "max_length": "30",
                "min_length": "0",
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              }
            ],
            "header": "Account name",
            "priority": 1
          }
        ],
        "right_side_placeholder": "Customize account"
      },
      {
        "name": "BANK_DETAILS",
        "banner": null,
        "header": "Bank account details",
        "categories": [
          {
            "name": "ROUTING",
            "banner": null,
            "fields": [
              {
                "id": 1676,
                "key": "payment_type",
                "name": "Payment type",
                "type": "select",
                "example": null,
                "tooltip": null,
                "category": "ROUTING",
                "disabled": false,
                "required": false,
                "sensitive": false,
                "values_allowed": [
                  {
                    "key": "bank_transfer",
                    "name": "Bank transfer"
                  },
                  {
                    "key": "paper_checks",
                    "name": "Paper checks"
                  }
                ],
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 1677,
                "key": "currency_code",
                "name": "Currency",
                "type": "select",
                "example": null,
                "tooltip": null,
                "category": "ROUTING",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "values_allowed": [
                  {
                    "key": "AED",
                    "name": "AED - United Arab Emirates Dirham"
                  },
                  {
                    "key": "AFN",
                    "name": "AFN - Afghani"
                  },
                  {
                    "key": "ALL",
                    "name": "ALL - Albanian Lek"
                  }
                ],
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 1679,
                "key": "bank_country_code",
                "name": "Bank Country Code",
                "type": "select",
                "example": null,
                "tooltip": null,
                "category": "ROUTING",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "values_allowed": [
                  {
                    "key": "AD",
                    "name": "Andorra"
                  },
                  {
                    "key": "AT",
                    "name": "Austria"
                  },
                  {
                    "key": "BE",
                    "name": "Belgium"
                  }
                ],
                "validation_regexp": null,
                "validation_regex_flags": null
              }
            ],
            "header": "Payment details",
            "priority": 2
          },
          {
            "name": "BANK_DETAILS",
            "banner": null,
            "fields": [
              {
                "id": 109,
                "key": "swift_bic",
                "name": "SWIFT BIC Code",
                "type": "text",
                "example": "BUKBGB22",
                "tooltip": null,
                "category": "BANK_DETAILS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "max_length": "11",
                "min_length": "8",
                "values_allowed": null,
                "validation_regexp": "^[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$",
                "validation_regex_flags": ""
              },
              {
                "id": 321,
                "key": "iban",
                "name": "IBAN",
                "type": "text",
                "example": "SE4550000000058398257466",
                "tooltip": "International Bank Number",
                "category": "BANK_DETAILS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "values_allowed": null,
                "validation_regexp": "^[^\\s-]+$",
                "validation_regex_flags": "",
                "extensions": [
                  "swift_bic",
                  "bank_name"
                ]
              }
            ],
            "header": "Account details",
            "priority": 1,
            "sub_header": "Please make sure your account is in the <bold>same currency as your contract</bold> to avoid any delays"
          }
        ],
        "right_side_placeholder": "Add bank account details"
      },
      {
        "name": "RECIPIENT_DETAILS",
        "banner": null,
        "header": "Personal information",
        "categories": [
          {
            "name": "PERSONAL",
            "banner": null,
            "fields": [
              {
                "id": 34,
                "key": "full_name",
                "name": "Full Name",
                "type": "text",
                "example": null,
                "tooltip": "With no special characters and only Latin characters",
                "category": "PERSONAL",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "max_length": "140",
                "min_length": "1",
                "values_allowed": null,
                "validation_regexp": "^[a-zA-ZàáâǎäãåāÀÁÂÄÃÅĀæÆçćčÇĆČèéêëēėęÈÉÊËĒĖĘîïíīįìÎÏÍĪĮÌłŁñńÑŃöòóøôōõÖÒÓØŌÕÔœŒßẞțśșšşŚŠŞûüùúūÛÜÙÚŪÿŸžźżŽŹŻ '-.]*$",
                "validation_regex_flags": ""
              }
            ],
            "header": "Recipient details",
            "priority": 2
          },
          {
            "name": "ADDRESS",
            "banner": null,
            "fields": [
              {
                "id": 68,
                "key": "address_line1",
                "name": "Address Line 1",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "max_length": "70",
                "min_length": "1",
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 69,
                "key": "address_line2",
                "name": "Address Line 2",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": false,
                "sensitive": false,
                "max_length": "70",
                "min_length": "0",
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 70,
                "key": "city",
                "name": "City",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "max_length": "35",
                "min_length": "1",
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 107,
                "key": "country_code",
                "name": "Country Code",
                "type": "select",
                "example": "US",
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "values_allowed": [
                  {
                    "key": "AD",
                    "name": "Andorra"
                  },
                  {
                    "key": "AE",
                    "name": "United Arab Emirates"
                  },
                  {
                    "key": "AF",
                    "name": "Afghanistan"
                  }
                ],
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 211,
                "key": "province_state",
                "name": "State",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "max_length": "35",
                "min_length": "1",
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              },
              {
                "id": 287,
                "key": "postal",
                "name": "Postal Code",
                "type": "text",
                "example": null,
                "tooltip": null,
                "category": "ADDRESS",
                "disabled": false,
                "required": true,
                "sensitive": false,
                "values_allowed": null,
                "validation_regexp": null,
                "validation_regex_flags": null
              }
            ],
            "header": "Address",
            "priority": 1
          }
        ],
        "right_side_placeholder": "Add recipient details"
      }
    ],
    "is_final": true,
    "requirements_id": 1250
  }
}
```

**SDK Code**

```python Dynamic Requirements
import requests

url = "https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements"

payload = { "data": { "current_state": {
            "payment_type": "bank_transfer",
            "currency_code": "EUR",
            "bank_country_code": "LT"
        } } }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Dynamic Requirements
const url = 'https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"current_state":{"payment_type":"bank_transfer","currency_code":"EUR","bank_country_code":"LT"}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Dynamic Requirements
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements"

	payload := strings.NewReader("{\n  \"data\": {\n    \"current_state\": {\n      \"payment_type\": \"bank_transfer\",\n      \"currency_code\": \"EUR\",\n      \"bank_country_code\": \"LT\"\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Dynamic Requirements
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"data\": {\n    \"current_state\": {\n      \"payment_type\": \"bank_transfer\",\n      \"currency_code\": \"EUR\",\n      \"bank_country_code\": \"LT\"\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Dynamic Requirements
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"current_state\": {\n      \"payment_type\": \"bank_transfer\",\n      \"currency_code\": \"EUR\",\n      \"bank_country_code\": \"LT\"\n    }\n  }\n}")
  .asString();
```

```php Dynamic Requirements
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements', [
  'body' => '{
  "data": {
    "current_state": {
      "payment_type": "bank_transfer",
      "currency_code": "EUR",
      "bank_country_code": "LT"
    }
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Dynamic Requirements
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"data\": {\n    \"current_state\": {\n      \"payment_type\": \"bank_transfer\",\n      \"currency_code\": \"EUR\",\n      \"bank_country_code\": \"LT\"\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Dynamic Requirements
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["data": ["current_state": [
      "payment_type": "bank_transfer",
      "currency_code": "EUR",
      "bank_country_code": "LT"
    ]]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/payouts/employees/methods/bank_transfers/requirements")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```