Procedures service#

Service for creating and managing procedure templates, which are versioned collections of steps to be performed, typically in a specific order.

OpenAPI file: nominal.procedures.v1.json

Endpoints#

Create procedure#

POST /procedures/v1/procedures

Create a new procedure

Body

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

state ProcedureState

​

Fields of ProcedureState
globalFields map of string to FormField

​

Fields of FormField
id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields required

​

asset AssetField

​

Fields of AssetField
label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

Fields of PresetAssetFieldOptions
options array of AssetReference

The list of options to choose from.

Fields of AssetReference
one of rid, fieldId required

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

checkbox CheckboxField

​

Fields of CheckboxField
label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

text TextField

​

Fields of TextField
label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown required

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

int IntField

​

Fields of IntField
label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

double DoubleField

​

Fields of DoubleField
label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

singleEnum SingleEnumField

​

Fields of SingleEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

multiEnum MultiEnumField

​

Fields of MultiEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

fileUpload FileUploadField

​

Fields of FileUploadField
isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

multiFileUpload MultiFileUploadField

​

Fields of MultiFileUploadField
minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

Fields of ProcedureNode
one of section, step required

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

Fields of ProcedureSectionNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

Fields of ProcedureStepNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

Fields of ProcedureStepContent
one of form, startIngest, selectOrCreateAsset, wait required

​

form FormStep

​

Fields of FormStep
fields array of FormField

​

startIngest StartIngestStep

​

Fields of StartIngestStep
asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

Fields of StringReference
one of constant, fieldId required

​

