[POST] Create offer
* Authentication
Required Authorization Bearer •••••••••••
Limit throttle:30,1
Endpoint [POST] - /shop-api/pre-order/create
Headers
Authorization
Yes
Shop public API key Bearer token
Content-Type
Yes
application/json
1. Request Payload
Required fields
offer_name
string
Yes
Offer name (max 255 characters)
start_date
date
Yes
Pre-order start date/time
apply_to
string
Yes
Target scope: product, collection, or all
products
array
apply_to = product
min:1 | max:50 item
products.*.product_id
number
with products
Shopify product ID
products.*.variant_id
number
with products
Shopify variant ID
products.*.limit
number | null
No
min:1
collection_id
number
apply_to = collection
Shopify collection ID
Optional fields
end_date
date | null
—
Must be after start_date if provided
countdown_before_preorder_start
boolean
false
Show countdown before start
countdown_before_preorder_end
boolean
false
Show countdown before end
preorder_condition_inventory
string
now
Inventory trigger: now, outofstock, instock
fulfillment_status
string
—
ON_HOLD, UNFULFILLMENT, SCHEDULED
fulfillment_shipping_date
date
—
Exact shipping/fulfillment date
fulfillment_after_checkout
number
—
Days after checkout (max 60)
turn_on_continue_selling_when_preorder_start
boolean
false
Auto-enable continue selling when offer starts
turn_off_continue_selling_when_preorder_end
boolean
false
Auto-disable continue selling when offer ends
full_payment_discount_type
string
percentage
percentage or fixed
full_payment_discount_value
number
0
Required with type; max 100 (percentage) or 1000000 (fixed); min 1 when sent
partial_payment_value
number
—
Deposit/partial amount; enables partial payment when > 0
partial_payment_type
string
—
Create validation field: percentage or fixed (see note below)
partial_payment_value_type
string
percentage
Used when mapping to selling plan / response shape
partial_payment_discount_type
string
percentage
percentage or fixed
partial_payment_discount_value
number
0
Discount on partial payment
partial_payment_remaining_balance_charge_date
date
—
Remaining balance charge date (exact time)
Important rules
apply_toproduct→ sendproducts(1–50 items). Variants are validated against Shopify; only found variants are kept.collection→ sendcollection_id(must exist).all→ noproducts/collection_id.
Fulfillment timing is mutually exclusive:
If
fulfillment_shipping_dateis set → exact-date fulfillment.Else if
fulfillment_after_checkoutis set → days-after-checkout fulfillment.
Partial payment is enabled when any partial-payment field is present and
partial_payment_value > 0.New offers are created with
status = 1(active). Product sync / selling-plan setup may run asynchronously (processing).
Field name note: Create validation currently uses
partial_payment_type, while list/get/update and internal mapping usepartial_payment_value_type. Prefer aligning withpartial_payment_value_typefor consistency with other endpoints.
Example — apply to products
Example — apply to collection
Example — apply to all products
2. Success Response 200
3. Response Keys & Fields
Top-level
success
boolean
true when the offer is created
message
string
"Pre-order offer created"
data
object
Created offer (same shape as Get Offer / List item)
data offer object
id
integer
Newly created offer ID
offer_name
string
Offer name
start_date
string | null
Start datetime
end_date
string | null
End datetime; null if not set
countdown_before_preorder_start
boolean
Countdown before start
countdown_before_preorder_end
boolean
Countdown before end
apply_to
string
product | collection | all
preorder_condition_inventory
string
now | outofstock | instock
fulfillment_status
string | null
ON_HOLD | UNFULFILLMENT | SCHEDULED
fulfillment_shipping_date
string
Present when exact-date fulfillment is used
fulfillment_after_checkout
number
Present when days-after-checkout is used
turn_on_continue_selling_when_preorder_start
boolean
Auto continue-selling on start
turn_off_continue_selling_when_preorder_end
boolean
Auto turn-off continue-selling on end
status
integer
1 (active) for newly created offers
products
array
Only when apply_to = product
collection_id
integer
Only when apply_to = collection
collection_name
string
Collection title (when available)
full_payment_discount_type
string
Full payment discount type
full_payment_discount_value
number
Full payment discount value
partial_payment_*
mixed
Present when partial payment is enabled
products[] item
product_id
integer
Shopify product ID
variant_id
integer
Shopify variant ID
limit
integer | null
Pre-order unit limit
4. Failed Response
Validation error — HTTP 200
apply_to = product but products empty
{ "success": false, "message": "Products are required" }
No variants exist on Shopify
{ "success": false, "message": "Product variants not found" }
apply_to = collection but collection_id empty
{ "success": false, "message": "Collection is required" }
Collection not found on Shopify
{ "success": false, "message": "Collection not found" }
Unexpected server error — HTTP 200
Last updated
Was this helpful?