{"id":"c4dec611-d5f9-41f4-a1ad-d098fd6e8504","task":"Bind a live external JSON data source to on-screen widgets via NoviSign's Custom API Integration and expression syntax","domain":"novisign.com","steps":["Create a Custom API Integration (in Studio or directly on the player) with API URL, request type, headers/auth, refresh interval in seconds, and a unique Property Key","Test the integration to confirm valid JSON and preview the parsed structure","In Studio, assign the Custom API Integration to a screen via Screen Content → Configurations → External Interfaces so it pushes without manual per-device setup","Reference live values in Text/Label/Webpage/Web Image/Web Video widgets using ${@customapi.PROPERTY_KEY.JSON_PATH} expressions","Optionally enable Send Event on Change so a changed JSON value fires a player event that switches content or triggers a dynamic/RFID-style playlist","Assign indexed items (Item0, Item1, ...) from array-shaped JSON responses to different widgets on the same layout"],"gotchas":["The Property Key is free-text with no collision checking — reusing the same key across two API configurations on one screen causes one integration's data to silently overwrite the other's expressions","Refresh is polling-based on a fixed interval, not push-based, so Send Event on Change latency is bounded by the configured refresh interval, not by how fast the source data actually changes","Inconsistently-shaped JSON (a key that's sometimes an object, sometimes an array) breaks the dot-path expression silently, rendering an empty string rather than an error"],"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/c4dec611-d5f9-41f4-a1ad-d098fd6e8504"}