# Integrations: connect apps (/docs/agents/integrations)

**Setup → Integrations** is where your workspace connects other apps: CRMs, spreadsheets, calendars, payment providers, automation tools, AI models and your own APIs. Once an app is connected here, every flow can use it as a step. These are the same connections as the flow builder's **Integrations** sheet (see [Apps and webhooks in flows](/docs/agents/flow-connections)), so connecting in either place connects it for both.

- **Who can use it:** Connecting, reconnecting, testing and removing apps needs **Connect and remove apps**, which owners and admins have by default. Everyone else can see which apps are connected and whether they're working, with a **View only** notice. See [Roles and permissions](/docs/settings/roles).
- **Before you start:** The app's login, API key, token, password or webhook URL, depending on how it connects (see [How each app connects](#how-each-app-connects)).

## Open Integrations [#open-integrations]

In the sidebar, click **Setup**, then the **Integrations** tab. The count on the tab is the number of connected apps, and the line under the title sums up: how many apps are connected, how many AI model keys you've added, and either "every flow can use them" or how many need reconnecting.

![Setup on the Integrations tab: Add custom API with its N shortcut, the Connected panel with five connections (HubSpot needs reconnecting), and the Apps catalogue starting with AI models](/screenshots/integrations/01-integrations.webp)

**Connected** lists every connection: its name, the app, the account or key label, how it signs in and when a flow last used it, then its state.

![The Connected panel: n8n · production, Google Sheets, HubSpot with Needs reconnecting and Reconnect, Stripe · live, and Helpdesk API](/screenshots/integrations/02-connected.webp)

| State | Meaning |
|---|---|
| **Connected** | The credentials work. |
| **Needs reconnecting** | The sign-in or key stopped working. Flows that use it can't run that step until you click **Reconnect**. |

Before anything is connected, the panel says **Nothing connected yet**: connect an app below and every flow can use it as a step.

AI model connections carry a **Your key** badge: Mokanata's AI steps can run on your key instead of Mokanata's, and usage is billed to your account with that provider.

## Find an app [#find-an-app]

**Apps** lists the 94 apps you can connect, grouped by category. Each card shows whether it's connected, what it's for, the models it offers or what flows can do with it ("In flows: Create a deal"), and how it connects.

![The Apps catalogue: 5 of 94 connected, the search box, category and status filters, and the AI models group with TypeSafe Jev, OpenAI, Anthropic, Google Gemini and others, each with Your key and Add key](/screenshots/integrations/03-apps.webp)

- **Search apps, models or actions**: matches app names, categories, descriptions, model names and flow actions. Press <kbd>/</kbd> to jump there.
- **Filter by category**: one of the 13 categories below.
- **Filter by status**: **All apps**, **Connected**, **Not connected**, **Bring your own key** (AI model keys) or **Built for Indonesia** (Xendit, Midtrans, Tokopedia, Shopee, KiriminAja, Biteship, RajaOngkir, GoSend and Jurnal).

Payment apps here, such as Stripe, Xendit, Midtrans and PayPal, are connections your flows can call with your own key. Taking customer payments through a payment gateway is coming soon; see [Payment gateways and QRIS](/docs/payments/payment-gateways).

![The category filter open: All categories, AI models 13, AI media 5, Web data 5, Analytics & marketing 7, Automation 4, Spreadsheets & docs 11, Email & calendar 9, Team & projects 9, CRM 6, Payments & commerce 9, Shipping & logistics 5, Accounting 3, Developer 8](/screenshots/integrations/04-categories.webp)

![The CRM category: HubSpot (Connected, Add another), Salesforce, Pipedrive, Zoho CRM, Intercom and Zendesk, each with Connect and how it signs in](/screenshots/integrations/05-crm-apps.webp)

