Partner API — это приёмный контур платежей, а не кошелёк. Клиент платит тем активом, который у него есть, обменник конвертирует его, а зачисление приходит в том активе и той сети, которые попросила ваша бухгалтерия — на ваш собственный кошелёк, за один шаг и без чьего-либо остатка посередине.
- Один запрос котировки уходит сразу во все подключённые обменники.
- Каждая оплата — это один ордер, помеченный вашим номером заказа.
- Крипто-платежи не отзываются: резервировать под чарджбэки нечего.
- Отсутствие кастодиального хранения — это отсутствие остатка клиентских денег и у вас, и у нас.
Оплата, эндпоинт за эндпоинтом
-
Предлагайте то, чем реально можно заплатить сейчас
GET /v1/assetsвозвращает активы и сети, за которыми стоит провайдер. Кэшируйте на несколько минут и рисуйте из этого список «чем платить»: актив, который никто не обслуживает, не должен доходить до клиента. -
Считайте корзину в активе зачисления
Корзина —
149.00 USDT, клиент хочет заплатить в ETH. Котируйте сamount_to=149, и предложение ответит точной суммойFromAmount.rate_type=fixedудержит это число на время оплаты. -
Создавайте ордер на ваш расчётный кошелёк
to_address— адрес вашего казначейства, он не меняется от клиента к клиенту.client_order_id— номер заказа в магазине, именно его потом читает сверка. ПередавайтеIdempotency-Key: повторно отправленный чекаут не должен превращаться в два ордера. -
Рисуйте экран оплаты
DepositAddress,AmountFrom, сеть, QR-код и таймер. Больше ничего не нужно и ничего лишнего показывать не стоит: неверная сеть — самая частая причина пропавшего крипто-платежа. -
Выдавайте товар по финальному статусу
Опрашивайте
GET /v1/partner/orders/{id}раз в 5–10 секунд. ВDONEлежат зачисленная суммаAmountToReceivedи хеш выплатыTxID— это и есть подтверждение оплаты.
Стриминг цены в чекаут
Чекаут, который ждёт самый медленный обменник, выглядит сломанным. Стримьте: предложения приходят по мере ответа провайдеров, первое обычно за 400 мс.
// Ваш бэкенд. Ключ не попадает в браузер — проксируйте поток клиенту.
const url = new URL("https://api.swapzilla.io/v1/partner/quotes-sse");
url.search = new URLSearchParams({
from_asset: "ETH", from_network: "ERC20",
to_asset: "USDT", to_network: "TRC20",
amount_to: "149", rate_type: "fixed", timeout_ms: "5000",
});
const res = await fetch(url, {
headers: { "X-API-Key": process.env.SWAPZILLA_KEY, Accept: "text/event-stream" },
});
// события: offer · provider_error · ping · done
// в `done` приходит { deviations: { "<offer_id>": 0.16 } } — итоговый рейтинг.
Дальше ордер, со всем, что понадобится сверке:
curl -s -X POST "https://api.swapzilla.io/v1/partner/orders" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c0b52-6f2a-4d43-9f4a-1a0d64c1f3a2" \
-d '{
"offer_id": "0b0c8f0e-2c1a-4f3f-8f57-2a1d1c4e77aa",
"to_address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"refund_address": "0x750c44dB01899176f2e64bD25A2fabAC1140d8e9",
"client_order_id": "SHOP-88214",
"expected_to_amount": 149
}'
Проверяйте до того, как выставили счёт. В каждом предложении есть
MinFromAmount и MaxFromAmount; корзина ниже минимума
провайдера упадёт при создании ордера, а не на котировке. Сверяйте границы и
проверяйте адрес возврата клиента через
GET /v1/validate-address до появления экрана оплаты.
Сверка и поддержка
| Что нужно | Откуда берётся |
|---|---|
| Платежи за день | GET /v1/partner/orders?page=1&limit=100 — только ваши, свежие первыми, с постраничной выдачей. |
| К какому заказу относится платёж | client_order_id, который возвращается в ордере. |
| Подтверждение выплаты | TxID и AmountToReceived в ордере со статусом DONE. |
| Ссылка, которую поймёт поддержка провайдера | ProviderOrderID — храните рядом со своим идентификатором. |
| Ответ прямо сейчас, а не через десять секунд | POST /v1/partner/orders/{id}/refresh синхронно ходит к провайдеру. Не чаще раза в пять секунд. |
Чего API не делает
| Не входит | Что это значит для вас |
|---|---|
| Зачисление в фиате | Вывода на банковский счёт нет. Зачисляйте в стейблкоине и выводите своим каналом. |
| Вебхуки | Пока нет: статус оплаты берётся опросом или из вашего собственного стрима поверх опрошенного состояния. |
| Хостинг страницы оплаты | Страница, брендинг и письма — ваши; API даёт сумму, адрес и статус. |
| Скоринг кошельков, AML и анализ графов | Этого в API нет вообще. Если комплаенс их требует, они приходят от отдельного вендора. |
| Возврат как операция | Неудавшийся обмен возвращает провайдер на refund_address. Завершённый платёж через API не отменяется. |
Кому подходит такой чекаут
- Магазинам и SaaS, которым нужен остаток в стейблкоине, а не портфель: клиенты платят пятьюдесятью активами, вы получаете один.
- Цифровым товарам и пополнениям, где неотзывный платёж убирает резерв под фрод целиком.
- Маркетплейсам, зачисляющим на кошелёк каждого продавца: платформа маршрутизирует платёж, ни разу его не удерживая.
- Сервисам, которым платят из сетей, поддерживать которые они не собирались: конвертацию делает сеть провайдеров, а не ваше казначейство.
Вопросы
SwapZilla — это платёжный провайдер, который держит мои деньги?
Нет. Обмен некастодиальный: монеты клиента уходят прямо на депозитный адрес обменника, а обменник выплачивает на указанный вами адрес. SwapZilla не владеет средствами, поэтому нет ни остатка для вывода, ни графика выплат, которого нужно ждать.
Как узнать, что платёж завершён?
Опросом GET /v1/partner/orders/{id} раз в 5–10 секунд до финального статуса. Вебхуков пока нет; наш собственный поллер обновляет каждый открытый ордер раз в десять секунд, поэтому чаще опрашивать бессмысленно.
Что защищает от движения курса во время оплаты?
Три вещи: котировка с rate_type=fixed, чтобы провайдер зафиксировал курс; пятиминутный срок жизни предложения как окно оплаты; и expected_to_amount, из-за которого ордер с «уехавшей» выплатой будет отклонён, а не создан.
Можно принимать один актив, а получать другой?
Так работает по умолчанию. Клиент выбирает исходный актив и сеть из /v1/assets, а ваш актив зачисления, сеть и адрес заданы в ордере — конвертацию между ними делает провайдер.
Проверяет ли API кошельки клиентов на AML-риски?
Нет. Partner API считает котировки, исполняет обмены и отдаёт их статус; скоринга кошельков, оценки рисков и анализа графа транзакций в нём нет. В предложениях есть KycRating от A до D, но он описывает навязчивость KYC самого провайдера, а не риск клиента.
Сколькими активами может заплатить клиент?
Актуальный ответ даёт GET /v1/assets: топ-100 активов по капитализации с сетями и провайдерами, которые их сейчас обслуживают. Список меняется вместе с провайдерами, поэтому его стоит читать, а не зашивать в код.
Что ещё собирают на этом же ключе
- Ссылки на оплату и инвойсы в криптовалютеОплата по ссылке и инвойсы для фрилансеров и подрядчиков: котировка по сумме счёта, зачисление напрямую на кошелёк получателя.
- API обмена криптовалют, SDK и виджетОбмен внутри кошелька, бота, агрегатора или сайта: стриминг котировок, один вызов на ордер, ваш интерфейс.
- Крипто-payroll для подрядчиков и распределённых командРегулярные выплаты реестру подрядчиков: свой актив и сеть у каждого, точная сумма на руки, сверка по периодам.
- Multi-send: массовые выплаты на множество адресовРазовая веерная рассылка выплат на сотни адресов: кросс-чейн, статус по каждому, безопасные повторы.
- Свой MCP-сервер для ИИ-агентовГотовый swapzilla-mcp одной строкой — или свой, на вашем партнёрском ключе, с белыми списками и лимитами.
- Стриминг котировок, живые курсы и price alertsSSE-стрим котировок, всегда свежий фид курсов и отслеживание ордеров — основа для алертов.
Как получить ключ
Зарегистрируйтесь в партнёрском кабинете — партнёрский id и api_key для заголовка X-API-Key выпускаются сразу. Ключ становится рабочим после активации: напишите в @swapzilla_support_bot и коротко опишите интеграцию. Все эндпоинты, поля и статусы — в документации partner API.