К содержимому
Инвойсбокс
post/v3/billing/api/order/order

Создание заказа

Заказ создаётся одним запросом:

Пример запроса и ответа

HTTP

POST /v3/billing/api/order/order
Authorization: Bearer b37c4c689295904ed21eee5d9a48d42e
Content-Type: application/json
User-Agent: MyApp 1.0
Accept: application/json

Тело запроса:

{
  "merchantId": "ffffffff-ffff-ffff-ffff-ffffffffffff",
  "merchantOrderId": "m-1608560079",
  "amount": 366.00,
  "successUrl": "https://shop.example.com/order/4412?result=success",
  "failUrl": "https://shop.example.com/order/4412?result=fail",
  "returnUrl": "https://shop.example.com/order/4412?result=return",
  "vatAmount": 66.00,
  "basketItems": [
    {
      "sku": "5fe0adcfa7fb4",
      "name": "Бронирование номера",
      "measure": "шт.",
      "measureCode": "796",
      "grossWeight": 0,
      "netWeight": 0,
      "quantity": 3,
      "amount": 122.00,
      "amountWoVat": 100.00,
      "totalAmount": 366.00,
      "totalVatAmount": 66.00,
      "vatCode": "RUS_VAT22",
      "type": "service",
      "paymentType": "full_prepayment"
    }
  ],
  "metaData": {
    "@type": "LodgingReservation",
    "reservationId": "abc456",
    "reservationStatus": "https://schema.org/ReservationConfirmed",
    "underName": {
      "@type": "Person",
      "name": "John Smith"
    },
    "reservationFor": {
      "@type": "LodgingBusiness",
      "name": "Hilton San Francisco Union Square",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "333 O'Farrell St",
        "addressLocality": "San Francisco",
        "addressRegion": "CA",
        "postalCode": "94102",
        "addressCountry": "US"
      },
      "telephone": "415-771-1400"
    },
    "checkinTime": "2026-08-12T16:00:00-08:00",
    "checkoutTime": "2026-08-14T11:00:00-08:00"
  },
  "expirationDate": "2026-12-22T00:00:00+00:00",
  "languageId": "ru",
  "currencyId": "RUB",
  "description": "Оплата номера в отеле",
  "customer": {
    "type": "legal",
    "name": "ООО «Ромашка»",
    "phone": "79001112233",
    "email": "buh@example.invbox.ru",
    "vatNumber": "7701234560",
    "taxRegistrationReasonCode": "770101001",
    "registrationAddress": "190000, Санкт-Петербург, Невский пр. 147, офис 321"
  }
}

CURL

curl -L -X POST 'https://api.invoicebox.ru/v3/billing/api/order/order' \
  -H 'Authorization: Bearer b37c4c689295904ed21eee5d9a48d42e' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: MyApp 1.0' \
  -H 'Accept: application/json' \
  -d '{
    "merchantId": "ffffffff-ffff-ffff-ffff-ffffffffffff",
    "merchantOrderId": "m-1608560079",
    "amount": 366.00,
    "vatAmount": 66.00,
    "currencyId": "RUB",
    "languageId": "ru",
    "description": "Оплата номера в отеле",
    "expirationDate": "2026-12-22T00:00:00+00:00",
    "successUrl": "https://shop.example.com/order/4412?result=success",
    "failUrl": "https://shop.example.com/order/4412?result=fail",
    "returnUrl": "https://shop.example.com/order/4412?result=return",
    "basketItems": [
      {
        "sku": "5fe0adcfa7fb4",
        "name": "Бронирование номера",
        "measure": "шт.",
        "measureCode": "796",
        "grossWeight": 0,
        "netWeight": 0,
        "quantity": 3,
        "amount": 122.00,
        "amountWoVat": 100.00,
        "totalAmount": 366.00,
        "totalVatAmount": 66.00,
        "vatCode": "RUS_VAT22",
        "type": "service",
        "paymentType": "full_prepayment"
      }
    ],
    "customer": {
      "type": "legal",
      "name": "ООО «Ромашка»",
      "phone": "79001112233",
      "email": "buh@example.invbox.ru",
      "vatNumber": "7701234560",
      "taxRegistrationReasonCode": "770101001"
    }
  }'

Ответ (по схеме):

