GLOstiq

The API Bridge

Pull external data into the room to feed live variables and tables.

What it does

The API Bridge (API Feeds tab) connects external data — scores, weather, ticket counts, social stats — to your live variables and tables, using a node-based dataflow editor.

Building a flow

1

Add a fetch node pointing at a REST/JSON endpoint.

2

Parse the response and map the fields you care about.

3

Emit values into variables, or sync an array into a table's rows.

4

Store API keys and tokens in the secrets manager rather than inline.

5

Test/run the flow on demand, and set a polling interval to refresh on a schedule.

Note

Emitted values flow straight into the variables and tables your layers display — so external data can drive what the crowd sees in real time. See Variables, timers & polls.

OAuth credentials (Google / YouTube)

For APIs that need a signed-in account (YouTube live chat, private Google data), add an OAuth credential under API Feeds → Credentials: paste a Google OAuth client ID + secret, set the scopes, and click Connect to authorize. The refresh token is stored server-side and never sent back to the browser; request nodes reference the credential by name and attach the token automatically.

Note

Connecting a YouTube channel has real gotchas (Brand Accounts, the consent screen, which channel you authorize as). Follow Connect a YouTube Brand Channel for the full, tested walkthrough.

Curated tables

A table variable turns a feed array into rows + columns you bind as [name.column.index]. Sync from feed imports the array (clear-then-add, keyed by a key column so your custom edits and uploaded images survive a re-sync).

Shaping columns

Promote a nested field — expand a json cell's tree and click + column to extract a deep path (e.g. snippet.displayMessage) into its own column for every row; it re-materialises on each sync.

Change a column's type (text / number / boolean / image / json) from the header dropdown. Pick image to make a URL cell render as a thumbnail — and become bindable to image clips.

Show / hide a column in the operator's variables view with the eye toggle — hidden columns still publish their values, so bindings keep working.

Sort by a column + direction, and Keep latest N to cap the table to a rolling window (also guards the storage limit on busy feeds).

Tip

An image column whose cells hold a URL (e.g. an extracted profileImageUrl) binds to an image clip on the canvas — the clip fetches and shows the live image. See Stage & layers.

Live feeds — auto-update & row actions

When a feed is live, its tables refresh automatically every tick — server-side, so they stay current even with no console open. The mode is auto-selected from the source request:

Mirror — a plain feed re-returns the whole set, so the table reflects the current feed each tick.

Accumulate — a paginated request returns only new items each tick (e.g. YouTube live chat), so new rows fold into a rolling window: newest in, oldest out at your Keep latest N.

Row actions

Some feed rows MANAGE the table instead of displaying — a moderator delete, a user ban, a chat-ended marker. Configure Row actions in the table editor: when a column equals a value, remove matching rows / ignore the row / clear the table. One click loads the YouTube preset (delete-by-id, ban-by-channel, clear-on-end).

Heads up

On busy feeds like live chat, set Keep latest N — it's the safety valve against Firestore's 1 MiB document limit, enforced server-side on every tick.

Custom emoji (YouTube)

YouTube custom emoji arrive as :shortcodes: (e.g. :hand-pink-waving:) — the Data API never sends their images. GLOstiq resolves them to images via a harvested map, so text layers and the variables view render the actual emoji inline (with emoji-aware word wrap). Unknown codes and real Unicode emoji pass through unchanged.

Note

The shortcode→image map is built by scripts/harvest-youtube-emojis.mjs from a captured live-chat response. Re-run it against a new capture to expand coverage as YouTube adds emoji.