/v1/order/create

Request for validation or creation of an order on the merchant side.

In the request parameters, it passes a cart with items and their prices, selected delivery method, and the total order cost (orderAmount). The merchant checks that the prices and items in the cart are correct.

If the cart is correct, the merchant reserves the items for 30 minutes and responds with the success code to the Yandex Pay backend. Within 30 minutes, the Yandex Pay backend should send a notification about the payment status. The merchant can also poll the order status by the order details handle in the Yandex Pay API.

If the cart is correct, the merchant reserves the items for 30 minutes and responds by the success code with the order ID. If the merchant doesn't get the notification about the change in the order payment status within 30 minutes, you need to get the order details synchronously before releasing the items.

Warning

Only after receiving the FAILED payment status, the merchant can release the items and mark the order as canceled.

If the merchant receives code 4xx in response, the validation of the order is considered unsuccessful, the order won't be paid, and there won't be any repeat attempts to check the order. In the case of response 5xx, the request is repeated.

Request

POST

https://example.merchant.ru/v1/order/create

Production

POST

https://sandbox.example.merchant.ru/v1/order/create

Sandbox

Body

application/json
{
    "billingContact": {
        "email": "string",
        "firstName": "string",
        "lastName": "string",
        "phone": "string",
        "phoneAdditionalCode": "string",
        "secondName": "string"
    },
    "cart": {
        "cartId": "string",
        "coupons": [
            {
                "description": "string",
                "status": "VALID",
                "value": "string"
            }
        ],
        "discounts": [
            {
                "amount": "123.45",
                "description": "string",
                "discountId": "string"
            }
        ],
        "externalId": "string",
        "items": [
            {
                "description": "string",
                "discountedUnitPrice": "123.45",
                "finalPrice": "123.45",
                "measurements": {
                    "height": 0,
                    "length": 0,
                    "weight": 0,
                    "width": 0
                },
                "pointsAmount": "123.45",
                "productId": "string",
                "quantity": {
                    "available": "123.45",
                    "count": "123.45",
                    "label": "string"
                },
                "receipt": {
                    "agent": {
                        "agentType": 1,
                        "operation": "string",
                        "paymentsOperator": {
                            "phones": [
                                "string"
                            ]
                        },
                        "phones": [
                            "string"
                        ],
                        "transferOperator": {
                            "address": "string",
                            "inn": "string",
                            "name": "string",
                            "phones": [
                                "string"
                            ]
                        }
                    },
                    "excise": "123.45",
                    "markQuantity": {
                        "denominator": 0,
                        "numerator": 0
                    },
                    "measure": 0,
                    "paymentMethodType": 1,
                    "paymentSubjectType": 1,
                    "productCode": "string",
                    "supplier": {
                        "inn": "string",
                        "name": "string",
                        "phones": [
                            "string"
                        ]
                    },
                    "tax": 1,
                    "title": "string"
                },
                "subtotal": "123.45",
                "title": "string",
                "total": "123.45",
                "type": "PHYSICAL",
                "unitPrice": "123.45"
            }
        ],
        "measurements": {
            "height": 0,
            "length": 0,
            "weight": 0,
            "width": 0
        },
        "total": {
            "amount": "123.45",
            "label": "string",
            "pointsAmount": "123.45"
        }
    },
    "currencyCode": "RUB",
    "merchantId": "c3073b9d-edd0-49f2-a28d-b7ded8ff9a8b",
    "metadata": "string",
    "orderAmount": "123.45",
    "orderId": "string",
    "paymentMethod": {
        "cardLast4": "string",
        "cardNetwork": "AMEX",
        "methodType": "CARD"
    },
    "shippingAddress": {
        "addressLine": "string",
        "building": "string",
        "comment": "string",
        "country": "string",
        "district": "string",
        "entrance": "string",
        "floor": "string",
        "intercom": "string",
        "locale": "string",
        "locality": "string",
        "location": {
            "latitude": 0,
            "longitude": 0
        },
        "region": "string",
        "room": "string",
        "street": "string",
        "zip": "string"
    },
    "shippingContact": {
        "email": "string",
        "firstName": "string",
        "lastName": "string",
        "phone": "string",
        "phoneAdditionalCode": "string",
        "secondName": "string"
    },
    "shippingMethod": {
        "courierOption": {
            "allowedPaymentMethods": [
                "CARD"
            ],
            "amount": "123.45",
            "category": "EXPRESS",
            "courierOptionId": "string",
            "customerChoice": {
                "date": "string",
                "time": {
                    "end": "string",
                    "start": "string"
                }
            },
            "fromDate": "string",
            "fromTime": "string",
            "provider": "BOXBERRY",
            "receipt": {
                "agent": {
                    "agentType": 1,
                    "operation": "string",
                    "paymentsOperator": {
                        "phones": [
                            "string"
                        ]
                    },
                    "phones": [
                        "string"
                    ],
                    "transferOperator": {
                        "address": "string",
                        "inn": "string",
                        "name": "string",
                        "phones": [
                            "string"
                        ]
                    }
                },
                "excise": "123.45",
                "markQuantity": {
                    "denominator": 0,
                    "numerator": 0
                },
                "measure": 0,
                "paymentMethodType": 1,
                "paymentSubjectType": 1,
                "productCode": "string",
                "supplier": {
                    "inn": "string",
                    "name": "string",
                    "phones": [
                        "string"
                    ]
                },
                "tax": 1,
                "title": "string"
            },
            "timeIntervals": {
                "grid": {
                    "duration": "string",
                    "end": "string",
                    "start": "string",
                    "step": "string"
                },
                "type": "GRID",
                "values": [
                    {
                        "end": "string",
                        "start": "string"
                    }
                ]
            },
            "title": "string",
            "toDate": "string",
            "toTime": "string",
            "type": "PLAIN"
        },
        "methodType": "DIRECT",
        "pickupOption": {
            "address": "string",
            "allowedPaymentMethods": [
                "CARD"
            ],
            "amount": "123.45",
            "description": "string",
            "fromDate": "string",
            "location": {
                "latitude": 0,
                "longitude": 0
            },
            "phones": [
                "string"
            ],
            "pickupPointId": "string",
            "provider": "YANDEX_MARKET",
            "receipt": {
                "agent": {
                    "agentType": 1,
                    "operation": "string",
                    "paymentsOperator": {
                        "phones": [
                            "string"
                        ]
                    },
                    "phones": [
                        "string"
                    ],
                    "transferOperator": {
                        "address": "string",
                        "inn": "string",
                        "name": "string",
                        "phones": [
                            "string"
                        ]
                    }
                },
                "excise": "123.45",
                "markQuantity": {
                    "denominator": 0,
                    "numerator": 0
                },
                "measure": 0,
                "paymentMethodType": 1,
                "paymentSubjectType": 1,
                "productCode": "string",
                "supplier": {
                    "inn": "string",
                    "name": "string",
                    "phones": [
                        "string"
                    ]
                },
                "tax": 1,
                "title": "string"
            },
            "schedule": [
                {
                    "fromTime": "string",
                    "label": "string",
                    "toTime": "string"
                }
            ],
            "storagePeriod": 0,
            "title": "string",
            "toDate": "string"
        },
        "yandexDeliveryOption": {
            "allowedPaymentMethods": [
                "CARD"
            ],
            "amount": "123.45",
            "category": "EXPRESS",
            "fromDatetime": "2022-12-29T18:02:01Z",
            "receipt": {
                "agent": {
                    "agentType": 1,
                    "operation": "string",
                    "paymentsOperator": {
                        "phones": [
                            "string"
                        ]
                    },
                    "phones": [
                        "string"
                    ],
                    "transferOperator": {
                        "address": "string",
                        "inn": "string",
                        "name": "string",
                        "phones": [
                            "string"
                        ]
                    }
                },
                "excise": "123.45",
                "markQuantity": {
                    "denominator": 0,
                    "numerator": 0
                },
                "measure": 0,
                "paymentMethodType": 1,
                "paymentSubjectType": 1,
                "productCode": "string",
                "supplier": {
                    "inn": "string",
                    "name": "string",
                    "phones": [
                        "string"
                    ]
                },
                "tax": 1,
                "title": "string"
            },
            "title": "string",
            "toDatetime": "2022-12-29T18:02:01Z",
            "yandexDeliveryOptionId": "string"
        }
    }
}