{
  "data": {
    "id": "01771534-1a57-f184-dee3-ebeb91dded75",
    "description": "string",
    "currencyId": "RUB",
    "amount": 100.5,
    "vatAmount": 100.5,
    "basketItems": [
      {
        "sku": "string",
        "name": "string",
        "groupName": "string",
        "measure": "string",
        "measureCode": "string",
        "originCountry": "string",
        "originCountryCode": "string",
        "grossWeight": 100.5,
        "netWeight": 100.5,
        "quantity": 100.5,
        "amount": 100.5,
        "amountWoVat": 100.5,
        "totalAmount": 100.5,
        "totalVatAmount": 100.5,
        "vatCode": "RUS_VAT22",
        "type": "string",
        "gtdNumber": "string",
        "paymentType": "string",
        "excise": 100.5,
        "metaData": {},
        "tnved": "string",
        "rnpt": "string",
        "gtin": "string",
        "category": "string",
        "categoryType": "string",
        "serviceDate": "2026-08-03T12:00:00+03:00"
      }
    ],
    "merchantId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "status": "string",
    "shipmentStatus": "string",
    "subtype": "string",
    "processingStatus": "string",
    "createdAt": "2026-08-03T12:00:00+03:00",
    "merchantOrderId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "merchantOrderIdVisible": "string",
    "expirationDate": "2026-08-03T12:00:00+03:00",
    "metaData": {},
    "customerData": {},
    "notificationUrl": "string",
    "orderSetting": {
      "roundPolicy": "string",
      "disableValidate": false
    },
    "internalProperty": {
      "guarantee": false,
      "hold": false,
      "rtp": false,
      "agent": false,
      "rtpExternal": false
    },
    "tags": {},
    "shopId": 1,
    "sourceId": "l3",
    "paidAt": "2026-08-03T12:00:00+03:00",
    "parentId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "returnUrl": "string",
    "successUrl": "string",
    "failUrl": "string",
    "paymentUrl": "string",
    "paymentUrlType": "redirect",
    "paymentPageUrl": "string",
    "customer": {
      "type": "string",
      "name": "string",
      "phone": "string",
      "email": "string",
      "vatNumber": "string",
      "countryId": "01771534-1a57-f184-dee3-ebeb91dded75",
      "registrationAddress": "string",
      "taxRegistrationReasonCode": "string"
    },
    "languageId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "contactId": 1,
    "contactCounterpartyId": 1,
    "processable": false,
    "userAccountId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "invoiceSetting": {
      "customerLocked": false,
      "customerLockedFields": {},
      "customerHiddenFields": {},
      "paymentMethodIdLocked": false,
      "paymentMethodId": 1,
      "savePaymentData": false,
      "clientId": "01771534-1a57-f184-dee3-ebeb91dded75",
      "paymentToken": "string",
      "paymentMethodCode": "string",
      "paymentMethodAutosubmit": false,
      "bankDetailId": 1
    },
    "orderContainerId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "paymentInfo": {},
    "holdTill": "2026-08-03T12:00:00+03:00",
    "additionalOrderId": "01771534-1a57-f184-dee3-ebeb91dded75",
    "shipmentTotalAmount": "string",
    "shipmentTotalVatAmount": "string"
  },
  "metaData": {
    "totalCount": 1,
    "pageSize": 1,
    "page": 1
  },
  "extendedData": [
    {
      "type": "string",
      "data": {}
    }
  ]
}

Адреса возврата в примере — адреса вашего магазина: shop.example.com стоит вместо них, чтобы пример нельзя было принять за настоящий сайт. В консоли «Выполнить» портал подставляет свои демонстрационные экраны — их можно открыть и посмотреть, что увидит покупатель: успешная оплата, ошибка оплаты, возврат без оплаты. Туда же портал подставляет свой адрес уведомлений, поэтому оплату демо-заказа видно в песочнице на быстром старте.

Как считаются суммы

Енот сверяет сумму счёта с калькулятором

Половина отказов при создании заказа — это расхождение сумм. Правило простое:

  • amount заказа равен сумме totalAmount всех позиций корзины;
  • vatAmount заказа равен сумме totalVatAmount всех позиций;
  • в позиции amount — цена одной единицы, totalAmount — за всё количество (quantity × amount);
  • amountWoVat — цена единицы без НДС; сумма без НДС и сумма НДС вместе дают totalAmount;
  • строгость сверки задаёт orderSetting.roundPolicy (по умолчанию none).

