Withdraw funds to a bank account

Overview

This flow lets an accountholder withdraw funds from a Payoneer balance to a bank account registered for withdrawal. You retrieve withdrawal eligibility (including payout methods and bank_id values), balances, then submit POST payments/withdraw, obtain fee and FX details for the user to approve, and commit with PUT using commit_id. If Payoneer requires step-up authentication, commit may return challenge_required.

See the official section and API reference guide for field-level detail.

Implementation steps

a. Get withdrawal to bank eligibility

Call GET /v4/accounts/{account_id}/eligibility/withdraw to retrieve eligibility and payout methods. The response includes bank account entries with type bank_id and an id you use later as the withdrawal destination. See the API reference guide.

Requests to Payoneer's Services API require the user's bearer token in the Authorization header and account_id in the path. These credentials are obtained for the user during the user consent process.

curl -X GET \
https://api.sandbox.payoneer.com/v4/accounts/{account_id}/eligibility/withdraw \
-H "Authorization: Bearer MXVNd2NTcTBlTi94NkZC…" \
-H 'content-type: application/json'

Sample Get withdrawal eligibility response:

{
  "result": {
    "status": 2,
    "status_description": "eligible",
    "currencies": {
      "items": [
        {
          "currency": "USD",
          "monthly_available": 200000,
          "monthly_limit": 200000,
          "monthly_used": 0,
          "payout_methods": {
            "items": [
              {
                "id": "4366181894204646",
                "type": "BALANCE",
                "display_name": "USD balance",
                "bank_accounts": {
                  "items": [
                    {
                      "type": "bank_id",
                      "id": "4366181894204643",
                      "display_name": "Bank of America (3333)",
                      "currency": "USD",
                      "country": "US",
                      "min_amount": 300,
                      "max_amount": 5109.35,
                      "status": 1
                    },
                    {
                      "type": "bank_id",
                      "id": "4366181894204970",
                      "display_name": "中国工商银行 (3233)",
                      "currency": "CNY",
                      "country": "CN",
                      "min_amount": 0.1,
                      "max_amount": 5109.35,
                      "status": 1
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "currency": "EUR",
          "monthly_available": 185050,
          "monthly_limit": 185050,
          "monthly_used": 0,
          "payout_methods": {
            "items": [
              {
                "id": "4366181894204644",
                "type": "BALANCE",
                "display_name": "EUR balance",
                "bank_accounts": {
                  "items": [
                    {
                      "type": "bank_id",
                      "id": "4366181894204643",
                      "display_name": "Bank of America (3333)",
                      "currency": "USD",
                      "country": "US",
                      "min_amount": 0.01,
                      "max_amount": 239.52,
                      "status": 1
                    },
                    {
                      "type": "bank_id",
                      "id": "4366181894204970",
                      "display_name": "中国工商银行 (3233)",
                      "currency": "CNY",
                      "country": "CN",
                      "min_amount": 0.01,
                      "max_amount": 239.52,
                      "status": 1
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "currency": "GBP",
          "monthly_available": 162120,
          "monthly_limit": 162120,
          "monthly_used": 0,
          "payout_methods": {
            "items": [
              {
                "id": "4366181894204645",
                "type": "BALANCE",
                "display_name": "GBP balance",
                "bank_accounts": {
                  "items": [
                    {
                      "type": "bank_id",
                      "id": "4366181894204643",
                      "display_name": "Bank of America (3333)",
                      "currency": "USD",
                      "country": "US",
                      "min_amount": 0.01,
                      "max_amount": 0
                    },
                    {
                      "type": "bank_id",
                      "id": "4366181894204970",
                      "display_name": "中国工商银行 (3233)",
                      "currency": "CNY",
                      "country": "CN",
                      "min_amount": 0.01,
                      "max_amount": 0
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

b. Get balances

Call GET /v4/accounts/{account_id}/balances to retrieve available balances and the corresponding balance IDs for the account.

curl -X GET \
https://api.sandbox.payoneer.com/v4/accounts/{account_id}/balances \
-H "Content-Type: application/json" \
-H "Authorization: Bearer MXVNd2NTcTBlTi94NkZC…"

Example response:

{
  "result": {
    "items": [
      {
        "id": "4366181865108056",
        "type": "BALANCE",
        "currency": "GBP",
        "status": "2",
        "status_description": "Active",
        "available_balance": "20.00",
        "update_time": "2018-03-30T19:28:17Z"
      }
    ],
    "total": 3
  }
}

On your platform, present the balances held in the user's Payoneer account with an option to Withdraw funds.

Partner dashboard: YOURPLATFORM sidebar, USD/EUR/GBP balance cards with Withdraw links, and transactions table
Example: balances per currency with Withdraw on each card and recent transactions below.

c. Submit withdraw request (POST payments/withdraw)

When the user chooses to withdraw, call POST /v4/accounts/{account_id}/balances/{balance_id}/payments/withdraw using the bank_id returned from the eligibility response in to (type: bank_id).

curl -X POST \
https://api.sandbox.payoneer.com/v4/accounts/{account_id}/balances/{balance_id}/payments/withdraw \
-H 'content-type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer MXVNd2NTcTBlTi94NkZC…' \
-d '{
    "client_reference_id": "withdraw12345",
    "amount": 30.00,
    "description": "some description of transaction",
    "to": {
        "type": "bank_id",
        "id": "4366181894204341"
    }
}'

API response (example):

{
    "result": {
        "commit_id": "5a45c76b-687f-46e8-a3f6-1b1d9f6ca406",
        "expires_at": "2020-01-01T09:44:26.4528872Z",
        "type": "withdraw",
        "client_reference_id": "withdraw12345",
        "request_details": {
            "url": "/accounts/2982743/balances/4366181893586952/payments/withdraw",
            "body": {
                "client_reference_id": "withdraw12345",
                "amount": 30.0,
                "description": "some description of transaction",
                "target_amount": false,
                "to": {
                    "type": "bank_id",
                    "id": "4366181894204341"
                }
            }
        },
        "from": {
            "type": "balance",
            "id": "4366181893586952"
        },
        "to": {
            "type": "bank_id",
            "id": "4366181894204341"
        },
        "fees": [
            {
                "type": "transfer_fee",
                "amount": 3.0,
                "currency": "USD",
                "is_estimated": true
            }
        ],
        "fx": {
            "quote": "5315227",
            "rate": 27.9651851852,
            "source_currency": "USD",
            "target_currency": "THB",
            "is_estimated": true
        },
        "amounts": {
            "charged": {
                "amount": 30.0,
                "currency": "USD"
            },
            "target": {
                "amount": 755.06,
                "currency": "THB",
                "is_estimated": true
            }
        }
    }
}

d. User confirmation

Users must confirm the withdrawal from a Payoneer balance. Present the transaction details and fees returned from the withdrawal request to the customer and request approval.

Partner dashboard: Withdraw confirmation with Withdraw from USD balance, bank destination, amount, fee, total, confirmation checkbox, and Withdraw button
Example: user reviews withdrawal source, bank, amount, fees, and total before approving.

e. Commit the withdrawal

After the user reviews and confirms the fees and charges, a commit call is required to confirm the withdrawal to Payoneer.

curl -X PUT \
https://api.sandbox.payoneer.com/v4/accounts/{account_id}/payments/{commit_id} \
-H "Authorization: Bearer MXVNd2NTcTBlTi94NkZC…" \
-H 'content-type: application/json'

Challenge required (403 Forbidden)

If the user must pass a challenge, the commit request may return 403 Forbidden with error set to challenge_required. Example body:

{
    "error": "challenge_required",
    "error_description": "Challenge authentication required. Please see 'challenge' in response for more details.",
    "error_details": {
        "code": 1803
    },
    "challenge": {
        "type": "mfa",
        "expires_at": "2022-03-16T20:12:41.323Z",
        "session_id": "2d91b45a5cf440..0e4c42dafbc3737",
        "url": "https://auth.payoneer.com/#?t=2d91b45a5cf440..0e4c42dafbc3737&v=a"
    }
}
Sequence diagram for MFA challenge between user, platform, and Payoneer
High-level flow: redirect the user to the challenge url, then retry commit after authentication.

Straight success response (commit)

When the commit request completes without a pending challenge, the response can look like the following (example). status_description may be in_progress while Payoneer processes the withdrawal:

{
    "result": {
        "payment_id": "1661566656",
        "status": 1,
        "status_description": "in_progress",
        "last_status": "2025-05-15T14:29:37.4946346Z",
        "created_at": "2025-05-15T14:29:37.4946346Z",
        "type": "withdraw",
        "client_reference_id": "test122fs424",
        "request_details": {
            "url": "/accounts/3059338/balances/4366181894252923/payments/withdraw",
            "body": {
                "client_reference_id": "test122fs424",
                "amount": 12.25,
                "target_amount": false,
                "description": "some description of transaction",
                "to": {
                    "type": "bank_id",
                    "id": "4366181894252915"
                }
            }
        },
        "from": {
            "type": "balance",
            "id": "4366181894252923"
        },
        "to": {
            "type": "bank_id",
            "id": "4366181894252915"
        },
        "fx": {
            "quote": "7240964",
            "rate": 7.2081632653,
            "source_currency": "USD",
            "target_currency": "CNY",
            "is_estimated": true
        },
        "amounts": {
            "charged": {
                "amount": 12.25,
                "currency": "USD"
            },
            "target": {
                "amount": 88.3,
                "currency": "CNY",
                "is_estimated": true
            }
        }
    }
}