Name

Description

cart*

Type: Cart

Cart

currencyCode*

Type: string

Three-letter code of the order currency code (ISO 4217)

Enum: RUB

billingContact

Type: Contact

merchantId

Type: string<uuid>

metadata

Type: string

Arbitrary data transmitted at button initialization

orderAmount

Type: string<double>

Total cost of the order to be paid, including refunds, delivery costs, discounts, and promo codes

Example: 123.45

orderId

Type: string

ID assigned to the existing order on the merchant side and transmitted at button initialization

paymentMethod

Type: PaymentMethod

Selected payment method

shippingAddress

Type: Address

Delivery address is available if the COURIER method is selected

shippingContact

Type: Contact

shippingMethod

Type: ShippingMethod

Selected delivery method.

Cart

Name

Description

items*

Type: CartItem[]

Cart item

cartId

Type: string

The internal ID of the Yandex Pay cart.

The store's backend must use this parameter as the ID of the customer cart and the idempotency key for the /order/create request. If the store's backend receives a repeat /order/create request, return the existing order ID. The store's backend can create no more than one order (orderId) per cart (cartId).

coupons

Type: Coupon[]

Coupons applied to the cart

discounts

Type: Discount[]

Discounts applied to the cart

externalId

Type: string

Cart ID passed by the merchant

