Перейти к содержимому

Выплаты игрокам

Выплата переводит деньги с баланса вашего проекта на банковский счёт игрока — это вывод средств в iGaming.

examples/curl/payouts/create.sh
#!/usr/bin/env bash
# Pay a player's withdrawal out of the project's balance.
set -euo pipefail
. "$(dirname "$0")/../signed-request.sh"
body=$(cat <<JSON
{
"merchant_payout_id": "${PAYOUT_REF:-withdrawal-$(mka_new_key)}",
"amount": "${AMOUNT:-5000.00}",
"currency": "LKR",
"recipient": {
"bank_name": "Commercial Bank of Ceylon",
"account_holder": "S. Jayasuriya",
"account_number": "8001234567"
}
}
JSON
)
mka_request POST "/v1/payouts" "$body" "$(mka_new_key)"
  • merchant_payout_id — id вашего вывода, 1–128 символов, уникальный в проекте. Это второй ключ идемпотентности: тот же id с тем же телом возвращает выплату, созданную первой.
  • amount — ровно столько, сколько получит игрок.
  • recipient — bank_name, account_holder, account_number (от 6 до 20 цифр). Хранится в зашифрованном виде, при чтении маскируется и никогда не попадает в вебхук.

Комиссия — сверху. Действует ставка вашего проекта для выплат на счёт: баланс сразу удерживает amount + fee, а комиссия списывается, только если выплата прошла. Сумма больше доступного баланса — это 422 insufficient_available_balance; нет опубликованной ставки — 422 payout_method_unavailable. В этих случаях ничего не удерживается.

На новую выплату ответ — 201. Повтор — тот же ключ или тот же merchant_payout_id под новым ключом, с тем же телом — даёт 200 с Idempotent-Replayed: true. Другое тело — 409 idempotency_conflict.

Статус Значение
pending Удержана с баланса; ждёт агента. Ещё можно отменить.
processing Агент взял выплату и отправляет её.
succeeded Отправлена и подтверждена. Комиссия списана. Финальный.
failed Никто не взял её за 24 часа (not_taken) или платформа отказала (refused). Сумма и комиссия возвращаются. Финальный.
cancelled Вы отозвали её в статусе pending. Сумма и комиссия возвращаются. Финальный.

Каждая версия, включая создание, — это вебхук payout.status_changed; они доставляются по порядку. Быстро отправленная выплата может перейти из pending сразу в succeeded.

examples/curl/payouts/get.sh
#!/usr/bin/env bash
# Read one payout.
set -euo pipefail
. "$(dirname "$0")/../signed-request.sh"
payout_id=$(mka_required PAYOUT_ID)
mka_request GET "/v1/payouts/$payout_id"

Отменить можно только выплату в статусе pending; если агент её уже взял, ответ — 409 payout_not_cancellable.

examples/curl/payouts/cancel.sh
#!/usr/bin/env bash
# Cancel a payout no Agent took yet; the amount and fee come back.
set -euo pipefail
. "$(dirname "$0")/../signed-request.sh"
payout_id=$(mka_required PAYOUT_ID)
mka_request POST "/v1/payouts/$payout_id/cancel" "" "$(mka_new_key)"

После таймаута или 503 payout_unavailable повторите запрос с тем же Idempotency-Key или найдите выплату по своему id:

GET /v1/payouts?merchant_payout_id=withdrawal-5001
examples/curl/payouts/list.sh
#!/usr/bin/env bash
# The project's payouts, newest first.
set -euo pipefail
. "$(dirname "$0")/../signed-request.sh"
mka_request GET "/v1/payouts?limit=10"

Список идёт от новых к старым: limit 1–100 (по умолчанию 50), starting_after с последним id предыдущей страницы, status для фильтра и has_more.