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 get | To |
|---|---|---|
| No special input component | cURL, Python API, JavaScript API | Call it from your code. See Calling a flow through the API. |
| Chat Output | Chat Widget HTML and Integrated Chat | Put the flow’s chat on your website. |
| Webhook Input | Webhook | Let 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> Webhook | Run it every time something new arrives in that service. See Service webhooks. |
| Teams Webhook or Jira Webhook | Teams Webhook / Jira Webhook | The same, with Teams or Jira events. |
| Telegram Webhook | Telegram | Connect a Telegram bot. |
| WhatsApp Business, Twilio, Instagram or Mailchimp | WhatsApp, WhatsApp/Twilio, Instagram Webhook, Mailchimp Webhook | The address to paste in that service. |
| MCP Server | MCP Server | Publish its tools for Claude, Cursor or Visual Studio Code. See Publishing as an MCP server. |
| A2A Server | A2A Server | Publish it as an agent for other agents. See Publishing an A2A agent. |
| Any | Flow Trace | Send 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.