Skip to content
Browse the docs

Docs / Developers

n8n, Make and Zapier

Use ChannelForge in your automations: triggers and actions, keys, and example scenarios.

ChannelForge fits into the automation tools teams already use. Its apps for n8n, Make and Zapier give you triggers ("an episode is ready", "a job finished") and actions ("generate episodes within a price", "approve", "hold back") without writing code. They are built on the public API and work on Pro and above.

What the apps offer#

Each app signs in with a workspace API key (fk_live_…) and checks it against GET /api/v1/me, naming the connection after your workspace. Their instant triggers subscribe a REST hook when you switch a workflow, Zap or scenario on, and remove it when you switch it off — you see each one in Settings → API & webhooks, labelled with where it comes from.

n8n#

NodeResourceOperations
ChannelForge (also usable as a tool by an n8n agent)WorkspaceGet — plan, credits and the key's scopes
ChannelGet, Get Many
EpisodeQuote, Generate (with Max Credits at least the quote — a smaller one is refused and nothing is spent), Get, Get Many, Approve, Hold Back
JobGet, Get Many, Cancel
ChannelForge Trigger—starts a workflow on any event of the catalogue: episode ready, held, published or revised, a post failed, a job succeeded or failed, credits low, the film events, breakouts, the coach, outliers, comment themes, originality holds and storyboards

The trigger checks every delivery's signature, and refuses one signed more than five minutes earlier, before the workflow runs. It needs your n8n reachable at a public https:// address.

Zapier#

KindNameWhat it does
Trigger (instant)New Episode Readyan episode passed the critic: its id, title, critic score, channel and a link to open it
Trigger (instant)Episode Publishedan episode went live: the platform, the post's link and when
Trigger (instant)Job Finisheda job succeeded or failed: its kind, state and credits charged
ActionGenerate Episodesqueues 1–5 episodes for a channel, under a Max Credits ceiling; the price shows as soon as a channel is picked
ActionApprove Episodeapproves a ready episode, so its channel's schedule posts it in its turn
ActionHold Back Episodeholds a ready episode, with a reason shown on it in ChannelForge

Every delivery's signature is checked before a Zap runs. While you set a trigger up, its sample data is your workspace's latest real events. A revoked or expired key marks the connection as needing a new key.

Make#

KindModuleWhat it does
Instant triggerWatch ready episodesan episode passed the critic
Instant triggerWatch published episodesan episode went live, with the post's link
Instant triggerWatch finished jobsa job succeeded or failed
Instant triggerWatch eventsany events you choose when the webhook is made, test events too
ActionGenerate episodes1–5 episodes under a Max credits ceiling
ActionGet a price quotethe price before anything is spent
ActionApprove an episode, Hold back an episodethe approval queue's two answers
ActionGet an episode, Get a jobone record
SearchSearch episodes, List channelswith a limit; episodes page by cursor
UniversalMake an API callany route of the API, with the connection's key

Make's webhooks do not pass the raw body on, so Make cannot check the signature: as with every Make app, a webhook's secret is its unguessable address. In errors, a wrong value or a state (an episode already held) lets the scenario go on, a revoked key stops it and asks for a new one, and a missing scope or plan stops it with the reason.

Until the apps are listed#

Everything above uses only public routes, so you can build the same today.

Triggers need an address in your tool that receives a POST, subscribed once as a REST hook:

  1. Create the receiving address: in n8n a Webhook node (method POST), in Zapier a Webhooks by Zapier catch hook, in Make a Webhooks custom webhook. Copy its address.
  2. Subscribe it to the events you want, once, with a key of any scope:
bash
curl -s -X POST https://forge.storeswiki.com/api/v1/webhooks \
  -H "Authorization: Bearer fk_live_…" -H "Content-Type: application/json" \
  -d '{"url": "https://<the address your tool gave you>", "events": ["episode.ready"], "label": "n8n: episodes to review"}'
  1. Keep the secret from the answer if your tool can check signatures (n8n's Webhook node can pass the raw body to a Code node; the check is on Webhooks and REST hooks). Otherwise treat the receiving address as a secret.
  2. In the app, open the endpoint's Deliveries and press Send a test event to see your tool receive it.
  3. When you no longer need it, DELETE https://forge.storeswiki.com/api/v1/webhooks/whk_… — or revoke the key, which stops it too.

Actions are HTTP requests with the header Authorization: Bearer fk_live_…: n8n's HTTP Request node, Zapier's Webhooks by Zapier request actions, Make's HTTP module. The ones the apps use:

ActionRequestScope
Quote episodesGET /api/v1/quote?channel_id=ch_…&count=2read
Generate episodesPOST /api/v1/episodes/generate with {"channel_id", "count", "max_credits", "idempotency_key"}jobs
Approve an episodePOST /api/v1/episodes/{id}/approvepublish
Hold an episode backPOST /api/v1/episodes/{id}/reject with {"reason"}write
Get an episode / a jobGET /api/v1/episodes/{id} / GET /api/v1/jobs/{id}read
List channels / episodesGET /api/v1/channels / GET /api/v1/episodes?state=readyread

Polling works too where a tool prefers it: GET /api/v1/events?type=episode.ready returns the latest events, newest first, exactly as webhooks deliver them; remember the last id you handled.

For an n8n agent, the MCP server gives every action at once: an MCP Client Tool node with the address https://forge.storeswiki.com/api/mcp, Server Transport HTTP Streamable and Bearer authentication with the key.

Example scenarios#

A human eye on every episode, in Slack#

The channel asks for approval; a reviewer approves from Slack or holds it back.

  1. Trigger: episode ready (episode.ready).
  2. Send the title, the critic's score and the app_url to a Slack channel, with two buttons or reactions.
  3. On "yes": Approve an episode with the episode id. On "no": Hold back an episode with the reviewer's words as the reason.

The channel's schedule then posts approved episodes in its next slots; nothing is posted by the automation itself. If you only want a notice in Slack, without buttons, a webhook with the Slack format does it with no tool at all.

Nightly episodes within a budget#

  1. Schedule: every night at 22:00.
  2. Get a price quote for the channel and 2 episodes; stop when enough is false.
  3. Generate episodes with Max Credits set to the quote's max_credits_to_pass, and an idempotency key made of the channel and the date, so a rerun of the same night queues nothing more.

The channel's own New episodes a day setting already does this inside ChannelForge; the automation is for when you want your own rules (only on weekdays, only after a sale, only for channels above a target).

A publishing log in a spreadsheet#

  1. Trigger: episode published (episode.published).
  2. Add a row: the date, the channel, the episode's title, the platform and the post's link.

Credits and failures to the people who act on them#

  1. Trigger: credits.low → email the workspace's billing contact.
  2. Trigger: job.failed → open a ticket with the job's kind and result.error (failures on ChannelForge's side are retried first and not charged, so a job.failed is worth a look).

Keys for automations#

  • One key per tool, named after it ("Zapier", "n8n production"), so its use is easy to read and to revoke.
  • The fewest scopes: triggers need none beyond read; approvals add publish, holds write, generation jobs.
  • An expiry, renewed on a calendar reminder: a revoked or expired key stops the tool's REST hooks too.
  • Every request counts towards the key's 120 a minute: avoid polling loops tighter than a minute.

Something missing or unclear? Tell us and we will improve this page.