Skip to content

Publishing a flow

A deployed flow can be consumed in many ways: calling it through the API, letting a new Gmail email trigger it, putting its chat on your website or publishing it as an MCP server. The API Access window gathers all of them. The tabs you see in it depend on the flow’s components: each input component adds its own.

Opening API Access

In the editor, press API Access in the right-hand column. At the top you choose:

  • Consumption mode: Production uses the deployed version; Test, the draft you have in the editor. In Test only the cURL and Webhook tabs appear.
  • API key: the key the calls will use. Tabs that show code or an address already carry it. See API keys.
  • Deployed version: which version will answer. If the flow has none, press Deploy a version. Almost every way to publish needs one. See Versions and publishing.

The help icon next to the title opens Calling a flow through the API.

Which tab appears with each component

If the flow has…You getTo
No special input componentcURL, Python API, JavaScript APICall it from your code. See Calling a flow through the API.
Chat OutputChat Widget HTML and Integrated ChatPut the flow’s chat on your website.
Webhook InputWebhookLet another application trigger it by sending data to an address.
Gmail Webhook, Google Drive, Google Forms, Google Calendar, Outlook Mail, Outlook Calendar, OneDrive, Shopify or Odoo<Service> WebhookRun it every time something new arrives in that service. See Service webhooks.
Teams Webhook or Jira WebhookTeams Webhook / Jira WebhookThe same, with Teams or Jira events.
Telegram WebhookTelegramConnect a Telegram bot.
WhatsApp Business, Twilio, Instagram or MailchimpWhatsApp, WhatsApp/Twilio, Instagram Webhook, Mailchimp WebhookThe address to paste in that service.
MCP ServerMCP ServerPublish its tools for Claude, Cursor or Visual Studio Code. See Publishing as an MCP server.
A2A ServerA2A ServerPublish it as an agent for other agents. See Publishing an A2A agent.
AnyFlow TraceSend each run’s trace to LangSmith.

A flow with a webhook component is always triggered by its webhook, so in that case cURL, Python API and JavaScript API do not appear. They do not appear for flows with a Voice Agent either: a voice agent is reached by phone or from the web, and it is published in the voice agents console (see Voice agents).

Calling it through the API

The cURL, Python API and JavaScript API tabs give the code to call the flow, with your key and your server already in it.

How to start the run, check its status, read the result or the stream, and the errors are in Calling a flow through the API.

The flow’s webhook

The Webhook tab shows the address another application must POST its data to. The address already carries your API key, encoded, in the x-api-key parameter. What the other application sends reaches the Webhook Input component.

To try it without leaving the editor, press Test Webhook, the button at the bottom of the canvas. While it says Listening …, send a request to the address: the flow runs with what arrives and you see it in the editor.

What the caller gets back, with or without a Webhook Response component, is in Webhooks.

Service webhooks

The Gmail, Google Drive, Google Forms, Google Calendar, Outlook, OneDrive, Shopify, Odoo, Teams and Jira components do not wait to be called: NappAI subscribes to that service and runs the flow every time something new arrives. For Gmail, Google, Outlook, OneDrive, Shopify and Odoo, NappAI checks for news every minute.

From the component

In the component’s properties, below its fields, you see the subscription status and a button:

  • Checking status… while NappAI looks it up.
  • Synced: the subscription is active and matches what the component is set to.
  • Out of sync: there is no subscription yet, or you have changed the component’s filters (for example, the Gmail labels) since you subscribed.

The button, Subscribe (or Consume for Teams and Jira), opens API Access right on that service’s tab. It needs a credential chosen in the component.

From API Access

The service’s tab shows the same status and compares, field by field, what the component has with what the subscription has. The Refresh icon checks again.

  • If it says Out of sync, press Subscribe (for Teams and Jira, Register Webhook). If there was a subscription already, it is updated with what the component has now.
  • If it says Synced, you can Unsubscribe (for Jira, Delete Webhook; for Teams, Unregister Webhook).

Telegram

The Telegram tab connects the bot of the credential chosen in Telegram Credential. It shows Consumed if the bot already sends its messages to this flow and Not consumed if not. Publish connects it, and Update connects it again if you change key or credential. It needs an API key and a deployed version.

WhatsApp, Twilio, Instagram and Mailchimp

Their tabs show the address to paste in that service’s settings so it sends its messages or events to the flow. Each component’s page explains where it goes.

The chat on your website

If the flow has a Chat Output:

  • Chat Widget HTML gives the code to paste inside your page’s <body> to show the flow’s chat. The code’s attributes (mode, history, session, colours…) are explained in the code itself.
  • Integrated Chat sets the chat up step by step: in General, the user name, the view mode (full screen or floating), history, file uploads, session management or tweaks; in Appearance, themes and colours. Save & Launch opens it in a new tab.

Both carry the API key chosen above, so anyone who looks at the page’s code can read it. Use a key only for this and regenerate it if it leaks.

MCP and A2A

  • With an MCP Server component, the flow is published as an MCP server and its tools can be used from Claude, Cursor or Visual Studio Code. See Publishing as an MCP server.
  • With an A2A Server component, the flow is published as an agent other agents can hand tasks to. See Publishing an A2A agent.

Voice agents

A flow with a Voice Agent is not published in API Access but in the voice agents console: there you choose whether it answers on the web, by phone or both, and get the widget. See The voice agents menu and Outbound calls.

Running it on a schedule

For a flow to run by itself, for example every Monday at 9:00, you do not need any component: schedule it in the Scheduler. It needs a deployed version and an API key.

Who can publish

API Access needs permission to see API keys, and deploying a version or subscribing a webhook needs a role that can edit flows. See Roles and permissions.