Если суммы не сходятся, API отвечает ошибкой wrong_total_vat_amount — расшифровка и остальные коды в справочнике ошибок.

Ставка НДС передаётся кодом в поле vatCode позиции: с 2026 года основная ставка — 22 % (RUS_VAT22 — НДС в цене, RUS_VAT22_ADDED — НДС сверху). Полный перечень — в справочнике ставок.

Фискальные поля позиции

Чек формирует онлайн-касса, а данные для него берутся из позиций корзины. Реквизиты чека, которые в 54-ФЗ называются тегами, передаются обычными полями:

Реквизит чекаПоле позицииСправочник
Признак предмета расчёта (тег 1212)typeзначения
Признак способа расчёта (тег 1214)paymentTypeзначения в таблице BasketItem
Ставка НДСvatCodeставки НДС
Единица измеренияmeasureCodeОКЕИ

Как устроена фискализация и когда чек попадает покупателю — онлайн-касса.

Пока заказ не оплачен

Созданный заказ не высечен в камне:

  • сумму и состав можно изменить — новый заказ создавать не нужно;
  • ненужный заказ отменяют;
  • когда наступает время из expirationDate, заказ сам переходит в статус expired: оплатить по прежней ссылке нельзя, нужен новый заказ. О переходе магазин узнаёт из уведомления о смене статуса — обработайте этот статус, иначе заказ останется в вашей системе «ждущим оплаты» навсегда.

Повтор после сбоя и таймаута

Сеть обрывается на самом неудачном месте: запрос ушёл, ответ не вернулся, и магазин не знает, создан ли заказ.

Сразу о главном: по умолчанию уникальность merchantOrderId не проверяется. Номер можно передать любой, в том числе уже использованный, — и на тот же номер создастся второй заказ. Значит слепой повтор после таймаута приводит к двум счетам на одну покупку, а идемпотентности у создания заказа нет ни полной, ни частичной.

Порядок действий, который от этого защищает:

  1. Сохраните merchantOrderId до отправки запроса и не меняйте его при повторах — он строится из номера покупки в вашей системе, а не из случайного числа.

  2. Если ответ не пришёл (таймаут, обрыв, 5xx), не отправляйте создание заново. Сначала спросите, есть ли заказ — созданный заказ виден в выборке сразу, поэтому пустой ответ означает, что заказа нет, и ждать не нужно:

    GET /v3/filter/api/order/order?merchantOrderId=O-12345
    
  3. Заказ нашёлся — сверьте merchantId, сумму и состав с тем, что отправляли, и берите из него id и paymentUrl.

  4. По номеру нашлось несколько заказов — остановите автоматическую обработку и разберитесь вручную. Выбирать «последний по createdAt» нельзя: скорее всего дубль создал предыдущий неудачный повтор, и лишние счёта нужно отменить, а не тихо выбрать один из них.

  5. Заказ не нашёлся — повторите создание с тем же номером.

  6. Новый номер генерируйте только для новой покупки. Новый номер после неудачи — это второй заказ на ту же покупку: покупатель увидит два счёта, а магазин — двойную выручку в отчётах.

Внимание

Порядок «проверил — создал» защищает от одиночного таймаута, но не от гонки: два воркера, обрабатывающие одну покупку одновременно, оба увидят пустую выборку и оба создадут заказ. Если создание может запускаться параллельно (очередь с повторами, несколько инстансов), нужен замок на вашей стороне — уникальный индекс по номеру покупки в вашей базе или распределённая блокировка на время «проверка + создание». Найденные дубли разбираются человеком: лишний счёт отменяется, а не выбирается «последний по дате».

Важно

Проверку уникальности можно включить на стороне Инвойсбокс: это настройка магазина, тумблер «Проверять уникальность номера заказа» на вкладке магазина в личном кабинете (Мои продажи → Магазины → Общая информация). С включённой проверкой повторный номер вернёт ошибку merchant_order_id_duplicate — это страховка от второго заказа, а не замена порядку выше: ответ первого запроса повтор всё равно не вернёт, id и paymentUrl придётся получить выборкой. Для боевого запуска считайте включение проверки обязательным пунктом, а не советом: это единственная серверная защита от гонки двух воркеров — он есть и в чеклисте запуска. Проверить, что настройка включена, просто: повторный POST с уже использованным номером должен вернуть merchant_order_id_duplicate.

