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 tab | What you add |
|---|---|
| Integrations | OAuth (Connect) and API-key credentials for third-party apps |
| AI Vendors | Provider API keys for models |
| Databases | Named PostgreSQL, MySQL, and MongoDB connections (connectionUri) |
| FTP | Named FTP connections |
| SMTP | Named SMTP for email nodes and HITL SMTP |
| S3 | Named S3 connections |
| MCP Servers | Org 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
- The node or tool stores a connection id, not the secret.
- At execution, ActionFlows decrypts that secret for the call.
- 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.
Email HITL vs SMTP
Email delivery is not one credential type:
| Node (EN) | Slug | Connection |
|---|---|---|
| Human in the Loop Email | hitlEmail | Platform Resend (RESEND_FROM). No org SMTP. |
| Resend | hitlResend | Named Resend API key |
| SMTP | hitlSmtp | Named 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.
Related
Node Requirements
What a node needs before it runs. Required inputs, a named connection when the catalog says so, and a model on AI nodes.
AI Model Selection Guide
Choose the right AI model for every ActionFlows node. Compare providers, models, capabilities, and cost trade-offs to balance quality, speed, and budget.