Как проходит платёж
Поток одинаков во всех режимах. Отличаются только место назначения денег и инструменты вокруг.
checkout_url.provider — сразу выбранный вами способ.currency и отправляет USDC (Polygon) на одноразовый адрес.paid. С аккаунтом приходят ещё вебхук и сообщение в Telegram.Базовый URL для всех вызовов: https://api.utopay.app. Запросы и ответы — JSON (content-type: application/json). Суммы — числа в валюте заказа, время — Unix в миллисекундах.
Быстрый старт
Реальный платёж одним запросом — без регистрации. Покупатель сразу попадает в PayPal; если PayPal не может принять этот платёж, откроется наша страница с другими способами.
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/pay | POST /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_wallet | string | ✓ | 0x + 40 hex-символов. Куда отправляется ваша доля. |
- Всегда
direct:"settlement": "custody"вернёт400— без аккаунта некуда зачислять баланс. - Фиксированная комиссия 4.5%, без рефералки и вебхуков (
callback_urlсохраняется, но не вызывается), без тестового режима, стандартный дизайн чекаута. - Отслеживание: опрашивайте публичный
GET /api/checkout/:id/status(без ключа) или смотрите на кошелёк.
Аккаунт и API-ключи
В аккаунте до 20 проектов (по одному на сайт). У каждого свои ключи, вебхуки, кошелёк, бренд, режим денег и статистика; баланс общий на аккаунт.
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
| Ключ | Формат | Применение |
|---|---|---|
| Live secret | utopay_sk_live_… | Только на сервере. Создаёт реальные платежи. |
| Test secret | utopay_sk_test_… | Симуляция, деньги не двигаются — Тестовый режим. |
| Publishable | utopay_pk_… | Не создаёт платежи (403). Зарезервирован для клиента. |
Ключ показывается один раз, у нас хранится только хеш. Не размещайте секретный ключ в браузерном или мобильном коде.
Создание платежа
POST /v1/payments Bearer sk
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
amount | number | ✓ | > 0, в валюте currency, округляется до 2 знаков. Максимум 1 000 000. |
currency | string | — | ISO-код валюты, в которой платит покупатель, по умолчанию USD. Регистр не важен. См. Валюты. |
provider | string | — | Отправить покупателя сразу в этот способ оплаты, минуя нашу страницу — например paypal, revolut, stripe. Если он недоступен — откроется наша страница. См. Сразу к способу оплаты. Синоним: payment_option (важнее, если переданы оба). |
settlement | string | — | "direct" или "custody". По умолчанию — режим проекта. |
payment_methods | string | — | Что покупатель видит на странице оплаты: "both" (вкладки «карта и кошельки» и «криптовалюта»), "cards" или "crypto". По умолчанию — настройка проекта (Funds & payouts), иначе "both". При оплате криптой покупатель сам выбирает монету, комиссия 1,5%, деньги сразу уходят на ваши крипто-кошельки, у заказа paid_with: "crypto". Заказы custody принимают только карты. |
email | string | — | Email покупателя (проверяется), передаётся провайдеру. |
description | string | — | До 500 символов. Видит покупатель, приходит в вебхуках. |
success_url | string | — | Абсолютный http(s) URL: куда провайдер вернёт покупателя, и кнопка «Вернуться на сайт» после оплаты. |
cancel_url | string | — | Абсолютный http(s) URL, передаётся провайдеру на случай отмены. |
callback_url | string | — | Абсолютный http(s)-URL. Каждое событие заказа (payment.succeeded, failed, underpaid, expired) отправляется туда POST-запросом в формате вебхука с подписью x-utopay-signature; ключ HMAC — sha256(секретный ключ) (hex) того ключа, которым создан заказ. Так работают плагины CMS. Только для платежей с API-ключом. |
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" }'
{
"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), не видя нашу форму.
400 со списком допустимых. Известен, но сейчас недоступен (офлайн, сумма ниже его минимума, не та валюта) → заказ всё равно создаётся, checkout_url ведёт на нашу страницу./pay/:id/go?provider=… проверяет ещё раз и перенаправляет покупателя на страницу самого провайдера.routing в ответе показывает, что произошло: mode — direct_to_provider или payment_page; reason — null, provider_offline, provider_below_minimum, provider_currency, provider_disabled или project_routing (выбран из предпочитаемых провайдеров проекта).
GET /v1/providers?amount=¤cy= публичный
Способы, доступные прямо сейчас для этой суммы и валюты: id, name, region, status, minimum_amount и minimum_currency. Список меняется — запрашивайте его, а не зашивайте в код.
provider | Способ | Где работает | Минимум* |
|---|---|---|---|
stripe | Карта, Apple Pay, Google Pay | US / EU | 2 USD |
paypal | PayPal | США | 5 USD |
revolut | Revolut | EU / EEA | 6 EUR |
coinbase | Coinbase Pay | Глобально | 2 USD |
cashapp | Cash App | США | 2 USD |
robinhood | Robinhood | США | 5 USD |
klarna | Klarna (Pay Now) | Швеция | 125 SEK |
ideal | iDEAL | Нидерланды | 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 -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.
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);
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'])
$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-ключом вывод не запустить.
Платёжные ссылки
Без кода: создайте ссылку, отправьте в чат или на почту — получите оплату. Кабинет → проект → Payment links → + Link.
- Сумма фиксированная или пустая — тогда вводит покупатель. Валюта — любая из списка.
- Способ (необязательно): закрепите провайдера. С фиксированной суммой ссылка сразу уводит покупателя к нему; со свободной — покупатель видит только поле суммы и кнопку «Pay with PayPal». Если способ недоступен — показывается обычный выбор способа.
- Return URL — куда вернуть покупателя после оплаты. Одноразовая ссылка после первого заказа становится
used(повторное открытие ведёт в этот заказ); многоразовая работает до архивации. - Деньги идут по режиму проекта. Заказы по ссылкам попадают в историю и вызывают вебхуки так же, как заказы из API.
| Эндпоинт (сессия кабинета) | Тело |
|---|---|
POST /api/merchants/:id/links | { amount?, currency?, description?, provider?, redirect_url?, reusable? } → ссылка с url |
GET /api/merchants/:id/links | Список |
PATCH /api/merchants/:id/links/:linkId | { status: "active" | "archived", amount, currency, description, provider, redirect_url, reusable } |
Публичная ссылка — https://api.utopay.app/i/lnk_…. Без аккаунта используйте форму на /payment-links — она создаёт заказ /v1/pay с тем же выбором способа.
Вебхуки и уведомления
С аккаунтом. Когда заказ меняет состояние, 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 | Неудачный платёж (сейчас — из симуляций тестового режима) |
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 */ }
}
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); }
// 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);
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).
Тестовый режим
- Создайте тестовый секретный ключ (
utopay_sk_test_…) и вызывайтеPOST /v1/paymentsкак обычно — вся валидация (валюта, провайдер) та же. checkout_urlведёт на песочницу (/sandbox/ord_test_…). Нажмите Simulate payment или Simulate failure.- Вебхуки и Telegram срабатывают как в продакшене, с
"is_test": true. Деньги не двигаются, баланс не зачисляется.
Команда, бренд, роутинг
Команда: приглашение по email (Team). Роли admin, developer, finance, viewer; создатель — owner.
Бренд: название, логотип, цвет фона и кнопки в Settings — применяется к странице оплаты, страницам ссылок и экрану успешной оплаты.
Роутинг проекта: в Routing перечислите предпочитаемых провайдеров по приоритету. Для API-платежей без provider берётся первый онлайн-провайдер, подходящий по сумме и валюте (routing.reason = "project_routing"); если подходящих нет — покупатель выбирает на нашей странице. Явный provider всегда важнее.
Объект заказа
Возвращается при создании, получении, в списке и внутри вебхуков.
| Поле | Значение |
|---|---|
id | ord_… (ord_test_… в тесте) |
status | pending → paid (или failed; крипта: underpaid). Не оплачен за 24 ч → expired: новую оплату начать нельзя, но поздний платёж всё равно переведёт заказ в paid. |
is_test | Создан тестовым ключом |
amount, currency | Что платит покупатель |
email, description | Как передано |
checkout_url | Куда отправлять покупателя (к провайдеру или на нашу страницу) |
payment_page_url | Всегда наша страница со всеми способами |
provider, routing | Выбранный способ и маршрут покупателя — см. роутинг |
settlement, payout_wallet | direct (ваш кошелёк) или custody (кошелёк платформы) |
payout_coin, payout_network | USDC, 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/payments | sk | Создать платёж |
GET /v1/payments/:id | sk | Один платёж (со сверкой статуса) |
GET /v1/payments | sk | Список платежей |
GET /v1/providers?amount=¤cy= | — | Доступные сейчас способы |
GET /v1/crypto/coins | — | Монеты и сети крипто-шлюза |
POST /v1/crypto/payments / POST /v1/crypto/pay | sk / — | Крипто-платёж с аккаунтом / без |
GET /v1/currencies | — | Допустимые валюты |
GET /api/checkout/:id/status | — | Статус любого заказа |
GET /pay/:id, GET /pay/:id/go?provider= | — | Страница оплаты / переход к способу (для покупателя) |
GET /i/:linkId | — | Страница ссылки (для покупателя) |
Комиссии
- Вы получаете 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 | Ошибка конфигурации сервера — обратитесь в поддержку. |