Что можно повторять

Что случилосьЧтение (GET)Создание, возврат, отмена
Таймаут или обрыв связиповторить сразурезультат неизвестен: сначала выборка по merchantOrderId, повтор — только если операции нет
5xxповторить с задержкойто же: запрос мог дойти и выполниться
429 — превышен лимит частотыповторить с растущей задержкойповторить с растущей задержкой: до операции запрос не дошёл
Прочие 4xxне повторятьне повторять: причина в данных запроса, а не в связи

Задержку увеличивайте от попытки к попытке (например, 1, 2, 4, 8 секунд) и добавляйте случайный разброс, чтобы повторы нескольких процессов не сошлись в одну секунду. Заголовка Retry-After в ответах нет — паузу выбирает магазин.

Возврат и отмена

Правило то же, меняется только запрос, которым вы проверяете результат.

Возврат. У каждого возврата свой merchantOrderId — по нему и ищите:

GET /v3/filter/api/order/refund-order?merchantOrderId=R-12345

Нашёлся — возврат создан, работайте с ним. Не нашёлся — повторяйте создание с тем же номером. Новый номер после неудачи означает второй возврат по тому же заказу.

Отмена заказа. Прочитайте заказ и посмотрите статус: canceled — отмена прошла, повторять нечего. Заказ в статусе created — отмену можно повторить безопасно: у неоплаченного заказа отмена не имеет денежного эффекта.

Осторожно с остальными статусами: денежный эффект отмены зависит от состояния заказа, а между вашим чтением и повтором оно может измениться. У заказа, оплаченного гарантийным инструментом, отмена запускает настоящий возврат гарантийного платежа — см. семантику отмены. Поэтому для completed, hold и любого неожиданного статуса автоматический повтор запрещён: остановите обработку и передайте заказ человеку. Автомат повторяет только то, чей эффект одинаков при любом исходе гонки.

CreateOrderRequest

СвойствоТипОписаниеПример значения
description *string(1000)Описание заказаОплата номера в отеле
merchantId *string(36)Идентификатор магазина. В примерах на этой странице стоит демо-магазин — свой возьмите в личном кабинете, вкладка «Интеграция (API)»ffffffff-ffff-ffff-ffff-ffffffffffff
merchantOrderId *string(100)Идентификатор заказа в учётной системе магазина, должен быть уникальнымO-12345
merchantOrderIdVisiblestring(100)Номер заказа, отображаемый на платежной странице. Если не заполнено, показывается значение из merchantOrderId111TN22-33
amount *floatСумма заказа, ограничений нет19658.45
vatAmount *floatСумма НДС156.56
currencyId *string(3) enumКод валюты заказа в соответствии с ISO 4217RUB, USD,EUR, GBP
languageIdstring(2) enumЯзык интерфейса платежной страницыru, en
expirationDate *datetimeСрок действия заказа2026-12-22T00:00:00+00:00
basketItems *array of BasketItemКорзина заказа
metaDataobjectДополнительные данные заказа
customer *CustomerИнформация о заказчике
notificationUrlstring(1000)URL для отправки уведомлений об изменениях статуса заказа, по умолчанию используется URL из настроек магазина
successUrlstring(1000)Ссылка для перехода на сайт Магазина в случае успешной оплатыhttps://shop.example.com/order/4412?result=success
failUrlstring(1000)Ссылка для перехода на сайт Магазина в случае ошибки оплатыhttps://shop.example.com/order/4412?result=fail
returnUrlstring(1000)Ссылка для возврата на сайт Магазина (кнопка «вернуться в магазин» на платёжной странице)https://shop.example.com/order/4412?result=return
invoiceSettingInvoiceSettingДополнительные настройки параметров оплаты
orderSettingOrderSettingДополнительные настройки параметров заказа
parentIdstring(36)Идентификатор базового заказа, применимо для создания корректирующих заказов01771534-196a-1105-839a-82422289d6d9
orderContainerIdstring(36)Идентификатор основного заказа, применимо для добавления заказа к уже существующему счёту01771534-196a-1105-839a-82422289d6d9
shopIdstring(36)Идентификатор связанного магазина/маркетплейса06581534-196a-1105-839a-82422289d6d8
userAccountIdstring(36)Идентификатор программы лояльности06581534-196a-1105-839a-82422289d6d7
processableboolПризнак процессингового заказа: true — расчёты проходят в биллинге Инвойсбокс (по умолчанию), falseнепроцессинговый заказ: оплату принимает магазин, а Инвойсбокс формирует документыtrue, false
subtypestring(36)Подтип заказа, возможные значения order - обычный заказ (по умолчанию). hold - заказ с холдированиемorder, hold

