Where a credential lives
A credential is stored on a user, an organization or a blob, and the settings of each have a Credentials section that lists, adds and deletes them. Reaching a target’s credentials takesadmin on it. Storing or removing one also
needs a person behind the request, because it hands a target the keys to another system: that puts it on
the access perimeter, so a service account’s own key is
refused even where its membership says admin.
Each credential names its provider from a fixed catalog: OpenAI, Anthropic, Google Gemini, Pinecone, Firecrawl,
Tavily, or a generic one for any other service. Its secret is checked against that provider’s shape when it is
stored, so a malformed one is refused then rather than at the first run that needs it. It also carries an alias,
unique among the credentials on its target, and an optional description; both tell credentials apart and say
nothing about the secret. Create Credential and
Delete Credential are the routes.
How a run uses one
A definition never holds a credential’s id. A component that calls an outside service names the credential it needs by alias, and the platform resolves that alias when a run reaches the component, against the target of whoever started the run: the person’s own user when they start it signed in, the key’s target when an API key starts it, and whoever created the schedule for a scheduled fire. Components lists the components that call outside services. So the credential a run uses belongs to whoever ran it, never to whoever wrote the definition. A shared workflow never runs with its author’s credentials: one that names an alias works only where the person or key running it holds a credential of that alias. If the alias names no credential there, the component fails with an error event naming the alias and takes itsfailure route; it never calls the service without one.

