UTOPAYd Docs api.utopay.app EN ← На сайт Войти
Документация · API v1

Принимайте оплату картой, получайте USDC — с регистрацией и без

Покупатель платит в своей валюте — картой, PayPal, Revolut, Apple Pay, банковским переводом. Платёжный провайдер конвертирует деньги в USDC в сети Polygon, и USDC делится ончейн: ваша доля — на ваш кошелёк (или на баланс UTOPAY), наша комиссия 4.5% — нам. Покупателя можно отправить на нашу страницу оплаты или сразу к конкретному способу оплаты.

Как проходит платёж

Поток одинаков во всех режимах. Отличаются только место назначения денег и инструменты вокруг.

СозданиеВы вызываете API или делитесь платёжной ссылкой. Мы отдаём checkout_url.
ОплатаПокупатель открывает ссылку: либо нашу страницу со всеми способами, либо — если вы указали provider — сразу выбранный вами способ.
КонвертацияПровайдер списывает с покупателя сумму в currency и отправляет USDC (Polygon) на одноразовый адрес.
РазделениеОдноразовый адрес пересылает USDC ончейн: ваша доля, наша комиссия, реферальные доли (если есть).
ПодтверждениеЗаказ получает статус paid. С аккаунтом приходят ещё вебхук и сообщение в Telegram.

Базовый URL для всех вызовов: https://api.utopay.app. Запросы и ответы — JSON (content-type: application/json). Суммы — числа в валюте заказа, время — Unix в миллисекундах.

Быстрый старт

Реальный платёж одним запросом — без регистрации. Покупатель сразу попадает в PayPal; если PayPal не может принять этот платёж, откроется наша страница с другими способами.

cURL
curl -X POST https://api.utopay.app/v1/pay \
  -H "content-type: application/json" \
  -d '{
    "amount": 100,
    "currency": "USD",
    "payout_wallet": "0xYourPolygonWalletAddress000000000000000000",
    "provider": "paypal",
    "success_url": "https://yoursite.com/thanks"
  }'
# → { "id": "ord_…", "checkout_url": "https://api.utopay.app/pay/ord_…/go?provider=paypal", … }

Перенаправьте покупателя на checkout_url. После оплаты на кошелёк придёт около 95.5 USDC. С аккаунтом вместо этого вызывается POST /v1/payments с API-ключом — те же поля, плюс история, вебхуки и баланс.

Сравнение режимов

Без аккаунта Аккаунт · Прямо Аккаунт · Хранение
ЭндпоинтPOST /v1/payPOST /v1/payments
Авторизацияне нужнаBearer utopay_sk_…
Вы получаетеUSDC (Polygon) на кошелёк из запросаUSDC (Polygon) на кошелёк проектаБаланс в валюте заказа
Сразу к способу оплаты (provider)✓✓✓
Все валюты✓✓✓
Кабинет и история—✓✓
Вебхуки / Telegram—✓✓
Платёжные ссылки из кабинета—✓✓
Тестовый режим—✓✓
Баланс, обмен, своп, вывод——✓
Партнёрская программа—✓✓
Комиссия4.5%4.5%

Без регистрации

POST /v1/pay

Заголовок Authorization не нужен. Деньги всегда уходят сразу на payout_wallet — EVM-адрес, способный принимать USDC в сети Polygon. Тело — как у POST /v1/payments, плюс:

ПолеТипОбяз.Описание
payout_walletstring✓0x + 40 hex-символов. Куда отправляется ваша доля.
  • Всегда direct: "settlement": "custody" вернёт 400 — без аккаунта некуда зачислять баланс.
  • Фиксированная комиссия 4.5%, без рефералки и вебхуков (callback_url сохраняется, но не вызывается), без тестового режима, стандартный дизайн чекаута.
  • Отслеживание: опрашивайте публичный GET /api/checkout/:id/status (без ключа) или смотрите на кошелёк.
Проверяйте кошелёк. Разделение происходит ончейн и необратимо. Опечатка или адрес не из Polygon — потерянные деньги.

Аккаунт и API-ключи

РегистрацияНа utopay.app/login: email, пароль (8+ символов, заглавные и строчные, цифра) и ваш Telegram @username.
Подтверждение в TelegramНажмите Start у нашего бота с того же Telegram-аккаунта. Заодно включатся уведомления о платежах и восстановление пароля.
Режим денегFunds & payouts: подключите USDC-кошелёк (прямо) или храните деньги у нас.
Создайте ключAPI keys: сначала тестовый, затем боевой.

