Документация API GetPay
Руководство по интеграции приёма платежей и выплат через REST API платёжного сервиса GetPay
Что такое GETPAY
GETPAY — платёжный сервис для бизнеса, который позволяет принимать оплату от клиентов и автоматически переводить деньги получателям. Интеграция выполняется один раз через REST API и не требует специальных знаний в области финансов.
Создайте счёт, перенаправьте клиента на страницу оплаты — остальное сделает GETPAY. Поддерживаются карты, СБП, ЮMoney, Qiwi, мобильные операторы и криптовалюта.
Отправляйте деньги получателям по API — на карты, по СБП, на ЮMoney или в криптовалюте. Одиночные переводы и массовые выплаты.
Как только клиент оплатит — ваш сервер получит POST-запрос на Result URL с данными транзакции. Никакого поллинга, мгновенная реакция.
Все запросы авторизуются по API-ключу, уведомления подписываются HMAC-SHA256. Данные передаются только по HTTPS.
Как это работает
Типичный сценарий приёма платежа от клиента:
На вашем сайте или в приложении клиент выбирает товар и переходит к оплате.
POST-запрос к /api/v1/payment/create с суммой и номером заказа. В ответ — ссылка redirectUrl на страницу оплаты GETPAY.
Вы перенаправляете клиента на redirectUrl. Там он выбирает удобный метод и проводит оплату.
После успешной оплаты на ваш Result URL приходит POST с данными транзакции и подписью. Проверьте подпись и выдайте клиенту товар.
После оплаты клиент автоматически перенаправляется на ваш Back URL — страницу «спасибо за покупку» или в личный кабинет.
Методы оплаты
GETPAY поддерживает широкий набор способов оплаты. Доступные методы зависят от типа вашего проекта.
| Группа | Методы | Комиссия |
|---|---|---|
| Банковские карты | Visa, MasterCard, МИР (card), СБП (sbp) | от 10% |
| Электронные кошельки | ЮMoney (ym), Qiwi / Qplus (qiwi, qplus), WebMoney (wm) | от 10% |
| SberPay | sber — оплата через приложение СберБанк | от 10% |
| Мобильные операторы (RU) | МТС (mts), Beeline (beeline), Tele2 (tele2), Megafon (megafon), Yota (yota) | от 20% |
| Мобильные операторы (BY) | MTS BY (mtsby), Life BY (lifeby) | от 20% |
| Криптовалюта | USDT TRC20 (usdt), TRX (trx), TON (ton), NOT, DOGS, HMSTR | от 0% |
| GETPAY кошелёк | wallet — оплата с баланса GETPAY (по умолчанию) | от 0% |
Начало работы
Первые шаги
- Войдите в личный кабинет и создайте проект.
- Дождитесь активации проекта (модерация) — статус сменится на
active. - В настройках профиля скопируйте API-ключ.
- Укажите Result URL в настройках проекта — туда будут приходить уведомления об оплате.
- Выполните тестовый запрос и убедитесь, что ответ содержит
"status": "success".
https://getpay.io/api/v1/{method}Все запросы — только по HTTPS. Тело запроса — JSON.
Авторизация
Каждый запрос должен содержать заголовок X-Api-Key. Секретный ключ доступен в настройках личного кабинета.
X-Api-Key: 12-a4f8c2d1e9b3... Content-Type: application/json
Формат ответов
Все ответы — JSON. Поле status всегда присутствует и принимает значения:
success— запрос выполнен успешноerror— ошибка, см. полеerrorwait/process— операция в обработке (для повторных запросов)
Успешный ответ:
{
"status": "success",
"paymentId": 9182736,
"paymentKey": "a1b2c3d4",
"redirectUrl": "https://pay.getpay.io/redirect/pay/a1b2c3d4",
"sum_pay": 500,
"orderId": "ORDER-001"
} Ответ с ошибкой:
{
"status": "error",
"error": "The wallet is not active!"
} | Поле | Тип | Описание |
|---|---|---|
| status | string | success, error, wait, process |
| error | string | Текст ошибки — присутствует только при status: error |
| repeat_payment | int | 1 если платёж с таким order_id уже существовал — возвращаются его данные |
Проекты
Без дополнительных параметров — возвращает все активные проекты. Если указан {project_id} — возвращает один проект.
Ответ (список):
{
"status": "success",
"projects": [
{
"project_id": 1042,
"domain": "example.com",
"balance": 12500.00,
"status": "active", // active | pending
"result_url": "https://example.com/result",
"back_url": "https://example.com/back",
"created_at": "2025-01-15 10:00:00"
}
]
} | Поле | Описание |
|---|---|
| project_id | Числовой ID проекта — используется во всех запросах |
| domain | Домен или название проекта |
| balance | Доступный баланс в рублях |
| status | active — готов к работе; pending — на модерации |
| result_url | URL для получения уведомлений о платежах |
| back_url | URL возврата плательщика после оплаты |
Платежи
Создание платежа.
| Параметр | Тип | Описание |
|---|---|---|
| project_idrequired | int | ID проекта |
| order_idrequired | string | Уникальный номер заказа в вашей системе (до 128 символов) |
| amountrequired | float | Сумма в рублях. Допустимый диапазон: 50–100 000 |
| methodoptional | string | Метод оплаты (см. таблицу ниже). По умолчанию — wallet |
| commentoptional | string | Комментарий к платежу (до 128 символов) |
| client_idoptional | string | Идентификатор плательщика внутри вашей системы |
| user_ipoptional | string | IP-адрес плательщика |
| otheroptional | string | Дополнительные произвольные данные |
order_id уже существует — новый не создаётся. Возвращаются данные существующего платежа с флагом "repeat_payment": 1.
Доступные методы оплаты
| method | Описание | Мин. | Макс. |
|---|---|---|---|
| wallet | Getpay кошелёк (по умолчанию) | 10 ₽ | 100 000 ₽ |
| card | Карта РФ (VISA / MasterCard / МИР) | 100 ₽ | 3 000 ₽ |
| sbp | СБП | 100 ₽ | 3 000 ₽ |
| sber | SberPay | 100 ₽ | 3 000 ₽ |
| ym | ЮMoney | 100 ₽ | 3 000 ₽ |
| qiwi / qplus | Qplus (Qiwi) | 100 ₽ | 3 000 ₽ |
| wm | WebMoney | 100 ₽ | 3 000 ₽ |
| mts | МТС RU | 100 ₽ | 3 000 ₽ |
| beeline | Beeline RU | 100 ₽ | 3 000 ₽ |
| tele2 | Tele2 RU | 100 ₽ | 3 000 ₽ |
| megafon | Megafon RU | 100 ₽ | 3 000 ₽ |
| yota | Yota RU | 100 ₽ | 3 000 ₽ |
| lifeby | Life BY | 150 ₽ | 3 000 ₽ |
| mtsby | MTS BY | 150 ₽ | 3 000 ₽ |
| trx | Crypto TRX | 100 ₽ | 100 000 ₽ |
| usdt_trc20 | USDT TRC20 | 100 ₽ | 100 000 ₽ |
| ton | TON | 100 ₽ | 100 000 ₽ |
| not / dogs / hmstr | TON-токены | 100 ₽ | 100 000 ₽ |
method при создании платежа, если хотите дать клиенту выбор — на странице оплаты будут показаны все доступные методы проекта.
Пример запроса:
$data = [ 'project_id' => 1042, 'order_id' => 'ORDER-8841', 'amount' => 500, 'description' => 'Оплата заказа #8841', ]; $ch = curl_init('https://getpay.io/api/v1/payment/create'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Api-Key: ' . $apiKey, ], ]); $result = json_decode(curl_exec($ch), true); // Перенаправляем плательщика header('Location: ' . $result['redirectUrl']);
Успешный ответ:
{
"status": "success",
"paymentId": 9182736, // числовой ID в системе
"paymentKey": "a1b2c3d4", // 8-символьный hex-ключ
"redirectUrl": "https://pay.getpay.io/redirect/pay/a1b2c3d4",
"sum_pay": 500, // сумма к оплате (может отличаться для уникализации)
"type": "redirect",
"orderId": "ORDER-8841",
"clientId": "",
"repeat_payment": 0
} История платежей
Если {id} указан — ищет по paymentKey (hex) или по order_id (по всем проектам). Без {id} — возвращает список с фильтрами.
Параметры списка
| Параметр | Тип | Описание |
|---|---|---|
| project_idoptional | int | Фильтр по проекту |
| statusoptional | int | Фильтр по статусу: 0 ожидает, 1 оплачен, 2 отменён |
| date_startoptional | string | Начало диапазона, формат YYYY-MM-DD |
| date_endoptional | string | Конец диапазона, формат YYYY-MM-DD |
| start_recordoptional | int | Номер первой записи для пагинации (по умолчанию 0) |
| recordsoptional | int | Количество записей на страницу (по умолчанию 30, максимум 100) |
- Заданы оба — отбор за интервал
date_start ≤ дата ≤ date_end. - Только
date_start— все записи начиная с этой даты. - Только
date_end— все записи до этой даты включительно. - Не заданы — без ограничения по времени.
records, в ответе появляется поле next_record — порядковый номер первой записи следующей страницы. Для получения следующей страницы повторите запрос с теми же параметрами, добавив start_record = next_record.
Ответ:
{
"status": "success",
"total": 142,
"next_record": 30, // присутствует только если есть следующая страница
"payments": [
{
"payment_id": "a1b2c3d4", // paymentKey для поиска через /list/{id}
"order_id": "ORDER-8841",
"project_id": 1042,
"amount": 500.00, // запрошенная сумма
"amount_out": 510.00, // итоговая сумма к оплате
"accrued": 485.00, // зачислено после комиссии
"method": "card",
"status": "paid", // pending | paid | cancelled
"created_at": "2025-11-24 12:00:00"
}
]
} Обработчик платежа (Result URL)
После успешной оплаты GETPAY отправит POST-запрос на ваш Result URL. Ваш сервер должен ответить текстом OK.
sign перед обработкой уведомления. Без проверки злоумышленник может отправить поддельный запрос на ваш URL.
GET /api/v1/payment/getips — возвращает массив IP без дополнительных параметров (требует авторизации).
Поля уведомления
| Поле | Тип | Описание |
|---|---|---|
| WALLET_ID | int | ID проекта, на который пришёл платёж |
| WALLET_TYPE | string | Тип проекта getpay |
| SUM | float | Запрошенная сумма платежа в рублях |
| OUTSUM | float | Фактическая сумма к оплате (может отличаться от SUM для уникализации) |
| ACCRUED | float | Сумма, зачисленная на баланс проекта (после вычета комиссии) |
| ORDER_ID | string | Номер заказа, переданный при создании платежа |
| P_TYPE | string | Метод оплаты, которым воспользовался плательщик |
| P_WALLET | string|null | Номер карты / телефона / кошелька плательщика (если доступен) |
| P_OPERATION | string|null | ID операции на стороне платёжного провайдера |
| PAYMENT_ID | int | Внутренний ID платежа в системе GETPAY |
| OTHER | mixed|null | Произвольные данные, переданные при создании платежа в поле other |
| sign | string | HMAC-SHA256 подпись по всему телу уведомления (без самого поля sign). Рекомендуется для проверки. |
| SIGN | string | deprecated MD5-подпись — оставлена для совместимости со старыми интеграциями. Используйте sign. |
Проверка подписи (рекомендуется):
$body = file_get_contents('php://input'); $data = json_decode($body, true); // Извлекаем и удаляем подпись из данных $received = $data['sign'] ?? ''; unset($data['sign']); // sign = HMAC-SHA256(json_encode(все поля без sign), apiKey) $expected = hash_hmac('sha256', json_encode($data, JSON_UNESCAPED_UNICODE), $apiKey); if (!hash_equals($expected, $received)) { http_response_code(400); exit('Bad sign'); } // Зачисляем оплату по ORDER_ID echo 'OK';
Проверка подписи (устаревший способ, для совместимости):
// SIGN = md5(WALLET_ID . ':' . SUM . ':' . ORDER_ID . ':' . apiKey) $expected = md5( $data['WALLET_ID'] . ':' . $data['SUM'] . ':' . $data['ORDER_ID'] . ':' . $apiKey ); if ($expected !== $data['SIGN']) { http_response_code(400); exit('Bad sign'); }
Проверка IP-адреса отправителя:
// Один раз при старте приложения — кэшируйте список в Redis/APCu $ch = curl_init('https://getpay.io/api/v1/payment/getips'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-Api-Key: ' . $apiKey], ]); $allowedIps = json_decode(curl_exec($ch), true) ?? []; curl_close($ch); // В обработчике Result URL $senderIp = $_SERVER['REMOTE_ADDR']; if (!in_array($senderIp, $allowedIps, true)) { http_response_code(403); exit('Forbidden'); }
Выплаты
Создание выплаты.
| Параметр | Тип | Описание |
|---|---|---|
| project_idrequired | int | ID проекта — баланс списывается с него |
| order_idrequired | string | Уникальный номер выплаты в вашей системе (до 128 символов) |
| amountrequired | float | Сумма в рублях (лимиты зависят от метода) |
| methodrequired | string | card / sbp / mobile / usdt |
| walletrequired | string | Номер карты / телефона / кошелька ЮMoney / TRC20-адрес |
| bankoptional | string | Банк-получатель — обязателен при method=sbp |
| commentoptional | string | Назначение выплаты (до 128 символов) |
| result_urloptional | string | URL для уведомления о статусе выплаты |
| comm_payoptional | int | 1 — комиссия прибавляется поверх суммы; 0 (по умолчанию) — комиссия вычитается из суммы |
Лимиты по методам (для getpay-проектов)
| method | Минимум | Максимум | Лимит на карту/месяц |
|---|---|---|---|
| card | 5 000 ₽ | 50 000 ₽ | 150 000 ₽ |
| sbp | 5 000 ₽ | 50 000 ₽ | — |
| mobile | 100 ₽ | 3 000 ₽ | — |
| usdt | 10 000 ₽ | 10 000 000 ₽ | — |
order_id не создаёт новую выплату — возвращаются данные существующей с флагом "repeat": true.
Успешный ответ (getpay-проект, статус process):
{
"status": "process", // process — поставлена в очередь; success — исполнена;
"transferId": 4471,
"order_id": "PAYOUT-001",
"amount": 10000,
"amount_out": 9700, // к зачислению получателю (после комиссии)
"type": "card"
} История выплат
С {order_id} — возвращает одну выплату по вашему номеру. Без — список по всем проектам.
| Параметр (для списка) | Тип | Описание |
|---|---|---|
| project_idoptional | int | Фильтр по проекту |
| limitoptional | int | Количество записей (по умолчанию 100, максимум 100) |
| offsetoptional | int | Смещение для пагинации |
Ответ:
{
"status": "success",
"total": 18,
"payouts": [
{
"payout_id": 4471,
"order_id": "PAYOUT-001",
"project_id": 1042,
"amount": 10000,
"amount_out": 9700,
"method": "card",
"wallet": "4276...1234",
"status": "pending", // pending | completed | failed
"error": null, // текст ошибки, если status=failed
"created_at": "2025-11-24 14:30:00"
}
]
} | status | Описание |
|---|---|
| pending | Ожидает исполнения |
| completed | Успешно выплачено |
| failed | Ошибка — причина в поле error |
Курс обмена
Возвращает текущие курсы для криптовалют и других валют.
{
"status": "success",
"rate": {
"sell": { "usdt_trc20": 82.7 }, // курс вывода usdt/trc20
"buy": { // курс покупки (приема)
"tron": 8.20,
"usdt_trc20": 91.00,
"toncoin": 312.40,
"notcoin": 0.0041,
"dogscoin": 0.0012,
"hmstr": 0.0008
}
}
} Партнёрская программа
Получайте процент от оборота каждого привлечённого клиента — бессрочно и автоматически на баланс.
- Реферальная ссылка — в личном кабинете.
- Вознаграждение начисляется с каждой транзакции партнёра.
- Вывод — через раздел Выплаты любым удобным способом.
- Ставка согласовывается индивидуально — в личном кабинете.