@streameye/n8n-nodes-streameye
v1.0.4
Published
n8n community node for the Streameye API
Readme
@streameye/n8n-nodes-streameye
This is an n8n community node. It lets you use the Streameye API in your n8n workflows to build, render and distribute data-driven creatives straight from your automations.
Streameye is a dynamic creative platform for building, rendering and distributing data-driven banners and feeds from reusable wizards and asset galleries. With this node you can create and update feeds, inject live data and images, render the results as ad tags, rendered images and permalinks — all without leaving n8n.
n8n is a fair-code licensed workflow automation platform.
Table of Contents
- Key Features
- Installation
- Credentials
- Operations
- Triggering Workflows (Webhooks & Schedules)
- Example Usage
- How It Works
- Compatibility
- Resources
- Version History
- License
Key Features
- 📰 Create & update feeds from a wizard, with feed data validated against the wizard schema before it is sent.
- 🪄 Automatic image resolution — reference gallery assets by name and the node swaps in the correct asset URL for you.
- 🔗 Produce ad tags, rendered images and permalinks from any feed, optionally scoped to a single banner, quality or type.
- 📦 Download generated feed files for a feed.
- 🗂️ Browse galleries and wizards with rich filtering, sorting and pagination.
- 🔐 Secure OAuth2 authentication against the Streameye identity provider.
Installation
Follow the installation guide in the n8n community nodes documentation.
In short:
- Go to Settings → Community Nodes.
- Select Install.
- Enter
@streameye/n8n-nodes-streameyeas the npm package name. - Agree to the risks of using community nodes and select Install.
Once installed, the Streameye node is available from the nodes panel.
Credentials
Authentication uses OAuth2 (Authorization Code) against the Streameye identity provider.
- Obtain an OAuth2 Client ID and Client Secret from Streameye.
- In n8n, create a new Streameye OAuth2 API credential and enter the Client ID and Client Secret.
- Adjust the Scope if needed (default:
openid email profile). - Select Connect my account and complete the OAuth2 sign-in flow.
The API URL, authorization URL and token URL are preconfigured in the credential — you don't need to set them.
Operations
The node exposes three resources — Feed, Gallery and Wizard. All calls go to a single Streameye GraphQL endpoint using your OAuth2 credentials.
📰 Feed
| | Operation | Description | Key inputs |
|---|-----------|-------------|------------|
| ➕ | Create | Create a feed from a wizard. The Data is validated against the wizard schema before sending (see How It Works). | Wizard ID (required), Name (required), Language (required, default is en), Data — feed data as JSON (required); optional Looping (defaults to 2) |
| ✏️ | Update | Update an existing feed's data. Data is validated against the wizard schema. | Feed ID (required), Data — JSON (required); optional Name, Language (both kept unchanged if left empty), Looping (leave at 0 to keep current) |
| 🔍 | Get by ID | Retrieve a single feed. | Feed ID (required) |
| 📥 | Get Files | Download the generated files for a feed. | Feed ID (required) |
| 🖼️ | Get Images | Get rendered image URLs for a feed. | Feed ID (required), Quality (defaults to 93), Type (JPG / PNG / WEBP, defaults to JPG) |
| 🔗 | Get Permalinks | Get permalink URLs for a feed. | Feed ID (required) |
| 📋 | Get Many | Get feeds (filterable, sortable, paginated). | Optional Wizard ID, Keyword, Type, Filters (created/updated date ranges), Order By + Order Direction, Page, Page Size |
ℹ️ Mixed-type runs. Get Images and Get Permalinks are not supported for
html5feeds. When a batch contains such items, those items are skipped with an n8n warning and empty output rather than failing the whole workflow.
🖼️ Gallery
| | Operation | Description | Key inputs | |---|-----------|-------------|------------| | 📂 | Get Many | Get assets in a gallery (filterable, sortable, paginated). | Gallery ID (required); optional Keyword, Filters (Category), Order By + Order Direction, Page, Page Size |
🧩 Wizard
| | Operation | Description | Key inputs |
|---|-----------|-------------|------------|
| 🔍 | Get by ID | Retrieve a wizard's schema, data (defaults) and supported languages. The compressed schema/data fields are decompressed automatically. | Wizard ID (required) |
| 📋 | Get Many | Get wizards (filterable, sortable, paginated). | Optional Keyword, Type, Filters (created/updated date ranges), Order By + Order Direction, Page, Page Size |
Triggering Workflows (Webhooks & Schedules)
Streameye does not ship a dedicated trigger node — the Streameye node is an action node that you place after a trigger. To start a workflow, use one of n8n's built-in triggers and then feed its data into the Streameye node.
The two most common patterns:
🪝 Webhook (event-driven)
Use n8n's core Webhook node when an external system should push data into n8n in real time (for example, a sports-data service or an AI selection job that posts the next best games).
- Add a Webhook node as the workflow's trigger and copy its Production URL.
- Configure your external system to POST its payload to that URL.
- Wire the Webhook node into a Streameye node (e.g. Feed → Update) and map fields from
{{$json.body}}into the feedData.
⏱️ Schedule (polling)
Use the core Schedule Trigger node to run on an interval — ideal for periodically syncing a product catalogue or refreshing creatives.
- Add a Schedule Trigger and set the cadence (e.g. every 15 minutes, or daily at 06:00).
- Pull data from your source (database, API, spreadsheet), then pass it into a Streameye node.
💡 You can also start any of these workflows manually with the Manual Trigger while you build and test.
Example Usage
The snippets below show the shape of the data at each step. Map values with n8n expressions such as
{{$json.body.fixture.homeTeam}}.
Example 1 — Match-day banners that redirect permalinks to the next best game
Scenario: an AI job selects the best upcoming football fixtures and posts them to n8n. The workflow updates an existing Streameye feed so its permalinks start redirecting to the next best game — pulling team crests from a Streameye gallery and enriching the creative with kickoff time and the last 5 meetings between the teams.
Flow:
- Webhook (trigger) — receives the AI-selected fixture:
{ "feedId": "fd_9aZ…", "home": "arsenal", "away": "chelsea", "kickoff": "2026-06-07T16:30:00Z" } - Data store / HTTP Request — look up the last 5 meetings between the two teams from your own database.
- Streameye → Feed → Update — update the existing feed, injecting the match data. The crest fields are
asset_pickerfields bound to a Streameye gallery, so you can pass the team names and the node resolves them to the correct crest URLs automatically:{ "homeCrest": "arsenal", "awayCrest": "chelsea", "kickoff": "Sat 7 Jun · 17:30", "form": "W-D-L-W-W vs L-W-D-L-D" }Because
homeCrest/awayCrestareasset_pickerfields,"arsenal"is swapped for that gallery asset's URL. A value that matches nothing is dropped so the wizard's default crest is used. Seeasset_pickerresolution. - Streameye → Feed → Get Permalinks — fetch the feed's permalinks. Because the same permalink now points at the updated feed, every banner already in the wild redirects to the next best game with no re-trafficking.
The result: a single permalink per banner that always serves the freshest fixture.
Example 2 — Scheduled retail product feed pushed to an ad platform
Scenario: every morning, pull the latest product catalogue from a data store, update (or create) a Streameye feed, render the ads, and push the creatives to an ad platform.
Flow:
- Schedule Trigger (trigger) — runs daily (e.g. 06:00).
- Database / Spreadsheet node — query the current product feed (image URLs, pricing, availability).
- Streameye → Feed → Create (first run) or Feed → Update (subsequent runs) — build the feed from a retail wizard, injecting product images directly via their URLs, plus pricing and availability:
{ "productImage": "https://cdn.example.com/products/sku-1234.jpg", "price": "£49.99", "availability": "In stock" }Any
asset_picker/image field that already contains anhttp(s)://URL is kept as-is — no gallery lookup is performed. - Streameye → Feed → Get Images — render the ads for the current products and collect the image URLs.
- HTTP Request / ad-platform node — push the rendered creatives to your ad platform.
The result: a hands-off pipeline that keeps live product ads in sync with stock and pricing.
How It Works
Feed data validation (Create / Update)
Before a feed is created or updated, the node loads the feed's wizard schema and validates the Data JSON against it:
- Language check. If you provide a
Languageand the wizard publishes a list of supported languages, an unsupported language throws an error listing the supported ones. (If the wizard exposes no language list, any value is accepted.) - Required fields. Fields marked
requiredin the wizard schema must be present and non-empty. This is enforced across the schema'sfields, the fields insiderequiredgroups, theconditionFields, andrequirednesteditemswithin a field. - Defaults from the wizard. Any required field that is missing or empty is filled from the wizard's default data when a default exists. The node adds an execution hint listing which fields were defaulted.
- Validation errors. If, after defaulting, any required field is still missing/empty, the node throws a single error listing every failing field.
asset_picker resolution
Wizards expose image/asset fields as the asset_picker type, each bound to a Streameye gallery (via a galleryId in the wizard schema). For each asset_picker property in your Data you may supply either a final asset URL or just an asset name — the node resolves it for you, so you don't have to look up gallery URLs manually.
| Your value | What the node does |
|------------|--------------------|
| A URL (https://… or http://…) | Kept as-is — no lookup. |
| Any other text (an asset name / keyword) | Searches that field's gallery for the keyword and substitutes the top match's asset URL. |
| A keyword with no matching gallery asset | The property is removed, so the feed falls back to the wizard's default value for that field. |
Resolution runs for both Create and Update, and the node adds an execution hint listing which asset_picker fields were resolved to URLs and which were dropped.
Example — a wizard with an asset_picker field team1 bound to a teams gallery:
| Data you provide | Result sent to the API |
|--------------------|------------------------|
| { "team1": "https://static.streameye.net/galleries/4jt…/arsenal" } | Unchanged (already a URL) |
| { "team1": "arsenal" } | Resolved to the matching gallery asset's URL |
| { "team1": "no-such-team" } | team1 removed → wizard default is used |
Compressed fields
Some Streameye fields are stored gzip-compressed and base64-encoded (e.g. a wizard's schema and data). The node decompresses these on read and compresses feed data on write automatically — you always work with plain JSON in n8n.
Compatibility
- Requires an n8n version that supports community nodes (n8n Nodes API v1).
- Requires Node.js
>=20.15. - Built and linted in
strictmode, eligible for n8n Cloud verification. - No external runtime dependencies (uses n8n's authenticated HTTP helpers only).
New to n8n? See the Try it out documentation to get started.
Resources
Version History
1.0.x
First stable release. Feed (Create, Update, Get by ID, Get Files, Get Images, Get Permalinks, Get Many), Gallery (Get Many) and Wizard (Get by ID, Get Many) operations, OAuth2 authentication, feed-data validation against the wizard schema, automatic asset_picker resolution, and automatic gzip/base64 (de)compression of wizard schema/data. Published via GitHub Actions with npm provenance.
See CHANGELOG.md for the full history.
License
MIT © StreamEye