measurements

Type: Measurements

total

Type: CartTotal

Total cart cost that the customer is to pay

Contact

Name

Description

email

Type: string

firstName

Type: string

lastName

Type: string

phone

Type: string

phoneAdditionalCode

Type: string

secondName

Type: string

PaymentMethod

Name

Description

methodType*

Type: string

Enum: CARD, SPLIT, SBP, SPLIT_SBP, CASH_ON_DELIVERY, CARD_ON_DELIVERY

cardLast4

Type: string

cardNetwork

Type: string

Payment system

Enum: AMEX, DISCOVER, JCB, MASTERCARD, MAESTRO, VISAELECTRON, VISA, MIR, UNIONPAY, UZCARD, HUMOCARD, UNKNOWN, UNDEFINED, null

Address

Name

Description

building*

Type: string

country*

Type: string

addressLine

Type: string

Full address

comment

Type: string

district

Type: string

entrance

Type: string

floor

Type: string

intercom

Type: string

locale

Type: string

locality

Type: string

location

Type: Location

region

Type: string

room

Type: string

street

Type: string

zip

Type: string

ShippingMethod

Name

Description

methodType*

Type: string

Enum: DIRECT, PICKUP, COURIER, YANDEX_DELIVERY

courierOption

Type: CourierOption

if methodType == COURIER

pickupOption

Type: PickupOption

if methodType == PICKUP

yandexDeliveryOption

Type: YandexDeliveryOption

if methodType == YANDEX_DELIVERY

CartItem

Name

Description

productId*

Type: string

Product ID in the merchant system Make sure that each productId in the request parameters is unique.

quantity*

Type: ItemQuantity

Product quantity in the order

description

Type: string

Product description

discountedUnitPrice

Type: string<double>

Price per product unit with discount per item

Example: 123.45

finalPrice

Type: string<double>

Price per product unit with all discounts per item and on the cart

Example: 123.45

measurements

Type: Measurements

Product dimensions and weight. Required for the PHYSICAL product

pointsAmount

Type: string<double>

Number of Plus points

Example: 123.45

receipt

Type: ItemReceipt

Data for receipt generation

subtotal

Type: string<double>

Total price per item without discount

Example: 123.45

title

Type: string

Product name

total

Type: string<double>

Total price per item with item discount

Example: 123.45

type

Type: string

Product type. Important for integrating with delivery services

Default: UNSPECIFIED

Enum: PHYSICAL, DIGITAL, UNSPECIFIED

unitPrice

Type: string<double>

Total price per product unit without discount

Example: 123.45

Coupon

Name

Description

value*

Type: string

Coupon code

description

Type: string

Description For example, "3% discount"

status

Type: string

Enum: VALID, INVALID, EXPIRED, null

Discount

Name

Description

amount*

Type: string<double>

Discount amount

Example: 123.45

description*

Type: string

Text description

discountId*

Type: string

Discount ID in the merchant system

Measurements

Name

Description

height*

Type: number<float>

Height, in meters

length*

Type: number<float>

Length, in meters

weight*

Type: number<float>

Weight, in kilograms

width*

Type: number<float>

Width, in meters

CartTotal

Name

Description

amount*

Type: string<double>

Cart cost with all discounts

Example: 123.45

label

Type: string

Name of measurement units, for example, "kg" or "pcs"

pointsAmount

Type: string<double>

Number of plus points

Example: 123.45

Location

Name

Description

latitude*

Type: number<float>

longitude*

Type: number<float>

CourierOption

Name

Description

amount*

Type: string<double>

Delivery cost

Example: 123.45

category*

Type: string

Enum: EXPRESS, TODAY, STANDARD

