Ниже представлено описание того как работает API, с помощью которого вы сможете сделать интеграцию с вашим проектом.
Все запросы выполняются по HTTPS к вашему экземпляру Payshark, например https://payshark.eu. Обмен данными ведётся в формате JSON.
Каждый запрос должен содержать обязательные заголовки:
Дополнительно можно указать заголовок X-Max-Wait-Ms, задающий максимальное время ожидания ответа в миллисекундах (минимум 1000 мс). При превышении тайм-аута сервер вернёт ответ 504 с сообщением «Не удалось обработать запрос вовремя. Повторите попытку позже.»
{
"message": "Подходящие платежные реквизиты не найдены.",
"success": false
}
{
"success": true,
"data": [ //тело ответа
//...
]
}
{
"message": "Общее описание ошибки",
"errors": {
"название параметра": [
"Описание ошибки поля"
],
//...
}
}
{
"success": false,
"message": "Описание ошибки"
}
{
"message": "Internal Server Error"
}
/api/currenciesОтвет сервера
{
"success": true,
"data": [
{
"currency": "rub",
"precision": 2,
"symbol": "₽",
"name": "Российский рубль"
},
{
"currency": "kzt",
"precision": 2,
"symbol": "₸",
"name": "Казахстанский тенге"
},
{
"currency": "byn",
"precision": 2,
"symbol": "Br",
"name": "Белорусский рубль"
},
...
]
}
/api/payment-gatewaysОтвет сервера
{
"success": true,
"data": [
{
"name": "Сбербанк",
"code": "sberbank",
"schema": "100000000111",
"sub_methods": null,
"currency": "rub",
"min_limit": "1000",
"max_limit": "500000",
"reservation_time": 10,
"detail_types": ["card", "account_number", "phone"],
"order_service_commission_rate": 10,
"payout_service_commission_rate": 1,
"buy_price_markup_rate": 7,
"sell_price_markup_rate": 3,
"base_conversion_price": "76.57",
"conversion_price": "81.93"
},
{
"name": "Альфа-Банк",
"code": "alfabank",
"schema": "100000000008",
"sub_methods": null,
"currency": "rub",
"min_limit": "1000",
"max_limit": "500000",
"reservation_time": 20,
"detail_types": ["phone", "card"],
"order_service_commission_rate": 10,
"payout_service_commission_rate": 1.5,
"buy_price_markup_rate": 7,
"sell_price_markup_rate": 2.5,
"base_conversion_price": "76.57",
"conversion_price": "81.93"
},
{
"name": "Райффайзенбанк",
"code": "raiffeisenbank",
"schema": "100000000007",
"sub_methods": null,
"currency": "rub",
"min_limit": "1000",
"max_limit": "100000",
"reservation_time": 20,
"detail_types": ["card", "phone"],
"order_service_commission_rate": 10,
"payout_service_commission_rate": 1.5,
"buy_price_markup_rate": 7,
"sell_price_markup_rate": 2.5,
"base_conversion_price": "76.57",
"conversion_price": "81.93"
}
]
}
/api/merchant/orderПример запроса
curl -X POST 'https://payshark.eu/api/merchant/order' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'merchant_id=MERCHANT_UUID' \
-d 'external_id=123' \
-d 'amount=1000' \
-d 'payment_gateway=sberbank' \
-d 'payment_detail_type=card' \
-d 'white_triangle=true' \***
-d 'client_id=abc-123'***
Заголовки
{
"success": false,
"message": "Не удалось обработать запрос вовремя. Повторите попытку позже."
}
Параметры запроса
mobile_commerce — реквизиты мобильной коммерции с номером телефона.iban — реквизиты IBAN, состоящие из латинских букв и цифр (15–34 символа).true, реквизиты будут выданы из списка включенных для БТ.true, сумма сделки должна соответствовать лимиту "Минимального чека"; если false или параметр не передан, система выдаст реквизиты без учета этой функции.Ответ сервера
{
"success": true,
"data": {
"order_id": "4b3a163b...", // uuid сделки внутри системы.
"external_id": "...",
"merchant_id": "...",
"amount": "1000",
"currency": "rub",
"status": "pending", // статус сделки. success, fail, pending.
"sub_status": "pending", //accepted, successfully_paid, successfully_paid_by_resolved_dispute, waiting_details_to_be_selected, waiting_for_payment, waiting_for_dispute_to_be_resolved, canceled_by_dispute, expired, cancelled
"callback_url": null,
"success_url": null,
"fail_url": null,
"payment_gateway": "sberbank", // код платежного метода
"payment_gateway_schema": "100000000111", // nspk code
"payment_gateway_name": "Сбербанк", // название платежного метода
"finished_at": null, // время закрытия сделки
"expires_at": 1731375451, // время когда сделка будет автоматически закрыта.
"created_at": 1731375391, // время создания сделки.
"payment_link": "https://payshark.eu/payment/4b3a163b..." // ссылка на оплату.
}
}
/api/merchant/order/{order_id}/api/merchant/order/{merchant_id}/{external_id}Пример запроса
curl -X GET 'https://payshark.eu/api/merchant/order/{order_id}' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
individual_qr/api/merchant/order/individual-qr/payment-pageПример запроса
curl -X POST 'https://payshark.eu/api/merchant/order/individual-qr/payment-page' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'merchant_id=MERCHANT_UUID' \
-d 'payment_gateway=sberbank_rub' \
-d 'callback_url=https://merchant.example/callback' \
-d 'success_url=https://merchant.example/success' \
-d 'fail_url=https://merchant.example/fail' \
-d 'payment_gateway=уточните у поддержки' \
-d 'currency=rub'
Параметры запроса
Ответ сервера
{
"success": true,
"data": {
"payment_page_url": "https://payshark.eu/payment/individual-qr/6f6c8d8e-...",
"expires_in": 1800
}
}
Пояснения к ответу
/api/merchant/order/{order_id}/processing-receiptpending.processing_receipt_uploaded возвращается только в ответе на этот запрос.Параметры запроса
jpg, jpeg, png, pdf. Максимальный размер исходного файла — 5 МБ.Пример запроса
curl -X POST 'https://payshark.eu/api/merchant/order/{order_id}/processing-receipt' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'processing_receipt=BASE64_DATA'
Ответ сервера
{
"success": true,
"data": {
"order_id": "4b3a163b...",
"external_id": "...",
"merchant_id": "...",
"amount": "1000",
"currency": "rub",
"status": "pending",
"sub_status": "pending",
"callback_url": null,
"success_url": null,
"fail_url": null,
"client_id": null,
"payment_gateway": "sberbank",
"payment_gateway_schema": "100000000111",
"payment_gateway_name": "Сбербанк",
"payment_detail": null,
"processing_receipt_uploaded": true,
"finished_at": null,
"expires_at": 1731375451,
"created_at": 1731375391,
"payment_link": "https://payshark.eu/payment/4b3a163b..."
}
}
/api/merchant/rate/{merchant_id}Параметры запроса
rub)Ответ сервера
{
"success": true,
"data": {
"rate": "110.07"
}
}
/api/merchant/free-limitsОтвет сервера
{
"success": true,
"data": {
"limits": [
{
"code": "rub",
"name": "Российский рубль",
"symbol": "₽",
"total_free_limit": "1000.00"
}
],
"min_amount_stats": {
"rub": {
"no_limit": {
"title": "Не указан",
"count": 47,
"free_limit": "18390157.00",
"potential_limit": "18390157.00"
},
"1k": {
"title": "От 1,000",
"count": 5,
"free_limit": "450000.00",
"potential_limit": "450000.00"
}
}
}
}
}
/api/merchant/payout-free-limitsОтвет сервера
{
"success": true,
"data": {
"limits": [
{
"code": "rub",
"name": "Российский рубль",
"symbol": "₽",
"total_free_limit": "101 436.00",
"max_trader_limit_left": "67 624.00",
"total_potential_limit": "103 812.00"
}
]
}
}
/api/h2h/orderПример запроса
curl -X POST 'https://payshark.eu/api/h2h/order' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'merchant_id=MERCHANT_UUID' \
-d 'external_id=123' \
-d 'amount=1000' \
-d 'payment_gateway=sberbank' \
-d 'payment_detail_type=card' \
-d 'white_triangle=true' \***
-d 'client_id=abc-123'***
Заголовки
{
"success": false,
"message": "Не удалось обработать запрос вовремя. Повторите попытку позже."
}
Описание параметров запроса
true, реквизиты будут выданы из списка включенных для БТ.true, сумма сделки должна соответствовать лимиту "Минимального чека"; если false или параметр не передан, система выдаст реквизиты без учета этой функции.Ответ сервера
{
"data": {
"amount": "1519",
"method": null,
"profit": "19.52",
"status": "pending",
"currency": "rub",
"merchant": {
"name": "tes",
"description": "tes"
},
"order_id": "b9ec0ab7-9cc4-4bd7-903c-e6224fe451c5",
"created_at": 1764864315,
"expires_at": 1764864915,
"sub_status": "waiting_for_payment",
"base_amount": "1519",
"external_id": "39655218111122222222234567890",
"finished_at": null,
"merchant_id": "73d848b7-e217-4a59-a659-faa5bc1c9c9e",
"method_name": null,
"callback_url": "https://tes/tessite",
"method_schema": null,
"payment_detail": {
"detail": "79800000334",
"qr_link": null,
"initials": "23543254",
"bt_enabled": false,
"detail_type": "phone",
"min_check_enabled": false
},
"service_profit": "0",
"merchant_profit": "17.57",
"payment_gateway": "sberbank",
"profit_currency": "usdt",
"conversion_price": "77.83",
"is_min_check_deal": false,
"current_server_time": 1764864315,
"payment_gateway_name": "Сбербанк",
"base_conversion_price": "0",
"payment_gateway_schema": "100000000111",
"trader_commission_rate": "0",
"conversion_price_currency": "rub",
"service_commission_rate_total": "0",
"service_commission_rate_client": "0",
"service_commission_rate_merchant": "0"
},
"success": true
}
}
/api/h2h/order/{order_id}/api/h2h/order/{merchant_id}/{external_id}Пример запроса
curl -X GET 'https://payshark.eu/api/h2h/order/{order_id}' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
/api/h2h/order/{order_id}/processing-receiptpending.processing_receipt_uploaded возвращается только в ответе на этот запрос.Параметры запроса
jpg, jpeg, png, pdf. Максимальный размер исходного файла — 5 МБ.Пример запроса
curl -X POST 'https://payshark.eu/api/h2h/order/{order_id}/processing-receipt' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'processing_receipt=BASE64_DATA'
Ответ сервера
{
"success": true,
"data": {
"order_id": "3db07a16...",
"external_id": "...",
"merchant_id": "3db07a16...",
"base_amount": "1000",
"amount": "1040",
"currency": "rub",
"status": "pending",
"sub_status": "pending",
"payment_gateway": "sberbank",
"payment_gateway_schema": "100000000111",
"payment_gateway_name": "Сбербанк",
"processing_receipt_uploaded": true,
"payment_detail": {
"detail": "1000200030004000",
"qr_link": "https://...",
"detail_type": "card",
"initials": "Пол Атрейдес"
},
"merchant": {
"name": "...",
"description": "..."
},
"finished_at": null,
"expires_at": 1731375451,
"created_at": 1731375391,
"current_server_time": 1731655862
}
}
/api/h2h/order/{order_id}/cancelПример запроса
curl -X PATCH 'https://payshark.eu/api/h2h/order/{order_id}/cancel' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
/api/h2h/order/{order_id}/disputeПример запроса
curl -X POST 'https://payshark.eu/api/h2h/order/{order_id}/dispute' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'receipt=BASE64_DATA'
Описание параметров запроса
Ответ сервера
{
"success": true,
"data": {
"order_id": "3db07a16...",
"status": "pending",
"cancel_reason": null // причина отказа
}
}
/api/h2h/order/{order_id}/disputeПример запроса
curl -X GET 'https://payshark.eu/api/h2h/order/{order_id}/dispute' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
/api/wallet/balanceОтвет сервера
{
"success": true,
"data": {
"balance": "10000.00"
}
}
/api/wallet/withdrawМерчант отправляет заявку на вывод, после чего она попадает в админку на ручную обработку (Admin Pro / Super Admin).
Описание параметров запроса
Адрес вывода обязательно должен быть добавлен в белый список адресов мерчанта, иначе API вернет ошибку.
Пример запроса
curl -X POST 'https://payshark.eu/api/wallet/withdraw' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-H 'Content-Type: application/json' \
-d '{
"merchant_id": "{merchant_uuid}",
"amount": 1000,
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"network": "trx"
}'
Ответ сервера
{
"success": true,
"data": {
"invoice_id": 123,
"status": "pending"
}
}
Пример ошибки (адрес не в белом списке)
{
"success": false,
"message": "Адрес не находится в белом списке. Обратитесь к администратору для добавления вашего адреса в белый список."
}
| Значение | Описание |
|---|---|
success |
Операция успешно завершена. |
pending |
Операция находится в ожидании обработки. |
fail |
Операция завершилась неудачно. |
| Значение | Описание |
|---|---|
accepted |
Закрыт вручную. |
successfully_paid |
Закрыт автоматически. |
successfully_paid_by_resolved_dispute |
Закрыт в результате принятого спора. |
waiting_details_to_be_selected |
Ждет выбора реквизитов. |
waiting_for_payment |
Ждет платежа. |
waiting_for_dispute_to_be_resolved |
Ждет решения спора. |
canceled_by_dispute |
Отменен в результате спора. |
expired |
Отменен по истечению времени. |
cancelled |
Отменен вручную. |
payment_detail_type=mobile_commerce. При его отсутствии мобильная коммерция будет пропущена, но другие подходящие реквизиты продолжат выдаваться./api/payout/offersПример запроса
curl -X GET 'https://payshark.eu/api/payout/offers' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
Ответ сервера
{
"success": true,
"data": {
"rub": {
"sberbank_rub": {
"max_amount": 100000,
"min_amount": 1000,
"currency": "rub",
"detail_type": "card",
"payment_gateway": {
"name": "Сбербанк",
"name_with_currency": "Сбербанк rub",
"code": "sberbank_rub",
},
"offers_count": 1,
"recommended_max_amount": 100000,
"recommended_min_amount": 1000
},
//...
},
//...
}
}
/api/payoutПример запроса
curl -X POST 'https://payshark.eu/api/payout' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}' \
-d 'merchant_id=MERCHANT_UUID' \
-d 'external_id=123' \
-d 'detail=2200200020002000' \
-d 'detail_type=card' \
-d 'detail_initials=Иван Иванов' \
-d 'amount=1000' \
-d 'currency=rub'
Описание параметров запроса
detail_type=phone.Ответ сервера
{
"success": true,
"data": {
"uuid": "...",
"external_id": "...",
"detail": "1000200030004000",
"detail_type": "card",
"detail_initials": "Петр К.",
"payout_amount": "1000",
"currency": "rub",
"base_liquidity_amount": "9.31",
"liquidity_amount": "10.14",
"liquidity_amount_in_payout_currency": "1090.14",
"liquidity_currency": "usdt",
"service_commission_rate": 9,
"service_commission_amount": "0.83",
"base_exchange_price": "110.07",
"exchange_price": "107.32",
"receipt_url": null,
"image_receipt_url": null,
"status": "pending",
"sub_status": "processing_by_trader",
"callback_url": "https://payshark.eu/callback",
"bank": null,
"merchant": {
"name": "мерчант 1"
},
"finished_at": null,
"expires_at": 1736145380,
"created_at": 1736144380
}
}
/api/payout/poolЭндпоинт создаёт выплату без привязки к конкретному предложению трейдера. Заявка размещается в пуле и доступна всем трейдерам.
Дополнительный параметр запроса
Помимо стандартных полей, ответ содержит:
{
"success": true,
"data": {
"is_pool": true,
"pool_waiting_minutes": 30,
"pool_waiting_until": 1736145380,
"pool_taken_at": null,
"sub_status": "waiting_for_trader"
}
}
Поле pool_waiting_until возвращается в формате unix timestamp и показывает, до какого момента заявка будет доступна в пуле.
При изменении статуса выплаты система отправляет уведомления на указанный callback_url. Ниже перечислены возможные
последовательные значения полей status и sub_status в рамках жизненного цикла одной выплаты:
{
"status": "pending",
"sub_status": "waiting_for_trader"
}
{
"status": "pending",
"sub_status": "processing_by_trader"
}
{
"status": "pending",
"sub_status": "processing_by_administrator"
}
{
"status": "success",
"sub_status": "fully_completed"
}
"Важно" Повторное уведомление со статусом processing_by_administrator — выплата была передана другому трейдеру и вновь
находится на проверке администратора.
{
"status": "pending",
"sub_status": "processing_by_administrator"
}
Получение повторного уведомления с processing_by_administrator означает, что выплата была передана другому трейдеру и в
настоящее время ожидает подтверждения администратора.
/api/payout/{uuid}Пример запроса
curl -X GET 'https://payshark.eu/api/payout/{uuid}' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
/api/payout/{merchant_id}/{external_id}Если указан неверный uuid, вернётся ошибка:
{
"success": false,
"message": "Указан неверный uuid"
}
/api/payout/{uuid}/dispute/api/payout/{merchant_id}/{external_id}/disputesuccess, вернётся ошибка.Пример запроса
curl -X POST 'https://payshark.eu/api/payout/{uuid}/dispute' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
Ответ сервера
{
"success": true,
"data": {
"payout_id": "3db07a16...",
"status": "pending",
"reason": null,
"sub_status": "dispute"
}
}
/api/payout/{uuid}/dispute/api/payout/{merchant_id}/{external_id}/disputeПример запроса
curl -X GET 'https://payshark.eu/api/payout/{uuid}/dispute' \
-H 'Accept: application/json' \
-H 'Access-Token: {token}'
| Значение | Описание |
|---|---|
success |
Выплата успешно завершена. |
pending |
Выплата находится в ожидании обработки. |
fail |
Выплата отменена. |
| Значение | Описание |
|---|---|
processing_by_trader |
Обрабатывается трейдером. |
processing_by_administrator |
На проверке администратора. |
dispute |
Спор. |
dispute_closed |
Спор закрыт. |
fully_completed |
Завершена. |
canceled_by_timeout |
Отменена по времени. |
waiting_for_trader |
Заявка ожидает, когда трейдер возьмёт её из пула. |
expired |
Просрочена. |
Demo-страница: https://payshark.eu/widgets/demo.html (Только для ознакомления).
JS-виджет для запуска оплаты на стороне мерчанта.
<script src="https://payshark.eu/widgets/payshark-widget.js"></script>
<script>
const widget = window.PaysharkWidget.init({
apiBaseUrl: 'https://payshark.eu',
merchantId: 'MERCHANT_UUID',
accessToken: 'ACCESS_TOKEN',
// modal | embed | redirect
mode: 'modal',
// required for embed mode
container: '#payment-widget',
pollIntervalMs: 3000,
enableGatewayPicker: true,
onOrderCreated: (order) => console.log('order-created', order),
onStatus: (order) => console.log('status', order.status),
onSuccess: (order) => console.log('success', order),
onFail: (order) => console.log('fail', order),
onError: (error) => console.error('widget-error', error),
});
async function pay() {
await widget.open({
external_id: 'ORDER-100500',
amount: 1000,
payment_gateway: 'sberbank',
payment_detail_type: 'card',
callback_url: 'https://merchant.site/api/payment/callback',
success_url: 'https://merchant.site/payment/success',
fail_url: 'https://merchant.site/payment/fail'
});
}
</script>
modal — откроет ссылку оплаты во всплывающем окне.embed — встроит оплату в контейнер (container).redirect — сразу отправит пользователя на payment_link.onOrderCreated(order) — сделка создана.onOpened(payload) — виджет открыт.onClosed(payload) — виджет закрыт.onStatus(order) — обновление статуса сделки.onSuccess(order) — статус success.onFail(order) — статус fail.onStatusTimeout(payload) — вышло время ожидания статуса.onError(error) — ошибка виджета.onEvent(name, payload) — универсальный обработчик./api/merchant/order) и требует Access-Token.payment_link в ответе на создание сделки.external_id для каждой попытки создания сделки.GET /api/merchant/widget/options?merchant_id=MERCHANT_UUID
Возвращает список доступных банков/шлюзов (с учетом настроек мерчанта), лимиты и доступные способы оплаты.