| Category | Some of the apps |
|---|---|
| AI models | TypeSafe Jev, OpenAI, Anthropic, Google Gemini, xAI, OpenRouter, Mistral AI, DeepSeek, Groq, Ollama |
| AI media | fal.ai, Replicate, Hugging Face, ElevenLabs, Deepgram |
| Web data | Firecrawl, Exa, Tavily, Apify, Jina AI |
| Analytics & marketing | Google Analytics, Google Tag Manager, Google Search Console, Mixpanel, PostHog, Hotjar, Semrush |
| Automation | n8n, Zapier, Make, Pipedream |
| Spreadsheets & docs | Google Sheets, Notion, Airtable, Typeform, Google Drive, Dropbox, Confluence, WordPress, Webflow |
| Email & calendar | Gmail, Google Calendar, Calendly, Mailchimp, Google Meet, Cal.com, Zoom, Resend, Brevo |
| Team & projects | Slack, Discord, Trello, Asana, ClickUp, Linear, Jira, Todoist, GitHub |
| CRM | HubSpot, Salesforce, Pipedrive, Zoho CRM, Intercom, Zendesk |
| Payments & commerce | Stripe, Shopify, WooCommerce, Xendit, Midtrans, PayPal, Lemon Squeezy, Shopee, Tokopedia |
| Shipping & logistics | KiriminAja, Biteship, RajaOngkir, GoSend, GrabExpress |
| Accounting | Xero, QuickBooks, Jurnal by Mekari |
| Developer | PostgreSQL, Custom API, MySQL, MongoDB, Supabase, Firebase, Redis, BigQuery |

If nothing matches, **No apps match** shows with **Clear filters**.

## Connect an app [#connect-an-app]

<Steps>
<Step>

### Open the app's dialog [#open-the-apps-dialog]

On the app's card, click **Connect** (or **Add key** for an AI model, **Add another** for an app you've already connected). The dialog is titled **Connect** and the app's name.

</Step>
<Step>

### Fill in the fields [#fill-in-the-fields]

