Transfer funds between sellers

Credentials

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).

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"
}