courierOptionId*

Type: string

ID of the selected delivery method in the merchant system

title*

Type: string

Delivery method name. Shown to the user in the option list

allowedPaymentMethods

Type: string[]

Individual payment methods for the delivery method. Use this parameter if you want to restrict the payment methods specified in availablePaymentMethods. If the parameter is omitted, all the payment methods listed in availablePaymentMethods are used.

Enum: CARD, SPLIT, CASH_ON_DELIVERY, CARD_ON_DELIVERY

customerChoice

Type: FlexibleCustomerChoice

Date and interval selected by the user. Only for type: FLEXIBLE

fromDate

Type: string<date>

Closest delivery date for type: PLAIN. Start of the interval of the delivery date selection for type: FLEXIBLE

fromTime

Type: string

Start of the delivery time interval. Only for type: PLAIN

provider

Type: string

Delivery service type.

Enum: BOXBERRY, CDEK, RUSSIAN_POST, EMS, COURIER, DHL, EXPRESS_DELIVERY, FIVEPOST, OZON_ROCKET, DPD, SBER_LOGISTICS, PEK, PICKPOINT, KCE, PONY_EXPRESS, YANDEX_DELIVERY, null

receipt

Type: ItemReceipt

timeIntervals

Type: FlexibleTimeIntervals

Codes the intervals of the delivery time available for selection. Only for type: FLEXIBLE

toDate

Type: string<date>

Latest delivery date for type: PLAIN. End of the interval of the delivery date selection for type: FLEXIBLE

toTime

Type: string

End of the delivery time interval. Only for type: PLAIN

type

Type: string

Option type. For FLEXIBLE delivery options, the user can select the desirable date and interval:

  • The delivery date is selected by the user in the interval [fromDate, toDate]
  • To give the user an option to select an interval within a day, fill out timeIntervals No such choice is provided for PLAIN options.

Default: PLAIN

Enum: PLAIN, FLEXIBLE

PickupOption

Name

Description

address*

Type: string

Address in string format

location*

Type: Location

pickupPointId*

Type: string

Unique pickup point ID in the merchant's system

title*

Type: string

Pickup point's name

allowedPaymentMethods

Type: string[]

Individual payment methods for the selected pickup method. Methods that can be used to pay for the order with the selected pickup method. Use this parameter if you want to restrict the payment methods specified in availablePaymentMethods. If the parameter is omitted, all the payment methods listed in availablePaymentMethods are used.

Enum: CARD, SPLIT, CASH_ON_DELIVERY, CARD_ON_DELIVERY

amount

Type: string<double>

Cost of delivery to the location

Example: 123.45

description

Type: string

Additional description

fromDate

Type: string<date>

YYYY-MM-DD. Closest possible delivery date

phones

Type: string[]

Contact phone numbers

provider

Type: string

Pickup point's type.

Enum: YANDEX_MARKET, BOXBERRY, CDEK, IN_STORE, RUSSIAN_POST, PICKPOINT, DPD

receipt

Type: ItemReceipt

schedule

Type: PickupSchedule[]

Pickup point's schedule

storagePeriod

Type: integer<int32>

Optional. Storage period at the pickup point, in days.

toDate

Type: string<date>

YYYY-MM-DD. Latest delivery date

YandexDeliveryOption

Name

Description

amount*

Type: string<double>

Delivery cost

Example: 123.45

category*

Type: string

Enum: EXPRESS, TODAY, STANDARD

title*

Type: string

Delivery method name. Shown to the user in the option list

yandexDeliveryOptionId*

Type: string

ID of the Yandex Delivery offer

allowedPaymentMethods

Type: string[]

Individual payment methods for the delivery method. Use this parameter if you want to restrict the payment methods specified in availablePaymentMethods. If the parameter is omitted, all the payment methods listed in availablePaymentMethods are used.

Enum: CARD, SPLIT, CASH_ON_DELIVERY, CARD_ON_DELIVERY

fromDatetime

Type: string<date-time>

receipt

Type: ItemReceipt

toDatetime

Type: string<date-time>

ItemQuantity

Name

Description

count*

Type: string<double>

Product quantity in the order

Example: 123.45

available

Type: string<double>

Maximum available product quantity

Example: 123.45

label

Type: string

Name of measurement units, for example, "kg" or "pcs"

ItemReceipt

Name

Description

tax*

Type: integer

Value description: Link

Enum: 1, 2, 3, 4, 5, 6

agent

Type: Agent