OrderResponse

Повторяет свойства объекта CreateOrderRequest с дополнительными свойствами:

СвойствоТипОписаниеПример значения
id *string(36)Идентификатор заказа в системе Инвойсбокс01771534-1a57-f184-dee3-ebeb91dded75
paymentUrl *string(1000)Ссылка для перехода на платёжный шлюз для оплаты заказа
createdAt *datetimeДата создания заказа2026-12-22T00:00:00+00:00
status *string(50) enumСтатус заказа: created — ожидает оплаты, completed — успешная оплата, hold — средства захолдированыcompleted, hold
paidAtdatetimeДата оплаты заказа (если оплачен)2026-12-22T00:00:00+00:00
paymentInfoPaymentInfoИнформация об оплате и плательщике{"maskedPan": "220024**0954", "expiration": "202601", "paymentSystem": "MIR", "cardholderName": "CARDHOLDER NAME"}
holdTilldatetimeДата и время списания холдированных средств (для заказов с подтипом hold)2026-08-03T12:00:00+03:00

Важно

В зависимости от сценария использования API, ссылка для перехода на платёжный шлюз (paymentUrl) может быть получена для переадресации пользователя в браузере или же закодирована в QR-коде для дальнейшего его сканирования камерой или приложением Инвойсбокс.

Customer

СвойствоТипОписаниеПример значения
typestring(10) enumТип заказчикаlegal - юр. лицо, private - физ лицо
namestring(500)Наименование или имяООО «Ромашка»
phonestring(100)Номер телефона79001112233
emailstring(100)Электронная почтаbuh@example.invbox.ru
vatNumberstring(20)ИНН7701234560
taxRegistrationReasonCodestring(9)КПП770101001
registrationAddressstring(1000)Юр. адрес, включая почтовый индекс190000, Санкт-Петербург, Невский пр. 147, офис 321

Примеры выше собраны на плательщика-организацию: type = legal, ИНН в vatNumber, КПП в taxRegistrationReasonCode. По этим реквизитам покупателю уходят закрывающие документы. У ИП КПП нет — поле остаётся пустым. Если платит физлицо, укажите type = private: ИНН, КПП и юридический адрес тогда не нужны, а из документов формируется только фискальный чек.

BasketItem

Корзина заказа. Пожалуйста, внимательно ознакомьтесь с требованиями по заполнению наименования номенклатуры.

СвойствоТипОписание
sku *string(36)Артикул, например: 5fe0adcfa7fb4
name *string(300)Наименование, например Бронирование номера
type *string(10)Идентификатор типа позиции, в соответствии со справочником или service - Услуга, commodity - Товар
groupNamestring(500)Наименование группы позиций заказа, используется для формирования отчетных документов
measure *string(10)Единица измерения словом, например шт.. Достаточно передать одно из двух полей — единицу или код: второе сервер заполнит сам по справочнику ОКЕИ
measureCode *string(4)Код единицы измерения по ОКЕИ, например 796. Парное поле к measure: см. строку выше
originCountrystring(20)Страна происхождения товара, например, Россия
originCountryCodestring(4)Код страны происхождения, например, Россия 643
grossWeightfloatВес брутто, например 125.45
netWeightfloatВес нетто, например 125.45
quantity *floatКоличество, например 3
amount *floatСтоимость единицы, например 100.55, ограничений нет
amountWoVat *floatСтоимость единицы без учета НДС
totalAmount *floatСтоимость всех единиц с НДС, например123.55
totalVatAmount *floatИтого сумма НДС, например 23
excisefloatСумма акциза, например, 10.00
gtdNumberstring(23)Номер грузовой транспортной накладной
vatCode *string(20) enumКод ставки НДС Инвойсбокс, см. справочник - ставки НДС
serviceDatedateДата оказания услуги, если тип позиции = Услуга, например, 2023-11-16
paymentType *string(20) enumПризнак способа расчёта (тег 1214): full_prepayment, prepayment, advance, full_payment. В контракте поле помечено необязательным: если его не передать, сервер подставит значение из настроек магазина. Передавайте явно — так состав чека не зависит от настройки, которую можно поменять в кабинете
categoryTypestring(20) enumСправочник категории товаров: merchantHonestSignMap (Справочник категорий магазина) или honestSign (Честный знак)
categorystring(20) enumТоварная группа в справочнике категорий товаров магазина или системы Честный знак: milk, water и т.д.
metaDataobjectДополнительные данные элемента корзины

