Catalog
New, changed and deleted events and markets, one catalog_change frame per entity carrying its current state. Send { action: "subscribe", channel: "catalog", venues?, entities? }; no user auth required, and the app's disabled venues and categories apply. Subscribing again replaces the filter.
Live only, no replay. Subscribe first, then catch up with GET /catalog/changes (same item shape) from your last changedAt minus a minute, then apply buffered frames. Apply an item when its (version, changedAt) is newer than what you hold for (entity, id); duplicates around the catch-up are expected. On stream_interrupted listing catalog, catch up over REST again.
Send
Subscribe to (or unsubscribe from) catalog changes
venues limits changes to those venues (deletes always pass); entities to event and/or market. Server replies with subscribed / unsubscribed on channel catalog.
CatalogSubscribe · Subscribe to catalog changes
{ "action": "subscribe", "channel": "catalog", "venues": [ "string" ], "entities": [ "event" ], "id": "string"}Receive
Current state of a created, updated or deleted event or market
CatalogChange · Catalog change
{ "type": "catalog_change", "entity": "event", "id": "string", "op": "created", "version": 0, "changedAt": "string", "venue": "polymarket", "event": { "id": "string", "venue": "polymarket", "externalIdentifier": "0xabc123", "title": "string", "slug": "string", "status": "string", "startDate": "string", "endDate": "string", "createdAt": "string", "categories": [ { "id": "string", "name": "string" } ], "matched": true, "clusterAnchorId": "string", "clusterVenues": [ "string" ] }, "market": { "id": "string", "venueEventId": "evt_xyz789", "venue": "polymarket", "externalIdentifier": "0xabc123", "question": "string", "shortTitle": "string", "status": "string", "startDate": "string", "endDate": "string", "createdAt": "string", "outcomes": [ { "id": "string", "label": "Yes", "title": "string" } ], "categories": [ { "id": "string", "name": "string" } ], "matched": true, "clusterAnchorId": "string", "clusterVenues": [ "string" ] }}