Какой именно движок исполнит своп (0x, 1inch, Uniswap, SunSwap, Jupiter, ChangeNOW, SimpleSwap…) и
его ключи настраивает оператор в Админке. Для вашей интеграции это прозрачно: вы всегда вызываете
один и тот же набор эндпоинтов. Если провайдер не выбран явно, платформа сама подбирает лучший по
факту котировки среди исполнимых.
{ "ok": true, "data": … } или
{ "ok": false, "error": {…} }. Применяется тот же per-site rate-limit. Все суммы и
курсы — строки.
Same-chain и cross-chain
В зависимости от выбранного провайдера своп исполняется по одной из двух моделей:- Same-chain (DEX). Источник и цель в одной сети, обмен идёт on-chain через роутер
(
providerKind: "dex"). Результат возвращается на тот же кошелёк сети. Курс рыночный. - Cross-chain (instant-swap). Источник и цель могут быть в разных сетях; платформа отправляет
актив на адрес провайдера, а результат принимает на свой кошелёк целевой сети
(
providerKind: "instant_swap"). Курс — плавающий или фиксированный, в зависимости от провайдера.
sourceAssetCode,
targetAssetCode, network и amountIn. Поле providerKind в ответе показывает, по какой модели
прошёл обмен.
Эндпоинты
| Метод | Путь | Назначение |
|---|---|---|
POST | /v1/public/conversions/quote | живая котировка (preview), без создания заявки |
POST | /v1/public/conversions | создать конвертацию |
GET | /v1/public/conversions/{uuid} | статус конвертации |
POST /v1/public/conversions создаёт заявку в статусе queued (или
pending_approval), а сам своп выполняется в фоне. Опрашивайте GET /v1/public/conversions/{uuid},
пока статус не станет терминальным (settled, failed, refunded, expired, cancelled).
1. Котировка (сколько отдам / получу)
POST /v1/public/conversions/quote — узнать актуальный курс, ожидаемый выход и минимальную сумму к
получению без создания заявки. Заявка при этом не создаётся, балансы не блокируются.
Запрос
Ответ
Параметры запроса (тело)
Код актива-источника (например,
ETH, LINK, TRX). До 64 символов.Код целевого актива — стейбл (например,
USDT_ERC20, USDT_TRC20). До 64 символов.Сеть исполнения (например,
ETHEREUM, TRON). До 32 символов.Сумма к конвертации — строка-число, формат
^\d+(\.\d+)?$ (например, "1.5"). Без знака минус и
без экспоненты.Допустимое проскальзывание в bps (1% = 100 bps). Диапазон
1…5000. Если не передан — берётся
значение из настроек оператора.Поля ответа котировки
Код актива-источника (эхо запроса).
Код целевого актива (эхо запроса).
Сеть исполнения (эхо запроса).
Сумма к конвертации (эхо запроса).
Ожидаемый выход в целевом активе.
Минимум к получению с учётом slippage — ниже него своп не исполнится.
Курс =
amountOut / amountIn.Применённое проскальзывание в bps.
Сколько секунд котировка считается актуальной.
true — котировку можно исполнить; false — это только оценка (см. предупреждение ниже).2. Создание конвертации
POST /v1/public/conversions — тело идентично запросу котировки. Платформа заново берёт живую
котировку, проверяет исполнимость, баланс hot-кошелька, минимальную сумму и гейты безопасности,
затем ставит заявку в очередь.
Идемпотентность
Создание идемпотентно по заголовкуX-Idempotency-Key (UUID): повторный запрос с тем же ключом
вернёт ту же заявку, а не создаст вторую. Ключ привязан к вашему сайту, поэтому одинаковый UUID у
разных обменников не пересекается. Подробнее — Идемпотентность.
Запрос
Ответ
Возвращается объект конвертации в статусеqueued (или pending_approval, если у оператора включён
порог второго подтверждения для крупных сумм). Поля executed* и settledAt пока null.
3. Статус конвертации
GET /v1/public/conversions/{uuid} — текущее состояние заявки. Видны только конвертации вашего
сайта; чужой uuid возвращает NOT_FOUND (404). Тело запроса пустое, поэтому в подписи
message = "<timestamp>." (таймстамп, затем точка).
Запрос
Ответ (исполнено)
Поля объекта конвертации
Публичный идентификатор конвертации.
Текущий статус. Полный список — Статусы конвертаций.
Код актива-источника.
Код целевого актива (стейбл).
Сеть исходного актива.
Сумма, отправленная на конвертацию.
Ожидаемый выход на момент создания (что вы видели в котировке).
Фактически полученный выход.
null до исполнения.Курс на момент создания.
Фактический курс после исполнения.
null до исполнения.Минимум к получению (защита от проскальзывания).
Модель исполнения:
dex (same-chain), instant_swap (cross-chain) или cex.Причина ошибки при
status: "failed", иначе null.Дата создания заявки (ISO 8601, UTC).
Дата успешного завершения.
null, пока не settled.Проскальзывание и срок жизни котировки
maxSlippageBpsзадаёт, насколько фактический выход может оказаться ниже ожидаемого. Из него считаетсяminAmountOut— жёсткая граница: если рынок уйдёт сильнее, своп не исполнится и заявка станетfailed(для DEX это enforce’ится самим роутером on-chain).ttlSecondsв котировке — справочное время её актуальности. При создании заявки платформа берёт свежую котировку заново, поэтому котировку не нужно «передавать» вcreate— достаточно тех же входных параметров.
Частые вопросы
Нужно ли передавать котировку в запрос создания?
Нужно ли передавать котировку в запрос создания?
Нет.
POST /v1/public/conversions принимает те же поля, что и quote, и берёт свежую котировку сам.
Шаг quote нужен лишь для предпросмотра курса и проверки executable.Почему создание вернуло VALIDATION_FAILED, хотя quote показал курс?
Почему создание вернуло VALIDATION_FAILED, хотя quote показал курс?
Вероятнее всего, котировка была неисполнимой (
executable: false): нет настроенного драйвера или
ключа провайдера, нет ликвидности, либо сумма ниже минимума или вне диапазона провайдера. Текст
причины — в error.message. Создать заявку можно только по исполнимой котировке.Почему заявка в статусе pending_approval, а не queued?
Почему заявка в статусе pending_approval, а не queued?
У оператора настроен порог второго подтверждения (four-eyes) для крупных по USD сумм, либо включено
принудительное одобрение для выбранного провайдера. Заявка исполнится после ручного подтверждения
оператором в Админке. Продолжайте опрашивать статус.
Почему executedAmountOut меньше quotedAmountOut?
Почему executedAmountOut меньше quotedAmountOut?
Рынок мог сдвинуться в пределах допустимого проскальзывания между котировкой и исполнением.
Гарантированный минимум —
minAmountOut; ниже него своп не пройдёт.Можно ли отменить конвертацию через API?
Можно ли отменить конвертацию через API?
Нет. Отмена (
cancelled) — операторское действие в Админке и возможна только до начала исполнения.
Публичного эндпоинта отмены нет.Как повторить неудачную конвертацию?
Как повторить неудачную конвертацию?
Создайте новую заявку (тот же
POST) — платформа возьмёт актуальную котировку. Используйте новый
X-Idempotency-Key, иначе вернётся прежняя завершившаяся заявка.Связанные страницы
- Аутентификация — HMAC-подпись, заголовки, IP whitelist.
- Идемпотентность —
X-Idempotency-Keyи безопасные повторы. - Статусы конвертаций — жизненный цикл и причины ошибок.
- Ошибки — единый формат ответа и справочник кодов.
- Лимиты запросов — per-site rate-limit.