Skip to main content
POST
Create Order

Create Order

Creates a new order programmatically. This is useful for importing orders from external systems or creating orders on behalf of customers.
The new order is always created with status: "pending". Totals (subtotal_price / total_price) are derived purely from each line item’s price × quantity — there is no inventory deduction, no discount-code resolution, and no tax/shipping calculation on this endpoint. Send a price on each line item if you need a non-zero total.

Request

Body Parameters

Any field not listed below is ignored (stripped before the order is created).
line_items
array
required
Array of line items for the order. Must contain at least one item.
customer
object
Customer information. customer.email becomes the order email and the customer name is derived from first_name / last_name.
shipping_address
object
Shipping address for the order. Used to populate the order’s address, city, state, country, ZIP and phone.
billing_address
object
Billing address. Same shape as shipping_address.
note
string
Order note.
tags
array
Array of tag strings. Accepted by the request but not currently persisted.

Response

On success (201 Created) the created order is returned under order, including its line items. The order is created with financial_status: "pending" and fulfillment_status: "unfulfilled". Money fields are decimal strings; there is no top-level status field.

Example Response

Errors are returned as a Shopify-style body:

Error Codes

StatusDescription
400Invalid request body (e.g. line_items empty, or a line item missing product_id/quantity)
401Invalid or missing access token
403App doesn’t have the write_orders scope
500Unexpected server error while creating the order