Transfer funds between sellers
- Sandbox:
POST https://sandbox.payme.io/api/sales
- Production:
POST https://live.payme.io/api/sales
Credentials
- Request body field
seller_payme_id (required): The MPL of the seller that receives the funds. It also authenticates the call.
- Request body field
payme_client_key (optional): Partners: your client key. Both sellers must belong to this partner.
Moves funds from one seller's PayMe balance (payment.origin_seller_id) to another seller's (seller_payme_id). PayMe records the transfer as a completed sale on the receiving seller, with sale_payment_method funds-transfer. Amounts are in minor units (1000 = 10.00).
- Authentication:
seller_payme_id, the receiving seller's MPL, authenticates the call. Partners also send payme_client_key.
- Same partner, different accounts: both sellers must belong to the same partner, and they must be two different accounts (error
20).
- Services: the origin seller needs the
funds-transfer service and the receiving seller the funds-transfer Destination service (error 720). To enable them, ask partners@payme.io and give both MPLs.
- Validated origin: the origin seller's account must be validated (error
109).
- A failed transfer still returns HTTP
200, with status_code 1, payme_status error and the reason in status_error_code and status_error_details. Check status_code, not only the HTTP status.
Errors
| HTTP status |
Error code |
Message |
When |
500 |
1 |
Required parameter is missing |
seller_payme_id or payment.origin_seller_id is missing. status_additional_info names it. |
400 |
353 |
Invalid description |
product_name is missing. |
500 |
352 |
Invalid price, out of min-max bounds |
sale_price is missing or not a number. |
400 |
252 |
Currency is not allowed for this seller |
currency isn't enabled for the receiving seller. |
500 |
20 |
Validation error |
The two sellers are the same account (Funds must be transferred between different accounts), or they belong to different partners (Merchant-Seller inconsistency). |
500 |
720 |
The service was not activated |
A seller lacks the funds-transfer service. status_additional_info is funds-transfer (origin seller) or funds-transfer Destination (receiving seller). |
400 |
109 |
Seller not validated |
The origin seller's account isn't validated. |
500 |
251 |
Seller was not found |
A seller key is unknown. |
Parameters
This endpoint takes no path, query or header parameters.
Request body
Content type: application/json
| Field |
Type |
Required |
Description |
seller_payme_id |
string |
yes |
The MPL of the seller that receives the funds. It also authenticates the call. |
payme_client_key |
string |
no |
Partners: your client key. Both sellers must belong to this partner. |
sale_price |
integer |
yes |
The amount to transfer, in minor units (1000 = 10.00). |
currency |
string |
yes |
ISO 4217 currency code, e.g. ILS. It must be enabled for the receiving seller (error 252). |
product_name |
string |
yes |
What the transfer is for. It becomes the sale's description (error 353 if missing). |
payment |
object |
yes |
The transfer details. |
payment.method |
string |
yes |
Must be funds-transfer. Without it, PayMe doesn't make a transfer. |
payment.origin_seller_id |
string |
yes |
The MPL of the seller whose balance is debited. It must differ from seller_payme_id. |
Request example
{
"seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-7654321",
"sale_price": 15000,
"currency": "ILS",
"product_name": "Monthly settlement",
"payment": {
"method": "funds-transfer",
"origin_seller_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567"
}
}
Code samples
curl
curl -X POST 'https://sandbox.payme.io/api/sales' \
-H 'Content-Type: application/json' \
--data-raw '{
"seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-7654321",
"sale_price": 15000,
"currency": "ILS",
"product_name": "Monthly settlement",
"payment": {
"method": "funds-transfer",
"origin_seller_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567"
}
}'
Node.js
const response = await fetch("https://sandbox.payme.io/api/sales", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
"seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-7654321",
"sale_price": 15000,
"currency": "ILS",
"product_name": "Monthly settlement",
"payment": {
"method": "funds-transfer",
"origin_seller_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567"
}
}),
});
console.log(await response.text());
Python
import requests
response = requests.post(
"https://sandbox.payme.io/api/sales",
json={
"seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-7654321",
"sale_price": 15000,
"currency": "ILS",
"product_name": "Monthly settlement",
"payment": {
"method": "funds-transfer",
"origin_seller_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
},
},
)
print(response.text)
PHP
<?php
$body = <<<'BODY'
{
"seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-7654321",
"sale_price": 15000,
"currency": "ILS",
"product_name": "Monthly settlement",
"payment": {
"method": "funds-transfer",
"origin_seller_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567"
}
}
BODY;
$ch = curl_init('https://sandbox.payme.io/api/sales');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Responses
200 — The transfer result, as a sale on the receiving seller. The response also carries the other fields of a sale response, such as buyer_*, payme_transaction_card_brand and installments. They describe card sales; don't rely on them for a transfer. (success)
| Field |
Type |
Description |
status_code |
integer |
0 – the transfer succeeded; 1 – it failed (see status_error_code). |
payme_status |
string |
success or error. |
status_error_code |
integer |
0 on success; the error code otherwise. |
status_error_details |
string |
The error message. Only when the transfer failed. |
payme_sale_id |
string |
The sale created on the receiving seller (SALE…). |
payme_sale_code |
integer |
The sale's numeric ID. |
sale_created |
string |
When the sale was created, YYYY-MM-DD HH:MM:SS. |
sale_status |
string |
completed when the transfer succeeded. |
payme_sale_status |
string |
Same as sale_status. |
sale_payment_method |
string |
funds-transfer. |
currency |
string |
The currency, as sent. |
price |
integer |
The amount transferred, in minor units. |
sale_description |
string |
Your product_name. |
payme_signature |
string |
The sale signature. See Verifying a callback. |
payme_transaction_id |
string |
The transaction on the receiving seller (TRAN…). |
payme_transaction_total |
integer |
The transaction amount, in minor units. |
sale_paid_date |
string |
When the transfer ran, YYYY-MM-DD HH:MM:SS. |
sale_release_date |
string |
The release date of the funds to the receiving seller, YYYY-MM-DD HH:MM:SS. |
session |
string |
PayMe session ID. Quote it when you contact PayMe support. |
{
"status_code": 0,
"payme_status": "success",
"status_error_code": 0,
"payme_sale_id": "SALE1700-000000AA-EXAMPLE1-SALE0001",
"payme_sale_code": 8965519,
"sale_created": "2026-11-09 16:28:08",
"sale_status": "completed",
"payme_sale_status": "completed",
"sale_payment_method": "funds-transfer",
"currency": "ILS",
"price": 15000,
"sale_description": "Monthly settlement",
"payme_signature": "9c1d6f0e2b7a4c3d8e5f6a7b8c9d0e1f",
"payme_transaction_id": "TRAN1700-000000AA-EXAMPLE1-TXN00001",
"payme_transaction_total": 15000,
"sale_paid_date": "2026-11-09 16:28:08",
"sale_release_date": "2026-11-09 16:28:09",
"session": "FhT3aXe7"
}
400 — A missing product_name, a currency the receiving seller can't use, or an origin seller that isn't validated. (error)
| Field |
Type |
Description |
status_code |
integer |
1 on failure. |
status_error_details |
string |
The error message. |
status_additional_info |
string |
More detail, such as the field or value that failed. |
status_error_code |
integer |
PayMe error code. See the error table above. |
session |
string |
PayMe session ID. Quote it when you contact PayMe support. |
{
"status_code": 1,
"status_error_details": "Invalid description",
"status_additional_info": "product_name",
"status_error_code": 353,
"session": "FhT3aXe7"
}
500 — A missing field or key, sellers that can't transfer to each other, or a service that isn't enabled. (error)
| Field |
Type |
Description |
status_code |
integer |
1 on failure. |
status_error_details |
string |
The error message. |
status_additional_info |
string |
More detail, such as the field or value that failed. |
status_error_code |
integer |
PayMe error code. See the error table above. |
session |
string |
PayMe session ID. Quote it when you contact PayMe support. |
{
"status_code": 1,
"status_error_details": "The service was not activated",
"status_additional_info": "funds-transfer",
"status_error_code": 720,
"session": "FhT3aXe7"
}