Документация разработчика

Проверить оплату и статус заказа

Запрос по ID продавца. Различайте подтверждение, доставку уведомления и выдачу заказа.

POST /api/v1/order/status

Запросить аутентификацию

Включите X-Bolt-Key, X-Bolt-Timestamp и X-Bolt-Signature. Используйте текущую миллисекунду timestamp и подпишите timestamp вместе с точным телом запроса.

01. Параметры запроса

application/json
externalOrderIdОбязательно
String

Отправьте торговца externalOrderId, использованного при создании заказа, а не orderToken. Можно запрашивать только ордера, принадлежащие текущему ключу API.

Пример значения

{"externalOrderId": "INV-20260209-99281"}

Обязательная строка, 6–64 символа. Допускаются буквы, цифры, подчеркивания (_) и дефисы (-).

Body

Состояние заказа и его выполнение

PENDING

Ожидает платеж: не найден ни один подходящий перевод.

PAID

Платеж обнаружен, ожидается подтверждение блокчейна.

CONFIRMED

Платеж подтвержден или принят посредством проверки продавца; доставка обратного вызова может все еще ожидаться.

COMPLETED

Платеж подтвержден, BoltUtil получил успешный ответ обратного вызова.

EXPIRED

Платежный период завершился без соответствующего подходящего перевода. Своевременный перевод с отложенным подтверждением может быть распознан позже.

FAILED

Заказ находится в состоянии сбоя. Не расценивайте это как успешный платеж.

CANCELLED

Заказ отменен. Не расценивайте это как успешный платеж.

PAID означает ожидание подтверждения; не исполняйте заказ только на основании этого статуса. CONFIRMED или COMPLETED означают подтверждённый платёж; исполняйте заказ один раз для каждого externalOrderId. COMPLETED означает, что BoltUtil получил успешный ответ на уведомление, а не что ваш бизнес исполнил заказ. Для платежей с ручной проверкой также проверяйте оплаченную сумму и тип расчёта.

02. Поля ответа (data)

application/json
statusString
Текущее состояние заказа. См. описания состояний выше; заказ не обязательно должен проходить через все состояния.
amountString
Сумма заказа к оплате, возвращается в виде строки. Используйте paidAmount для записанной оплаченной суммы.
paidAmountString / null
Записана оплаченная сумма в виде строки; перед оплатой может быть null. Для более старых оплаченных заказов без отдельной оплаченной суммы она возвращается к сумме к оплате.
shortfallAmountString / null
Недостача записана в виде строки; перед оплатой может быть null. Принятые вручную переплаты здесь могут возвращать 0. Чтобы вычислить разницу со знаком, вычтите paidAmount из amount.
settlementTypeString / null
EXACT: точное совпадение; MANUAL_UNDERPAID: принята недоплата; MANUAL_OVERPAID: принята переплата; MANUAL_AMBIGUOUS: еще одна ассоциация, проверенная вручную. До расчета может быть null.
paymentRouteString / null
Фактический маршрут: DIRECT — прямой перевод, SPLIT — разделение платежа. До расчёта запрос может вернуть null; это не подтверждение платежа.
platformFeeString / null
Фактическая комиссия платформы в currency, строкой; до записи в запросе может быть null. Прямой или льготный платёж: 0. Сетевая комиссия не включена.
merchantNetAmountString / null
Чистая сумма продавца в currency, строкой. При разделении — уплаченная сумма минус комиссия. До записи возможен null; старые callback могут использовать уплаченную сумму.
manuallyAcceptedBoolean
В настоящее время true только для MANUAL_UNDERPAID. Он не идентифицирует каждое ручное действие; используйте settlementType для конкретного типа.
externalOrderIdString
Заказ продавца ID, предоставляемый при создании, используется для запроса и связывания вашего бизнес-заказа.
txHashString / null
Хеш транзакции связанного платежа; перед ассоциацией может быть null. Хэш сам по себе не является подтверждением платежа.
destinationAddressString
Кошелёк продавца-получателя, используемый этим заказом; его могут использовать несколько заказов.
confirmationsInteger / null
Записано количество подтверждений блокчейна; может быть null. Правила подтверждения различаются в зависимости от сети. Используйте status для подтверждения платежа.
currencyString
Код валюты платежа, например USDT или USDC.
networkString
Код платежной сети: TRC20, ERC20, BEP20, POLYGON, SOLANA или BASE.
paidAtString / null
Записано время платежа в виде строки даты и времени; null перед записью платежа.
confirmedAtString / null
Записано время подтверждения платежа в виде строки даты и времени; null перед подтверждением.
completedAtString / null
Время первого ввода заказа COMPLETED в виде строки даты и времени; null до завершения. Успешная повторная доставка не перезаписывает его. Ранее выполненные заказы сохраняют свое историческое время.
metadataObject
Пользовательский объект JSON, предоставляемый при создании заказа. Он не используется для сопоставления платежей.

Примечания к запросу

  • Запрос возвращает сохраненное состояние заказа; он не сканирует блокчейн сразу. Подтверждения представляют собой записанные значения. Используйте status для подтверждения платежа.
  • Без согласованного платежа paidAmount, shortfallAmount, settlementType, txHash и связанные с ними времена могут быть null. Это не ошибка запроса.
  • Можно запрашивать только свои собственные заказы. Бесплатные учетные записи могут получить доступ к заказам, созданным в течение последних 30 дней; активные участники могут получить доступ ко всей истории. Отсутствующие или недоступные заказы. Возврат заказа не найден.
  • paidAt, confirmedAt и completedAt — это строки даты и времени, например 2026-02-09T18:20:50.790, без смещения часового пояса. Это не миллисекундные метки времени.

Распространенные ошибки

Это распространенные случаи. Используйте фактический статус HTTP и код/сообщение ответа для диагностики сбоев. Ответ с ошибкой не является результатом платежа.

  • 401: проверьте ключ API, необработанную подпись и текущую миллисекунду timestamp (в пределах 5 минут от часов сервера).
  • 404: заказ отсутствует, принадлежит другому продавцу или находится за пределами истории, разрешенной вашим планом.
status / cURL
# Run against your account only when ready; this sends an API request.
: "${BOLTUTIL_API_KEY:?Set your complete API Key}"
: "${BOLTUTIL_WEBHOOK_SECRET:?Set your Webhook secret}"
timestamp=$(python3 -c 'import time; print(int(time.time()*1000))')
body='{"externalOrderId":"INV-20260209-99281"}'
signature=$(printf '%s.%s' "$timestamp" "$body" | openssl dgst -sha256 -hmac "$BOLTUTIL_WEBHOOK_SECRET" | awk '{print $NF}')

curl --request POST "https://api.boltutil.com/api/v1/order/status" \
  --header 'Content-Type: application/json' \
  --header "X-Bolt-Key: $BOLTUTIL_API_KEY" \
  --header "X-Bolt-Timestamp: $timestamp" \
  --header "X-Bolt-Signature: $signature" \
  --data-binary "$body"

Примерами являются адреса, хеши транзакций и заказы. Замените их собственным тестом data.

Base URL

PROD
https://api.boltutil.com