Define fulfilment checklist items and tick them off per order
/admin/api/order-checklist-items
List every master checklist item, ordered by sort_order then id. These define the template that is snapshotted onto each new order.
/admin/api/order-checklist-items
Create a new master checklist item. The name is added to the template snapshotted onto future orders; existing orders are unaffected.
/admin/api/order-checklist-items/{id}
Partial update of a master checklist item. Any field may be omitted; omitted fields are left unchanged. Only affects the template — entries already snapshotted onto existing orders are unchanged.
/admin/api/order-checklist-items/{id}
Permanently delete a master checklist item. Entries already snapshotted onto existing orders are NOT affected, since per-order entries are stored independently of the master table.
/admin/api/order-checklist-items/reorder
Bulk reorder master checklist items. Send the (id, sort_order) pairs you want applied; positions take effect on the next order snapshot.
/admin/api/orders/{order_id}/checklist/{entry_id}
Tick or untick a single checklist entry on a specific order. Setting checked=true stamps checked_at and the acting admin; checked=false clears them. Idempotent. Returns the order's full refreshed checklist. Note these per-order entries are snapshots and live separately from the master catalog.
/admin/api/order-checklist-items
List every master checklist item, ordered by sort_order then id. These define the template that is snapshotted onto each new order.
[
{
"id": 1,
"name": "Pick items from shelf",
"sort_order": 0,
"created_at": "2026-04-15T09:00:00Z",
"updated_at": "2026-04-15T09:00:00Z"
},
{
"id": 2,
"name": "Print shipping label",
"sort_order": 1,
"created_at": "2026-04-15T09:00:00Z",
"updated_at": "2026-04-15T09:00:00Z"
}
]
curl "https://yourshop.zeroshop.io/admin/api/order-checklist-items" \
-H "Authorization: Bearer zspat_..."
import requests
resp = requests.get(
"https://yourshop.zeroshop.io/admin/api/order-checklist-items",
headers={"Authorization": "Bearer zspat_..."}
)
items = resp.json()
const resp = await fetch("https://yourshop.zeroshop.io/admin/api/order-checklist-items", {
headers: { "Authorization": "Bearer zspat_..." }
});
const items = await resp.json();
require "net/http"
require "json"
uri = URI("https://yourshop.zeroshop.io/admin/api/order-checklist-items")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer zspat_..."
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
items = JSON.parse(resp.body)
/admin/api/order-checklist-items
Create a new master checklist item. The name is added to the template snapshotted onto future orders; existing orders are unaffected.
{
"name": "Quality-check packaging",
"sort_order": 2
}
{
"id": 3,
"name": "Quality-check packaging",
"sort_order": 2,
"created_at": "2026-05-03T10:00:00Z",
"updated_at": "2026-05-03T10:00:00Z"
}
curl -X POST "https://yourshop.zeroshop.io/admin/api/order-checklist-items" \
-H "Authorization: Bearer zspat_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Quality-check packaging",
"sort_order": 2
}'
import requests
resp = requests.post(
"https://yourshop.zeroshop.io/admin/api/order-checklist-items",
headers={"Authorization": "Bearer zspat_..."},
json={
"name": "Quality-check packaging",
"sort_order": 2
}
)
item = resp.json()
const resp = await fetch("https://yourshop.zeroshop.io/admin/api/order-checklist-items", {
method: "POST",
headers: {
"Authorization": "Bearer zspat_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "Quality-check packaging",
sort_order: 2
})
});
const item = await resp.json();
require "net/http"
require "json"
uri = URI("https://yourshop.zeroshop.io/admin/api/order-checklist-items")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer zspat_..."
req["Content-Type"] = "application/json"
req.body = {
name: "Quality-check packaging",
sort_order: 2
}.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
item = JSON.parse(resp.body)
/admin/api/order-checklist-items/{id}
Partial update of a master checklist item. Any field may be omitted; omitted fields are left unchanged. Only affects the template — entries already snapshotted onto existing orders are unchanged.
{
"name": "Pick & verify items"
}
{
"id": 1,
"name": "Pick & verify items",
"sort_order": 0,
"created_at": "2026-04-15T09:00:00Z",
"updated_at": "2026-05-03T10:05:00Z"
}
curl -X PATCH "https://yourshop.zeroshop.io/admin/api/order-checklist-items/1" \
-H "Authorization: Bearer zspat_..." \
-H "Content-Type: application/json" \
-d '{"name": "Pick & verify items"}'
import requests
resp = requests.patch(
"https://yourshop.zeroshop.io/admin/api/order-checklist-items/1",
headers={"Authorization": "Bearer zspat_..."},
json={"name": "Pick & verify items"}
)
item = resp.json()
const resp = await fetch("https://yourshop.zeroshop.io/admin/api/order-checklist-items/1", {
method: "PATCH",
headers: {
"Authorization": "Bearer zspat_...",
"Content-Type": "application/json"
},
body: JSON.stringify({ name: "Pick & verify items" })
});
const item = await resp.json();
require "net/http"
require "json"
uri = URI("https://yourshop.zeroshop.io/admin/api/order-checklist-items/1")
req = Net::HTTP::Patch.new(uri)
req["Authorization"] = "Bearer zspat_..."
req["Content-Type"] = "application/json"
req.body = { name: "Pick & verify items" }.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
item = JSON.parse(resp.body)
/admin/api/order-checklist-items/{id}
Permanently delete a master checklist item. Entries already snapshotted onto existing orders are NOT affected, since per-order entries are stored independently of the master table.
curl -X DELETE "https://yourshop.zeroshop.io/admin/api/order-checklist-items/1" \
-H "Authorization: Bearer zspat_..."
import requests
requests.delete(
"https://yourshop.zeroshop.io/admin/api/order-checklist-items/1",
headers={"Authorization": "Bearer zspat_..."}
)
await fetch("https://yourshop.zeroshop.io/admin/api/order-checklist-items/1", {
method: "DELETE",
headers: { "Authorization": "Bearer zspat_..." }
});
require "net/http"
uri = URI("https://yourshop.zeroshop.io/admin/api/order-checklist-items/1")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer zspat_..."
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
/admin/api/order-checklist-items/reorder
Bulk reorder master checklist items. Send the (id, sort_order) pairs you want applied; positions take effect on the next order snapshot.
{
"items": [
{
"id": 3,
"sort_order": 0
},
{
"id": 1,
"sort_order": 1
},
{
"id": 2,
"sort_order": 2
}
]
}
curl -X POST "https://yourshop.zeroshop.io/admin/api/order-checklist-items/reorder" \
-H "Authorization: Bearer zspat_..." \
-H "Content-Type: application/json" \
-d '{
"items": [
{"id": 3, "sort_order": 0},
{"id": 1, "sort_order": 1},
{"id": 2, "sort_order": 2}
]
}'
import requests
requests.post(
"https://yourshop.zeroshop.io/admin/api/order-checklist-items/reorder",
headers={"Authorization": "Bearer zspat_..."},
json={
"items": [
{"id": 3, "sort_order": 0},
{"id": 1, "sort_order": 1},
{"id": 2, "sort_order": 2}
]
}
)
await fetch("https://yourshop.zeroshop.io/admin/api/order-checklist-items/reorder", {
method: "POST",
headers: {
"Authorization": "Bearer zspat_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
items: [
{ id: 3, sort_order: 0 },
{ id: 1, sort_order: 1 },
{ id: 2, sort_order: 2 }
]
})
});
require "net/http"
require "json"
uri = URI("https://yourshop.zeroshop.io/admin/api/order-checklist-items/reorder")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer zspat_..."
req["Content-Type"] = "application/json"
req.body = {
items: [
{ id: 3, sort_order: 0 },
{ id: 1, sort_order: 1 },
{ id: 2, sort_order: 2 }
]
}.to_json
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
/admin/api/orders/{order_id}/checklist/{entry_id}
Tick or untick a single checklist entry on a specific order. Setting checked=true stamps checked_at and the acting admin; checked=false clears them. Idempotent. Returns the order's full refreshed checklist. Note these per-order entries are snapshots and live separately from the master catalog.
| Name | Type | Required | Description |
|---|---|---|---|
| order_id | integer | required | Id of the order the checklist belongs to. |
| entry_id | integer | required | Id of the per-order checklist entry to toggle. |
{
"checked": true
}
{
"checklist": [
{
"id": 10,
"order_id": 42,
"name": "Pick items from shelf",
"sort_order": 0,
"checked_at": "2026-05-30T12:00:00Z",
"checked_by_user_id": 5,
"checked_by_user_name": "Mara"
},
{
"id": 11,
"order_id": 42,
"name": "Print shipping label",
"sort_order": 1,
"checked_at": null,
"checked_by_user_id": null,
"checked_by_user_name": null
}
]
}
curl -X PATCH "https://yourshop.zeroshop.io/admin/api/orders/42/checklist/10" \
-H "Authorization: Bearer zspat_..." \
-H "Content-Type: application/json" \
-d '{"checked": true}'
import requests
resp = requests.patch(
"https://yourshop.zeroshop.io/admin/api/orders/42/checklist/10",
headers={"Authorization": "Bearer zspat_..."},
json={"checked": True}
)
checklist = resp.json()["checklist"]
const resp = await fetch("https://yourshop.zeroshop.io/admin/api/orders/42/checklist/10", {
method: "PATCH",
headers: {
"Authorization": "Bearer zspat_...",
"Content-Type": "application/json"
},
body: JSON.stringify({ checked: true })
});
const { checklist } = await resp.json();
require "net/http"
require "json"
uri = URI("https://yourshop.zeroshop.io/admin/api/orders/42/checklist/10")
req = Net::HTTP::Patch.new(uri)
req["Authorization"] = "Bearer zspat_..."
req["Content-Type"] = "application/json"
req.body = { checked: true }.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
checklist = JSON.parse(resp.body)["checklist"]
We value your privacy
We use cookies for essential site functionality and, with your consent, analytics to understand how our platform is used. No personal data is shared with third parties. See our Privacy Policy for details.