Update an order
Setting status to most values requires _policies.allow_status: true
in the request body.
Recommended pattern for retry-safe order creation
POST /v2/orders has no idempotency mechanism (see its description).
The recommended way to create an order safely under retry is
PUT /v2/orders/{id} with _upsert: true and an external_id
in the body:
- If no order exists yet with that
external_id(scoped to the seller resolved viashop_id), one is created (response status201) using the same request body fields asPOST /v2/orders(shop_id,contact,line_items, etc). The order gets a normal system-generatedcode— the URL:idis not used as, or turned into, the order’s code; a client cannot pick the public order code this way.:idcan be any placeholder (e.g. the sameexternal_idvalue, for readability), since matching is done byexternal_id, not by the URL. - If an order already exists with that
external_id, it’s updated in place (response status200) — a retried request converges on the same order instead of creating a duplicate. - Without
_upsert: true,PUTto a nonexistent:idreturns404as usual. _upsert: truewithout anexternal_idin the body returns422— the flag requiresexternal_idso a typo in the URL:idalone can’t silently create an unintended order.
This is the same external_id field documented on Order and on
POST /v2/orders — a collision there is rejected with 422;
here, under _upsert, a “collision” is the intended match and
updates the existing order instead.
Stock restoration on cancellation
Setting status to cancelled automatically restores/releases reserved
stock, but only when both of these hold:
- the order’s
fulfillment_statusis still unsent (queued,preparing, orready— not yetshipped/delivered), and - stock was actually reserved for the order in the first place (line
items on non-stock-tracked products, or without a
variant_idat all, never reserved anything, so there’s nothing to restore for them).
Cancelling an order that has already shipped does not auto-restore stock. Restoration is independent of payment state — it isn’t affected by whether the order was paid or refunded.
/orders/{id}AuthorizationBearer token (JWT) · headerrequiredidstringrequiredOrder ID or permalink
application/json_upsertbooleanIf true, requires external_id in this same request
body. Finds an order by external_id (scoped to the
seller); if none exists, creates one instead of returning
404 (with a system-generated code, not the URL :id).
See "Recommended pattern for retry-safe order creation"
above.
statusstringdraftcheckoutin_reviewpendingcancelledclosedcompletedfulfillment_statusstringnonequeuedpreparingreadyshippeddeliveredreturnedarchivedbooleanexternal_idstringOptional client-supplied reference, unique per seller. Can be set here if it wasn't given at create time; a colliding value is rejected with a 422.
tracking_codestringcourier_namestringfulfillment_methodstringshippingmailbox_pickuplocal_pickupnoneshipping_amountintegershipping_discountintegershipping_descriptionstringtagsstring[]notify_status_changebooleannotification_messagestring_policiesobjectShow propertiesHide properties
allow_statusbooleanRequired to change status to most values
append_tagsbooleanOrder updated
_linksHalLinksidintegershop_idintegercodestringOrder code, used as the path identifier (e.g. /v2/orders/{code})
external_idstring | nullOptional client-supplied reference, unique per seller. Set it at
create time (or via update) to look the order back up later with
GET /v2/orders?external_id={value} — unlike id/code, a
colliding external_id is rejected with a 422 instead of being
silently reassigned, so it's safe to use for dedup checks before
retrying a create.
statusstringdraftcheckoutin_reviewpendingcancelledclosedcompletedfulfillment_statusstringnonequeuedpreparingreadyshippeddeliveredreturnedcheckout_urlstringPresent only when the order is in checkout or pending status
archivedbooleancurrency_codestringprices_include_taxbooleanitems_net_totalintegerLine items subtotal in cents, before discounts
items_discount_totalintegeritems_totalintegerLine items subtotal in cents, after discounts
net_totalintegerOrder total in cents before tax
discount_totalintegercart_totalintegersurcharge_totalintegershipping_totalintegershipping_discountintegershipping_minus_discountintegertax_ratenumberPresent only when prices_include_tax is false
tax_totalintegerPresent only when prices_include_tax is false
totalintegerGrand total in cents, including shipping, discounts and tax
total_paidintegertotal_refundedintegermax_refundable_amountintegerpartial_payment_offeredbooleanWhether this order is eligible for buyer-chosen partial payment: either the shop has it enabled for everyone, or this specific order was offered it via the API (partial_payment_offered: true on create/update). Either way, the order must not require review and any configured cart requirements must be met. Normally also requires a token-based payment method to exist, so the balance can be auto-charged later - unless the shop allows manual (non-token) payment methods for this, in which case the balance is instead collected via a reminder email. Only present when fetching a single order, not in list results.
paying_partiallybooleanWhether the buyer opted into a partial payment for this order.
partial_payment_percentageintegerPercentage of the total charged upfront. Only present when paying_partially is true.
partial_payment_amountnumberAmount charged upfront, in cents. Only present when fetching a single order, and only when partial payment is offered or active.
partial_payment_due_onstring<date>Date the remaining balance is due. Only present when paying_partially is true.
shipping_descriptionstringtracking_codestringcourier_namestringpayment_infoobjectPresent only when the order has an associated payment method.
Show propertiesHide properties
idintegernamestringtypestringPayment method type/gateway identifier (e.g. webpay_rest, mercado_pago).
dataobjectGateway-specific transaction data, shape varies by type.
requested_document_typestringTax document type requested by the buyer at checkout (e.g. invoice, receipt), if any. Derived from custom order data, not a plain column.
tagsstring[]tag_idsinteger[]allowed_statusesstring[]allowed_fulfillment_statusesstring[]created_onstring<date-time>updated_onstring<date-time>checkout_onstring<date-time> | nullpending_onstring<date-time> | nullclosed_onstring<date-time> | nullshipped_onstring<date-time> | null_embeddedobjectcontact is present when the order has a customer attached. company is present when a company/tax entity is attached (e.g. via company_name on create/update). address/billing_address are present when set. line_items is always present. payments/refunds/documents are present only when non-empty.
Show propertiesHide properties
contactobjectShow propertiesHide properties
idintegernamestringemailstringphone_numberstringcompanyobjectShow propertiesHide properties
idintegernamestringid_numberstringFormatted tax/ID number (RUT, DNI, etc.)
activity_codestringaddressAddressShow propertiesHide properties
streetstringstreet_2stringlocality_namestringregion_namestringcountry_namestringpostal_codestringaddressAddressShow propertiesHide properties
streetstringstreet_2stringlocality_namestringregion_namestringcountry_namestringpostal_codestringbilling_addressAddressShow propertiesHide properties
streetstringstreet_2stringlocality_namestringregion_namestringcountry_namestringpostal_codestringline_itemsobject[]Show propertiesHide properties
objectidintegerproduct_idintegerproduct_namestringvariant_idintegervariant_namestringvariant_skustringunitsintegerunit_priceintegerUnit price in cents
net_totalintegerLine total in cents before discounts
totalintegerLine total in cents after discounts/surcharges
paymentsOrderTransaction[]Show propertiesHide properties
OrderTransactionidintegerorder_idintegeramountintegerAmount in cents (negative for refunds)
absolute_amountintegerAbsolute value of amount in cents
successfulbooleancard_token_idintegerpayment_method_typestringtransaction_idstringGateway transaction ID
authorization_codestringdescriptionstringcreated_atstring<date-time>refundsOrderTransaction[]Show propertiesHide properties
OrderTransactionidintegerorder_idintegeramountintegerAmount in cents (negative for refunds)
absolute_amountintegerAbsolute value of amount in cents
successfulbooleancard_token_idintegerpayment_method_typestringtransaction_idstringGateway transaction ID
authorization_codestringdescriptionstringcreated_atstring<date-time>documentsOrderDocument[]Show propertiesHide properties
OrderDocumentidinteger | nullnull for legacy documents stored in the order's contact_data (_document_pdf_url/_document_type/_document_number) instead of as a real document record. These have no self/delete links and can't be fetched or deleted via /orders/{order_id}/documents/{id}.
document_typestringinvoicereceiptdocument_numberstringfile_urlstring