Skip to content

Bulk Reschedule Fulfillment

BetaAPI v2 is in public beta: endpoints, fields and behaviour can change before general availability. See the changelog

POST
/preorders/orders/bulk_reschedule_fulfillment
curl --request POST \
--url https://app.stoqapp.com/api/v2/external/preorders/orders/bulk_reschedule_fulfillment \
--header 'Content-Type: application/json' \
--header 'X-Auth-Token: <X-Auth-Token>' \
--data '{ "search": "string", "financial_status": "string", "fulfillment_status": "string", "preorder_fulfillment_status": "string", "cancelled_status": "string", "payment_collection_status": "string", "offer_id": "string", "shopify_variant_id": "45000000001", "shopify_product_id": "78000000001", "vendors": "string", "customer_id": "string", "from": "string", "to": "string", "order_ids": [ "string" ], "apply_to_all": "string", "fulfill_at": "2026-07-01T00:00:00Z", "anchor_days": "string", "send_shipping_update": "2026-07-01T00:00:00Z", "subject": "string", "header": "string", "description": "string" }'

Change the fulfillment date of many preorder orders (up to 1000 order_ids, or apply_to_all with the order list filters).

Note: Matches the dashboard bulk action Reschedule fulfillment. Pass fulfill_at (one date for all) or anchor_days (each order created_at plus N days). send_shipping_update emails each customer whose scheduled fulfillment moved, as the modal does. subject and header default to the template text. description is sent as given; left out, it is what the modal prefills: “Your preorder is now scheduled to ship on {date}.” (each order’s new fulfillment UTC date in the shop’s app language) followed by the template text. Poll status_url for per-order results.

Media typeapplication/json
object
search
financial_status
fulfillment_status
preorder_fulfillment_status
cancelled_status
payment_collection_status
offer_id
shopify_variant_id
shopify_product_id
vendors
customer_id
from
to
order_ids
apply_to_all
fulfill_at
anchor_days
send_shipping_update
subject
header
description

Example

{
"search": "string",
"financial_status": "string",
"fulfillment_status": "string",
"preorder_fulfillment_status": "string",
"cancelled_status": "string",
"payment_collection_status": "string",
"offer_id": "string",
"shopify_variant_id": "45000000001",
"shopify_product_id": "78000000001",
"vendors": "string",
"customer_id": "string",
"from": "string",
"to": "string",
"order_ids": [
"string"
],
"apply_to_all": "string",
"fulfill_at": "2026-07-01T00:00:00Z",
"anchor_days": "string",
"send_shipping_update": "2026-07-01T00:00:00Z",
"subject": "string",
"header": "string",
"description": "string"
}

Success — the updated resource.

Media typeapplication/json
object

Example generated

{}

Accepted — async/bulk work was queued. Poll the returned job.

Media typeapplication/json

Returned for async/bulk work — poll the job until it reaches a terminal state.

object
job_id
string
status_url
string

Example

{
"job_id": "job_a1b2c3",
"status_url": "/api/v2/external/jobs/job_a1b2c3"
}

Missing or invalid X-Auth-Token.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"Unauthorized"
]
}

The request failed validation.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"name is required"
]
}

Rate limited — cost-weighted per token (read 1, write 2; 360 points / 60s). Check Retry-After.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"Rate limit exceeded"
]
}
Was this page helpful?

Still stuck? Ask Quinn or chat with support