Every dialog starts with **Name**: how flow steps list the connection, for example "Stripe · live". It starts as the app's name; change it when you'll have more than one connection to the same app. The other fields depend on how the app connects (see [How each app connects](#how-each-app-connects)).

![Connect OpenAI with Name OpenAI, Label for this key Production, the API key filled in, and the note that usage is billed to your OpenAI account](/screenshots/integrations/07-connect-api-key.webp)

Keys, tokens and passwords are encrypted at rest. Nobody can read them back, including you.

</Step>
<Step>

### Connect [#connect]

Click **Connect**, or **Continue with** and the app's name for apps you sign in to. The dialog closes, the connection appears at the top of **Connected** and a toast says "Every flow can use it now".

![The Connected panel with the new OpenAI connection at the top: Your key, Production, the last characters of the key, API key, last used Never](/screenshots/integrations/08-key-connected.webp)

</Step>
</Steps>

If a field is missing, the dialog says which one when you click **Connect** ("Give this key a label, like Production", "Enter the username", "Enter a full address, like https://…"). If the app turns the connection down, **It didn't connect** shows the reason and the button becomes **Try again**.

### How each app connects [#how-each-app-connects]

The card shows how an app connects, under its button.

<Tabs items={['Sign in with the app', 'API key', 'Bearer token', 'Username and password', 'Webhook URL']}>
<Tab value="Sign in with the app">

For apps like Google Sheets, Slack, HubSpot, Salesforce and Gmail. Enter **Name** and the **Account email** you'll sign in with, then click **Continue with** and the app's name. It opens the app to approve access; Mokanata asks only for what its steps use.

![Connect Slack with Name, Account email and Continue with Slack](/screenshots/integrations/06-connect-oauth.webp)

</Tab>
<Tab value="API key">

For apps like OpenAI, Anthropic, Stripe, Airtable and Zendesk. Enter **Name**, a **Label for this key** (which account or environment the key belongs to, like Production), any address the app needs (for example the server URL for Ollama or the subdomain for Zendesk), and the **API key**.

</Tab>
<Tab value="Bearer token">

For a custom API and some AI providers. Enter **Name**, a **Label for this key**, the address if there is one, and the **Bearer token**.

To call an API that isn't in the catalogue, click **Add custom API** in the header (or press <kbd>N</kbd>): enter its **Base URL** (like `https://api.example.com`) and a **Bearer token**. Flows call it with an **HTTP request** step (see [Blocks reference](/docs/agents/flow-nodes#integrations)).

![Connect Custom API with Name, Label for this key, Base URL and Bearer token](/screenshots/integrations/11-custom-api.webp)

</Tab>
<Tab value="Username and password">

For databases and sites like PostgreSQL, MySQL, Redis and WordPress. Enter **Name**, **Username**, the address (for example **Site URL** or **Host**) and **Password**.

![Connect WordPress with Name, Username, Site URL and Password](/screenshots/integrations/10-connect-basic.webp)

</Tab>
<Tab value="Webhook URL">

For automation tools: n8n, Zapier, Make and Pipedream (and Discord's channel webhook). Enter **Name**, the **Instance or workspace** it belongs to, and the URL the tool gave you (for Zapier, the **Catch hook URL** from a Catch Hook trigger).

![Connect Zapier with Name, Instance or workspace and Catch hook URL](/screenshots/integrations/09-connect-webhook.webp)

</Tab>
</Tabs>

## Keep connections working [#keep-connections-working]

### Reconnect [#reconnect]

When a connection shows **Needs reconnecting**, click **Reconnect** on its row. A toast confirms, and the row goes back to **Connected**. If it fails, a toast says it didn't reconnect, with **Retry**.

![The toast "HubSpot reconnected"](/screenshots/integrations/12-reconnected.webp)

### Test, add another or remove [#test-add-another-or-remove]

Open a connection's **⋯** menu:

![The Stripe · live menu with Test the connection, Add another Stripe connection and Remove Stripe · live](/screenshots/integrations/13-row-menu.webp)

- **Test the connection** signs in with the saved credentials. "Stripe · live works: The credentials signed in." means it's fine; "didn't answer" means you should reconnect it.
- **Add another** connection to the same app, for example a test and a live account.
- **Remove** asks you to confirm.

![The toast "Stripe · live works: The credentials signed in."](/screenshots/integrations/14-test-works.webp)

<Callout type="warn" title="Removing affects flows">
Flows that use a removed connection show a problem until you pick another connection in their steps. The toast after removing has **Undo**.
</Callout>

![The Remove Stripe · live? confirmation: flows that use it show a problem until you pick another connection, with Cancel and Remove connection](/screenshots/integrations/15-remove.webp)

## What members and viewers see [#what-members-and-viewers-see]

Without **Connect and remove apps**, a **View only** notice says you can see which apps are connected and whether they're working. **Add custom API**, **Connect**, **Add key** and **Reconnect** are disabled, the row menus are hidden, and <kbd>N</kbd> does nothing.

![The View only notice for the Sales lead role on the Integrations tab, with Add custom API disabled](/screenshots/integrations/16-view-only.webp)

## Troubleshooting [#troubleshooting]

<Accordions type="single">
<Accordion title="A flow step says its connection has a problem">
The connection was removed or needs reconnecting. Reconnect it here, or pick another connection in the step. See [Apps and webhooks in flows](/docs/agents/flow-connections).
</Accordion>
<Accordion title="Test the connection says it didn't answer">
The saved credentials no longer sign in, usually because the password, key or app access was changed or revoked. Click **Reconnect**, or remove the connection and connect it again with new credentials.
</Accordion>
<Accordion title="I can't see a key I pasted">
Keys, tokens and passwords are never shown again after you save them. The row shows only their last characters. To change one, add a new connection and remove the old one.
</Accordion>
</Accordions>

## Next steps [#next-steps]

<Cards>
<Card title="Apps and webhooks in flows" href="/docs/agents/flow-connections" description="Use connections in flow steps, and post data to other apps." />
<Card title="Blocks reference" href="/docs/agents/flow-nodes" description="The steps that call apps and APIs." />
<Card title="Flow builder basics" href="/docs/agents/flow-builder" description="Build what your agents do, step by step." />
</Cards>
