Перейти к содержанию

Документация для мерчантов NullSwap

NullSwap позволяет вашему бэкенду принимать криптоплатежи. Вы запрашиваете адрес для пополнения, показываете его клиенту, а когда деньги дойдут и пройдут скрининг, мы присылаем вебхук.

Весь этот сайт описывает API мерчанта — серверный HTTP-API, где аутентификация сводится к одному API-ключу. Ни браузерных редиректов, ни OAuth, ни сессий здесь нет.

https://api.pay.nullswap.com

У этого же API есть интерактивный справочник Swagger по адресу api.pay.nullswap.com/docs, собранный из самого API. Там удобно свериться с точным именем поля или отправить пробный запрос; понять сами сценарии помогает этот сайт. См. Соглашения API.

Два способа принимать деньги

В API есть две модели приёма средств. Они независимы — используйте одну или обе сразу.

Инвойс Статический кошелёк
За чем закреплён адрес за одним заказом за одним клиентом, навсегда
Ожидаемая сумма известна заранее не задаётся — вы сверяете всё, что придёт
Срок жизни ограничен: 60604800 секунд не ограничен
Как узнать об оплате из вебхука вебхуков нет, нужно опрашивать API
Скрининг каждого платежа, до его зачисления каждого платежа, до свипа средств
Для чего подходит оплата конкретного заказа пополнение счёта, регулярные депозиты

Начните с инвойсов. Статические кошельки пригодятся тогда, когда адрес нужен под клиента, а не под заказ.

Полный путь инвойса

sequenceDiagram
    autonumber
    participant B as Ваш бэкенд
    participant N as NullSwap
    participant C as Клиент
    participant W as Ваш эндпоинт вебхука

    B->>N: POST /api/v1/invoices (chain, token, expectedAmount)
    N-->>B: 201 { id, depositAddress, expiresAt, status: WAITING }
    B->>C: показать depositAddress и точную сумму, до expiresAt
    C->>N: отправляет токены в сети

    N->>W: invoice.payment_detected · статус PAYMENT_DETECTED
    Note over W: не подтверждён — покажите прогресс, ничего не отгружайте

    N->>N: достигнута глубина подтверждений, выполняется AML-скрининг
    N->>W: invoice.payment_confirmed · платёж CONFIRMED
    N->>W: invoice.paid · статус PAID, paidAmount >= expectedAmount
    Note over W: это сигнал к исполнению заказа

    W-->>N: 2xx

Шаги 5–9 — это доставки вебхуков. Запрос GET /api/v1/invoices/{invoiceId} вернёт ровно то же состояние, но опрос — это способ восстановиться после простоя вашего эндпоинта, а не способ интеграции.

С чего начать

  1. Получите API-ключ. Откройте своего мерчанта в кабинете и скопируйте ключ из Настройки → API-ключ. Он начинается с sk_live_. Ключи, белые списки IP и подписки на вебхуки заводятся вручную в кабинете — через API их можно только читать, но не создавать и не менять. См. Аутентификацию.
  2. Определите сеть и токен. GET /api/v1/chains и GET /api/v1/tokens вернут UUID, по которым потом адресуется инвойс. Закешируйте их. См. Сети и токены.
  3. Создайте инвойс. POST /api/v1/invoices. В ответе придёт depositAddress — покажите его клиенту или отрисуйте QR-код. См. Инвойсы.
  4. Обработайте вебхук. Проверьте HMAC-подпись, отбросьте повторы по id доставки, быстро ответьте 2xx и исполняйте заказ по invoice.paid. См. Вебхуки.

Исполняйте заказ по invoice.paid, никогда по invoice.payment_detected

invoice.payment_detected означает лишь то, что транзакция видна в сети. Подтверждений ещё нет, скрининг ещё не пройден, так что транзакцию может откатить реорганизация цепочки, а платёж может оказаться помеченным. Отгрузить товар по этому событию — единственная ошибка интеграции, которая обходится в живые деньги.

Две вещи, на которых спотыкаются чаще всего

Суммы приходят строками, а не JSON-числами. Каждая сумма — это десятичная строка с целым числом базовых единиц токена, а рядом лежит decimals этого токена. 25.50 USDT в TRON записывается как "25500000" при decimals: 6. См. Суммы.

Ошибку определяет её имя, а не текст. В поле message приходит стабильное машиночитаемое имя — разбирайте именно его, а не HTTP-статус сам по себе и не формулировку.

{
  "statusCode": 422,
  "message": "InvalidInvoiceAmountError",
  "timestamp": "2026-01-01T00:00:00.000Z"
}

Полный список см. в Ошибках.

Что читать дальше

  • Аутентификация

    API-ключ, белый список IP и то, что остаётся доступным заблокированному мерчанту.

  • Соглашения API

    Суммы, пагинация, фильтрация, отметки времени и то, какие запросы можно повторять без риска.

  • Инвойсы

    Создание инвойса, жизненный цикл статусов, недоплата и переплата, истечение срока.

  • Платежи по инвойсу

    Отдельные поступления, скрининг и что делать с платежом, которого вы не ждали.

  • Статические кошельки

    Постоянные адреса под конкретного клиента и приходящие на них платежи.

  • Вебхуки

    Список событий, формат тела запроса, проверка подписи, повторы и порядок доставки.

  • Сети и токены

    Справочник идентификаторов, на которые ссылаются все остальные маршруты.

  • Балансы и выводы

    Как посмотреть баланс и вывести средства на свой адрес.

  • Скрининг адресов

    Проверка адреса до того, как вы отправите на него деньги.

  • Ошибки

    Все имена ошибок, их причины и то, стоит ли повторять запрос.