Skip to main content

Credential Management

Named organization connections. Nodes and agents pick them by id. Secrets stay off the canvas and off the public API.

Credential management

A credential in ActionFlows is a named organization connection: an OAuth install, an API key, a database URI, SMTP, S3, FTP, or an MCP server. Nodes, Action Agent tools, agent triggers, and MCP attach pick that name. They do not store host, username, or password on the graph.

There is no standalone Credentials screen and no Test Connection or Share with Workspace control.

Where connections live

In the app, open Organization → Integrations.

Integrations tabWhat you add
IntegrationsOAuth (Connect) and API-key credentials for third-party apps
AI VendorsProvider API keys for models
DatabasesNamed PostgreSQL, MySQL, and MongoDB connections (connectionUri)
FTPNamed FTP connections
SMTPNamed SMTP for email nodes and HITL SMTP
S3Named S3 connections
MCP ServersOrg MCP connections (URL, headers, or OAuth Authenticate)

You can also create or pick a connection from the node inspector when the node requires one.

OAuth redirect URLs and scopes come from the integration catalog row. Do not register a generic https://actionflows.ai/auth/callback as a catch-all.

The public API does not create or read secrets. Attach connections in the app, then run the flow or chat with an agent.

How a run uses them

  1. The node or tool stores a connection id, not the secret.
  2. At execution, ActionFlows decrypts that secret for the call.
  3. Provider secrets are not written to run logs.

Access follows organization membership. Encrypted secrets are not returned by REST, the SDK, or hosted MCP.

Flow Requirements

In Actionflow Studio, Flow Requirements appears on the bottom bar when a connected node is missing a credential. It lists the node and the missing org connection, and opens the same add-connection modal as the inspector.

It does not warn 7 days before OAuth expiry, check Slack scopes against a matrix, or validate connection-string format beyond what the connection form already requires.

Before enqueue, validateFlow also fails the run if connected nodes lack required credentials, a start node, required AI model/service, or required inputs. Unconnected nodes are skipped.

See ActionFlow requirements.

Email HITL vs SMTP

Email delivery is not one credential type:

Node (EN)SlugConnection
Human in the Loop EmailhitlEmailPlatform Resend (RESEND_FROM). No org SMTP.
ResendhitlResendNamed Resend API key
SMTPhitlSmtpNamed SMTP connection

Ordinary Email / SMTP / Resend communication nodes follow the same split. Details: HITL Approvals.

Inbound webhooks are not credentials

A flow webhook authenticates with a path token:

https://actionflows.ai/app/webhooks/actionflows/{actionFlowId}/{token}

That URL is a flow setting (Webhooks tab), not an Integrations row.

Provider notes that are easy to miss

Discord: Connect from Integrations (OAuth) for nodes and agent triggers. Re-authorize so the bot gets the current permission bitfield. listMembers / searchMembers also need the privileged Server Members Intent on the Discord application. The OAuth bitfield does not replace that toggle.

Slack and other OAuth apps: Use Connect. Do not paste a bot token into a homemade credential type unless that integration still uses API-key style credentials.

Google: Use Connect. Token refresh is stored on the OAuth connection. The product does not document a 90-day reauth schedule.

On this page