curl --request POST \
--url https://api.m4psp.com/gateway/v1/withdraw/try \
--header 'Content-Type: application/json' \
--data '
{
"shop_id": 1520,
"shop_currency": 840,
"payway": "card_payway_usd",
"amount": "6320.91",
"amount_type": "ps_amount",
"account_details": {},
"account": "150010000097"
}
'import requests
url = "https://api.m4psp.com/gateway/v1/withdraw/try"
payload = {
"shop_id": 1520,
"shop_currency": 840,
"payway": "card_payway_usd",
"amount": "6320.91",
"amount_type": "ps_amount",
"account_details": {},
"account": "150010000097"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
shop_id: 1520,
shop_currency: 840,
payway: 'card_payway_usd',
amount: '6320.91',
amount_type: 'ps_amount',
account_details: {},
account: '150010000097'
})
};
fetch('https://api.m4psp.com/gateway/v1/withdraw/try', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.m4psp.com/gateway/v1/withdraw/try",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'shop_id' => 1520,
'shop_currency' => 840,
'payway' => 'card_payway_usd',
'amount' => '6320.91',
'amount_type' => 'ps_amount',
'account_details' => [
],
'account' => '150010000097'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.m4psp.com/gateway/v1/withdraw/try"
payload := strings.NewReader("{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.m4psp.com/gateway/v1/withdraw/try")
.header("Content-Type", "application/json")
.body("{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.m4psp.com/gateway/v1/withdraw/try")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}"
response = http.request(request)
puts response.read_body{
"result": true,
"message": "Ok",
"error_code": 0,
"data": {
"account_info_config": {
"account": {
"regex": "\\d{9,15}$",
"title": "Account number, for example: 150010000097"
}
},
"payee_receive": 150,
"ps_currency": 840,
"shop_currency": 840,
"shop_write_off": "160"
}
}Payout preliminary calculation
Retrieves additional information for payout creation and preliminary commission calculation.
This method is not mandatory for all payment ways. For more information, please contact the technical support service.
You can use it in the following cases:
- You want to find out total amount subject to all fees paid by the user, before payout creation.
- You want to determine total amount that will be withdrawn from your invoice, taking into account all the commissions, before payout creation.
- Payment way requires a dynamic set of fields depending on the payout parameters.
In this case, you need to use
account_info_configparameter to generate customer form.
Fields involved in request signature generation:
amountamount_typepaywayshop_currencyshop_id
curl --request POST \
--url https://api.m4psp.com/gateway/v1/withdraw/try \
--header 'Content-Type: application/json' \
--data '
{
"shop_id": 1520,
"shop_currency": 840,
"payway": "card_payway_usd",
"amount": "6320.91",
"amount_type": "ps_amount",
"account_details": {},
"account": "150010000097"
}
'import requests
url = "https://api.m4psp.com/gateway/v1/withdraw/try"
payload = {
"shop_id": 1520,
"shop_currency": 840,
"payway": "card_payway_usd",
"amount": "6320.91",
"amount_type": "ps_amount",
"account_details": {},
"account": "150010000097"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
shop_id: 1520,
shop_currency: 840,
payway: 'card_payway_usd',
amount: '6320.91',
amount_type: 'ps_amount',
account_details: {},
account: '150010000097'
})
};
fetch('https://api.m4psp.com/gateway/v1/withdraw/try', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.m4psp.com/gateway/v1/withdraw/try",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'shop_id' => 1520,
'shop_currency' => 840,
'payway' => 'card_payway_usd',
'amount' => '6320.91',
'amount_type' => 'ps_amount',
'account_details' => [
],
'account' => '150010000097'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.m4psp.com/gateway/v1/withdraw/try"
payload := strings.NewReader("{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.m4psp.com/gateway/v1/withdraw/try")
.header("Content-Type", "application/json")
.body("{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.m4psp.com/gateway/v1/withdraw/try")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"shop_id\": 1520,\n \"shop_currency\": 840,\n \"payway\": \"card_payway_usd\",\n \"amount\": \"6320.91\",\n \"amount_type\": \"ps_amount\",\n \"account_details\": {},\n \"account\": \"150010000097\"\n}"
response = http.request(request)
puts response.read_body{
"result": true,
"message": "Ok",
"error_code": 0,
"data": {
"account_info_config": {
"account": {
"regex": "\\d{9,15}$",
"title": "Account number, for example: 150010000097"
}
},
"payee_receive": 150,
"ps_currency": 840,
"shop_currency": 840,
"shop_write_off": "160"
}
}Authorizations
Every API request must be signed so that we can identify your account.
The signature is transferred in the request body through the sign parameter, for example:
{
"shop_id": 1520,
"shop_order_id" : "5b0efa8a-153b-4421-abac-2aba4d772a86",
"amount": "6320.91",
"currency": 840,
"payway": "card_invoice_usd",
"description": "Payment for shop_id=1520",
"sign": "77a6f7a30876d480d4e771d08cb83800dd5cb874664c77e515ffc052b20293c6"
}
"sign" parameter, nevertheless your real requests must include it in the request body where required.
Signature line is generated according to the following algorithm: all request parameters involved in signature generation are ordered in the alphabetical order of keys, the values are concatenated with a colon (":") and the account secret key is added at the end (without the: sign), a sha256 hash is generated from the resulting line and its hex representation is passed in the sign request parameter.
Example of signature generation for a method invoice/create:
- Determining the list of parameters. It looks as follows for the method in consideration:
Fields involved in request signature generation:
shop_idshop_order_idamountcurrencypayway
- Let's sort keys in alphabetical sequence:
"amount", "currency", "payway", "shop_id", "shop_order_id"
- The line for generating the SHA256 hash will be as follows:
"6320.91:840:card_invoice_usd:1520:5b0efa8a-153b-4421-abac-2aba4d772a86account-secret-key"
Where account-secret-key is the secret identification key for your account. You can request a key from the support service.
- Let's get a hash expression of the generated line using Python code:
>>> string_to_sign = '6320.91:840:card_invoice_usd:1520:5b0efa8a-153b-4421-abac-2aba4d772a86account-secret-key' >>> import hashlib >>> sign = hashlib.sha256(string_to_sign.encode()).hexdigest() >>> print(sign) '77a6f7a30876d480d4e771d08cb83800dd5cb874664c77e515ffc052b20293c6'
Body
Currency of the shop balance from which the funds will be debited (in accordance with ISO 4217).
840, 978, 360 840
Payment direction for payout. Currency of receipt depends on the specified payment way.
There are two ways to get a list of all payment ways available to the shop:
- Execute the API request "Receiving payment methods for payouts" shop_output_config/shop.
- Request a register from the support service.
150^[A-Za-z_,\[\]]+$"card_payway_usd"
Indicates the amount type, possible values:
ps_amount – the exact amount indicated in the amount will be sent to a beneficiary card or wallet. Credit currency will correspond to the currency of the payway,
shop_amount – the exact amount indicated in the amount will be written off from the shop balance, beneficiary will receive this amount minus transaction fees. Debit currency will correspond to the currency of the shop_currency.
ps_amount, shop_amount "ps_amount"
Detailed account information. If additional parameters were transferred in the shop_output_config/shop response in the account_info_config field, they must be transferred in the account_details field.
Response
OK
- Successful response
- Error response
If this value is greater than 0, then the request ended with an error. Description of error codes
0