Confirm Order (Preorder Commit)
Description
The preorder_commit method performs the final order confirmation after a successful preliminary calculation via the preorder method. This method creates an order in the system, applies all calculated discounts, accrues and redeems points, and activates promo codes.
URL
Method: POST
https://example.com/api/v1.1/market/orders/preorder_commit
Request Parameters
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| token | string | "abcdefghijklmnqrstuvwxyz" | Yes | API token |
| external_id | string | "order_12345" | Yes | External order ID in the client's system |
| profile_id | string | "696e304f547840a7286619e0" | Yes* | Profile ID. One of the matching fields must be provided. |
| string | "user@example.com" | Yes* | Participant's email. One of the matching fields must be provided. | |
| phone | string | "+79991234567" | Yes* | Participant's phone number. One of the matching fields must be provided. |
| skip_triggers | boolean | false | No | Disable trigger execution upon order creation. Default is false. |
| data | object | { | Yes | Object containing order data. Includes required fields and structure. |
* — To identify the profile, one of the parameters must be provided: profile_id, email, or phone.
data Object
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| endpoint | string | "bot", "website" | Yes | Order source (touchpoint). Must be configured in the Market. |
| status | string | "new", "confirmed", "paid" | Yes | Order status. Use statuses configured in the system. |
| currency | string | "RUB", "USD", "EUR" | Yes | Order currency (three-letter ISO code). |
| total_price | string | "2500.00" | Yes | Total order cost before discounts. |
| final_total_price | string | "2150.00" | Yes | Final order cost after all discounts. Required field for preorder_commit! |
| delivery_cost | string | "300.00" | No | Delivery cost. |
| create_time | string (ISO 8601) | "2026-02-18T13:01:05.141Z" | No | Order creation date and time. If not provided, the server's current time is used. |
| region | string | "region_moscow" | No | Region identifier for applying regional prices and promotions. |
| lines | array | See Order Lines Object | Yes | Array of order items. Must contain at least 1 element. |
| promocodes | array | See Promocode Object | No | Array of promo codes applied to the order. |
| redeem_points | array | See Redeem Points Object | Yes, if requested_promotions contains type="redeem_points" | Array of point redemptions by currency type. |
| custom_fields | object | {"field1": "value1", "field2": "value2"} | No | Additional order fields. |
| tags | array | ["summer_sale", "first_order"] | No | Tags for labeling the order. |
Required Fields in data Object
| Parameter | Type | Example | Description |
|---|---|---|---|
| endpoint | string | "bot" | Touchpoint (order source). Must be configured. |
| status | string | "confirmed" | Order status. |
| currency | string | "RUB" | Order currency (three-letter ISO code). |
| total_price | string | "2500.00" | Total order cost before discounts. |
| final_total_price | string | "2150.00" | Final order cost after all discounts. Required! |
| lines | array | See below | Array of order items. Minimum 1 element. |
Order Lines Object (commit)
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| external_id | string | "line_1" | Yes | External line ID in the client's system. |
| product | string | "iphone17pmb256" | Yes* | Product ID. Either product or sku must be provided. |
| sku | string | "IPHONE17-256-BLACK" | Yes* | SKU ID. Either product or sku must be provided. |
| line_number | integer | 1 | No | Sequential number of the line within the order. |
| count | integer | 1 | Yes | Quantity of the item. |
| base_price_per_item | string | "139999.00" | Yes | Base price per item. |
| min_price_per_item | string | "130000.00" | No | Minimum allowed price per item. |
| final_price_per_item | string | "139500.00" | Yes | Final price per item after all discounts. Required field! |
| status | string | "new" | No | Status of the order line. |
| custom_fields | object | {"color": "black", "size": "XL"} | No | Additional fields for the line. |
| requested_promotions | array | See Promotion Object | No | Promotions applied to this specific line (from the /preorder response). Pass the structure from the applied_promotions field of the /preorder response for the corresponding order line. |
* — Either product or sku is required.
Required Fields in Order Lines Object
| Parameter | Type | Example | Description |
|---|---|---|---|
| external_id | string | "line_1" | External line ID. |
| product or sku | string | "popit" | Product ID or SKU ID (one is required). |
| base_price_per_item | string | "1500.00" | Base price per item. |
| final_price_per_item | string | "1350.00" | Final price per item after all discounts. Required! |
| count | integer | 1 | Quantity of the item. |
Promocode Object
For a full description of the promo code structure, see the Promocode Object section in the developer documentation.
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| code | string | "SUMMER20" | Yes | Promo code. |
| pool_id | integer | 42 | Yes | Promo code pool ID. |
Redeem Points Object
For a full description of the points redemption structure, see the Redeem Points section in the developer documentation.
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| points_currency_iid | integer | 1 | Yes* | Internal ID of the points currency type. |
| points_currency_eid | string | "bonus1" | Yes* | External ID of the points currency type. |
| name | string | "Bonus Points" | No | Name of the points currency type. |
| amount | integer | 499 | Yes | Number of points to redeem. |
* — Either points_currency_iid or points_currency_eid is required.
Promotion Object
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| type | string | "discount", "accrue_points", "redeem_points", "code_issue", "message" | Yes | Promotion type. |
| promotion | object | {"external_id": "promo_1", "name": "Summer Sale"} | Yes | Object containing the promotion's ID and name. |
| amount | string | "150.00" | For type=discount/accrue_points/redeem_points | Discount amount or number of points. |
| points_info | object | See Points Info Object | For type=accrue_points/redeem_points | Information about points. |
Points Info Object
| Parameter | Type | Example | Required | Description |
|---|---|---|---|---|
| points_currency_iid | integer | 1 | Yes* | Internal ID of the points currency type. |
| points_currency_eid | string | "bonus1" | Yes* | External ID of the points currency type. |
| name | string | "Bonus Points" | No | Name of the points currency type. |
| amount | string | "6999" | Yes | Number of points. |
| expiration_date | string (ISO 8601) | "2027-02-18T00:00:00.000Z" | No | Expiration date for accrued points. |
* — Either points_currency_iid or points_currency_eid is required.
Request Example
- JSON
- XML
{
"token": "abcdefghijklmnqrstuvwxyz",
"external_id": "order_12345",
"profile_id": "696e304f547840a7286619e0",
"skip_triggers": false,
"data": {
"endpoint": "bot",
"status": "confirmed",
"currency": "RUB",
"total_price": "2500.00",
"final_total_price": "2150.00",
"delivery_cost": "300.00",
"create_time": "2026-02-18T13:01:05.141Z",
"region": "region_moscow",
"lines": [
{
"external_id": "line_1",
"product": "popit",
"base_price_per_item": "1500.00",
"final_price_per_item": "1350.00",
"count": 1,
"requested_promotions": [
{
"type": "discount",
"promotion": {
"external_id": "promo_1",
"name": "Summer Sale"
},
"amount": "150.00"
},
{
"type": "accrue_points",
"promotion": {
"external_id": "bonus_promo",
"name": "Accrue Points"
},
"points_info": {
"points_currency_iid": 1,
"points_currency_eid": "bonus1",
"name": "Bonus Points",
"amount": "75"
}
}
]
},
{
"external_id": "line_2",
"sku": "skuf",
"base_price_per_item": "700.00",
"min_price_per_item": "650.00",
"final_price_per_item": "650.00",
"count": 2,
"requested_promotions": [
{
"type": "redeem_points",
"promotion": {
"external_id": "redeem_promo",
"name": "Redeem Points"
},
"points_info": {
"points_currency_iid": 1,
"points_currency_eid": "bonus1",
"name": "Bonus Points",
"amount": "50"
}
}
]
}
],
"promocodes": [
{
"code": "HYDO-4728-DZGU",
"pool_id": 42
}
],
"redeem_points": [
{
"points_currency_eid": "bonus1",
"amount": 100
}
],
"requested_promotions": [
{
"type": "code_issue",
"promotion": {
"external_id": "welcome_promo",
"name": "Welcome Gift"
}
}
],
"custom_fields": {
"source": "telegram_bot",
"campaign": "spring_sale"
},
"tags": ["premium", "first_order"]
}
}
<xml>
<token>abcdefghijklmnqrstuvwxyz</token>
<external_id>order_12345</external_id>
<profile_id>696e304f547840a7286619e0</profile_id>
<skip_triggers>false</skip_triggers>
<data>
<endpoint>bot</endpoint>
<status>confirmed</status>
<currency>RUB</currency>
<total_price>2500.00</total_price>
<final_total_price>2150.00</final_total_price>
<delivery_cost>300.00</delivery_cost>
<create_time>2026-02-18T13:01:05.141Z</create_time>
<region>region_moscow</region>
<lines>
<external_id>line_1</external_id>
<product>popit</product>
<base_price_per_item>1500.00</base_price_per_item>
<final_price_per_item>1350.00</final_price_per_item>
<count>1</count>
<requested_promotions>
<type>discount</type>
<promotion>
<external_id>promo_1</external_id>
<name>Summer Sale</name>
</promotion>
<amount>150.00</amount>
</requested_promotions>
<requested_promotions>
<type>accrue_points</type>
<promotion>
<external_id>bonus_promo</external_id>
<name>Accrue Points</name>
</promotion>
<points_info>
<points_currency_iid>1</points_currency_iid>
<points_currency_eid>bonus1</points_currency_eid>
<name>Bonus Points</name>
<amount>75</amount>
</points_info>
</requested_promotions>
</lines>
<lines>
<external_id>line_2</external_id>
<sku>skuf</sku>
<base_price_per_item>700.00</base_price_per_item>
<min_price_per_item>650.00</min_price_per_item>
<final_price_per_item>650.00</final_price_per_item>
<count>2</count>
<requested_promotions>
<type>redeem_points</type>
<promotion>
<external_id>redeem_promo</external_id>
<name>Redeem Points</name>
</promotion>
<points_info>
<points_currency_iid>1</points_currency_iid>
<points_currency_eid>bonus1</points_currency_eid>
<name>Bonus Points</name>
<amount>50</amount>
</points_info>
</requested_promotions>
</lines>
<promocodes>
<code>HYDO-4728-DZGU</code>
<pool_id>42</pool_id>
</promocodes>
<redeem_points>
<points_currency_eid>bonus1</points_currency_eid>
<amount>100</amount>
</redeem_points>
<requested_promotions>
<type>code_issue</type>
<promotion>
<external_id>welcome_promo</external_id>
<name>Welcome Gift</name>
</promotion>
</requested_promotions>
</data>
</xml>
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| data | object | Data resulting from the confirmation |
| error | int | Error code (0 on success) |
| error_text | string | Error text |
data Object
| Parameter | Type | Description |
|---|---|---|
| status | string | Processing status: • success — order successfully created• outdated — price changed since pre-calculation (need to repeat /preorder) |
| processing_target | string | Only for success status. Value: immediate or processed |
| external_id | string | External order ID (from the request) |
| issued_promocodes | array | Array of issued promo codes (for code_issue type promotions). See object structure below. |
| points_changes | array | Array of point balance changes by currency type. See object structure below. |
| contents | array | Array of content for display (text messages from promotions). See object structure below. |
Issued Promocodes Object
| Parameter | Type | Description |
|---|---|---|
| codes | array | Array of issued promo codes. |
| pool | object | Information about the promo code pool. |
| pool.pool_id | integer | Pool ID. |
| pool.name | string | Pool name. |
| promotion | object | Information about the promotion. |
| promotion.external_id | string | External ID of the promotion. |
| promotion.name | string | Name of the promotion. |
Points Changes Object
| Parameter | Type | Description |
|---|---|---|
| points_info | object | Information about the points currency type. |
| points_info.points_currency_iid | integer | Internal ID of the points currency type. |
| points_info.points_currency_eid | string | External ID of the points currency type. |
| points_info.name | string | Name of the points currency type. |
| points_info.amount | string | Current balance after the operation. |
| accrue_points | integer | Number of points accrued. |
| redeem_points | integer | Number of points redeemed. |
Contents Object
| Parameter | Type | Description |
|---|---|---|
| promotion | object | Information about the promotion that generated the content. |
| promotion.external_id | string | External ID of the promotion. |
| promotion.name | string | Name of the promotion. |
| contents | array | Array of content items. |
| contents[].type | string | Type of content (e.g., "text"). |
| contents[].message | string | The content message. |
Response Example
- JSON (success)
- JSON (outdated)
- XML (success)
{
"data": {
"status": "success",
"processing_target": "immediate",
"external_id": "order_12345",
"issued_promocodes": [
{
"codes": ["HYDO-4728-DZGU"],
"pool": {
"pool_id": 100,
"name": "Welcome Promocodes"
},
"promotion": {
"external_id": "welcome_promo",
"name": "Welcome Gift"
}
}
],
"points_changes": [
{
"points_info": {
"points_currency_iid": 1,
"points_currency_eid": "bonus1",
"name": "Bonus Points",
"amount": "21500"
},
"accrue_points": 75,
"redeem_points": 150
}
],
"contents": [
{
"promotion": {
"external_id": "message_promo",
"name": "Info Message"
},
"contents": [
{
"type": "text",
"message": "Thank you for your purchase! You received 75 bonus points."
}
]
}
]
},
"error": 0,
"error_text": "Successful operation"
}
{
"data": {
"status": "outdated",
"external_id": "order_12345"
},
"error": 0,
"error_text": "Price has been changed since preorder calculation"
}
<xml>
<data>
<status>success</status>
<processing_target>immediate</processing_target>
<external_id>order_12345</external_id>
<issued_promocodes>
<codes>HYDO-4728-DZGU</codes>
<pool>
<pool_id>100</pool_id>
<name>Welcome Promocodes</name>
</pool>
<promotion>
<external_id>welcome_promo</external_id>
<name>Welcome Gift</name>
</promotion>
</issued_promocodes>
<points_changes>
<points_info>
<points_currency_iid>1</points_currency_iid>
<points_currency_eid>bonus1</points_currency_eid>
<name>Bonus Points</name>
<amount>21500</amount>
</points_info>
<accrue_points>75</accrue_points>
<redeem_points>150</redeem_points>
</points_changes>
<contents>
<promotion>
<external_id>message_promo</external_id>
<name>Info Message</name>
</promotion>
<contents>
<type>text</type>
<message>Thank you for your purchase! You received 75 bonus points.</message>
</contents>
</contents>
</data>
<error>0</error>
<error_text>Successful operation</error_text>
</xml>
Error Codes
| Code | Description |
|---|---|
| 0 | Successful execution. |
| 400 | Validation error or business logic error. |
| 401 | Invalid or missing token. |
| 404 | Profile not found. |
| 409 | Conflict: an order with this external_id already exists. |
| 500 | Internal service error. |