Create order
The single-call way for integrators to create an order: send your shop `orderid`, the shipping address and one or more lines with a `sku` and print-file URLs. The order is created as a **PENDING draft** — nothing is charged until it is submitted (send `"submit": true`, call **Submit order**, use **Create order + submit**, or submit in the portal). **Two flows, chosen by `createProducts`.** • **Default (`createProducts` omitted or false).** Each line is matched to a catalog product for that `sku` (found or created) and the order is created in the same request. The response is `data = { products, order, submit? }` — read the order from `data.order`. With `"submit": true` the wallet is charged **in the same request** and `data.submit` is `{ orderId, status: "PAID" }`. Sending the same `orderid` again returns the existing order (HTTP 200) instead of a duplicate — safe to retry. • **`createProducts: true`.** A new catalog product is created for every line and the print files are downloaded in the background. The response comes back in about a second with the order itself in `data` plus `assets: "PROCESSING"`; follow it with **Print-file status** until `READY` or `FAILED`. Here a repeated `orderid` is refused with HTTP 409 (code 2003) whatever the state of the earlier order. Needed for per-line `printingMethod`, `sellingPrice`, `largeFormatAreas`, `hasSpecialPrintArea` and neck labels. **Freeing an orderid.** Orders cannot be cancelled through the API. To reuse an `orderid`, delete the draft with **Delete draft order** while it is still PENDING; after payment, open a settlement request instead. **Printing method.** Some product types can only be produced once a printing method (for example DTG, DTF or inkjet) is set. The method is normally resolved from the `sku` (see `defaultPrintingMethod` / `printingMethodRequired` in **List SKU reference**). If the API answers `This provider requires a decoration method (e.g. DTG, DTF). Please select a printing method for the product.`, send the request again with `"createProducts": true` and add `printingMethod` to that line, e.g. `"printingMethod": "Inkjet printing"`. The failed request created no order, so you can retry with the same `orderid`. Common printing-method errors: • `products[N].printingMethod requires "createProducts": true …` → add `"createProducts": true` at the top level of the body. • `products[N]: printing_method "…" was not found … — options: …` → send one of the listed options. • `Invalid JSON body` → check value types: `createProducts` and `submit` must be JSON booleans and `quantity` a JSON number. **Per line** (see the `products` parameter): `sku` and `designUrlsByArea` are required; `blueprintId` (only to tell apart a `sku` that matches several catalog rows), `productId` and `providerBlueprintId` are optional and ignored when `createProducts` is true. Order-list previews go in `mockupFrontUrl` / `mockupBackUrl` / `mockupNeckInnerUrl`. Legacy V1 aliases (`firstname`, `zipcode`, `methodship`, `areafront`, …) are still accepted. The order is tagged with the calling API key (`apiKeyId`, `apiKeyName`). A team member limited to API-key orders cannot create orders (code 1003). See Guides → Access & permissions and Guides → Orders & fulfillment.
Request body
Your shop order reference (required). It becomes the order's `externalId`. Default flow: sending it again returns the existing order (no duplicate). With `createProducts: true`: sending it again returns HTTP 409 (code 2003) — delete the draft first if you must recreate it.
System-managed — auto-filled from `orderid`. Do not send unless you need to override the default idempotency key.
System-managed — auto-filled from `orderid`. Shown in webhooks and the seller portal. Do not send unless you need a different display reference.
Recipient first name. Legacy alias: `firstname`.
Recipient last name. Legacy alias: `lastname`.
Street address line 1.
Street address line 2 (apartment, suite, etc.).
City.
State / province code.
ISO 3166-1 alpha-2 country code (uppercase).
Postal / ZIP code. Legacy alias: `zipcode`.
Accepted for compatibility with V1 payloads but not stored or used.
Recipient phone number.
Provider shipping service: FIRST_CLASS (default), PRIORITY, RUSH, EXPEDITE, OVERNIGHT, CBT_STANDARD, CBT_RUSH, or CBT_EXPEDITE. Legacy alias: `methodship` integer 1–5 maps to the non-CBT values.
Seller-provided shipping label: an https URL, or the `originalKey` returned by the label upload (see Guides → Orders & fulfillment → Your own shipping label). Sets shippingMode=SELLER_LABEL. Legacy alias: `label`.
When true, enables the Early In-Transit Scan add-on. Legacy alias: `scanrequest` "0"/"1".
Set to 2 for double-sided / special print. Legacy alias: `special_print` "0"/"1". Applies to the default flow only (ignored with `createProducts: true`).
When true, also calls POST /orders/{id}/submit after creating the draft — charges the wallet and sends to fulfillment. Default false (PENDING draft only).
Opt into the product-mint flow: a brand-new catalog product is created for each line and its print files are attached in the background (`assets: PROCESSING` → `READY`). Set to `true` to apply the per-line `printingMethod`, `sellingPrice`, `largeFormatAreas`, `hasSpecialPrintArea`, and neck-label (`NECK_LABEL_INNER` / `MOCKUP_NECK_LABEL_INNER`) fields. Required whenever a line sends `printingMethod`. Must be a JSON boolean (`true`), not the string "true". Default false.
Array of product lines (max 50). Minimum per line: `sku` + print-file URLs via designUrlsByArea. `blueprintId` is optional when sku is unique. Optional mockupFrontUrl / mockupBackUrl for order-list previews. Per-line `printingMethod`, `sellingPrice`, `largeFormatAreas`, `hasSpecialPrintArea` and neck-label areas apply when `createProducts` is true.
Example responses
reference · no API callResponse fields
code*intmessagestringrequest_id*stringdataobjectproducts[]objectorderobjectsubmitobjectassetsenumExample
{
"code": 0,
"data": {
"products": [
{
"id": "6650c1d2e3f4a5b6c7d8e901",
"name": "Unisex T-Shirt — TEST-PUSH-0029"
}
],
"order": {
"id": "019f276a-f9bb-7728-be66-cbb08f82b92e",
"sellerId": "653f2c1a4e5d6f7890123456",
"source": "MANUAL",
"externalId": "TEST-PUSH-0029",
"idempotencyKey": "TEST-PUSH-0029",
"status": "PENDING",
"currency": "USD",
"subtotal": 12.5,
"shippingTotal": 4.75,
"handlingFee": 0.5,
"taxAmount": 0,
"total": 17.75,
"fulfillmentServiceKey": "FIRST_CLASS",
"shippingMode": "PROVIDER",
"shippingFirstName": "Jane",
"shippingLastName": "Doe",
"shippingAddress1": "1 Main St",
"shippingCity": "Austin",
"shippingState": "TX",
"shippingCountry": "US",
"shippingZip": "78701",
"items": [
{
"productId": "6650c1d2e3f4a5b6c7d8e901",
"variantId": "6650c1d2e3f4a5b6c7d8ea01",
"quantity": 1,
"unitPrice": 12.5,
"totalPrice": 12.5,
"variantSku": "12101"
}
],
"apiKeyId": "6650a1b2c3d4e5f6a7b8c9d0",
"apiKeyName": "Production integration",
"createdAt": "2026-10-16T14:00:00.000Z",
"updatedAt": "2026-10-16T14:00:00.000Z"
}
},
"message": "Success",
"request_id": "202203070749000101890810281E8C70B7"
}Code samples
curl -X POST 'https://api-sandbox.merchfox.com/api/v1/orders/quick' \
-H 'X-Mfx-App-Key: <YOUR_API_KEY>' \
-H 'X-Mfx-App-Secret: <YOUR_API_SECRET>' \
-H 'Content-Type: application/json' \
-d '{"orderid":"354354354353","firstName":"Jane","lastName":"Doe","address1":"1 Main St","city":"Austin","state":"TX","country":"US","zip":"78701","email":"[email protected]","phone":"+1-555-0100","fulfillmentServiceKey":"FIRST_CLASS","priorityTrackingAddOnEnabled":false,"printAreaCount":1,"submit":false,"createProducts":true,"products":[{"sku":"55104","quantity":1,"sellingPrice":24.99,"hasSpecialPrintArea":true,"largeFormatAreas":["FRONT"],"designUrlsByArea":{"FRONT":"https://cdn.example.com/front.png","BACK":"https://cdn.example.com/back.png","NECK_LABEL_INNER":"https://cdn.example.com/neck.png"},"mockupFrontUrl":"https://cdn.example.com/mockup-front.jpg","mockupNeckInnerUrl":"https://cdn.example.com/mockup-neck.jpg"}]}'