constant string

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "title": "<title>",
  "description": "<description>",
  "labels": [
    "<labels>"
  ],
  "properties": {
    "<key>": "<value>"
  },
  "state": {
    "globalFields": {
      "<key>": {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    },
    "newGlobalFields": [
      {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    ],
    "nodes": {
      "<key>": {
        "section": {
          "id": "<id>",
          "title": "<title>",
          "description": "<description>"
        }
      }
    },
    "sectionEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    },
    "stepEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    }
  },
  "isPublished": true,
  "workspace": "<workspace>",
  "commitMessage": "<commit message>",
  "initialBranchName": "<initial branch name>"
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "title": "<title>",
        "description": "<description>",
        "labels": ["<labels>"],
        "properties": {"<key>": "<value>"},
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
        "isPublished": True,
        "workspace": "<workspace>",
        "commitMessage": "<commit message>",
        "initialBranchName": "<initial branch name>",
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "title": "<title>",
        "description": "<description>",
        "labels": ["<labels>"],
        "properties": {"<key>": "<value>"},
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
        "isPublished": True,
        "workspace": "<workspace>",
        "commitMessage": "<commit message>",
        "initialBranchName": "<initial branch name>",
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "title": "<title>",
                "description": "<description>",
                "labels": ["<labels>"],
                "properties": {"<key>": "<value>"},
                "state": {
                    "globalFields": {
                        "<key>": {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    },
                    "newGlobalFields": [
                        {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    ],
                    "nodes": {
                        "<key>": {
                            "section": {
                                "id": "<id>",
                                "title": "<title>",
                                "description": "<description>",
                            },
                        },
                    },
                    "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                    "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                },
                "isPublished": True,
                "workspace": "<workspace>",
                "commitMessage": "<commit message>",
                "initialBranchName": "<initial branch name>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  },
  "branchName": "<branch name>"
}

Archive procedures#

POST /procedures/v1/procedures/archive

Archive procedures

Body

procedureRids array of string

​

Response

procedureRids array of string

​

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/archive" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "procedureRids": [
    "<procedure rids>"
  ]
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/archive",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/archive",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/archive",
            headers={"Authorization": "Bearer <api key>"},
            json={"procedureRids": ["<procedure rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedureRids": [
    "<procedure rids>"
  ]
}

Batch get procedure metadata#

POST /procedures/v1/procedures/batch-get-metadata

Get metadata for multiple procedure by RIDs. Unauthorized RIDs will be omitted from the response. Order is not guaranteed to match the request.

Body

procedureRids array of string

​

Response

procedureMetadatas array of ProcedureMetadata

​

Fields of ProcedureMetadata
rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/batch-get-metadata" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "procedureRids": [
    "<procedure rids>"
  ]
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/batch-get-metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/batch-get-metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/batch-get-metadata",
            headers={"Authorization": "Bearer <api key>"},
            json={"procedureRids": ["<procedure rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedureMetadatas": [
    {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    }
  ]
}

Get procedure as nested#

GET /procedures/v1/procedures/nested/{rid}

Get procedure as nested procedure.

Path parameters

rid string required

​

Query parameters

branchOrCommit.branch string

​

branchOrCommit.commit string

​

Response

nestedProcedure NestedProcedure

​

Fields of NestedProcedure
title string

Title of the procedure At least 1 character.

description string

Optional long-form description for the procedure

steps array of NestedProcedureNode

Steps in the procedure

Fields of NestedProcedureNode
id string

The unique identifier for this step or section

title string

Title of this section or step. At least 1 character.

description string

Optional long-form description for this section or step.

steps array of NestedProcedureNode

If this node is a section, then it can contain other sections and steps.

step NestedStepNode

If this node is a step, then this field contains the step definition.

Fields of NestedStepNode
isRequired boolean

​

autoStart AutoStartConfig

​

Fields of AutoStartConfig
one of allParents, disabled

​

allParents AllParents

The step will start automatically when all parent steps have passed.

disabled AutoStartConfig.Disabled

The step will not start automatically.

initialAutoProceedConfig AutoProceedConfig

​

Fields of AutoProceedConfig
one of disabled, enabled

​

disabled AutoProceedConfig.Disabled

The step will not be automatically completed

enabled Enabled

The step will automatically submit the step contents once the requirements are met and begin the transition to either PASSED or ERRORED.

successCondition SuccessCondition

​

Fields of SuccessCondition
one of 5 fields

​

and AndSuccessCondition

​

Fields of AndSuccessCondition
conditions array of SuccessCondition

​

timer TimerSuccessCondition

​

Fields of TimerSuccessCondition
durationSeconds integer

Duration in seconds to wait before succeeding the step. This value must be non-negative. This duration is a minimum bound; the actual duration may be longer. At least 0.

ingestJob IngestJobSuccessCondition

​

Fields of IngestJobSuccessCondition
fieldId string

The field ID that contains the IngestJobRid of the ingest job to monitor.

channelValidation ChannelValidationSuccessCondition

​

Fields of ChannelValidationSuccessCondition
channel ChannelLocator

The channel to validate against the threshold. If the data_source_ref or channel_name cannot be resolved at execution time, the step will transition to ERRORED state immediately.

Fields of ChannelLocator
dataSourceRef string

Symbolic name for the data source (e.g., “main”, “test_data”). This name is resolved to a concrete DataSourceRid at execution time by looking up the name in the data scopes (for assets) or data sources (for runs) specified by asset_or_run. This is NOT a field reference - it’s a literal string that must match a data source ref name. At least 1 character.

channelName string

The name of the channel within the data source to validate. At least 1 character.

tags map of string to string

Optional series tags to filter the channel data. Used to select specific series when multiple series exist for the same channel name.

one of asset, run

​

asset AssetReference

​

Fields of AssetReference
one of rid, fieldId

Request

curl "https://api.gov.nominal.io/api/procedures/v1/procedures/nested/<rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/nested/<rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/nested/<rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/nested/<rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "nestedProcedure": {
    "title": "<title>",
    "description": "<description>",
    "steps": [
      {
        "id": "<id>",
        "title": "<title>",
        "description": "<description>",
        "steps": [],
        "step": {
          "isRequired": true,
          "autoStart": {
            "allParents": {}
          },
          "initialAutoProceedConfig": {
            "disabled": {}
          },
          "successCondition": {
            "and": {
              "conditions": []
            }
          },
          "completionActionConfigs": [
            {
              "createEvent": {
                "name": "<name>",
                "description": "<description>",
                "labels": [
                  "<labels>"
                ],
                "properties": {
                  "<key>": "<value>"
                },
                "assetFieldIds": [
                  "<asset field ids>"
                ],
                "assetReferences": [
                  {
                    "rid": "<rid>"
                  }
                ],
                "propertyRefs": [
                  {
                    "key": {
                      "constant": "<constant>"
                    },
                    "value": {
                      "constant": "<constant>"
                    }
                  }
                ]
              }
            }
          ],
          "form": {
            "fields": [
              {
                "id": "<id>",
                "asset": {
                  "label": "<label>",
                  "isRequired": true,
                  "presetOptions": {
                    "options": [
                      {
                        "rid": "<rid>"
                      }
                    ],
                    "defaultOption": {
                      "rid": "<rid>"
                    }
                  }
                },
                "label": "<label>",
                "description": "<description>"
              }
            ]
          },
          "attachments": [
            "<attachments>"
          ]
        }
      }
    ],
    "globalFields": {
      "<key>": {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    },
    "newGlobalFields": [
      {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    ]
  }
}

Parse nested procedure#

POST /procedures/v1/procedures/parse-nested-procedure

Parse a procedure from a nested procedure structure

No API key needed.

Body

nestedProcedure NestedProcedure

​

Fields of NestedProcedure
title string

Title of the procedure At least 1 character.

description string

Optional long-form description for the procedure

steps array of NestedProcedureNode

Steps in the procedure

Fields of NestedProcedureNode
id string

The unique identifier for this step or section

title string

Title of this section or step. At least 1 character.

description string

Optional long-form description for this section or step.

steps array of NestedProcedureNode

If this node is a section, then it can contain other sections and steps.

step NestedStepNode

If this node is a step, then this field contains the step definition.

Fields of NestedStepNode
isRequired boolean

​

autoStart AutoStartConfig

​

Fields of AutoStartConfig
one of allParents, disabled required

​

allParents AllParents

The step will start automatically when all parent steps have passed.

disabled AutoStartConfig.Disabled

The step will not start automatically.

initialAutoProceedConfig AutoProceedConfig

​

Fields of AutoProceedConfig
one of disabled, enabled required

​

disabled AutoProceedConfig.Disabled

The step will not be automatically completed

enabled Enabled

The step will automatically submit the step contents once the requirements are met and begin the transition to either PASSED or ERRORED.

successCondition SuccessCondition

​

Fields of SuccessCondition
one of 5 fields required

​

and AndSuccessCondition

​

Fields of AndSuccessCondition
conditions array of SuccessCondition

​

timer TimerSuccessCondition

​

Fields of TimerSuccessCondition
durationSeconds integer

Duration in seconds to wait before succeeding the step. This value must be non-negative. This duration is a minimum bound; the actual duration may be longer. At least 0.

ingestJob IngestJobSuccessCondition

​

Fields of IngestJobSuccessCondition
fieldId string

The field ID that contains the IngestJobRid of the ingest job to monitor.

channelValidation ChannelValidationSuccessCondition

​

Fields of ChannelValidationSuccessCondition
channel ChannelLocator required

The channel to validate against the threshold. If the data_source_ref or channel_name cannot be resolved at execution time, the step will transition to ERRORED state immediately.

Fields of ChannelLocator
dataSourceRef string

Symbolic name for the data source (e.g., “main”, “test_data”). This name is resolved to a concrete DataSourceRid at execution time by looking up the name in the data scopes (for assets) or data sources (for runs) specified by asset_or_run. This is NOT a field reference - it’s a literal string that must match a data source ref name. At least 1 character.

channelName string

The name of the channel within the data source to validate. At least 1 character.

tags map of string to string

Optional series tags to filter the channel data. Used to select specific series when multiple series exist for the same channel name.

one of asset, run required

​

asset AssetReference

​

Fields of AssetReference
one of rid, fieldId required

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/parse-nested-procedure" \
  -H "Content-Type: application/json" \
  --data '{
  "nestedProcedure": {
    "title": "<title>",
    "description": "<description>",
    "steps": [
      {
        "id": "<id>",
        "title": "<title>",
        "description": "<description>",
        "steps": [],
        "step": {
          "isRequired": true,
          "autoStart": {
            "allParents": {}
          },
          "initialAutoProceedConfig": {
            "disabled": {}
          },
          "successCondition": {
            "and": {
              "conditions": []
            }
          },
          "completionActionConfigs": [
            {
              "createEvent": {
                "name": "<name>",
                "description": "<description>",
                "labels": [
                  "<labels>"
                ],
                "properties": {
                  "<key>": "<value>"
                },
                "assetFieldIds": [
                  "<asset field ids>"
                ],
                "assetReferences": [
                  {
                    "rid": "<rid>"
                  }
                ],
                "propertyRefs": [
                  {
                    "key": {
                      "constant": "<constant>"
                    },
                    "value": {
                      "constant": "<constant>"
                    }
                  }
                ]
              }
            }
          ],
          "form": {
            "fields": [
              {
                "id": "<id>",
                "asset": {
                  "label": "<label>",
                  "isRequired": true,
                  "presetOptions": {
                    "options": [
                      {
                        "rid": "<rid>"
                      }
                    ],
                    "defaultOption": {
                      "rid": "<rid>"
                    }
                  }
                },
                "label": "<label>",
                "description": "<description>"
              }
            ]
          },
          "attachments": [
            "<attachments>"
          ]
        }
      }
    ],
    "globalFields": {
      "<key>": {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    },
    "newGlobalFields": [
      {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    ]
  },
  "includeDisplayGraph": true
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/parse-nested-procedure",
    json={
        "nestedProcedure": {
            "title": "<title>",
            "description": "<description>",
            "steps": [
                {
                    "id": "<id>",
                    "title": "<title>",
                    "description": "<description>",
                    "steps": [],
                    "step": {
                        "isRequired": True,
                        "autoStart": {"allParents": {}},
                        "initialAutoProceedConfig": {"disabled": {}},
                        "successCondition": {"and": {"conditions": []}},
                        "completionActionConfigs": [
                            {
                                "createEvent": {
                                    "name": "<name>",
                                    "description": "<description>",
                                    "labels": ["<labels>"],
                                    "properties": {"<key>": "<value>"},
                                    "assetFieldIds": ["<asset field ids>"],
                                    "assetReferences": [{"rid": "<rid>"}],
                                    "propertyRefs": [
                                        {
                                            "key": {"constant": "<constant>"},
                                            "value": {"constant": "<constant>"},
                                        },
                                    ],
                                },
                            },
                        ],
                        "form": {
                            "fields": [
                                {
                                    "id": "<id>",
                                    "asset": {
                                        "label": "<label>",
                                        "isRequired": True,
                                        "presetOptions": {
                                            "options": [{"rid": "<rid>"}],
                                            "defaultOption": {"rid": "<rid>"},
                                        },
                                    },
                                    "label": "<label>",
                                    "description": "<description>",
                                },
                            ],
                        },
                        "attachments": ["<attachments>"],
                    },
                },
            ],
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
        },
        "includeDisplayGraph": True,
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/parse-nested-procedure",
    json={
        "nestedProcedure": {
            "title": "<title>",
            "description": "<description>",
            "steps": [
                {
                    "id": "<id>",
                    "title": "<title>",
                    "description": "<description>",
                    "steps": [],
                    "step": {
                        "isRequired": True,
                        "autoStart": {"allParents": {}},
                        "initialAutoProceedConfig": {"disabled": {}},
                        "successCondition": {"and": {"conditions": []}},
                        "completionActionConfigs": [
                            {
                                "createEvent": {
                                    "name": "<name>",
                                    "description": "<description>",
                                    "labels": ["<labels>"],
                                    "properties": {"<key>": "<value>"},
                                    "assetFieldIds": ["<asset field ids>"],
                                    "assetReferences": [{"rid": "<rid>"}],
                                    "propertyRefs": [
                                        {
                                            "key": {"constant": "<constant>"},
                                            "value": {"constant": "<constant>"},
                                        },
                                    ],
                                },
                            },
                        ],
                        "form": {
                            "fields": [
                                {
                                    "id": "<id>",
                                    "asset": {
                                        "label": "<label>",
                                        "isRequired": True,
                                        "presetOptions": {
                                            "options": [{"rid": "<rid>"}],
                                            "defaultOption": {"rid": "<rid>"},
                                        },
                                    },
                                    "label": "<label>",
                                    "description": "<description>",
                                },
                            ],
                        },
                        "attachments": ["<attachments>"],
                    },
                },
            ],
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
        },
        "includeDisplayGraph": True,
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/parse-nested-procedure",
            json={
                "nestedProcedure": {
                    "title": "<title>",
                    "description": "<description>",
                    "steps": [
                        {
                            "id": "<id>",
                            "title": "<title>",
                            "description": "<description>",
                            "steps": [],
                            "step": {
                                "isRequired": True,
                                "autoStart": {"allParents": {}},
                                "initialAutoProceedConfig": {"disabled": {}},
                                "successCondition": {"and": {"conditions": []}},
                                "completionActionConfigs": [
                                    {
                                        "createEvent": {
                                            "name": "<name>",
                                            "description": "<description>",
                                            "labels": ["<labels>"],
                                            "properties": {"<key>": "<value>"},
                                            "assetFieldIds": ["<asset field ids>"],
                                            "assetReferences": [{"rid": "<rid>"}],
                                            "propertyRefs": [
                                                {
                                                    "key": {"constant": "<constant>"},
                                                    "value": {"constant": "<constant>"},
                                                },
                                            ],
                                        },
                                    },
                                ],
                                "form": {
                                    "fields": [
                                        {
                                            "id": "<id>",
                                            "asset": {
                                                "label": "<label>",
                                                "isRequired": True,
                                                "presetOptions": {
                                                    "options": [{"rid": "<rid>"}],
                                                    "defaultOption": {"rid": "<rid>"},
                                                },
                                            },
                                            "label": "<label>",
                                            "description": "<description>",
                                        },
                                    ],
                                },
                                "attachments": ["<attachments>"],
                            },
                        },
                    ],
                    "globalFields": {
                        "<key>": {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    },
                    "newGlobalFields": [
                        {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    ],
                },
                "includeDisplayGraph": True,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  },
  "displayGraph": {
    "topLevelNodes": [
      "<top level nodes>"
    ],
    "sectionToSortedChildren": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    }
  }
}

Search procedures#

POST /procedures/v1/procedures/search

Searches all procedures, returning paged results

Body

query ProcedureSearchQuery

​

Fields of ProcedureSearchQuery
one of 8 fields required

​

searchText string

​

label string

​

property types.Property

​

Fields of types.Property
name string

​

value string

​

and ProcedureSearchAndQuery

​

Fields of ProcedureSearchAndQuery
queries array of ProcedureSearchQuery

​

or ProcedureSearchOrQuery

​

Fields of ProcedureSearchOrQuery
queries array of ProcedureSearchQuery

​

workspace string

​

createdBy string

​

isArchived boolean

​

sortOptions SearchProceduresSortOptions

If not set, default is to sort by created_at descending

Fields of SearchProceduresSortOptions
isDescending boolean

Defaults to true (descending)

sortField SearchProceduresSortField

Defaults to CREATED_AT

Values of SearchProceduresSortField
SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED

​

SEARCH_PROCEDURES_SORT_FIELD_NAME

​

SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT

​

SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT

​

pageSize integer

Page sizes greater than 1_000 will be rejected. Default pageSize is 100. From 1 to 1,000.

nextPageToken string

​

Response

procedureMetadata array of ProcedureMetadata

​

Fields of ProcedureMetadata
rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

nextPageToken string

​

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/search" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "query": {
    "searchText": "<search text>"
  },
  "sortOptions": {
    "isDescending": true,
    "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME"
  },
  "pageSize": 1,
  "nextPageToken": "<next page token>"
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/search",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "query": {"searchText": "<search text>"},
        "sortOptions": {
            "isDescending": True,
            "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME",
        },
        "pageSize": 1,
        "nextPageToken": "<next page token>",
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/search",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "query": {"searchText": "<search text>"},
        "sortOptions": {
            "isDescending": True,
            "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME",
        },
        "pageSize": 1,
        "nextPageToken": "<next page token>",
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/search",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "query": {"searchText": "<search text>"},
                "sortOptions": {
                    "isDescending": True,
                    "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME",
                },
                "pageSize": 1,
                "nextPageToken": "<next page token>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedureMetadata": [
    {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    }
  ],
  "nextPageToken": "<next page token>"
}

Unarchive procedures#

POST /procedures/v1/procedures/unarchive

Unarchive procedures

Body

procedureRids array of string

​

Response

procedureRids array of string

​

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/unarchive" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "procedureRids": [
    "<procedure rids>"
  ]
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/unarchive",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/unarchive",
    headers={"Authorization": "Bearer <api key>"},
    json={"procedureRids": ["<procedure rids>"]},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/unarchive",
            headers={"Authorization": "Bearer <api key>"},
            json={"procedureRids": ["<procedure rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedureRids": [
    "<procedure rids>"
  ]
}

Get procedure#

GET /procedures/v1/procedures/{rid}

Get a procedure by its RID

Path parameters

rid string required

​

Query parameters

branchOrCommit.branch string

​

branchOrCommit.commit string

​

includeDisplayGraph boolean

If true, the display graph will be included in the response. Default is false.

Response

procedure Procedure

​

Fields of Procedure
rid string

The RID of the procedure.

commit string

The commit ID of this version of the procedure.

metadata ProcedureMetadata

Metadata about the procedure.

Fields of ProcedureMetadata
rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

state ProcedureState

The versioned state of the procedure.

Fields of ProcedureState
globalFields map of string to FormField

​

Fields of FormField
id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields

​

asset AssetField

​

Fields of AssetField
label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

Fields of PresetAssetFieldOptions
options array of AssetReference

The list of options to choose from.

Fields of AssetReference
one of rid, fieldId

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

checkbox CheckboxField

​

Fields of CheckboxField
label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

text TextField

​

Fields of TextField
label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

int IntField

​

Fields of IntField
label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

double DoubleField

​

Fields of DoubleField
label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

singleEnum SingleEnumField

​

Fields of SingleEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

multiEnum MultiEnumField

​

Fields of MultiEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

fileUpload FileUploadField

​

Fields of FileUploadField
isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

multiFileUpload MultiFileUploadField

​

Fields of MultiFileUploadField
minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

Fields of ProcedureNode
one of section, step

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

Fields of ProcedureSectionNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

Fields of ProcedureStepNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

Fields of ProcedureStepContent
one of form, startIngest, selectOrCreateAsset, wait

​

form FormStep

​

Fields of FormStep
fields array of FormField

​

startIngest StartIngestStep

​

Fields of StartIngestStep
asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

Fields of StringReference
one of constant, fieldId

Request

curl "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  },
  "displayGraph": {
    "topLevelNodes": [
      "<top level nodes>"
    ],
    "sectionToSortedChildren": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    }
  }
}

Commit#

POST /procedures/v1/procedures/{rid}/commit

Commit a procedure to a branch

Path parameters

rid string required

​

Body

branch string

​

latestCommitOnBranch string

If present, this commit ID must match the latest commit on the branch for the commit to succeed.

message string

​

state ProcedureState

​

Fields of ProcedureState
globalFields map of string to FormField

​

Fields of FormField
id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields required

​

asset AssetField

​

Fields of AssetField
label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

Fields of PresetAssetFieldOptions
options array of AssetReference

The list of options to choose from.

Fields of AssetReference
one of rid, fieldId required

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

checkbox CheckboxField

​

Fields of CheckboxField
label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

text TextField

​

Fields of TextField
label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown required

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

int IntField

​

Fields of IntField
label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

double DoubleField

​

Fields of DoubleField
label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

singleEnum SingleEnumField

​

Fields of SingleEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

multiEnum MultiEnumField

​

Fields of MultiEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

fileUpload FileUploadField

​

Fields of FileUploadField
isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

multiFileUpload MultiFileUploadField

​

Fields of MultiFileUploadField
minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

Fields of ProcedureNode
one of section, step required

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

Fields of ProcedureSectionNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

Fields of ProcedureStepNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

Fields of ProcedureStepContent
one of form, startIngest, selectOrCreateAsset, wait required

​

form FormStep

​

Fields of FormStep
fields array of FormField

​

startIngest StartIngestStep

​

Fields of StartIngestStep
asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

Fields of StringReference
one of constant, fieldId required

​

constant string

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/commit" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "branch": "<branch>",
  "latestCommitOnBranch": "<latest commit on branch>",
  "message": "<message>",
  "state": {
    "globalFields": {
      "<key>": {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    },
    "newGlobalFields": [
      {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    ],
    "nodes": {
      "<key>": {
        "section": {
          "id": "<id>",
          "title": "<title>",
          "description": "<description>"
        }
      }
    },
    "sectionEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    },
    "stepEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    }
  }
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/commit",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "branch": "<branch>",
        "latestCommitOnBranch": "<latest commit on branch>",
        "message": "<message>",
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/commit",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "branch": "<branch>",
        "latestCommitOnBranch": "<latest commit on branch>",
        "message": "<message>",
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/commit",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "branch": "<branch>",
                "latestCommitOnBranch": "<latest commit on branch>",
                "message": "<message>",
                "state": {
                    "globalFields": {
                        "<key>": {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    },
                    "newGlobalFields": [
                        {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    ],
                    "nodes": {
                        "<key>": {
                            "section": {
                                "id": "<id>",
                                "title": "<title>",
                                "description": "<description>",
                            },
                        },
                    },
                    "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                    "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  }
}

Merge to main#

POST /procedures/v1/procedures/{rid}/merge-to-main

Merge a branch of a procedure to main

Path parameters

rid string required

​

Body

branch string

​

latestCommitOnMain string

If present, this commit ID must match the latest commit on main for the merge to succeed.

message string required

​

Response

procedure Procedure

​

Fields of Procedure
rid string

The RID of the procedure.

commit string

The commit ID of this version of the procedure.

metadata ProcedureMetadata

Metadata about the procedure.

Fields of ProcedureMetadata
rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

state ProcedureState

The versioned state of the procedure.

Fields of ProcedureState
globalFields map of string to FormField

​

Fields of FormField
id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields

​

asset AssetField

​

Fields of AssetField
label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

Fields of PresetAssetFieldOptions
options array of AssetReference

The list of options to choose from.

Fields of AssetReference
one of rid, fieldId

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

checkbox CheckboxField

​

Fields of CheckboxField
label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

text TextField

​

Fields of TextField
label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

int IntField

​

Fields of IntField
label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

double DoubleField

​

Fields of DoubleField
label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

singleEnum SingleEnumField

​

Fields of SingleEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

multiEnum MultiEnumField

​

Fields of MultiEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

fileUpload FileUploadField

​

Fields of FileUploadField
isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

multiFileUpload MultiFileUploadField

​

Fields of MultiFileUploadField
minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

Fields of ProcedureNode
one of section, step

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

Fields of ProcedureSectionNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

Fields of ProcedureStepNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

Fields of ProcedureStepContent
one of form, startIngest, selectOrCreateAsset, wait

​

form FormStep

​

Fields of FormStep
fields array of FormField

​

startIngest StartIngestStep

​

Fields of StartIngestStep
asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

Fields of StringReference
one of constant, fieldId

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/merge-to-main" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "message": "<message>"
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/merge-to-main",
    headers={"Authorization": "Bearer <api key>"},
    json={"message": "<message>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/merge-to-main",
    headers={"Authorization": "Bearer <api key>"},
    json={"message": "<message>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/merge-to-main",
            headers={"Authorization": "Bearer <api key>"},
            json={"message": "<message>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  }
}

Update procedure metadata#

PUT /procedures/v1/procedures/{rid}/metadata

Update the metadata of a procedure

Path parameters

rid string required

​

Body

title string

​

description string

​

labels LabelUpdateWrapper

​

Fields of LabelUpdateWrapper
labels array of string

​

properties PropertyUpdateWrapper

​

Fields of PropertyUpdateWrapper
properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

Response

procedureMetadata ProcedureMetadata

​

Fields of ProcedureMetadata
rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

Request

curl -X PUT "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/metadata" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "title": "<title>",
  "description": "<description>",
  "labels": {
    "labels": [
      "<labels>"
    ]
  },
  "properties": {
    "properties": {
      "<key>": "<value>"
    }
  },
  "isArchived": true,
  "isPublished": true
}'
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "title": "<title>",
        "description": "<description>",
        "labels": {"labels": ["<labels>"]},
        "properties": {"properties": {"<key>": "<value>"}},
        "isArchived": True,
        "isPublished": True,
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "title": "<title>",
        "description": "<description>",
        "labels": {"labels": ["<labels>"]},
        "properties": {"properties": {"<key>": "<value>"}},
        "isArchived": True,
        "isPublished": True,
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/metadata",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "title": "<title>",
                "description": "<description>",
                "labels": {"labels": ["<labels>"]},
                "properties": {"properties": {"<key>": "<value>"}},
                "isArchived": True,
                "isPublished": True,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedureMetadata": {
    "rid": "<rid>",
    "title": "<title>",
    "description": "<description>",
    "labels": [
      "<labels>"
    ],
    "properties": {
      "<key>": "<value>"
    },
    "isArchived": true,
    "isPublished": true,
    "createdAt": "2026-01-01T00:00:00Z",
    "createdBy": "<created by>",
    "updatedAt": "2026-01-01T00:00:00Z",
    "updatedBy": "<updated by>",
    "workspace": "<workspace>",
    "executionCount": "1"
  }
}

Save working state#

POST /procedures/v1/procedures/{rid}/save-working-state

Save the working state of a procedure

Path parameters

rid string required

​

Body

branch string

​

message string

​

latestCommitOnBranch string

If present, this commit ID must match the latest commit on the branch for the save to succeed.

state ProcedureState

​

Fields of ProcedureState
globalFields map of string to FormField

​

Fields of FormField
id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields required

​

asset AssetField

​

Fields of AssetField
label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

Fields of PresetAssetFieldOptions
options array of AssetReference

The list of options to choose from.

Fields of AssetReference
one of rid, fieldId required

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

checkbox CheckboxField

​

Fields of CheckboxField
label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

text TextField

​

Fields of TextField
label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown required

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

int IntField

​

Fields of IntField
label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

double DoubleField

​

Fields of DoubleField
label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

singleEnum SingleEnumField

​

Fields of SingleEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

multiEnum MultiEnumField

​

Fields of MultiEnumField
label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

fileUpload FileUploadField

​

Fields of FileUploadField
isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

multiFileUpload MultiFileUploadField

​

Fields of MultiFileUploadField
minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

Fields of ProcedureNode
one of section, step required

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

Fields of ProcedureSectionNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

Fields of ProcedureStepNode
id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

Fields of ProcedureStepContent
one of form, startIngest, selectOrCreateAsset, wait required

​

form FormStep

​

Fields of FormStep
fields array of FormField

​

startIngest StartIngestStep

​

Fields of StartIngestStep
asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

Fields of StringReference
one of constant, fieldId required

​

constant string

Request

curl -X POST "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/save-working-state" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "branch": "<branch>",
  "message": "<message>",
  "latestCommitOnBranch": "<latest commit on branch>",
  "state": {
    "globalFields": {
      "<key>": {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    },
    "newGlobalFields": [
      {
        "id": "<id>",
        "asset": {
          "label": "<label>",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "<rid>"
              }
            ],
            "defaultOption": {
              "rid": "<rid>"
            }
          }
        },
        "label": "<label>",
        "description": "<description>"
      }
    ],
    "nodes": {
      "<key>": {
        "section": {
          "id": "<id>",
          "title": "<title>",
          "description": "<description>"
        }
      }
    },
    "sectionEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    },
    "stepEdges": {
      "<key>": {
        "nodeIds": [
          "<node ids>"
        ]
      }
    }
  }
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/save-working-state",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "branch": "<branch>",
        "message": "<message>",
        "latestCommitOnBranch": "<latest commit on branch>",
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/save-working-state",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "branch": "<branch>",
        "message": "<message>",
        "latestCommitOnBranch": "<latest commit on branch>",
        "state": {
            "globalFields": {
                "<key>": {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            },
            "newGlobalFields": [
                {
                    "id": "<id>",
                    "asset": {
                        "label": "<label>",
                        "isRequired": True,
                        "presetOptions": {
                            "options": [{"rid": "<rid>"}],
                            "defaultOption": {"rid": "<rid>"},
                        },
                    },
                    "label": "<label>",
                    "description": "<description>",
                },
            ],
            "nodes": {
                "<key>": {
                    "section": {
                        "id": "<id>",
                        "title": "<title>",
                        "description": "<description>",
                    },
                },
            },
            "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
            "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
        },
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/procedures/v1/procedures/<rid>/save-working-state",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "branch": "<branch>",
                "message": "<message>",
                "latestCommitOnBranch": "<latest commit on branch>",
                "state": {
                    "globalFields": {
                        "<key>": {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    },
                    "newGlobalFields": [
                        {
                            "id": "<id>",
                            "asset": {
                                "label": "<label>",
                                "isRequired": True,
                                "presetOptions": {
                                    "options": [{"rid": "<rid>"}],
                                    "defaultOption": {"rid": "<rid>"},
                                },
                            },
                            "label": "<label>",
                            "description": "<description>",
                        },
                    ],
                    "nodes": {
                        "<key>": {
                            "section": {
                                "id": "<id>",
                                "title": "<title>",
                                "description": "<description>",
                            },
                        },
                    },
                    "sectionEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                    "stepEdges": {"<key>": {"nodeIds": ["<node ids>"]}},
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "procedure": {
    "rid": "<rid>",
    "commit": "<commit>",
    "metadata": {
      "rid": "<rid>",
      "title": "<title>",
      "description": "<description>",
      "labels": [
        "<labels>"
      ],
      "properties": {
        "<key>": "<value>"
      },
      "isArchived": true,
      "isPublished": true,
      "createdAt": "2026-01-01T00:00:00Z",
      "createdBy": "<created by>",
      "updatedAt": "2026-01-01T00:00:00Z",
      "updatedBy": "<updated by>",
      "workspace": "<workspace>",
      "executionCount": "1"
    },
    "state": {
      "globalFields": {
        "<key>": {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      },
      "newGlobalFields": [
        {
          "id": "<id>",
          "asset": {
            "label": "<label>",
            "isRequired": true,
            "presetOptions": {
              "options": [
                {
                  "rid": "<rid>"
                }
              ],
              "defaultOption": {
                "rid": "<rid>"
              }
            }
          },
          "label": "<label>",
          "description": "<description>"
        }
      ],
      "nodes": {
        "<key>": {
          "section": {
            "id": "<id>",
            "title": "<title>",
            "description": "<description>"
          }
        }
      },
      "sectionEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      },
      "stepEdges": {
        "<key>": {
          "nodeIds": [
            "<node ids>"
          ]
        }
      }
    }
  }
}

Errors#

Errors shows how these errors are sent.

Each error’s errorName is NominalProceduresV1: followed by its name below.

Status

Name

Notes

400

ProceduresServiceErrorCannotCommitToArchivedProcedure

Cannot commit to archived procedure

400

ProceduresServiceErrorCannotMergeMain

Cannot merge to main from main

400

ProceduresServiceErrorInvalidGraph

Invalid procedure graph

400

ProceduresServiceErrorInvalidSearchToken

Invalid search token

404

ProceduresServiceErrorCommitNotFound

Procedure commit not found

404

ProceduresServiceErrorNotFound

Procedure not found

Types#

AbsoluteTimestamp#

Absolute timestamp parser variants.

Set exactly one of the fields below.

one of iso8601, epochOfTimeUnit, customFormat required

​

iso8601 Iso8601Timestamp

​

epochOfTimeUnit EpochTimestamp

​

customFormat CustomTimestamp

​

AdditionalFileTagBinding#

Set exactly one of stringValue, assetRid.

tagName string

The additional file tag name.

one of stringValue, assetRid required

​

stringValue StringReference

A string value to apply as the tag value.

assetRid AssetReference

An asset RID value to apply as the tag value.

AllParents#

An empty JSON object, {}.

AndSuccessCondition#

All conditions within must be met for the step to be succeeded.

conditions array of SuccessCondition

​

ApplyChecklistsConfig#

An action to apply one or more checklists to one or more runs when a step is completed.

checklists MultiChecklistReference

The checklists to apply.

runs MultiRunReference

The runs to apply the checklists to. There must be at least one.

ApplyWorkbookTemplatesConfig#

An action to apply one or more workbook templates to runs and/or assets when a step is completed.

At least one run or asset must be specified.

workbookTemplates MultiWorkbookTemplateReference

The workbook templates to apply.

runs MultiRunReference

The runs to apply the workbook templates to. Optional; at least one run or asset must be set.

assets MultiAssetReference

The assets to apply the workbook templates to. Optional; at least one run or asset must be set.

AssetField#

A field to select a single asset.

label string

Helper text to guide selection of the asset deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

presetOptions PresetAssetFieldOptions

The asset must be chosen from a saved view. SavedViewRid saved_view = 5.

AssetReference#

A reference to a single asset

Set exactly one of the fields below.

one of rid, fieldId required

​

rid string

a constant AssetRid

fieldId string

The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed.

AssetReferenceList#

references array of AssetReference

At least 1 item.

AutoProceedConfig#

AutoProceedConfig is a configuration that determines whether a step should automatically proceed (submit the contents and check success_conditions) when some set of criteria are met. By default this will be disabled.

Set exactly one of the fields below.

one of disabled, enabled required

​

disabled AutoProceedConfig.Disabled

The step will not be automatically completed

enabled Enabled

The step will automatically submit the step contents once the requirements are met and begin the transition to either PASSED or ERRORED.

AutoProceedConfig.Disabled#

An empty JSON object, {}.

AutoStartConfig#

AutoStartConfig is a configuration that determines whether a step should be automatically moved from NOT_STARTED to IN_PROGRESS when some set of criteria are met. By default this will be all_parents

Set exactly one of the fields below.

one of allParents, disabled required

​

allParents AllParents

The step will start automatically when all parent steps have passed.

disabled AutoStartConfig.Disabled

The step will not start automatically.

AutoStartConfig.Disabled#

An empty JSON object, {}.

CaptureMoment#

When in the step lifecycle to capture a channel value.

CAPTURE_MOMENT_UNSPECIFIED

Required zero-value enum sentinel. Do not include this in capture_moments.

CAPTURE_MOMENT_STEP_START

​

CAPTURE_MOMENT_STEP_COMPLETION

​

ChannelCaptureConfig#

Shared configuration for capturing a single channel value where the source channel is supplied by the parent config.

At execution time, the backend reads the channel’s value at the configured moment(s) and writes it into event metadata under dotted keys derived from output_field_id.

outputFieldId string

Base field ID used to namespace event property keys (and downstream procedure outputs).

captureMoments array of CaptureMoment

When to capture relative to the step lifecycle. Empty means no capture occurs — at least one moment must be specified. No duplicates.

ChannelLocator#

Locates a specific channel within a data source for validation. Uses symbolic reference names that are resolved to concrete resources at execution time, allowing procedure templates to be defined before the actual data sources exist.

Set exactly one of asset, run.

dataSourceRef string

Symbolic name for the data source (e.g., “main”, “test_data”). This name is resolved to a concrete DataSourceRid at execution time by looking up the name in the data scopes (for assets) or data sources (for runs) specified by asset_or_run. This is NOT a field reference - it’s a literal string that must match a data source ref name. At least 1 character.

channelName string

The name of the channel within the data source to validate. At least 1 character.

tags map of string to string

Optional series tags to filter the channel data. Used to select specific series when multiple series exist for the same channel name.

one of asset, run required

​

asset AssetReference

​

run RunReference

​

ChannelValidationSuccessCondition#

Defines a success condition that compares channel data against a threshold value. The step succeeds when the comparison (channel_value COMPARATOR threshold) evaluates to true within the timeout period. For example, checking if a channel value is greater than 100. Use COMPARATOR_EXISTS for capture-only conditions that succeed as soon as any channel value is observed.

channel ChannelLocator required

The channel to validate against the threshold. If the data_source_ref or channel_name cannot be resolved at execution time, the step will transition to ERRORED state immediately.

comparator COMPARATOR required

The comparison operator to use. COMPARATOR_UNSPECIFIED should never be used and will be rejected at runtime.

threshold number

The threshold value to compare the channel data against. The comparison is: channel_value COMPARATOR threshold Using double for better precision. Note: When using COMPARATOR_EQUAL or COMPARATOR_NOT_EQUAL with floating-point channel data, be aware of potential precision issues inherent to IEEE 754. Ignored when comparator is COMPARATOR_EXISTS.

timeoutMillis integer

Maximum time in milliseconds to wait for the condition to be satisfied. If the timeout expires before the comparison evaluates to true, the step moves to ERRORED. Must be greater than zero and at most one hour (3,600,000 milliseconds). Greater than 0 and at most 3,600,000.

pointPersistence integer (int64)

optionally specify a persistence of individual points Greater than 0.

timePersistence integer (int64)

optionally specify a persistence duration in milliseconds (max 5 minutes) for which the condition must hold true Greater than 0 and at most 300,000.

channelCaptures array of ChannelCaptureConfig

Channel values to capture while evaluating this success condition. These captures use the condition’s channel field as their source. Each config produces dot-namespaced event-metadata properties keyed by output_field_id.

CheckboxField#

A field to capture a boolean value.

label string

Label to show for this checkbox field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

If set, the checkbox value must be checked (true) to complete the step.

ChecklistReference#

A reference to a single checklist

rid string

A constant checklist RID. string field_id = 2;

ChecklistReferenceList#

references array of ChecklistReference

At least 1 item.

COMPARATOR#

Comparison operator to evaluate channel value against threshold. The condition is satisfied when: channel_value COMPARATOR threshold Example: COMPARATOR_GREATER_THAN with threshold 100.0 means channel_value > 100.0

Evaluation semantics: The most recent channel value within the timeout period is used for comparison. If the channel has no data, the condition will continuously retry until timeout_millis expires.

COMPARATOR_UNSPECIFIED

Unspecified comparator. This is an invalid state and should never be used. Required by proto3 convention as the zero value. Will be rejected at runtime.

COMPARATOR_GREATER_THAN

​

COMPARATOR_GREATER_THAN_OR_EQUAL

​

COMPARATOR_LESS_THAN

​

COMPARATOR_LESS_THAN_OR_EQUAL

​

COMPARATOR_EQUAL

​

COMPARATOR_NOT_EQUAL

​

COMPARATOR_EXISTS

Succeeds when any channel value exists. The threshold field is ignored.

CompletionActionConfig#

An action that will be taken when a step transitions to a completed state (succeeded, errored, or skipped). These actions are executed after the step contents are submitted and the PassCondition (if any) is satisfied. These actions are executed synchronously with the state transition and generally should be quick to complete. Almost all actions will be executed only if the step transitions to SUCCEEDED. The exception is CreateEvent, which will be executed for all terminal states.

Set exactly one of the fields below.

one of 6 fields required

​

createEvent CreateEventConfig

​

sendNotification SendNotificationConfig

​

createRun CreateRunConfig

​

applyWorkbookTemplates ApplyWorkbookTemplatesConfig

​

applyChecklists ApplyChecklistsConfig

​

updateRun UpdateRunConfig

…

ContainerizedExtractorIngestConfig#

rid string

The ingest job must use this specific containerized extractor.

fileInputBindings array of FileInputBinding

The step will prompt the user to upload a file for each extractor input that doesn’t have a FileInputBinding.

environmentInputBindings array of EnvironmentInputBinding

String parameter bindings to pass to the containerized extractor as environment variables.

additionalFileTagBindings array of AdditionalFileTagBinding

Additional file tags to apply to containerized extractor outputs.

CreateAssetParameters#

title TitleParameter

If set, the new asset will be created with this title. Otherwise, the user should be prompted to put in a custom title.

description DescriptionParameter

If set, the new asset will be created with this description.

labels LabelsParameter

If set, the new asset will be created with these labels.

properties PropertiesParameter

If set, the new asset will be created with these properties.

dataScopes map of string to DataScopeParameter

Data scopes for the new asset. The keys are the ref names of the data scopes.

CreateEventConfig#

An action to create an event when a step is completed. The completion state of the step is mapped to the event’s EventType as follows: - SUCCEEDED -> SUCCESS - ERRORED -> ERROR - SKIPPED -> INFO

name string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

Deprecated in favor of property_refs Properties will be overridden by any property_refs with the same key.

assetFieldIds array of string

Each asset_field_id will be resolved and added as an AssetRid to the created event deprecated in favor of asset_references

assetReferences array of AssetReference

The assets to associate the event with. There must be at least one. asset_references takes precedence over (deprecated) asset_field_ids if both are set.

propertyRefs array of PropertyReference

Properties to apply to the event

CreateRunConfig#

An action to create a run when a step is completed.

Literal time range for run creation must include a start time.

runOutputFieldId string

If present, the run RID for this step will be available in outputs under this field ID.

assets MultiAssetReference

The assets to associate the run with. There must be at least one.

name StringReference

The name of the run.

description StringReference

Optionally, a description for the run.

timeRange TimeRangeReference

The time range for the run. If unset, the run will be created starting at now() with no end time.

labels MultiStringReference

Labels to apply on the run.

properties array of CreateRunConfig.Property

Properties to apply on the run. repeated UrlReference links; repeated AttachmentRidReference attachments; // requires some sort of AttachmentRidField where FE handles upload

CreateRunConfig.Property#

key StringReference

​

value StringReference

​

CsvIngestConfig#

timestampSeriesName StringReference

header for timestamp column

timestampType TimestampTypeParameter

​

fileInput FileReference

File to ingest into the dataset. Should be a .csv or .csv.gz file. Uses tags configured on the asset data scope as additional file tags

CustomTimestamp#

Absolute timestamps parsed with a user-supplied format string.

format string

The format string should be in the format of the DateTimeFormatter class in Java.

defaultYear integer

Default year is accepted as an optional field for cases like IRIG time format. Will be overridden by year in time format.

defaultDayOfYear integer

Default day of year is accepted as an optional field for cases like IRIG time format. Will be overridden by day of year in time format. From 1 to 366.

DataflashIngestConfig#

fileInput FileReference

File to ingest into the dataset. Should be a dataflash .bin file. Uses tags configured on the asset data scope as additional file tags

DataScopeParameter#

Set exactly one of newDataset, existingDataset.

one of newDataset, existingDataset required

​

newDataset NewDataset

Creates a new empty dataset.

existingDataset ExistingDataset

Use existing dataset

seriesTags TagsParameter

​

DatasetReference#

A reference to a single dataset

Set exactly one of the fields below.

one of rid, fieldId required

​

rid string

a constant DatasetRid

fieldId string

The field reference that will contain a DatasetRid value. The execution will fail if the field is not set but the value is accessed.

DescriptionParameter#

Set at most one of the fields below.

one of constant, fieldId

​

constant string

The description is always a constant string.

fieldId string

The description is taken from a field in the current or previous steps. Can allow for free-form / guardrailed (templated?) user input.

DoubleField#

A field to capture a double value.

Set at most one of gtValue, gteValue. Set at most one of ltValue, lteValue.

label string

Label to show for this double field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

one of gtValue, gteValue

​

gtValue number

greater than

gteValue number

greater than or equal to

one of ltValue, lteValue

​

ltValue number

less than

lteValue number

less than or equal to

Enabled#

An empty JSON object, {}.

EnumFieldButtonsInputType#

An empty JSON object, {}.

EnumFieldMenuInputType#

An empty JSON object, {}.

EnvironmentInputBinding#

environmentVariable string

The input key. For containerized extractors, this is the environment variable name.

value StringReference

The string value to pass to the extractor.

EpochTimestamp#

Absolute timestamps expressed as an integer count of some time unit since the Unix epoch.

timeUnit string

Unit in which epoch values are expressed (e.g. SECONDS, MILLISECONDS).

ExistingDataset#

presetOptions PresetDatasetFieldOptions

The dataset must be chosen from preset options.

FileInputBinding#

environmentVariable string

The input key. For containerized extractors, this is the environment variable name.

fileReference FileReference

The specific type of file

FileReference#

fieldId string

Reference a field from a prior step

FileUploadField#

A field to process the uploading of a file

isRequired boolean

If a file is required

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

FormField#

A field to be filled out by the user.

Set exactly one of asset, checkbox, text, int, double, singleEnum, multiEnum, fileUpload, multiFileUpload.

id string

This field’s id can be used by downstream steps to refer to the value.

one of 9 fields required

​

asset AssetField

​

checkbox CheckboxField

​

text TextField

​

int IntField

​

double DoubleField

​

singleEnum SingleEnumField

​

multiEnum MultiEnumField

​

fileUpload FileUploadField

​

multiFileUpload MultiFileUploadField

​

label string

UI label for the field component. Overrides any label defined in the specific FormField type. At least 1 character.

description string

Help text describing how to use this input field. At least 1 character.

FormStep#

A form step consists of a set of fields to be filled out by the user.

fields array of FormField

​

IngestJobList#

fieldIds array of string

Field ids that contain IngestJobRids. At least 1 item.

IngestJobSuccessCondition#

The step will succeed when the associated ingest job succeeds. If the ingest job fails, the step will move to ERRORED.

fieldId string

The field ID that contains the IngestJobRid of the ingest job to monitor.

IngestTypeConfig#

Set exactly one of the fields below.

one of containerizedExtractor, dataflash, csv, parquet required

​

containerizedExtractor ContainerizedExtractorIngestConfig

The ingest job must be a containerized extractor ingest.

dataflash DataflashIngestConfig

​

parquet ParquetIngestConfig

​

IntegrationReference#

A reference to a notification Integration

rid string

A constant integration RID. string field_id = 2;

IntegrationReferenceList#

references array of IntegrationReference

At least 1 item.

IntField#

A field to capture an int value.

label string

Label to show for this int field deprecated in favor of label directly on FormField At least 1 character.

isRequired boolean

Whether this field is required to be set complete the step.

gteValue string (int64)

if set, validate that input is at least this value

lteValue string (int64)

if set, validate that input is at most this value

Iso8601Timestamp#

Absolute timestamps serialized in ISO-8601 form. No additional parser configuration is needed.

An empty JSON object, {}.

LabelsParameter#

constant array of string

Labels to always apply on the new asset.

userInput LabelsParameter.UserInputOptions

If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels to provide the user with existing labels to choose from.

references array of StringReference

Additional labels, each resolved from a constant or a field reference. These should supplement constant and also apply to the new asset.

LabelsParameter.UserInputOptions#

Can allow for more configuration - e.g. default set of starting labels? (which can be overrideen)

An empty JSON object, {}.

LabelUpdateWrapper#

Wrapper classes to allow for optional fields on update requests

labels array of string

​

MultiAssetReference#

A reference to multiple assets

list AssetReferenceList

​

MultiChecklistReference#

A reference to multiple checklists

list ChecklistReferenceList

​

MultiEnumField#

A field to capture one or more of several options.

Set exactly one of buttons, dropdown.

label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a collection of checkboxes

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

minCount integer (int64)

If set, the user must select at least this many options is_required behavior can be achieved by setting min_count = 1

maxCount integer (int64)

If set, the user can select at most this many options

MultiFileUploadField#

A field to process the uploading of a dynamic set of files

minCount integer (int64)

Count of required files

maxCount integer (int64)

File count limit

suffixFilters array of string

Optional list of case insensitive suffixes to filter files. (ie “csv”, “parquet”, or “json”) Each item: at least 1 character.

MultiIntegrationReference#

A reference to multiple notification Integrations

list IntegrationReferenceList

​

MultiRunReference#

A reference to multiple runs

list RunReferenceList

​

MultiStringReference#

A reference to multiple string values

fieldId string

The value is taken from a field in the current or previous steps.

MultiWorkbookTemplateReference#

A reference to multiple workbook templates

list WorkbookTemplateReferenceList

​

NestedProcedure#

A simplified version of procedure state that is currently used for procedure authoring. In this form, the graph is a completely linear structure where each step depends solely on the preceding step.

title string

Title of the procedure At least 1 character.

description string

Optional long-form description for the procedure

steps array of NestedProcedureNode

Steps in the procedure

globalFields map of string to FormField

​

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

NestedProcedureNode#

A section or a step in a NestedProcedure.

id string

The unique identifier for this step or section

title string

Title of this section or step. At least 1 character.

description string

Optional long-form description for this section or step.

steps array of NestedProcedureNode

If this node is a section, then it can contain other sections and steps.

step NestedStepNode

If this node is a step, then this field contains the step definition.

NestedStepNode#

These fields’ docs are identical to those of ProcedureStepNode.

Set exactly one of form, startIngest, selectOrCreateAsset, wait.

isRequired boolean

​

autoStart AutoStartConfig

​

initialAutoProceedConfig AutoProceedConfig

​

successCondition SuccessCondition

​

completionActionConfigs array of CompletionActionConfig

​

one of form, startIngest, selectOrCreateAsset, wait required

​

form FormStep

​

startIngest StartIngestStep

​

selectOrCreateAsset SelectOrCreateAssetStep

​

wait WaitStep

​

attachments array of string

Optional attachments for the step description

NewDataset#

The Dataset will be automatically named “{asset}-{ref_name}”. Can later allow for this to be specified. Other CreateDataset options exist but are omitted for now

An empty JSON object, {}.

NodeList#

A list of node IDs.

nodeIds array of string

​

ParquetIngestConfig#

timestampSeriesName StringReference

header for timestamp column

timestampType TimestampTypeParameter

​

fileInput FileReference

File to ingest into the dataset. Should be a .parquet or .parquet.gz file or archive file. Uses tags configured on the asset data scope as additional file tags

PresetAssetFieldOptions#

A limited set of options to choose from, with an optional default option.

options array of AssetReference

The list of options to choose from.

defaultOption AssetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

PresetDatasetFieldOptions#

A limited set of options to choose from, with an optional default option.

options array of DatasetReference

The list of options to choose from.

defaultOption DatasetReference

If set, this option will be selected by default, if it is present in the options. The user can still select a different option.

Procedure#

A procedure describes a series of steps to be performed, typically in a specific order,

rid string

The RID of the procedure.

commit string

The commit ID of this version of the procedure.

metadata ProcedureMetadata

Metadata about the procedure.

state ProcedureState

The versioned state of the procedure.

ProcedureDisplayGraph#

A simpler representation of the procedure graph that is used for display in a UI.

topLevelNodes array of string

Sections or steps that do not belong to any parent sections. This is ordered in a topological ordering of steps.

sectionToSortedChildren map of string to NodeList

Map of section node IDs to their topologically sorted children

ProcedureMetadata#

Metadata about a procedure that is not part of the versioned state.

rid string

​

title string

At least 1 character.

description string

​

labels array of string

​

properties map of string to string

​

isArchived boolean

​

isPublished boolean

​

createdAt string (date-time)

​

createdBy string

​

updatedAt string (date-time)

​

updatedBy string

​

workspace string

​

executionCount string (int64)

Number of executions created from this procedure. Only populated by search.

ProcedureNode#

A procedure node is either a section or a step.

Set exactly one of the fields below.

one of section, step required

​

section ProcedureSectionNode

A section node provides a visual grouping of other sections and steps.

step ProcedureStepNode

A step node represents a step in the procedure. It serves as a “template” for the ExecutionStep that will be created during procedure execution.

ProcedureSearchAndQuery#

queries array of ProcedureSearchQuery

​

ProcedureSearchOrQuery#

queries array of ProcedureSearchQuery

​

ProcedureSearchQuery#

Set exactly one of the fields below.

one of 8 fields required

​

searchText string

​

label string

​

property types.Property

​

workspace string

​

createdBy string

​

isArchived boolean

​

ProcedureSectionNode#

A procedure section node visually groups other sections and steps.

id string

Unique identifier for this node in the procedure graph.

title string

Title of this section At least 1 character.

description string

Optional long-form description for this section

ProcedureState#

ProcedureState is the versioned state of a procedure template.

globalFields map of string to FormField

​

newGlobalFields array of FormField

Global fields are set at the beginning of the procedure execution. These fields can be referenced by any step in the procedure by using {field_id}.

nodes map of string to ProcedureNode

A map from node ID to the node.

sectionEdges map of string to NodeList

Section edges represent the visual grouping of sections and steps. All keys are IDs for section nodes, and all values are lists of IDs for section or step nodes. { A, [B, C] } means that section A visually groups nodes B and C together.

stepEdges map of string to NodeList

Step edges represent the dependencies between steps. All keys and values are IDs for step nodes. { A, [B, C] } means that steps B and C depend on step A to complete to be started

ProcedureStepContent#

The content of a procedure step. This typically involves some form of user interaction/input.

Set exactly one of the fields below.

one of form, startIngest, selectOrCreateAsset, wait required

​

form FormStep

​

startIngest StartIngestStep

​

selectOrCreateAsset SelectOrCreateAssetStep

​

wait WaitStep

…

ProcedureStepNode#

A procedure step node represents a step in the procedure.

id string

Unique identifier for this node in the procedure graph.

title string

Title of this step At least 1 character.

content ProcedureStepContent

The content of this step.

description string

Optional long-form description for this step

isRequired boolean

is_required defaults to false, meaning that the step may be skipped

autoStart AutoStartConfig

Configuration for if and how the step should automatically transition from NOT_STARTED to IN_PROGRESS By default, this will be all_parents.

initialAutoProceedConfig AutoProceedConfig

Configuration for if and how the step should automatically submit the step contents when requirements are met. By default, this will be disabled.

successCondition SuccessCondition

Configuration for whether the step will require a condition to be met for the step to be completed By default, this is not set, meaning that the step will not wait on any conditions before completing.

completionActionConfigs array of CompletionActionConfig

Configuration for the actions to take when the step transitions to a completed state (SUCCEEDED, ERRORED, SKIPPED) By default, there are no actions.

attachments array of string

Optional attachments for the step description

PropertiesParameter#

constant map of string to string

Properties to always apply on the new asset.

userInput PropertiesParameter.UserInputOptions

If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels to provide the user with existing property keys/values to choose from.

references array of PropertyReference

Additional properties whose keys and values may each be a constant or a field reference. These should supplement constant and also always be applied to the asset.

PropertiesParameter.UserInputOptions#

requiredKeys array of string

Each property key here must have a value provided by the user for asset creation.

suggestedKeys array of string

Each property key here will be suggested to the user but is not required for asset creation Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?

PropertyReference#

key StringReference

​

value StringReference

​

PropertyUpdateWrapper#

properties map of string to string

​

RangeLiteral#

start TimestampReference

If absent, the run’s start time will not be set or modified. For CreateRunConfig, a start time is required (see message-level CEL constraint).

end TimestampReference

​

RelativeTimestamp#

Relative timestamp parser: interprets each row’s timestamp as an offset from a fixed origin.

timeUnit string

Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias.

offset string (date-time)

Starting timestamp to use when indexing the file.

RunReference#

A reference to a single run

fieldId string

The field id that will contain a RunRid value. The execution will fail if the field is not set properly.

RunReferenceList#

references array of RunReference

At least 1 item.

SearchProceduresSortField#

SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED

​

SEARCH_PROCEDURES_SORT_FIELD_NAME

​

SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT

​

SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT

​

SearchProceduresSortOptions#

isDescending boolean

Defaults to true (descending)

sortField SearchProceduresSortField

Defaults to CREATED_AT

SelectOrCreateAssetStep#

The user will be prompted to select an existing asset or create a new asset.

assetOutputFieldId string

If present, the AssetRid for this step will be available in outputs under this field ID.

createAssetParameters CreateAssetParameters

If present, the user will be given the option to create a new asset restricted by these parameters.

presetOptions PresetAssetFieldOptions

The asset must be chosen from preset options. The asset must be chosen from a saved view. SavedViewRid saved_view = 4;

SendNotificationConfig#

An action to send a notification to one or more integrations when a step is completed.

integrations MultiIntegrationReference

The integration(s) to use to send the notification.

title StringReference

The optional title of the notification (length constrained to 130 chars by the IntegrationService).

message StringReference

The message body of the notification. We are omitting some optional parameters to the IntegrationService#sendMessage endpoint, such as tags, priority, and opsGenieAlias. For all current integration types as of 2025-09-15 (besides OpsGenie), only title and message are used.

SingleEnumField#

A field to capture one of several options.

Set exactly one of buttons, dropdown.

label string

Label to show for this options field deprecated in favor of label directly on FormField At least 1 character.

options array of string

List of predefined options that can be selected by the user

one of buttons, dropdown required

​

buttons EnumFieldButtonsInputType

renders a radio button component

dropdown EnumFieldMenuInputType

renders a typical drop down menu

allowCustom boolean

Whether a user can create and specify a new custom option not in the list of options.

isRequired boolean

Whether a selection is required

StartIngestStep#

The user will be prompted to start an ingest job in the frontend and the output of the step will be the rid of the created ingest job.

asset AssetReference

The asset to ingest data into.

refName StringReference

The data scope within the asset to ingest data into.

ingestTypeConfig IngestTypeConfig

Restrict and pre-configure the type of ingest that can be started.

ingestJobOutputFieldId string

If present, the ingest job RID for this step will be available in outputs under this field ID.

StringReference#

A reference to a single string value

Set exactly one of the fields below.

one of constant, fieldId required

​

constant string

The value is a constant string

fieldId string

The value is taken from a field in the current or previous steps. string template = 3;

SuccessCondition#

The condition that must be met for a step to succeed after submitting its contents.

Set exactly one of the fields below.

one of 5 fields required

​

channelValidation ChannelValidationSuccessCondition

​

webhook WebhookSuccessCondition

OrSuccessCondition or = 6;

TagReference#

tagName StringReference

​

tagValue StringReference

​

TagsParameter#

constant map of string to string

Tags to always filter to on the dataset or asset data scope.

userInput TagsParameter.UserInputOptions

If allowing for user input, the frontend should leverage DataSourceService#getAvailableTagKeys/Values to provide the user with existing series tag keys/values to choose from.

references array of TagReference

Additional series tags whose keys and values may each be a constant or a field reference. These should supplement constant and also be filtered to.

TagsParameter.UserInputOptions#

requiredKeys array of string

Each tag key here must have a value provided by the user

suggestedKeys array of string

Each tag key here will be suggested to the user but is not required Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?

TextField#

A field to capture a string value.

Set exactly one of simple, markdown. pattern must be present if pattern_description is present.

label string

Label to show for this text field deprecated in favor of label directly on FormField At least 1 character.

one of simple, markdown required

​

simple TextFieldSimpleInputType

renders a simple html text input field

markdown TextFieldMarkdownInputType

renders a Markdown editor for longer inputs with formatting capabilities

minLength integer (int64)

if set, validate that input is at least this many characters is_required can be achieved by setting min_length >= 1 At least 0.

maxLength integer (int64)

if set, validate that input is at most this many characters At least 0.

pattern string

if set, validate that input matches this regular expression pattern At least 1 character.

patternDescription string

if set, show this message on pattern match failure instead of a generic error At least 1 character.

TextFieldMarkdownInputType#

An empty JSON object, {}.

TextFieldSimpleInputType#

An empty JSON object, {}.

TimeRangeReference#

A reference to a time range

Set exactly one of the fields below.

one of fromIngestJobs, literal required

​

fromIngestJobs IngestJobList

The time range is the union of the time ranges ingested by all the specified ingest jobs.

literal RangeLiteral

​

TimerSuccessCondition#

A timer condition that will succeed the step after a specified duration.

durationSeconds integer

Duration in seconds to wait before succeeding the step. This value must be non-negative. This duration is a minimum bound; the actual duration may be longer. At least 0.

TimestampReference#

Set exactly one of the fields below.

one of fieldId, constant required

​

fieldId string

A field reference that resolves to a timestamp from a step’s execution state. Supported field names: started_at, succeeded_at, submitted_at, skipped_at, errored_at. Aliases: start_time (= started_at), end_time (= succeeded_at).

constant string (date-time)

A literal/constant timestamp

TimestampType#

Selects between relative-offset and absolute-timestamp parsing strategies.

Set exactly one of the fields below.

one of relative, absolute required

​

relative RelativeTimestamp

​

absolute AbsoluteTimestamp

​

TimestampTypeParameter#

Set exactly one of the fields below.

one of constant, userInput required

​

constant TimestampType

Timestamp type to always use for ingest.

userInput TimestampTypeParameter.UserInputOptions

If specified, allows user to enter timestamp metadata based on input options.

TimestampTypeParameter.UserInputOptions#

Can allow for more configuration

An empty JSON object, {}.

TitleParameter#

Set at most one of the fields below.

one of constant, fieldId

​

constant string

The title as a string value.

fieldId string

The title is taken from a field in the current or previous steps.

types.Property#

name string

​

value string

​

UpdateRunConfig#

An action to update an existing run when a step is completed (e.g. set end time to previous step end time).

option (buf.validate.message).cel = { id: “update_run_config.at_least_one_update” message: “At least one update field (name, description, time_range, labels, or properties) must be set” expression: “has(this.name) || has(this.description) || has(this.time_range) || has(this.labels) || this.properties.size() > 0” };

runs MultiRunReference required

The run(s) to update. Typically but not limited to a reference to a run created earlier in the procedure

name StringReference

Optional PATCH-style updates. Only set fields that should change. If unset, the run will not be updated.

description StringReference

​

timeRange TimeRangeReference

​

labels MultiStringReference

​

properties array of PropertyReference

​

strictOverwrite boolean

When true, time fields overwrite existing values. When false, start only moves earlier, end only moves later (aligns with runs API strictOverwrite).

WaitStep#

An empty JSON object, {}.

WebhookDeliveryConfig#

Configuration for webhook delivery retry logic and timeouts.

maxRetries integer

Maximum delivery attempts (default: 3, max: 10) From 0 to 10.

retryIntervalSeconds string (int64)

Initial retry interval seconds (default: 15, min: 5, max: 300) From 5 to 300.

exponentialBackoff boolean

Use exponential backoff (default: true)

maxRetryIntervalSeconds string (int64)

Max retry interval seconds (default: 300, max: 3600) From 5 to 3,600.

timeoutSeconds string (int64)

Overall timeout seconds (default: 600, max: 86400) From 1 to 86,400.

WebhookSuccessCondition#

A webhook success condition that waits for external system approval via HTTP webhook. The step succeeds when the external system responds with 2xx status code.

Failure behavior: - 4xx responses: Permanent failure, no retry (CLIENT_ERROR) - 5xx responses: Retry with exponential backoff until max_retries (SERVER_ERROR_MAX_RETRIES_EXCEEDED) - Network errors: Retry until max_retries (NETWORK_ERROR_MAX_RETRIES_EXCEEDED) - Timeout: Retry until timeout_seconds exceeded (OVERALL_TIMEOUT_EXCEEDED) - Redirects: Followed automatically, fails if redirect loop detected (REDIRECT_LOOP)

integrationRid string

RID reference to a WebhookIntegration (the advanced integration type with HMAC signing) At least 1 character.

deliveryConfig WebhookDeliveryConfig

Webhook delivery configuration. If not provided, server uses documented defaults.

eventType string

Event type to send (e.g., “procedure.step_waiting”) At least 1 character.

payloadTemplate string

JSON payload template using Handlebars syntax (https://handlebarsjs.com/) Supports variable references using {{variable_name}} syntax: - {{execution_rid}} - Procedure execution RID - {{step_id}} - Current step ID - {{step_name}} - Current step name/title - {{procedure_name}} - Procedure name - {{field_id}} - Any global form field value (e.g., {{environment}}, {{approval_level}}) - {{asset_rid}} - Asset RID if step has asset context - {{asset_name}} - Asset name if step has asset context Advanced features: - Conditionals: {{#if environment}}production mode{{/if}} - Loops: {{#each tags}}{{this}}{{/each}} - Comparisons: {{#if (eq priority “HIGH”)}}urgent{{/if}} - Default values: {{default environment “unknown”}} Example template: { “event”: “approval_required”, “execution_id”: “{{execution_rid}}”, “step”: “{{step_name}}”, “environment”: “{{environment}}”, {{#if asset_name}} “asset”: “{{asset_name}}”, {{/if}} “is_production”: {{#if (eq environment “production”)}}true{{else}}false{{/if}} } Variables that cannot be resolved will be replaced with empty string. Invalid JSON after template evaluation will cause the condition to fail with PAYLOAD_ERROR reason. At least 1 character.

WorkbookTemplateReference#

A reference to a single workbook template

rid string

A constant workbook template RID. string field_id = 2;

WorkbookTemplateReferenceList#

references array of WorkbookTemplateReference

At least 1 item.

Page design based on Scalar, MIT License.