Справочник
Пути указаны от https://666.exchange/api/v2. Все запросы — с заголовком Authorization: Bearer hx_secret_….
Активы
GET/assets
Список активов
Активы и сети, с которыми работает обмен. Объект актива описан ниже, в разделе «Объекты».
curl https://666.exchange/api/v2/assets \
-H "Authorization: Bearer $SK"Котировки
POST/quotes
Получить котировку
Сколько получит клиент, курс и пределы суммы. id котировки действует до expiresAt: 2 минуты для floating, 1 минуту для locked. Если пара или сумма не проходят — ошибка 422 с причиной.
Тело запроса
from.assetstringобязательноЧто отправляет клиент, например USDT.from.networkstringСеть отправки: TRON, BSC, ETHEREUM… Для монеты в своей сети можно не указывать.to.assetstringобязательноЧто получает клиент.to.networkstringСеть выплаты.amountstringобязательноСумма десятичной строкой: "250", "0.015".amountOfstringК какой стороне относится amount: from (по умолчанию) или to.ratestringfloating (по умолчанию) — курс на момент подтверждения перевода; locked — курс зафиксирован на время оплаты.partnerFeePercentnumberВаша наценка в процентах. Работает, если проекту разрешена наценка — см. «Доступ и лимиты».referralstringМетка для ваших отчётов, до 64 символов. Условия те же, что у наценки.curl -X POST https://666.exchange/api/v2/quotes \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-d '{
"from": {
"asset": "USDT",
"network": "TRON"
},
"to": {
"asset": "BTC",
"network": "BITCOIN"
},
"amount": "250"
}'Заявки
POST/orders
Создать заявку
Открывает заявку и выдаёт адрес для оплаты. Пару и сумму берём из quote; можно вместо него передать поля пары, как в /quotes. Ответ — 201 и объект заявки.
Тело запроса
quotestringid котировки. Без него передайте поля пары.payout.addressstringобязательноАдрес выплаты. Проверяется сразу: неподходящий — 400 invalid_address.payout.memostringMemo/tag к адресу, если у актива memo: true.refund.addressstringКуда вернуть перевод, если обмен не состоится.referencestringВаш номер для заявки, до 128 символов. По нему ищут в списке; он приходит в вебхуках.customer.telegramIdstringTelegram ID клиента, если заявка из бота.customer.chatIdstringЧат для связи с клиентом.customer.contactstringПочта или другой контакт клиента.Передавайте заголовок Idempotency-Key — строку до 128 символов, одну на все попытки создать одну заявку. Повтор с тем же ключом вернёт уже созданную заявку; если первая попытка ещё выполняется — 409 request_in_progress с retryAfter.
curl -X POST https://666.exchange/api/v2/orders \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 0b9c3f4e-2d1a-4c7e-9f0a-7a1d2e3c4b5f" \
-d '{
"quote": "qt_eyJ2IjoxLCJwaWQiOi...mF0ZQ",
"payout": {
"address": "bc1q9h7garjxw5c3l8wmxq0y8wzg7l3f5n2t4u6v8x"
},
"refund": {
"address": "TVk1qQ8m3ZpT6sYb2HfR9nLw4cXe7dJu5A"
},
"reference": "inv_20931"
}'GET/orders
Список заявок
Заявки проекта, новые первыми. Есть nextCursor — передайте его в cursor за следующей страницей.
Параметры строки запроса
limitintegerОт 1 до 50, по умолчанию 20.cursorstringnextCursor из прошлого ответа.referencestringТолько заявки с этим reference.customerstringТолько заявки клиента с этим Telegram ID.curl https://666.exchange/api/v2/orders?limit=20&reference=inv_20931 \
-H "Authorization: Bearer $SK"GET/orders/{id}
Получить заявку
Текущее состояние, суммы, подтверждения и хеши переводов. Заявки чужого проекта отвечают 404.
curl https://666.exchange/api/v2/orders/Q7M2-KD4X \
-H "Authorization: Bearer $SK"POST/orders/{id}/decision
Принять решение
Для заявки в awaiting_decision: курс изменился, пришла другая сумма или перевод опоздал. Варианты и срок — в order.decision. В остальных состояниях — 409 decision_not_expected.
Тело запроса
actionstringобязательноcontinue — обменять по текущему курсу, refund — вернуть перевод.refund.addressstringАдрес возврата, обязателен при refund.refund.memostringMemo/tag к адресу возврата.curl -X POST https://666.exchange/api/v2/orders/Q7M2-KD4X/decision \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-d '{
"action": "refund",
"refund": {
"address": "TVk1qQ8m3ZpT6sYb2HfR9nLw4cXe7dJu5A"
}
}'Адреса
POST/addresses/validate
Проверить адрес
Подходит ли адрес к активу и сети — та же проверка, что при создании заявки. Удобно показать ошибку, как только клиент вставил адрес. Ничего не сохраняет.
Тело запроса
assetstringобязательноАктив.networkstringСеть.addressstringобязательноАдрес.curl -X POST https://666.exchange/api/v2/addresses/validate \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-d '{
"asset": "BTC",
"network": "BITCOIN",
"address": "bc1qxyz"
}'AML-проверка
Оценка риска адреса по данным блокчейн-аналитики. Подключается для проекта отдельно — напишите в поддержку. Без подключения методы отвечают 403 aml_not_enabled.
GET/aml/networks
Сети для проверки
Сети, адреса в которых можно проверить.
curl https://666.exchange/api/v2/aml/networks \
-H "Authorization: Bearer $SK"POST/aml/checks
Проверить адрес
Ответ — risk (оценка от 0 до 100, уровень, решение pass, hold или reject и surcharge_pct — надбавка, с которой обменник примет такие средства) и exposure — доли средств по категориям источников с классом риска (class: critical, severe, mixer, elevated, minor, unknown, neutral). Биржи, DEX, мосты и платёжные сервисы — neutral, на оценку не влияют. Если проверка не успела завершиться, придёт state: "pending" и токен resume: повторите запрос с ним, новой проверки это не создаст.
Тело запроса
networkstringобязательноСеть из /aml/networks.addressstringобязательноАдрес для проверки.resumestringТокен из ответа pending; передаётся вместо network и address.curl -X POST https://666.exchange/api/v2/aml/checks \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-d '{
"network": "TRON",
"address": "TJ4w2XqvQ7m1pHk9sF3nRbL6cVyE8dZt5U"
}'POST/aml/reports
PDF-отчёт
PDF по токену report из завершённой проверки. Повторная выдача бесплатна и не создаёт новую проверку.
Тело запроса
reportstringобязательноcheck.report из ответа проверки.curl -X POST https://666.exchange/api/v2/aml/reports \
-H "Authorization: Bearer $SK" \
-H "Content-Type: application/json" \
-d '{
"report": "rep_eJyrVkrLz1eyUkpKLFKqBQAm..."
}' \
-o report.pdfОбъекты
Заявка
idstringНомер заявки.statestringСостояние: awaiting_deposit, confirming, exchanging, completed, awaiting_decision, refunding, refunded, expired, cancelled, operator, problem. Схема — в «Обзоре».ratestringfloating или locked.fromobjectasset, network, amount — сколько ждём; received — сколько пришло.toobjectasset, network, amount — сколько получит клиент.depositobjectКуда платить: address, memo (если нужен), network, expiresAt, confirmations.seen / required, txHash входящего перевода. trusted: false — адрес не прошёл нашу проверку подписи и не показывается; клиенту платить нельзя.payoutobjectaddress, memo, txHash выплаты.decisionobjectТолько в awaiting_decision: options, reasons, deadline.referencestringВаш номер из запроса на создание.customerobjecttelegramId, chatId из запроса на создание.pageUrlstringСтраница заявки на сайте — её можно отдать клиенту.createdAt / updatedAtstringВремя в ISO 8601, UTC.Котировка
idstringПередаётся в POST /orders.pricestringСколько to за единицу from.from / toobjectasset, network, amount, min, max; у from ещё confirmations — сколько подтверждений ждём.expiresAtstringДо какого времени действует id.Актив
asset / networkstringКод актива и сеть. Пара однозначно задаёт актив: USDT в TRON и в BSC — разные активы.name / iconstringНазвание и ссылка на значок.deposit / payoutbooleanМожно ли сейчас отправить актив / получить его.memobooleanНужен ли memo/tag к адресу.Ошибка
error.codestringКод ошибки. Список — в разделе «Ошибки».error.messagestringПояснение для человека, может меняться.error.fieldstringПоле запроса, которое не подошло.error.limitsobjectПределы суммы: min, max, asset.error.retryAfterintegerЧерез сколько секунд повторить.