Operations
Drops
A drop is a scheduled change window: a named period that applies field values when it opens and reverts them when it closes. These reads answer what is scheduled, what each change will do, and how the last run went.
List drops
/api/v1/dropspim:read
Every scheduled change window in the account, with its aggregates. The
per-change payload is on the detail read — list rows omit changes.
Bounded by the account, so next_cursor is always null.
curl "https://api.peak-pim.com/api/v1/drops" \
-H "Authorization: Bearer $PEAK_PIM_KEY"
Response — 200
{
"data": [
{
"id": "e7c3a9f1-2b8d-4e6a-9c4f-1d5b8a2e7c93",
"name": "Summer sale",
"state": "scheduled",
"starts_at": "2026-08-01T07:00:00Z",
"ends_at": "2026-08-15T07:00:00Z",
"next_fire_at": "2026-08-01T07:00:00Z",
"created_at": "2026-07-20T14:32:11Z",
"change_count": 48,
"entity_count": 24,
"failed_change_count": 0
}
],
"next_cursor": null
}
Get one drop
/api/v1/drops/{id}pim:readOne drop with every change it carries, including each change's apply/revert status and, when it failed, the reason.
Response — 200
{
"id": "e7c3a9f1-2b8d-4e6a-9c4f-1d5b8a2e7c93",
"name": "Summer sale",
"state": "scheduled",
"starts_at": "2026-08-01T07:00:00Z",
"ends_at": "2026-08-15T07:00:00Z",
"next_fire_at": "2026-08-01T07:00:00Z",
"created_at": "2026-07-20T14:32:11Z",
"change_count": 48,
"entity_count": 24,
"failed_change_count": 0,
"changes": [
{
"id": "a1d8f2c6-9e4b-4c7a-8b3d-6f2e9c5a1d84",
"entity_id": "5b2e9c1a-7d4f-4a8b-9e6c-3f1d8a5b2c70",
"store_id": "1e8e4c2a-9f3b-4d7c-8a5e-6b2d9c1f7a30",
"store_domain": "acme-eu.myshopify.com",
"field_key": "price",
"target_value": "39.00",
"captured_value": "49.00",
"captured_at": "2026-07-20T14:32:11Z",
"apply_status": "pending",
"revert_status": "pending"
}
]
}
List an entity's scheduled changes
/api/v1/products/{id}/dropspim:read/api/v1/variants/{id}/dropspim:read/api/v1/collections/{id}/dropspim:read
The drops that will change this entity, each narrowed to the changes that touch
it — the product read also covers changes to the product's variants. Same
{"data": […], "next_cursor": null} list shape, with
changes present on each drop but filtered to the entity. Bounded by
the account's drops, so next_cursor is always null. An
unknown entity id answers 404 not_found; an entity with no scheduled
changes answers an empty list.
The drop and change shapes
| Field | Type | Description |
|---|---|---|
id / name | uuid / string | The drop's identity. |
state | string | Where the drop stands in its lifecycle. |
starts_at / ends_at | date-time | The window. Only starts_at is guaranteed; ends_at may be absent. |
next_fire_at | date-time | The next time the scheduler will act on this drop. |
created_at | date-time | When the drop was created. |
last_error | string | The most recent run error, when there was one. |
change_count / entity_count / failed_change_count | integer | Aggregates over the drop's changes. |
changes | array | Present on the detail read (and the per-entity reads); omitted on list rows. |
Each change is one field change on one entity, on one store:
| Field | Type | Description |
|---|---|---|
id | uuid | The change's id. |
entity_id | uuid | The entity the change targets. |
store_id / store_domain | uuid / string | The store the change applies on. |
field_key | string | The field being changed. |
target_value | string | The value the drop will apply. |
captured_value | string | The value captured before applying, restored on revert. |
captured_at | date-time | When the value was captured. |
apply_status / apply_error | string | How the apply went; the reason when it failed. |
revert_status / revert_error | string | How the revert went; the reason when it failed. |
failed_change_count, then drill in.
A monitoring integration polls the list, and only fetches a drop's detail when
failed_change_count is non-zero or last_error is set —
then reads apply_error / revert_error per change. See
the scheduled drops guide.
Notes
- Part of the 2026-07-31 operations surface (private beta). All drop endpoints are reads — drops are created and edited in the app.
- Every list here is bounded, so all of them return the whole set with
next_cursor: null. - Errors follow the standard envelope:
401,403,404(detail and per-entity reads),429.