API для разработчиковv2

Ключ в кабинете

Справочник

Пути указаны от 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Через сколько секунд повторить.