В аккаунте до 20 проектов (по одному на сайт). У каждого свои ключи, вебхуки, кошелёк, бренд, режим денег и статистика; баланс общий на аккаунт.

Header
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
КлючФорматПрименение
Live secretutopay_sk_live_…Только на сервере. Создаёт реальные платежи.
Test secretutopay_sk_test_…Симуляция, деньги не двигаются — Тестовый режим.
Publishableutopay_pk_…Не создаёт платежи (403). Зарезервирован для клиента.

Ключ показывается один раз, у нас хранится только хеш. Не размещайте секретный ключ в браузерном или мобильном коде.

Создание платежа

POST /v1/payments Bearer sk

ПолеТипОбяз.Описание
amountnumber✓> 0, в валюте currency, округляется до 2 знаков. Максимум 1 000 000.
currencystring—ISO-код валюты, в которой платит покупатель, по умолчанию USD. Регистр не важен. См. Валюты.
providerstring—Отправить покупателя сразу в этот способ оплаты, минуя нашу страницу — например paypal, revolut, stripe. Если он недоступен — откроется наша страница. См. Сразу к способу оплаты. Синоним: payment_option (важнее, если переданы оба).
settlementstring—"direct" или "custody". По умолчанию — режим проекта.
payment_methodsstring—Что покупатель видит на странице оплаты: "both" (вкладки «карта и кошельки» и «криптовалюта»), "cards" или "crypto". По умолчанию — настройка проекта (Funds & payouts), иначе "both". При оплате криптой покупатель сам выбирает монету, комиссия 1,5%, деньги сразу уходят на ваши крипто-кошельки, у заказа paid_with: "crypto". Заказы custody принимают только карты.
emailstring—Email покупателя (проверяется), передаётся провайдеру.
descriptionstring—До 500 символов. Видит покупатель, приходит в вебхуках.
success_urlstring—Абсолютный http(s) URL: куда провайдер вернёт покупателя, и кнопка «Вернуться на сайт» после оплаты.
cancel_urlstring—Абсолютный http(s) URL, передаётся провайдеру на случай отмены.
callback_urlstring—Абсолютный http(s)-URL. Каждое событие заказа (payment.succeeded, failed, underpaid, expired) отправляется туда POST-запросом в формате вебхука с подписью x-utopay-signature; ключ HMAC — sha256(секретный ключ) (hex) того ключа, которым создан заказ. Так работают плагины CMS. Только для платежей с API-ключом.
cURL
curl -X POST https://api.utopay.app/v1/payments \
  -H "Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "amount": 250,
    "currency": "EUR",
    "email": "[email protected]",
    "description": "Invoice #118",
    "provider": "revolut",
    "success_url": "https://yoursite.com/thanks"
  }'
Response
{
  "id": "ord_Kd83mQp0aVxY",
  "status": "pending",
  "amount": 250, "currency": "EUR",
  "checkout_url": "https://api.utopay.app/pay/ord_Kd83mQp0aVxY/go?provider=revolut",
  "payment_page_url": "https://api.utopay.app/pay/ord_Kd83mQp0aVxY",
  "provider": "revolut",
  "routing": { "mode": "direct_to_provider", "requested_provider": "revolut", "reason": null },
  "settlement": "direct",
  "payout_coin": "USDC", "payout_network": "polygon",
  …  full list in Order object
}

Всегда отправляйте покупателя на checkout_url. payment_page_url пригодится для ссылки «выбрать другой способ» — он всегда открывает нашу страницу.

Сразу к способу оплаты

Работает во всех режимах — с API-ключом, без аккаунта, в платёжных ссылках из кабинета и в форме без кода на /payment-links. Укажите provider — и покупатель попадёт прямо к провайдеру (например в PayPal), не видя нашу форму.

При созданииМы проверяем провайдера. Неизвестный id → 400 со списком допустимых. Известен, но сейчас недоступен (офлайн, сумма ниже его минимума, не та валюта) → заказ всё равно создаётся, checkout_url ведёт на нашу страницу.
Когда покупатель открывает/pay/:id/go?provider=… проверяет ещё раз и перенаправляет покупателя на страницу самого провайдера.
ОткатЕсли провайдер в этот момент отказал (например, недоступен в стране покупателя), покупатель попадает на нашу страницу оплаты с пометкой «PayPal сейчас недоступен» и остальными способами.

