Skip to Content
Getting StartedFeatures & benefits

Features & benefits

Greenlight is a self-hosted HTTP gateway between your AI agents or automation workflows and chat platforms. Humans stay in Telegram, Slack, Teams, Discord, Google Chat, WhatsApp, or Messenger — you do not ship platform SDKs for basic approval and chat flows.

In this docs set, workflow and agent mean any HTTP client that calls the Agent API (custom code, n8n, Zapier, Make, and so on). Greenlight does not register agents as first-class entities; routing is defined by channels, prompts, and callback URLs.

Key features

  • Seven chat platforms — Telegram, Slack, Microsoft Teams, Discord, Google Chat, WhatsApp, and Messenger. See Platforms.
  • PROMPT and MESSAGE channel modes — outbound human-in-the-loop questions, or bidirectional chat with your agent. See Concepts.
  • Per-channel credentials — register bots and tokens via API per channel, not as global environment variables.
  • Interactive prompts — button options, optional free-text replies, TTL, media, and correlation_id for matching answers. See Prompts.
  • Signed prompt callbacks — HMAC-SHA256 (X-Signature) on prompt answers. See Callbacks.
  • Bidirectional chat on MESSAGE channels — inbound messages forward to your callback_url; replies go out with POST /v1/messages/send.
  • Admin UI — manage channels, prompts, and messages; view dashboard stats; configure data retention; send messages on MESSAGE channels.
  • Automation-friendly HTTP API — works with n8n, Zapier, Make, Pipedream, and similar tools with no Greenlight plugin. See Automation platforms.
  • Polling fallbackGET /v1/prompts/{id} and pending-prompt listing when webhooks are inconvenient.

Benefits

  • Ship human-in-the-loop approvals without building and maintaining a bot per platform.
  • Point many CI jobs or workflows at one ops approval channel (PROMPT mode) — each prompt’s answer returns to the workflow that created it.
  • Keep platform credentials and chat traffic on infrastructure you control.
  • Use the same gateway for deploy gates and conversational agents.

How workflows and channels work together

Create a channel once (POST /v1/channels/new), then pass that channel_id from any workflow that should talk to that chat.

Many workflows → one PROMPT channel

Any client with a valid X-API-Key can create prompts on the same channel_id. Each prompt carries its own callback_url, so answers route back to the workflow that asked the question:

Typical use: several pipelines share one #ops-approvals Slack channel; each build gets its own prompt card and its own resume webhook.

MESSAGE channels — one inbound destination

A MESSAGE channel has a single callback_url. Every inbound human message from that chat goes to that URL. Multiple workflows cannot each subscribe to the same MESSAGE channel; pick one consumer, or register separate channels for separate chats.

Humans message your workflow or AI in the chat app, not through the Admin UI. The Admin UI is for operators (channel/prompt management and MESSAGE test sends).

MESSAGE vs PROMPT — choose the right mode

GoalUse
Deploy gates, approvals, escalationsPROMPT
Ongoing conversation with an agent or botMESSAGE
Many workflows posting questions to one chatPROMPT
Humans freely messaging an agent in chatMESSAGE
TypeVerbAgent → humanHuman → agentCallback
PROMPTnewPOST /v1/prompts/newPrompt answers only (buttons or ID:#123 text)Per-prompt callback_url (signed)
MESSAGEsendPOST /v1/messages/sendAny chat textSingle channel callback_url (unsigned)

Limitations

  • MESSAGE inbound is not multi-subscriber — one callback_url per channel.
  • PROMPT is not a general chat router — arbitrary text on a PROMPT channel is ignored unless it matches a pending prompt reply format.
  • No agent registry — Greenlight does not store workflow or agent IDs; you manage ownership and routing in your own stack via channel_id, correlation_id, and callback URLs.
  • Shared Agent API key — one GREENLIGHT_API_KEY for the Agent API today (no per-agent keys).
  • One binding per chat recommended — if two active channels share the same platform, target chat, and credentials, inbound routing is nondeterministic. Prefer a single channel_id per chat binding. See Channels.

Next steps

I want to…Start here
Run Greenlight locallyQuickstart
Understand auth and architectureConcepts
Call the API from an agentAgent integration
Wire n8n, Zapier, Make, or similarAutomation platforms
Register and manage channelsChannels