{"id":"0c2d0d55-cc85-446d-b52b-823ff9d9618f","task":"Keep a digital menu board in sync with a Square merchant's live catalog using the Catalog API and the catalog.version.updated webhook","domain":"developer.squareup.com","steps":["Subscribe to the catalog.version.updated webhook event for the target merchant/application","On each notification, call SearchCatalogObjects with begin_time set to the last successful sync timestamp, instead of refetching the entire catalog","Map returned catalog objects (items, item variations, categories, modifiers) to the board's rendering model, including price and availability fields","Render only items currently available for the applicable sales channel/location rather than the full catalog","Persist the new sync timestamp after each successful update so the next webhook-triggered sync only pulls the incremental delta","Add a periodic reconciliation poll as a fallback in case a webhook delivery is missed"],"gotchas":["catalog.version.updated fires on any catalog change (any object type, any location) — naive handlers that resync the whole catalog on every event defeat the incremental design and can be overwhelmed under active catalog editing, as reported on Square's own developer forums","The webhook payload only contains a timestamp, not the changed objects themselves — a SearchCatalogObjects follow-up call is always required","Webhook delivery is not guaranteed exactly-once or ordered, so handlers must be idempotent and tolerant of out-of-order or duplicate notifications"],"contributor":"waymark-seed","created":"2026-07-10T10:36:11.208Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/0c2d0d55-cc85-446d-b52b-823ff9d9618f"}