routing в ответе показывает, что произошло: mode — direct_to_provider или payment_page; reason — null, provider_offline, provider_below_minimum, provider_currency, provider_disabled или project_routing (выбран из предпочитаемых провайдеров проекта).

GET /v1/providers?amount=&currency= публичный

Способы, доступные прямо сейчас для этой суммы и валюты: id, name, region, status, minimum_amount и minimum_currency. Список меняется — запрашивайте его, а не зашивайте в код.

providerСпособГде работаетМинимум*
stripeКарта, Apple Pay, Google PayUS / EU2 USD
paypalPayPalСША5 USD
revolutRevolutEU / EEA6 EUR
coinbaseCoinbase PayГлобально2 USD
cashappCash AppСША2 USD
robinhoodRobinhoodСША5 USD
klarnaKlarna (Pay Now)Швеция125 SEK
idealiDEALНидерланды46 EUR
banxaКарта, банковский переводГлобально11 USD
transakКарта, банк, UPIГлобально30 USD
binance, blockchaincom, topper, meld, alchemypay, sardine, particleКарта через партнёрапо-разному10–30 USD

* Минимумы и доступность приходят от платёжной сети и меняются; перед сравнением сумма пересчитывается в валюту минимума. Некоторые провайдеры могут попросить у покупателя быструю разовую проверку личности.

Валюты и что вы получаете

currency — валюта, в которой платит покупатель. Какой бы она ни была, провайдер конвертирует деньги, и дальше они идут как USDC в сети Polygon.

GET /v1/currencies публичный

Коды, которые принимает currencyСвой подбаланс (хранение)
USD EUR GBP CAD INR SEK✓
AUD NZD CHF NOK DKK PLN CZK HUF TRY UAH JPY SGD HKD AED MYR THB PHP IDR BRL MXN COP ZAR NGNзачисляется в USD

Любой другой код вернёт 400. Провайдер может показать покупателю цену в своей валюте (например Revolut — в EUR) — покупатель всё равно платит эквивалент вашей суммы. Некоторые способы принимают только определённые валюты — /v1/providers?currency=… их не вернёт.

Что и куда приходит

РежимВы получаетеПример: заказ 100 EUR
Без аккаунта (/v1/pay)USDC в Polygon сразу на payout_wallet, 95.5% от USDC, который прислал провайдер≈ 100 EUR в долларах × 0.955 ≈ 107 USDC (при 1 EUR ≈ 1.12 USD)
Аккаунт · ПрямоТо же — USDC в Polygon на кошелёк проекта; в кабинете заказ виден в EUR≈ 107 USDC ончейн
Аккаунт · ХранениеВнутренний баланс в валюте заказа (сумма × 95.5%), если у неё есть подбаланс; иначе USD по текущему курсу95.50 EUR на EUR-балансе (заказ 100 BRL → ≈ 19 USD на USD-балансе)

Точное количество пришедших USDC после оплаты — в поле value_coin заказа; оно может немного отличаться от оценки, так как курс конвертации задаёт провайдер. Балансы при хранении можно обменивать между валютами и выводить в USDC, USDT, BTC, ETH и др. — см. Хранение у нас.

Статус платежа

GET /v1/payments/:id Bearer sk

Заказ в том же формате. Пока он не paid, мы дополнительно сверяем статус у провайдера, поэтому опрос надёжен, даже если callback задержался — зачисление на баланс и ваш вебхук в любом случае происходят ровно один раз. Видны только заказы проекта ключа (иначе 404).

GET /v1/payments?limit=&offset=&status= Bearer sk

Заказы проекта, сначала новые. limit 1–500 (по умолчанию 50), status = pending | paid | failed.

GET /api/checkout/:id/status публичный

Без ключа: { "id", "status", "amount", "currency", "updated_at" }. Для заказов без аккаунта. Не считайте переход на success_url доказательством оплаты — проверьте статус.

Крипто-шлюз

Покупатель платит напрямую криптой — USDT, USDC, ETH, BTC и др. — на уникальный адрес заказа. Всё пришедшее сразу пересылается ончейн на ваш кошелёк. Комиссия 1.5% удерживается из полученной суммы, комиссия блокчейна — отдельно. Всегда напрямую: крипта не хранится на балансе UTOPAY.

GET /v1/crypto/coins публичный

