curl --request GET \
--url http://127.0.0.1:5185/v1/changes/syncconst options = {method: 'GET'};
fetch('http://127.0.0.1:5185/v1/changes/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://127.0.0.1:5185/v1/changes/sync"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "product_first_observed",
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"utah_dabs_sku": "347210"
},
"name": "<string>",
"brand": "<string>"
},
"store": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"inventory_store_code": "0002"
},
"name": "<string>"
},
"change": {},
"semantics": "first_observed_by_nektir",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
},
"upstream_age_known": true
}
],
"meta": {
"page": {
"has_more": true,
"next_cursor": "<string>",
"cursor_expires_at": "2023-11-07T05:31:56Z"
},
"sync": {
"checkpoint": "<string>",
"scope": "observed_product_changes",
"order": "publication_then_event"
},
"warnings": [
{
"code": "INVENTORY_COVERAGE_PARTIAL"
}
]
},
"links": {
"self": "<string>",
"next": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}Resume observed changes from a durable publication checkpoint
With neither token, returns no events and a checkpoint covering the current publication.
Capture that checkpoint BEFORE requesting a baseline export, then poll with checkpoint.
Events are ordered oldest-first by publication and event within (completed checkpoint,
frozen publication]. Retrieval time is not used as a synchronization watermark.
If has_more is true, follow next_cursor alone with the same filters. Only the final page
returns a new checkpoint; commit it atomically with processing that page. Retried pages
may repeat event UUIDs. Empty filtered windows still advance the checkpoint.
Checkpoints are signed, filter-bound and independent of page-cursor and version-history TTLs.
History deletion/reset can return 410 CHECKPOINT_EXPIRED: import a new baseline.
410 CURSOR_EXPIRED instead means retry from the last completed checkpoint and deduplicate.
This is observed-product-change invalidation, not every successful retrieval or store-directory CDC.
No source requests are triggered. Family and observed-time filters are not supported here.
curl --request GET \
--url http://127.0.0.1:5185/v1/changes/syncconst options = {method: 'GET'};
fetch('http://127.0.0.1:5185/v1/changes/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://127.0.0.1:5185/v1/changes/sync"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "product_first_observed",
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"utah_dabs_sku": "347210"
},
"name": "<string>",
"brand": "<string>"
},
"store": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"inventory_store_code": "0002"
},
"name": "<string>"
},
"change": {},
"semantics": "first_observed_by_nektir",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
},
"upstream_age_known": true
}
],
"meta": {
"page": {
"has_more": true,
"next_cursor": "<string>",
"cursor_expires_at": "2023-11-07T05:31:56Z"
},
"sync": {
"checkpoint": "<string>",
"scope": "observed_product_changes",
"order": "publication_then_event"
},
"warnings": [
{
"code": "INVENTORY_COVERAGE_PARTIAL"
}
]
},
"links": {
"self": "<string>",
"next": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}Headers
Query Parameters
Comma-separated observed event types with OR semantics.
8product_first_observed, price_changed, status_changed, product_presentation_changed, aggregate_inventory_changed, store_inventory_first_observed, store_inventory_changed, catalog_presence_changed