Credentials Sharing

Credentials can be shared with other users so their workflows can use your API keys.

Credentials can be shared with other users so their workflows can use your API keys. See Credentials for an overview and Credentials Tab for adding and managing credentials.

Sharing Model

  • CredentialShare – Links credential_id to user_id (unique per pair)
  • Share by emailPOST /api/credentials/{credential_id}/shares with email; user is looked up and added
  • RevokeDELETE /api/credentials/{credential_id}/shares/{user_id}

You can also share credentials with Teams:

  • CredentialTeamShare – Links credential_id to team_id; all team members gain access
  • Share with teamPOST /api/credentials/{credential_id}/team-shares with team_id
  • Revoke team shareDELETE /api/credentials/{credential_id}/team-shares/{team_id}

Shared credentials show an indicator in the Credentials Tab UI.

Broad-Scope Credentials

Sharing a credential grants the recipient everything that credential can do. For most integrations that is scoped to one workspace or one API key's permissions, but some credentials are far broader.

Google Drive credentials grant full Drive access. The Google Drive credential is authorized with the https://www.googleapis.com/auth/drive scope so the node can operate on files you already own. Sharing it with a user or a team gives every one of them the ability to read, modify, and permanently delete anything in your Google Drive through a workflow — not just the files you had in mind. Share it only with people you would give full Drive access to directly.

If you need to limit exposure, create a dedicated Google account with access to only the folders the workflow needs, and connect the credential with that account instead of your primary one.

Sharing with Workflow Collaborators

When you share a workflow, collaborators can open and run it but cannot use your credentials unless you share those credentials with them too. This applies to credentials in the main workflow and in any sub-workflows it calls. Share each credential with the same users or teams you invited to the workflow. Sub-workflows must also be shared separately from the child workflow's editor. See Workflow Organization.

Execution Context

When a workflow runs, credentials are resolved for the workflow owner (or current user when running). get_credentials_context() merges:

  1. Owned credentialsCredential.owner_id == user_id
  2. User-shared credentialsCredentialShare where CredentialShare.user_id == user_id
  3. Team-shared credentialsCredentialTeamShare where the user is a member of the team

All are merged into a single context dict keyed by credential name.

Usage in Workflows

By Name (Expression DSL)

Credentials are exposed as $credentials.CredentialName in the Expression DSL. Use this for:

  • HTTP nodes (Bearer/Header auth)
  • Telegram nodes
  • Slack nodes
  • Notion bearer tokens in custom HTTP requests (internal token or OAuth access token)
  • Any node that accepts expressions for auth
$credentials.MyBearerToken
$credentials.MyNotionWorkspace

By ID (credentialId)

Some nodes store credentialId (UUID) in node.data:

Node TypeFieldDescription
LLM, Agent, RAG, Image GencredentialIdLLM API credential
CodexcredentialId, githubCredentialIdCodex access token credential and GitHub credential
OpenCode GocredentialId, githubCredentialIdOpenCode Go gateway credential and GitHub credential
JiracredentialIdJira Cloud email/API token or Data Center username/password credential
NotioncredentialIdNotion internal token or OAuth workspace credential
SentrycredentialIdSentry auth token and optional base URL
SupabasecredentialIdSupabase project URL and API key
ClickHousecredentialIdClickHouse connection details (host, port, auth, database)
Telegram Trigger, TelegramcredentialIdTelegram bot credential
Discord Trigger, DiscordcredentialIdDiscord public key or webhook credential
Vector Storecredential_idQdrant or Postgres (pgvector) vector DB, via a Qdrant, Psql, or Custom Embeddings RAG credential
Evalscredential_id, judge_credential_idModel credentials
Playwright AI stepcredentialIdLLM/Vision model (for AI step and Auto Heal)

The executor loads the credential directly from the database by ID and decrypts the config.

Output Masking

After execution, mask_sensitive_output() replaces credential values in outputs with placeholders so secrets are not exposed in results or traces.