Все монеты и сети: ticker (его передают в coin, например polygon/usdc, bep20/usdt, erc20/usdt, base/usdc, eth, btc, trc20/usdt), network, family (тип адреса), minimum и available. EVM-сети работают; сети с available: false (Tron, Bitcoin, Solana, TON…) подключаются.

POST /v1/crypto/payments Bearer sk · POST /v1/crypto/pay без аккаунта

ПолеОписание
coin ✓Тикер из /v1/crypto/coins
amount + currencyЦена в фиате (любая из валют), пересчитывается в монету по текущему курсу
amount_coinИли точная сумма в монете (вместо amount)
payout_addressВаш кошелёк в этой сети. Обязателен для /v1/crypto/pay; с ключом по умолчанию берётся из Crypto gateway wallets проекта (для EVM — кошелёк выплат). Формат проверяется по сети.
email, description, success_url, cancel_urlКак в Создании платежа
cURL
curl -X POST https://api.utopay.app/v1/crypto/pay \
  -H "content-type: application/json" \
  -d '{ "coin": "bep20/usdt", "amount": 100, "currency": "USD",
        "payout_address": "0xYourWallet0000000000000000000000000000000" }'
# → { "id": "ord_…", "kind": "crypto", "checkout_url": "https://api.utopay.app/pay/ord_…",
#     "crypto": { "coin": "bep20/usdt", "network": "BNB Smart Chain (BEP-20)", "symbol": "USDT",
#                 "address": "0x…", "amount_coin": 100.02, "minimum": 1.66, "detected": false, "underpaid": false } }
  • Отправьте покупателя на checkout_url (сумма, сеть, адрес, QR, живой статус) — или покажите crypto.address и crypto.amount_coin на своей странице.
  • Статусы: pending (с crypto.detected: true, когда перевод замечен, до подтверждений) → paid. Если пришло меньше запрошенного (больше чем на 1%), статус underpaid и событие payment.underpaid — деньги уже у вас на кошельке, решение за вами.
  • Вебхуки, GET /v1/payments/:id и тестовые ключи работают как для карт. Переводы ниже minimum или в другой монете/сети не обрабатываются — страница оплаты предупреждает покупателя.

Примеры интеграции

Создайте заказ на сервере (никогда не с секретным ключом в браузере), отправьте покупателя на checkout_url и отметьте заказ оплаченным по вебхуку. Пошаговый гайд: приём крипты на сайте; сети и тикеры для Tether: приём USDT.