excise

Type: string<double>

It shouldn't include more than two decimal digits. For example: 1.12, 5.1, 10, 11.00 .

Example: 123.45

markQuantity

Type: MarkQuantity

measure

Type: integer

Value description: Link

Enum: 0, 10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 70, 71, 72, 73, 80, 81, 82, 83, 255, null

paymentMethodType

Type: integer

Value description: Link

Enum: 1, 2, 3, 4, 5, 6, 7, null

paymentSubjectType

Type: integer

Value description: Link

Enum: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, null

productCode

Type: string<base64>

Product code (a base64-encoded array of 1 to 32 bytes)

supplier

Type: Supplier

title

Type: string

FlexibleCustomerChoice

Name

Description

date*

Type: string<date>

time

Type: TimeInterval

FlexibleTimeIntervals

Name

Description

type*

Type: string

For the GRID type, fill in the grid field. If the VALUES type is specified, set the values field.

Enum: GRID, VALUES

grid

Type: FlexibleTimeIntervalsGridDescriptor

Encodes the intervals as a grid. Use this format if you want to set more than 20 delivery intervals. Example: {"start": "09:00", "end": "21:00", "duration": "00:20", "step": "01:00"} is treated as a set of intervals: [{"start": "09:00", "end": "09:20"}, {"start": "10:00", "end": "10:20"}, ..., {"start": "20:00", "end": "20:20"}]

values

Type: TimeInterval[]

Set the list of intervals directly. Suitable for a small number of delivery intervals. The maximum recommended number of intervals is 20

PickupSchedule

Name

Description

fromTime*

Type: string

HH:mm, "08:00"

label*

Type: string

For example, "Mon-Fri"

toTime*

Type: string

HH:mm, "20:00"

Agent

Name

Description

agentType*

Type: integer

Agent type by taxable object. See values

Enum: 1, 2, 3, 4, 5, 6, 7

operation

Type: string

paymentsOperator

Type: PaymentsOperator

phones

Type: string[]

transferOperator

Type: TransferOperator

MarkQuantity

Name

Description

denominator*

Type: integer<int32>

numerator*

Type: integer<int32>

Supplier

Name

Description

inn

Type: string

name

Type: string

phones

Type: string[]

TimeInterval

Name

Description

end*

Type: string

Interval end time

start*

Type: string

Interval start time

FlexibleTimeIntervalsGridDescriptor

Name

Description

duration*

Type: string

Duration of each interval

end*

Type: string

Maximum start time for the latest interval

start*

Type: string

Start time for the very first interval

step*

Type: string

Difference in time between the starts of two neighboring intervals

PaymentsOperator

Name

Description

phones

Type: string[]

TransferOperator

Name

Description

address

Type: string

inn

Type: string

name

Type: string

phones

Type: string[]

Responses

200 OK

success

Body

application/json
{
    "data": {
        "metadata": "string",
        "orderId": "string",
        "redirectUrls": {
            "onAbort": "string",
            "onError": "string",
            "onSuccess": "string"
        },
        "ttl": null
    },
    "status": "string"
}

Name

Description

data*

Type: MerchantCreateOrderResponse

status*

Type: string

MerchantCreateOrderResponse

Name

Description

orderId*

Type: string

ID assigned to the created order on the merchant side

metadata

Type: string

redirectUrls

Type: MerchantRedirectUrls

ttl

Type: integer<int32>

Order's time to live (in seconds)

Default: null

MerchantRedirectUrls

Name

Description

onError*

Type: string

The field is required for online stores only. A link to redirect the user in case of a payment error or TTL expiry for a payment link

onSuccess*

Type: string

The field is required for online stores only. Link to redirect the user on payment success.

onAbort

Type: string

Link to redirect the user on payment cancellation. Payment can be canceled by the user in the payment form.

400 Bad Request

bad request

Body

application/json
{
    "reason": "string",
    "reasonCode": "FORBIDDEN",
    "status": "fail"
}

Name

Description

reasonCode*

Type: string

Enum: FORBIDDEN, ITEM_NOT_FOUND, ORDER_NOT_FOUND, ORDER_AMOUNT_MISMATCH, ORDER_DETAILS_MISMATCH, OUT_OF_INVENTORY, PICKUP_POINT_NOT_FOUND, SHIPPING_DETAILS_MISMATCH, OTHER, UNAUTHORIZED, TOKEN_EXPIRED, CONFLICT

reason

Type: string

status

Type: string

Default: fail