InvoiceSetting

СвойствоТипОписаниеПример значения
customerLockedboolЗапретить изменение реквизитов плательщика (всех)true - запретить изменения, по умолчанию false
customerLockedFieldsarrayНабор полей из Customer, которые требуется запретить для редактирования на платежной странице['type', 'name', 'phone', 'email', 'vatNumber', registrationAddress']
paymentMethodIdLockedboolЗапретить изменение способа оплаты (платёжного инструмента)true - запретить изменения, по умолчанию false
paymentMethodIdintИдентификатор предвыбранного способа оплаты (платёжного инструмента)123
paymentMethodCodestringКод предвыбранного способа оплаты. Публично доступны invoice — по счёту, invoice-rtp — счёт через Запрос о платеже, acquiring — карта, sbp — СБП. Остальные способы выдаются по запросу под конкретную интеграциюinvoice, invoice-rtp, acquiring, sbp
paymentMethodAutosubmitboolФлаг, отвечающий за автоматическое перенаправление покупателя на страницу оплаты в платежной системе, указанной в paymentMethodCode, без необходимости выбирать способ оплаты на платежной странице Инвойсбокс. Для корректной работы опции, требуется полное заполнение Customertrue
deliveryAddressstringПолный адрес доставки товараМосковская область, Московская область, городской округ Химки, Химки, Вашутинское шоссе, 6
savePaymentDataboolНеобходимо сохранить данные карты пользователя, для использования в рекуррентных платежахtrue, false
clientIdstringИдентификатор клиента в системе магазина123, c-102322

OrderSetting

СвойствоТипОписание
roundPolicystring(20)
enum
Как сверяется итоговая сумма заказа с суммой позиций. По умолчанию none. Значения: strict — строгое соответствие; none — допустимо, когда quantity × amount ≤ totalAmount; floor — округление к меньшему целому; ceil — к большему; halfUp — 0,50 к большему; halfDown — 0,50 к меньшему

PaymentInfo

СвойствоТипОписание
paymentTokenstringПлатёжный токен
cardholderNamestringИмя держателя карты
expirationstringСрок действия карты
maskedPanstringНомер карты в замаскированом виде
paymentSystemstringНазвание платёжной системы карты

Читайте также

Параметры запроса — POST

14 обязательных из 76
ПолеТипОписание
description#string≤ 1000 символовОписание заказа
currencyId *#string≤ 3 символовКод валюты заказа по ISO 4217: https://docs.invoicebox.ru/docs/dictionary/iso4217/RUBUSDEURGBP
amount *#numberот 0Сумма заказа. Денежное значение: ровно два знака после точки. В коде считайте Decimal/BigDecimal, не двоичным float
vatAmount *#numberот 0Сумма НДС заказа. Денежное значение: ровно два знака после точки. В коде считайте Decimal/BigDecimal, не двоичным float
basketItems#BillingProviderDomainOrderEntityBasketItemApiCreateCollectionКорзина заказа. Наименования попадают в фискальный чек как есть: требования к номенклатуре — https://docs.invoicebox.ru/docs/merchant/fz54/
merchantId *#stringИдентификатор магазина. В примерах документации стоит демо-магазин — свой возьмите в личном кабинете, вкладка «Интеграция (API)»
status#string≤ 50 символовСтатус заказа (в ответе): created — ожидает оплаты, completed — оплачен, hold — средства захолдированы, canceled — отменён, expired — просрочен
subtype#string≤ 100 символовПодтип заказа: order — обычный (по умолчанию), hold — заказ с холдированиемorderhold
processingStatus#string | null≤ 100 символов
merchantOrderId *#string≤ 100 символовИдентификатор заказа в учётной системе магазина, должен быть уникальным. При повторе после сбоя не меняйте номер — сначала проверьте выборкой, создался ли заказ
merchantOrderIdVisible#string | nullНомер заказа, отображаемый на платёжной странице. Если не заполнено, показывается значение из merchantOrderId
expirationDate#string | nulldate-timeСрок действия заказа. Когда наступает, заказ сам переходит в статус expired — оплатить по старой ссылке нельзя
metaData#ArrayMap | nullДополнительные данные заказа: https://docs.invoicebox.ru/docs/merchant/order/metadata/
notificationUrl#string | null≤ 1000 символовURL для уведомлений об изменениях статуса заказа; по умолчанию используется URL из настроек магазина. Только HTTPS, на localhost уведомление не придёт
orderSetting#BillingProviderDomainOrderEntityOrderSettingApiCreateДополнительные настройки параметров заказа
shopId#integer | nullИдентификатор связанного магазина или маркетплейса
parentId#stringИдентификатор базового заказа — для корректирующих заказов: https://docs.invoicebox.ru/docs/merchant/refund/correction/
returnUrl#string | nullСсылка для возврата на сайт магазина (кнопка «вернуться в магазин» на платёжной странице)
successUrl#string | nullСсылка для перехода на сайт магазина в случае успешной оплаты
failUrl#string | nullСсылка для перехода на сайт магазина в случае ошибки оплаты
customer#BillingProviderDomainOrderEntityCustomerApiCreate | nullИнформация о заказчике. По реквизитам заказчика-юрлица уходят закрывающие документы
languageId#string | nullЯзык интерфейса платёжной страницыruen
contactId#integer | null
contactCounterpartyId#integer | null
processable#booleanПризнак процессингового заказа: true — расчёты проходят в биллинге Инвойсбокса (по умолчанию); false — непроцессинговый заказ: оплату принимает магазин, а Инвойсбокс формирует документы (https://docs.invoicebox.ru/docs/merchant/order/non-processable-order/)
userAccountId#string | nullИдентификатор программы лояльности
invoiceSetting#BillingProviderDomainOrderEntityInvoiceSettingApiCreateДополнительные настройки параметров оплаты
orderContainerId#string | nullИдентификатор контейнера заказов — группы заказов, объединённых одним процессом оплаты покупателя. Указывается, чтобы добавить заказ к уже существующему счёту
paymentInfo#ArrayMap | nullИнформация об оплате и плательщике (в ответе, если заказ оплачен)
holdTill#string | nulldate-timeДата и время списания холдированных средств — для заказов с подтипом hold
Страница помогла?
postСоздание заказаДемо
curl -X POST 'https://api.invoicebox.ru/v3/billing/api/order/order' \
  -H 'Authorization: Bearer <ВАШ_ТОКЕН>' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: MyApp 1.0' \
  -d '{
  "merchantId": "ffffffff-ffff-ffff-ffff-ffffffffffff",
  "merchantOrderId": "demo-order-1786861735401",
  "amount": 12000,
  "vatAmount": 0,
  "currencyId": "RUB",
  "languageId": "ru",
  "description": "Оплата бронирования № 4412",
  "expirationDate": "2026-08-17T06:28:55+00:00",
  "successUrl": "https://shop.example.com/order/4412?result=success",
  "failUrl": "https://shop.example.com/order/4412?result=fail",
  "returnUrl": "https://shop.example.com/order/4412?result=return",
  "basketItems": [
    {
      "sku": "room-deluxe",
      "name": "Проживание в номере «Делюкс», 2 ночи",
      "measure": "шт",
      "measureCode": "796",
      "quantity": 1,
      "amount": 12000,
      "amountWoVat": 12000,
      "totalAmount": 12000,
      "totalVatAmount": 0,
      "vatCode": "RUS_VAT0",
      "type": "service",
      "paymentType": "full_prepayment"
    }
  ],
  "customer": {
    "type": "legal",
    "name": "ООО «Ромашка»",
    "vatNumber": "7701234560",
    "taxRegistrationReasonCode": "770101001",
    "phone": "79001112233",
    "email": "buh@example.invbox.ru"
  }
}'
getПолучение списка заказов магазинаДемо
curl -X GET 'https://api.invoicebox.ru/v3/billing/api/order/order' \
  -H 'Authorization: Bearer <ВАШ_ТОКЕН>' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: MyApp 1.0'