Keyword alerts miss the state of the record.
A daily search can tell you that a notice exists. It does not tell you whether an amendment changed the close date, added a document, or moved the opportunity into a different state. A change feed lets your app process the event and then fetch the current record when needed.
{
"data": [
{
"eventId": "00000000-0000-4000-8000-000000000101",
"recordId": "00000000-0000-4000-8000-000000000001",
"noticeId": "2d73364f6e5f4b889c8e6e6a5c9f2b67",
"title": "Enterprise IT Support Services",
"changeType": "modified",
"eventClass": "change",
"changedAt": "2026-06-09T15:22:18.000Z",
"actionable": true,
"reasonSummary": "Notice fields changed"
}
],
"page": {
"limit": 5,
"nextCursor": "eyJ2IjoxLCJzb3J0IjoiLi4uIn0"
}
}Poll changes, then process by recordId.
Use the change feed for incremental sync. Store the newest processed event and the returned cursor. If the worker restarts without a cursor, resume from your last processed changedAt timestamp with updatedSince.
# First page
curl -s 'https://api.boringdataplatform.com/v1/changes?limit=5' \
-H 'Authorization: Bearer <YOUR_API_KEY>'
# Resume by timestamp when your worker restarts
curl -s 'https://api.boringdataplatform.com/v1/changes?updatedSince=2026-06-09T00:00:00.000Z&limit=5' \
-H 'Authorization: Bearer <YOUR_API_KEY>'
# Continue a cursor page returned by the API
curl -s 'https://api.boringdataplatform.com/v1/changes?cursor=<nextCursor>&limit=5' \
-H 'Authorization: Bearer <YOUR_API_KEY>'Fetch history when the user needs the timeline.
The feed is compact by design. Use the returned recordId to fetch opportunity history, snapshots, and source event context for a detail page, agent answer, or internal audit log.
# Read the replay context for one changed opportunity
curl -s 'https://api.boringdataplatform.com/v1/opportunities/<recordId>/history' \
-H 'Authorization: Bearer <YOUR_API_KEY>'Event identity
Store eventId so repeat delivery or cursor retries do not create duplicate alerts.
Record identity
Store recordId and threadKey from the fetched record so future revisions stay attached.
Processing watermark
Store the latest changedAt or nextCursor you processed so the worker can resume deterministically.
Fetch the latest procurement changes.
Replace the API key and run this request from a shell. Use the returned record IDs to fetch current opportunity detail or history.
curl -s 'https://api.boringdataplatform.com/v1/changes?limit=5' \
-H 'Authorization: Bearer <YOUR_API_KEY>'