Place the order
order_createCreate an order from the session cart (starts unpaid — PENDING_ARTWORK or PENDING_PAYMENT depending on the server).
For a one-line cart, pass that line's offer_id alone. For a cart with
several lines, pass selections=[{line_id, offer_id}, ...], one per line,
to order them together as one order with one item per line; a bare
offer_id against such a cart is rejected (MultiLineCartError) rather
than silently ordering just one line.
Each item re-sends the sku + configuration its quote priced and binds the
chosen offer; the server recomputes price, so no money is sent. Every
offer_id must belong to the cart (OfferNotFoundError / LineNotFoundError
otherwise — re-run order_get_quote). If RendReal refuses the chosen offer, the
job fails with OfferRefusedError and no order is placed: quote again and let the
customer choose. If RendReal refuses the order itself, the job fails with
OrderRefusedError: the refusal is permanent, so offer a change to the setup or
customer support, never a retry.
Shipping and tax are filled by Stripe at checkout. Attach artwork per line:
with selections, set each entry's design_id + design_snapshot_id; with a
bare offer_id, pass the top-level design_id + design_snapshot_id. Both
ids are required for a design to attach, and the snapshot must be the owned
design's latest. Every line needs artwork — a design, or a finished artwork file
uploaded via order_get_artwork_upload_page — before the order can be paid
(order_create_payment_link enforces it).
A line already ordered in this session is refused (LineAlreadyOrderedError)
before any upstream order is placed, so the same still-quoted line can't be
bought twice; order_view_cart marks such a line already_ordered=true.
Start a new line to buy it again.
If catalog_configure_product reported an Unmet Constraint for any selected
line, the order is refused (UnmetConstraintUnansweredError; detail.lines
lists every such line with its asks in unmet) until the customer answers for
each listed line. Tell the customer, per line, what they asked for and what the
option accepts. If they accept every listed line as configured, call again with
unmet_accepted=true, which orders all the selected lines. If they want a change
on any line, call catalog_configure_product with their answer for that line
instead.
Returns a job — poll until SUCCEEDED for the order_id and each line's
item_id. Then get any missing artwork: design it against the order, or have
the customer upload a finished file. Call order_create_payment_link
only when the customer asks to pay.
An item with designable: false cannot be designed here: for that item offer
only the upload of a finished print file, never a design.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"session_id": "<session_id>"
},
"name": "order_create"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| offer_id | No | ||
| design_id | No | ||
| selections | No | ||
| session_id | Yes | ||
| unmet_accepted | No | ||
| design_snapshot_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |