Документация для мерчантов NullSwap¶
NullSwap позволяет вашему бэкенду принимать криптоплатежи. Вы запрашиваете адрес для пополнения, показываете его клиенту, а когда деньги дойдут и пройдут скрининг, мы присылаем вебхук.
Весь этот сайт описывает API мерчанта — серверный HTTP-API, где аутентификация сводится к одному API-ключу. Ни браузерных редиректов, ни OAuth, ни сессий здесь нет.
У этого же API есть интерактивный справочник Swagger по адресу api.pay.nullswap.com/docs, собранный из самого API. Там удобно свериться с точным именем поля или отправить пробный запрос; понять сами сценарии помогает этот сайт. См. Соглашения API.
Два способа принимать деньги¶
В API есть две модели приёма средств. Они независимы — используйте одну или обе сразу.
| Инвойс | Статический кошелёк | |
|---|---|---|
| За чем закреплён адрес | за одним заказом | за одним клиентом, навсегда |
| Ожидаемая сумма | известна заранее | не задаётся — вы сверяете всё, что придёт |
| Срок жизни | ограничен: 60–604800 секунд |
не ограничен |
| Как узнать об оплате | из вебхука | вебхуков нет, нужно опрашивать 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} вернёт ровно то же
состояние, но опрос — это способ восстановиться после простоя вашего эндпоинта, а не способ
интеграции.
С чего начать¶
- Получите API-ключ. Откройте своего мерчанта в кабинете и скопируйте ключ из
Настройки → API-ключ. Он начинается с
sk_live_. Ключи, белые списки IP и подписки на вебхуки заводятся вручную в кабинете — через API их можно только читать, но не создавать и не менять. См. Аутентификацию. - Определите сеть и токен.
GET /api/v1/chainsиGET /api/v1/tokensвернут UUID, по которым потом адресуется инвойс. Закешируйте их. См. Сети и токены. - Создайте инвойс.
POST /api/v1/invoices. В ответе придётdepositAddress— покажите его клиенту или отрисуйте QR-код. См. Инвойсы. - Обработайте вебхук. Проверьте 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 и то, что остаётся доступным заблокированному мерчанту.
-
Суммы, пагинация, фильтрация, отметки времени и то, какие запросы можно повторять без риска.
-
Создание инвойса, жизненный цикл статусов, недоплата и переплата, истечение срока.
-
Отдельные поступления, скрининг и что делать с платежом, которого вы не ждали.
-
Постоянные адреса под конкретного клиента и приходящие на них платежи.
-
Список событий, формат тела запроса, проверка подписи, повторы и порядок доставки.
-
Справочник идентификаторов, на которые ссылаются все остальные маршруты.
-
Как посмотреть баланс и вывести средства на свой адрес.
-
Проверка адреса до того, как вы отправите на него деньги.
-
Все имена ошибок, их причины и то, стоит ли повторять запрос.