Skip to main content
A workflow reference names what to run — an organization, blob, revision and definition anywhere the caller can read — separately from where it runs. Where it runs is the command’s target; every API that names a workflow takes the same two objects:

The three shapes

  • org is required exactly when blob is an alias; given with a blob id, it must name that blob’s organization.
  • revision is required whenever blob is given — no default-to-default.
  • Any other combination (a revision without a blob, a blob without a revision, an org without a blob, a blob alias without an org) is refused with 400 invalid_workflow_reference.
  • Every value is a non-blank string of at most 64 characters; a blank, over-length or non-string value is refused with 400 invalid_workflow_reference.
  • A definition value shaped like a canonical UUID is an id; anything else is an alias.
  • Used verbatim in both create_execution’s workflow field and a schedule’s invocation_target.workflow.

Resolution and access

A caller can run a definition exactly when download_definition on the definition’s own revision would succeed: READ on the source blob, the blob is workflow-typed and readable, the revision passes data/query’s gate, and the definition is in the workflow category. Every failure before the category check answers the identical 403 — you can run what you could download, and no reference can become an oracle for another organization’s contents. An alias is looked up in the workflow category only, so a playground definition sharing it is never picked. A definition id naming a playground definition the caller can reach is refused with 400 invalid_definition_category. An org-scoped API key reaches no other organization, so it can name definitions only in its own.

Whose rules apply

Everything a run depends on comes from where it runs — the session, its blob, and the caller’s tenant for credentials — never from the source definition’s author: A shared workflow only runs where the runner holds the same credential aliases and allows the same imports.

The path form

One string, /-separated, in the same three shapes: definition, blob/revision/definition (where blob must be an id), org/blob/revision/definition. No alias grammar admits /, so the split is unambiguous. Two segments, or more than four, are refused before anything is sent. It exists only where one string has to hold a reference: the --definition argument of blobhub workflow execute and the port of the playground’s chat widget. Every request body, stored record and manifest carries the object instead, and the API never accepts the path.

Where it’s used

Migrating from the removed shapes

The platform refuses each shape below. Send its replacement.
The schedule’s other fields are unchanged. Schedules, and the run history they recorded, stored in a removed shape are rewritten to the new shape. See Create Execution and Invocation Targets. The CLI’s own scheduler manifest carries a parallel migration — see The retired layout for what changes there.