Node.js — create order
const res = await fetch('https://api.utopay.app/v1/crypto/payments', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.UTOPAY_SK}`, 'content-type': 'application/json' },
  body: JSON.stringify({ coin: 'bep20/usdt', amount: 49.9, currency: 'EUR', description: 'Order #1042',
    success_url: 'https://shop.example/thanks', cancel_url: 'https://shop.example/cart' })
});
const order = await res.json();
if (!res.ok) throw new Error(order.error);
// save order.id with your order, then redirect the buyer
reply.redirect(order.checkout_url);
Python — create order
import os, requests

r = requests.post('https://api.utopay.app/v1/crypto/payments',
    headers={'Authorization': f'Bearer {os.environ["UTOPAY_SK"]}'},
    json={'coin': 'erc20/usdt', 'amount': 120, 'currency': 'USD', 'description': 'Invoice 77'},
    timeout=20)
order = r.json()
r.raise_for_status()
print(order['id'], order['checkout_url'], order['crypto']['address'], order['crypto']['amount_coin'])
PHP — create order
$ch = curl_init('https://api.utopay.app/v1/crypto/payments');
curl_setopt_array($ch, [
  CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('UTOPAY_SK'), 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS => json_encode(['coin' => 'polygon/usdt', 'amount' => 25, 'currency' => 'USD']),
]);
$order = json_decode(curl_exec($ch), true);
header('Location: ' . $order['checkout_url']);

Прямая отправка на кошелёк

Деньги не задерживаются у нас: каждый платёж делится ончейн в момент поступления USDC.

  • Включение: кабинет → проект → Funds & payouts → Direct to wallet, укажите адрес USDC (Polygon). Или в запросе: "settlement": "direct".
  • USDC приходит с каждого платежа; плюс история, статистика, вебхуки и Telegram. Выводить нечего.
  • Один кошелёк на проект — нужно несколько кошельков, заведите несколько проектов.

Хранение у нас

USDC приходит на кошелёк платформы. При paid ваша доля зачисляется на внутренний баланс — дальше вы держите, обмениваете, свопаете или выводите.

  • Включение: Funds & payouts → Stored on UTOPAY (кошелёк не нужен) или "settlement": "custody" в запросе.
  • Зачисление: сумма × 95.5% в валюте заказа (USD, EUR, GBP, CAD, INR, SEK), любая другая валюта — в USD по текущему курсу. Ровно один раз.
  • Один баланс на аккаунт: все проекты в этом режиме копят в одном месте; в журнале виден проект-источник.
Эндпоинт (сессия кабинета)Назначение
GET /api/merchants/:id/balancesБаланс по валютам
GET /api/merchants/:id/balances/transactionsЖурнал операций
POST /api/merchants/:id/balances/exchange{ from_currency, to_currency, amount } — по текущему курсу
POST /api/merchants/:id/balances/withdraw{ currency, amount, network, to_address }
GET /api/merchants/:id/balances/withdrawalsЗаявки на вывод

Сети для вывода: USDC_POLYGON, USDT_POLYGON, USDT_TRC20, USDT_ERC20, ETH, BTC, BNB, TRX. Сумма резервируется сразу (pending), перевод отправляет команда UTOPAY, обычно в течение рабочего дня (done с txid). Отклонённые заявки возвращаются на баланс. API-ключом вывод не запустить.

Вебхуки и уведомления

С аккаунтом. Когда заказ меняет состояние, UTOPAY шлёт POST на каждый эндпоинт проекта с подписью HMAC-SHA256.

Регистрация: кабинет → Webhooks → + Endpoint или POST /api/merchants/:id/webhooks с { "url": "https://you.com/hooks/utopay" }. Секрет whsec_… — в кабинете.

СобытиеКогда
payment.succeededДеньги получены (прямо и при хранении)
payment.expiredНе оплачен за 24 ч (получают эндпоинты, подписанные на payment.failed; в Telegram не шлётся). Поздний платёж после этого всё равно пришлёт payment.succeeded.
payment.underpaidПо крипто-заказу пришло меньше запрошенного (получают эндпоинты, подписанные на payment.succeeded)
payment.failedНеудачный платёж (сейчас — из симуляций тестового режима)
Incoming request
POST https://you.com/hooks/utopay
content-type: application/json
x-utopay-event: payment.succeeded
x-utopay-signature: t=1759660123,v1=<hex hmac-sha256>
user-agent: UTOPAY-Webhooks/1.0

{
  "event": "payment.succeeded",
  "created_at": 1759660123456,
  "data": { /* the Order object */ }
}
Node.js — verify
import crypto from 'node:crypto';
// use the RAW body, not re-serialised JSON
function verify(rawBody, header, secret) {
  const { t, v1 } = Object.fromEntries(header.split(',').map(p => p.split('=')));
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
  const a = Buffer.from(v1 || ''), b = Buffer.from(expected);
  return fresh && a.length === b.length && crypto.timingSafeEqual(a, b);
}
PHP — verify
// raw body + x-utopay-signature header + your whsec_… secret
$raw = file_get_contents('php://input');
parse_str(str_replace(',', '&', $_SERVER['HTTP_X_UTOPAY_SIGNATURE'] ?? ''), $sig);
$expected = hash_hmac('sha256', ($sig['t'] ?? '') . '.' . $raw, getenv('UTOPAY_WHSEC'));
if (!hash_equals($expected, $sig['v1'] ?? '') || abs(time() - (int)($sig['t'] ?? 0)) > 300) {
  http_response_code(400); exit;
}
$event = json_decode($raw, true);
if ($event['event'] === 'payment.succeeded') { /* mark $event['data']['id'] as paid */ }
http_response_code(200);
Python — verify
import hmac, hashlib, time

def verify(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split('=', 1) for p in header.split(','))
    t, v1 = parts.get('t', ''), parts.get('v1', '')
    expected = hmac.new(secret.encode(), f'{t}.'.encode() + raw_body, hashlib.sha256).hexdigest()
    fresh = t.isdigit() and abs(time.time() - int(t)) < 300
    return fresh and hmac.compare_digest(expected, v1)
  • Отвечайте 2xx в течение 10 с. Повторы через 30 с, 2 мин, 15 мин, 1 ч, 6 ч — 6 попыток. Доставки видны в кабинете.
  • Будьте идемпотентны — дедуплицируйте по data.id.
  • Telegram: оплаченные заказы приходят в чат с суммой, описанием и id (Notifications).

Тестовый режим

  1. Создайте тестовый секретный ключ (utopay_sk_test_…) и вызывайте POST /v1/payments как обычно — вся валидация (валюта, провайдер) та же.
  2. checkout_url ведёт на песочницу (/sandbox/ord_test_…). Нажмите Simulate payment или Simulate failure.
  3. Вебхуки и Telegram срабатывают как в продакшене, с "is_test": true. Деньги не двигаются, баланс не зачисляется.

Команда, бренд, роутинг

Команда: приглашение по email (Team). Роли admin, developer, finance, viewer; создатель — owner.

Бренд: название, логотип, цвет фона и кнопки в Settings — применяется к странице оплаты, страницам ссылок и экрану успешной оплаты.

Роутинг проекта: в Routing перечислите предпочитаемых провайдеров по приоритету. Для API-платежей без provider берётся первый онлайн-провайдер, подходящий по сумме и валюте (routing.reason = "project_routing"); если подходящих нет — покупатель выбирает на нашей странице. Явный provider всегда важнее.

Объект заказа

Возвращается при создании, получении, в списке и внутри вебхуков.

ПолеЗначение
idord_… (ord_test_… в тесте)
statuspending → paid (или failed; крипта: underpaid). Не оплачен за 24 ч → expired: новую оплату начать нельзя, но поздний платёж всё равно переведёт заказ в paid.
is_testСоздан тестовым ключом
amount, currencyЧто платит покупатель
email, descriptionКак передано
checkout_urlКуда отправлять покупателя (к провайдеру или на нашу страницу)
payment_page_urlВсегда наша страница со всеми способами
provider, routingВыбранный способ и маршрут покупателя — см. роутинг
settlement, payout_walletdirect (ваш кошелёк) или custody (кошелёк платформы)
payout_coin, payout_networkUSDC, polygon
feesДоли: merchant (ваша, 0.955), affiliate, sub_affiliate, sub_affiliate2
value_coin, value_forwarded_coin, coinСколько USDC реально пришло / переслано (после оплаты)
txid_in, txid_outХеши транзакций в Polygon
polygon_address_inОдноразовый адрес приёма этого заказа
expires_atКогда неоплаченный заказ станет expired (Unix мс)
success_url, cancel_url, created_at, updated_atКак передано / Unix мс

Все публичные эндпоинты

ЭндпоинтДоступНазначение
POST /v1/pay—Платёж без аккаунта
POST /v1/paymentsskСоздать платёж
GET /v1/payments/:idskОдин платёж (со сверкой статуса)
GET /v1/paymentsskСписок платежей
GET /v1/providers?amount=&currency=—Доступные сейчас способы
GET /v1/crypto/coins—Монеты и сети крипто-шлюза
POST /v1/crypto/payments / POST /v1/crypto/paysk / —Крипто-платёж с аккаунтом / без
GET /v1/currencies—Допустимые валюты
GET /api/checkout/:id/status—Статус любого заказа
GET /pay/:id, GET /pay/:id/go?provider=—Страница оплаты / переход к способу (для покупателя)
GET /i/:linkId—Страница ссылки (для покупателя)

Комиссии

4.5%
с каждого платежа — обработка включена
  • Вы получаете 95.5% — одинаково с аккаунтом и без, при прямой отправке и хранении, для любой валюты и способа. Без платы за подключение и абонентской платы.
  • Крупным мерчантам — индивидуальная ставка, свяжитесь с нами. Точное разделение каждого заказа — в fees.

Партнёрская программа

  • 1-й уровень: 25% нашей комиссии с приглашённых вами мерчантов; 2-й уровень: 10% с приглашённых ими.
  • Выплачивается ончейн при каждом платеже на реферальный кошелёк из Referrals. Берётся из нашей комиссии — рефералы не платят сверху.

Ошибки

Любая ошибка — { "error": "message" } с соответствующим HTTP-статусом.

СтатусЗначение
400Неверные данные: amount, неподдерживаемая currency, неизвестный provider, неверный payout_wallet, success_url не http(s), неверный settlement, прямой режим без кошелька, недостаточно баланса.
401Ключ отсутствует, неверен или отозван; нет сессии кабинета.
403Ключ pk вместо sk; проект неактивен; нет доступа.
404Не найдено или принадлежит другому проекту.
429Слишком много попыток входа / регистрации — повторите через минуту.
503Платёжная сеть временно недоступна — повторите с задержкой.
500Ошибка конфигурации сервера — обратитесь в поддержку.