{
  "swagger": "2.0",
  "info": {
    "title": "Procedures service",
    "version": "0.1507.0",
    "description": "Send your API key as a bearer token: `Authorization: Bearer <api key>`."
  },
  "tags": [
    {
      "name": "ProceduresService",
      "x-displayName": "Procedures service",
      "description": "Service for creating and managing procedure templates, which are versioned collections of steps to be performed, typically in a specific order.",
      "x-errors": [
        {
          "status": 404,
          "errorCode": "NOT_FOUND",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorNotFound",
          "message": "Procedure not found"
        },
        {
          "status": 404,
          "errorCode": "NOT_FOUND",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorCommitNotFound",
          "message": "Procedure commit not found"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorCannotMergeMain",
          "message": "Cannot merge to main from main"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorCannotCommitToArchivedProcedure",
          "message": "Cannot commit to archived procedure"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorInvalidGraph",
          "message": "Invalid procedure graph"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "NominalProceduresV1:ProceduresServiceErrorInvalidSearchToken",
          "message": "Invalid search token"
        }
      ]
    }
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/procedures/v1/procedures": {
      "post": {
        "operationId": "ProceduresService_CreateProcedure",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/CreateProcedureResponse"
            },
            "x-example": {
              "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>"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateProcedureRequest"
            },
            "x-example": {
              "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>"
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Create procedure",
        "description": "Create a new procedure"
      }
    },
    "/procedures/v1/procedures/archive": {
      "post": {
        "operationId": "ProceduresService_ArchiveProcedures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/ArchiveProceduresResponse"
            },
            "x-example": {
              "procedureRids": [
                "<procedure rids>"
              ]
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ArchiveProceduresRequest"
            },
            "x-example": {
              "procedureRids": [
                "<procedure rids>"
              ]
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Archive procedures",
        "description": "Archive procedures"
      }
    },
    "/procedures/v1/procedures/batch-get-metadata": {
      "post": {
        "operationId": "ProceduresService_BatchGetProcedureMetadata",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/BatchGetProcedureMetadataResponse"
            },
            "x-example": {
              "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"
                }
              ]
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BatchGetProcedureMetadataRequest"
            },
            "x-example": {
              "procedureRids": [
                "<procedure rids>"
              ]
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Batch get procedure metadata",
        "description": "Get metadata for multiple procedure by RIDs. Unauthorized RIDs will be omitted from the response. Order is not guaranteed to match the request."
      }
    },
    "/procedures/v1/procedures/nested/{rid}": {
      "get": {
        "operationId": "ProceduresService_GetProcedureAsNested",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetProcedureAsNestedResponse"
            },
            "x-example": {
              "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>"
                  }
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "branchOrCommit.branch",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "branchOrCommit.commit",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Get procedure as nested",
        "description": "Get procedure as nested procedure."
      }
    },
    "/procedures/v1/procedures/parse-nested-procedure": {
      "post": {
        "operationId": "ProceduresService_ParseNestedProcedure",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/ParseNestedProcedureResponse"
            },
            "x-example": {
              "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>"
                    ]
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ParseNestedProcedureRequest"
            },
            "x-example": {
              "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
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Parse nested procedure",
        "description": "Parse a procedure from a nested procedure structure",
        "security": []
      }
    },
    "/procedures/v1/procedures/search": {
      "post": {
        "operationId": "ProceduresService_SearchProcedures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/SearchProceduresResponse"
            },
            "x-example": {
              "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>"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SearchProceduresRequest"
            },
            "x-example": {
              "query": {
                "searchText": "<search text>"
              },
              "sortOptions": {
                "isDescending": true,
                "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME"
              },
              "pageSize": 1,
              "nextPageToken": "<next page token>"
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Search procedures",
        "description": "Searches all procedures, returning paged results"
      }
    },
    "/procedures/v1/procedures/unarchive": {
      "post": {
        "operationId": "ProceduresService_UnarchiveProcedures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/UnarchiveProceduresResponse"
            },
            "x-example": {
              "procedureRids": [
                "<procedure rids>"
              ]
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UnarchiveProceduresRequest"
            },
            "x-example": {
              "procedureRids": [
                "<procedure rids>"
              ]
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Unarchive procedures",
        "description": "Unarchive procedures"
      }
    },
    "/procedures/v1/procedures/{rid}": {
      "get": {
        "operationId": "ProceduresService_GetProcedure",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetProcedureResponse"
            },
            "x-example": {
              "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>"
                    ]
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "branchOrCommit.branch",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "branchOrCommit.commit",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "includeDisplayGraph",
            "description": "If true, the display graph will be included in the response. Default is false.",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Get procedure",
        "description": "Get a procedure by its RID"
      }
    },
    "/procedures/v1/procedures/{rid}/commit": {
      "post": {
        "operationId": "ProceduresService_Commit",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/CommitResponse"
            },
            "x-example": {
              "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>"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CommitBody"
            },
            "x-example": {
              "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>"
                    ]
                  }
                }
              }
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Commit",
        "description": "Commit a procedure to a branch"
      }
    },
    "/procedures/v1/procedures/{rid}/merge-to-main": {
      "post": {
        "operationId": "ProceduresService_MergeToMain",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/MergeToMainResponse"
            },
            "x-example": {
              "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>"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MergeToMainBody"
            },
            "x-example": {
              "message": "<message>"
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Merge to main",
        "description": "Merge a branch of a procedure to main"
      }
    },
    "/procedures/v1/procedures/{rid}/metadata": {
      "put": {
        "operationId": "ProceduresService_UpdateProcedureMetadata",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/UpdateProcedureMetadataResponse"
            },
            "x-example": {
              "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"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UpdateProcedureMetadataBody"
            },
            "x-example": {
              "title": "<title>",
              "description": "<description>",
              "labels": {
                "labels": [
                  "<labels>"
                ]
              },
              "properties": {
                "properties": {
                  "<key>": "<value>"
                }
              },
              "isArchived": true,
              "isPublished": true
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Update procedure metadata",
        "description": "Update the metadata of a procedure"
      }
    },
    "/procedures/v1/procedures/{rid}/save-working-state": {
      "post": {
        "operationId": "ProceduresService_SaveWorkingState",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/SaveWorkingStateResponse"
            },
            "x-example": {
              "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>"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SaveWorkingStateBody"
            },
            "x-example": {
              "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>"
                    ]
                  }
                }
              }
            }
          }
        ],
        "tags": [
          "ProceduresService"
        ],
        "summary": "Save working state",
        "description": "Save the working state of a procedure"
      }
    }
  },
  "definitions": {
    "AdditionalFileTagBinding": {
      "type": "object",
      "properties": {
        "tagName": {
          "type": "string",
          "description": "The additional file tag name."
        },
        "stringValue": {
          "$ref": "#/definitions/StringReference",
          "description": "A string value to apply as the tag value."
        },
        "assetRid": {
          "$ref": "#/definitions/AssetReference",
          "description": "An asset RID value to apply as the tag value."
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "stringValue",
            "assetRid"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of `stringValue`, `assetRid`.",
      "example": {
        "tagName": "string",
        "stringValue": {
          "constant": "string"
        }
      }
    },
    "AndSuccessCondition": {
      "type": "object",
      "properties": {
        "conditions": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/SuccessCondition"
          }
        }
      },
      "description": "All conditions within must be met for the step to be succeeded."
    },
    "ApplyChecklistsConfig": {
      "type": "object",
      "properties": {
        "checklists": {
          "$ref": "#/definitions/MultiChecklistReference",
          "description": "The checklists to apply."
        },
        "runs": {
          "$ref": "#/definitions/MultiRunReference",
          "description": "The runs to apply the checklists to. There must be at least one."
        }
      },
      "description": "An action to apply one or more checklists to one or more runs when a step is completed."
    },
    "ApplyWorkbookTemplatesConfig": {
      "type": "object",
      "properties": {
        "workbookTemplates": {
          "$ref": "#/definitions/MultiWorkbookTemplateReference",
          "description": "The workbook templates to apply."
        },
        "runs": {
          "$ref": "#/definitions/MultiRunReference",
          "description": "The runs to apply the workbook templates to. Optional; at least one run or asset must be set."
        },
        "assets": {
          "$ref": "#/definitions/MultiAssetReference",
          "description": "The assets to apply the workbook templates to. Optional; at least one run or asset must be set."
        }
      },
      "description": "An action to apply one or more workbook templates to runs and/or assets when a step is completed.\n\nAt least one run or asset must be specified."
    },
    "ArchiveProceduresRequest": {
      "type": "object",
      "properties": {
        "procedureRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "example": {
        "procedureRids": [
          "<procedure rids>"
        ]
      }
    },
    "ArchiveProceduresResponse": {
      "type": "object",
      "properties": {
        "procedureRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "AssetField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Helper text to guide selection of the asset deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "isRequired": {
          "type": "boolean",
          "description": "Whether this field is required to be set complete the step."
        },
        "presetOptions": {
          "$ref": "#/definitions/PresetAssetFieldOptions",
          "title": "The asset must be chosen from a saved view. SavedViewRid saved_view = 5."
        }
      },
      "description": "A field to select a single asset.",
      "x-oneofs": [
        {
          "fields": [
            "presetOptions"
          ],
          "required": false
        }
      ],
      "example": {
        "label": "string",
        "isRequired": true,
        "presetOptions": {
          "options": [
            {
              "rid": "string"
            }
          ],
          "defaultOption": {
            "rid": "string"
          }
        }
      }
    },
    "AssetReference": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "title": "a constant AssetRid"
        },
        "fieldId": {
          "type": "string",
          "description": "The field reference that will contain an AssetRid value. The execution will fail if the field is not set but the value is accessed."
        }
      },
      "title": "A reference to a single asset",
      "x-oneofs": [
        {
          "fields": [
            "rid",
            "fieldId"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "rid": "string"
      }
    },
    "AutoProceedConfig": {
      "type": "object",
      "properties": {
        "disabled": {
          "$ref": "#/definitions/AutoProceedConfig.Disabled",
          "title": "The step will not be automatically completed"
        },
        "enabled": {
          "$ref": "#/definitions/Enabled",
          "description": "The step will automatically submit the step contents once the requirements are met and begin the transition to either PASSED or ERRORED."
        }
      },
      "description": "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`.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "disabled",
            "enabled"
          ],
          "required": true
        }
      ],
      "example": {
        "disabled": {}
      }
    },
    "AutoProceedConfig.Disabled": {
      "type": "object"
    },
    "Enabled": {
      "type": "object"
    },
    "AutoStartConfig": {
      "type": "object",
      "properties": {
        "allParents": {
          "$ref": "#/definitions/AllParents",
          "description": "The step will start automatically when all parent steps have passed."
        },
        "disabled": {
          "$ref": "#/definitions/AutoStartConfig.Disabled",
          "description": "The step will not start automatically."
        }
      },
      "title": "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`",
      "x-oneofs": [
        {
          "fields": [
            "allParents",
            "disabled"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "allParents": {}
      }
    },
    "AllParents": {
      "type": "object"
    },
    "AutoStartConfig.Disabled": {
      "type": "object"
    },
    "BatchGetProcedureMetadataRequest": {
      "type": "object",
      "properties": {
        "procedureRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "example": {
        "procedureRids": [
          "<procedure rids>"
        ]
      }
    },
    "BatchGetProcedureMetadataResponse": {
      "type": "object",
      "properties": {
        "procedureMetadatas": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProcedureMetadata"
          }
        }
      }
    },
    "CaptureMoment": {
      "type": "string",
      "enum": [
        "CAPTURE_MOMENT_UNSPECIFIED",
        "CAPTURE_MOMENT_STEP_START",
        "CAPTURE_MOMENT_STEP_COMPLETION"
      ],
      "default": "CAPTURE_MOMENT_UNSPECIFIED",
      "description": "When in the step lifecycle to capture a channel value.\n\n - CAPTURE_MOMENT_UNSPECIFIED: Required zero-value enum sentinel. Do not include this in capture_moments.",
      "example": "CAPTURE_MOMENT_STEP_START"
    },
    "ChannelCaptureConfig": {
      "type": "object",
      "properties": {
        "outputFieldId": {
          "type": "string",
          "description": "Base field ID used to namespace event property keys (and downstream procedure outputs)."
        },
        "captureMoments": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CaptureMoment"
          },
          "description": "When to capture relative to the step lifecycle. Empty means no capture occurs — at least one moment must be specified.",
          "uniqueItems": true,
          "x-constraints": [
            "No duplicates."
          ]
        }
      },
      "description": "Shared configuration for capturing a single channel value where the source channel is supplied by the parent config.\n\nAt 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."
    },
    "ChannelLocator": {
      "type": "object",
      "properties": {
        "dataSourceRef": {
          "type": "string",
          "title": "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.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "channelName": {
          "type": "string",
          "title": "The name of the channel within the data source to validate.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "title": "Optional series tags to filter the channel data. Used to select specific series when multiple series exist for the same channel name."
        },
        "asset": {
          "$ref": "#/definitions/AssetReference"
        },
        "run": {
          "$ref": "#/definitions/RunReference"
        }
      },
      "description": "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.\n\nSet exactly one of `asset`, `run`.",
      "x-oneofs": [
        {
          "fields": [
            "asset",
            "run"
          ],
          "required": true
        }
      ],
      "example": {
        "dataSourceRef": "string",
        "channelName": "string",
        "tags": {
          "key": "string"
        },
        "asset": {
          "rid": "string"
        }
      }
    },
    "ChannelValidationSuccessCondition": {
      "type": "object",
      "properties": {
        "channel": {
          "$ref": "#/definitions/ChannelLocator",
          "description": "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": {
          "$ref": "#/definitions/COMPARATOR",
          "description": "The comparison operator to use. COMPARATOR_UNSPECIFIED should never be used and will be rejected at runtime."
        },
        "threshold": {
          "type": "number",
          "format": "double",
          "description": "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": {
          "type": "integer",
          "format": "int32",
          "description": "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).",
          "minimum": 0,
          "exclusiveMinimum": true,
          "maximum": 3600000,
          "x-constraints": [
            "Greater than 0 and at most 3,600,000."
          ]
        },
        "pointPersistence": {
          "type": "integer",
          "format": "int64",
          "title": "optionally specify a persistence of individual points",
          "minimum": 0,
          "exclusiveMinimum": true,
          "x-constraints": [
            "Greater than 0."
          ]
        },
        "timePersistence": {
          "type": "integer",
          "format": "int64",
          "title": "optionally specify a persistence duration in milliseconds (max 5 minutes) for which the condition must hold true",
          "minimum": 0,
          "exclusiveMinimum": true,
          "maximum": 300000,
          "x-constraints": [
            "Greater than 0 and at most 300,000."
          ]
        },
        "channelCaptures": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ChannelCaptureConfig"
          },
          "description": "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."
        }
      },
      "description": "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.",
      "required": [
        "channel",
        "comparator"
      ]
    },
    "COMPARATOR": {
      "type": "string",
      "enum": [
        "COMPARATOR_UNSPECIFIED",
        "COMPARATOR_GREATER_THAN",
        "COMPARATOR_GREATER_THAN_OR_EQUAL",
        "COMPARATOR_LESS_THAN",
        "COMPARATOR_LESS_THAN_OR_EQUAL",
        "COMPARATOR_EQUAL",
        "COMPARATOR_NOT_EQUAL",
        "COMPARATOR_EXISTS"
      ],
      "default": "COMPARATOR_UNSPECIFIED",
      "description": "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.\n\n - 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.\n - COMPARATOR_EXISTS: Succeeds when any channel value exists. The threshold field is ignored.",
      "title": "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",
      "example": "COMPARATOR_GREATER_THAN"
    },
    "CheckboxField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this checkbox field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "isRequired": {
          "type": "boolean",
          "description": "If set, the checkbox value must be checked (`true`) to complete the step."
        }
      },
      "description": "A field to capture a boolean value."
    },
    "ChecklistReference": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "description": "A constant checklist RID.\n\nstring field_id = 2;"
        }
      },
      "title": "A reference to a single checklist",
      "x-oneofs": [
        {
          "fields": [
            "rid"
          ],
          "required": true
        }
      ],
      "example": {
        "rid": "string"
      }
    },
    "CommitResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        }
      }
    },
    "CompletionActionConfig": {
      "type": "object",
      "properties": {
        "createEvent": {
          "$ref": "#/definitions/CreateEventConfig"
        },
        "sendNotification": {
          "$ref": "#/definitions/SendNotificationConfig"
        },
        "createRun": {
          "$ref": "#/definitions/CreateRunConfig"
        },
        "applyWorkbookTemplates": {
          "$ref": "#/definitions/ApplyWorkbookTemplatesConfig"
        },
        "applyChecklists": {
          "$ref": "#/definitions/ApplyChecklistsConfig"
        },
        "updateRun": {
          "$ref": "#/definitions/UpdateRunConfig",
          "description": "..."
        }
      },
      "description": "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.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "createEvent",
            "sendNotification",
            "createRun",
            "applyWorkbookTemplates",
            "applyChecklists",
            "updateRun"
          ],
          "required": true
        }
      ],
      "example": {
        "createEvent": {
          "name": "string",
          "description": "string",
          "labels": [
            "string"
          ],
          "properties": {
            "key": "string"
          },
          "assetFieldIds": [
            "string"
          ],
          "assetReferences": [
            {
              "rid": "string"
            }
          ],
          "propertyRefs": [
            {
              "key": {
                "constant": "string"
              },
              "value": {
                "constant": "string"
              }
            }
          ]
        }
      }
    },
    "CreateEventConfig": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Deprecated in favor of property_refs Properties will be overridden by any property_refs with the same key."
        },
        "assetFieldIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Each asset_field_id will be resolved and added as an AssetRid to the created event deprecated in favor of asset_references"
        },
        "assetReferences": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AssetReference"
          },
          "description": "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": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/PropertyReference"
          },
          "title": "Properties to apply to the event"
        }
      },
      "title": "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:\n- SUCCEEDED -> SUCCESS\n- ERRORED -> ERROR\n- SKIPPED -> INFO"
    },
    "CreateProcedureRequest": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "state": {
          "$ref": "#/definitions/ProcedureState"
        },
        "isPublished": {
          "type": "boolean"
        },
        "workspace": {
          "type": "string"
        },
        "commitMessage": {
          "type": "string"
        },
        "initialBranchName": {
          "type": "string"
        }
      },
      "example": {
        "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>"
      }
    },
    "CreateProcedureResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        },
        "branchName": {
          "type": "string"
        }
      }
    },
    "CreateRunConfig": {
      "type": "object",
      "properties": {
        "runOutputFieldId": {
          "type": "string",
          "description": "If present, the run RID for this step will be available in outputs under this field ID."
        },
        "assets": {
          "$ref": "#/definitions/MultiAssetReference",
          "description": "The assets to associate the run with. There must be at least one."
        },
        "name": {
          "$ref": "#/definitions/StringReference",
          "description": "The name of the run."
        },
        "description": {
          "$ref": "#/definitions/StringReference",
          "description": "Optionally, a description for the run."
        },
        "timeRange": {
          "$ref": "#/definitions/TimeRangeReference",
          "description": "The time range for the run. If unset, the run will be created starting at now() with no end time."
        },
        "labels": {
          "$ref": "#/definitions/MultiStringReference",
          "description": "Labels to apply on the run."
        },
        "properties": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/CreateRunConfig.Property"
          },
          "description": "Properties to apply on the run.\n\nrepeated UrlReference links; repeated AttachmentRidReference attachments; // requires some sort of AttachmentRidField where FE handles upload"
        }
      },
      "description": "An action to create a run when a step is completed.\n\nLiteral time range for run creation must include a start time."
    },
    "CreateRunConfig.Property": {
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringReference"
        },
        "value": {
          "$ref": "#/definitions/StringReference"
        }
      }
    },
    "DatasetReference": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "title": "a constant DatasetRid"
        },
        "fieldId": {
          "type": "string",
          "description": "The field reference that will contain a DatasetRid value. The execution will fail if the field is not set but the value is accessed."
        }
      },
      "title": "A reference to a single dataset",
      "x-oneofs": [
        {
          "fields": [
            "rid",
            "fieldId"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "rid": "string"
      }
    },
    "DoubleField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this double field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "isRequired": {
          "type": "boolean",
          "description": "Whether this field is required to be set complete the step."
        },
        "gtValue": {
          "type": "number",
          "format": "double",
          "title": "greater than"
        },
        "gteValue": {
          "type": "number",
          "format": "double",
          "title": "greater than or equal to"
        },
        "ltValue": {
          "type": "number",
          "format": "double",
          "title": "less than"
        },
        "lteValue": {
          "type": "number",
          "format": "double",
          "title": "less than or equal to"
        }
      },
      "description": "A field to capture a double value.\n\nSet at most one of `gtValue`, `gteValue`. Set at most one of `ltValue`, `lteValue`.",
      "x-oneofs": [
        {
          "fields": [
            "gtValue",
            "gteValue"
          ],
          "required": false
        },
        {
          "fields": [
            "ltValue",
            "lteValue"
          ],
          "required": false
        }
      ],
      "example": {
        "label": "string",
        "isRequired": true,
        "gtValue": 1,
        "ltValue": 1
      }
    },
    "EnumFieldButtonsInputType": {
      "type": "object"
    },
    "EnumFieldMenuInputType": {
      "type": "object"
    },
    "EnvironmentInputBinding": {
      "type": "object",
      "properties": {
        "environmentVariable": {
          "type": "string",
          "description": "The input key. For containerized extractors, this is the environment variable name."
        },
        "value": {
          "$ref": "#/definitions/StringReference",
          "description": "The string value to pass to the extractor."
        }
      }
    },
    "FileInputBinding": {
      "type": "object",
      "properties": {
        "environmentVariable": {
          "type": "string",
          "description": "The input key. For containerized extractors, this is the environment variable name."
        },
        "fileReference": {
          "$ref": "#/definitions/FileReference",
          "title": "The specific type of file"
        }
      }
    },
    "FileReference": {
      "type": "object",
      "properties": {
        "fieldId": {
          "type": "string",
          "title": "Reference a field from a prior step"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "fieldId"
          ],
          "required": false
        }
      ],
      "example": {
        "fieldId": "string"
      }
    },
    "FileUploadField": {
      "type": "object",
      "properties": {
        "isRequired": {
          "type": "boolean",
          "title": "If a file is required"
        },
        "suffixFilters": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "title": "Optional list of case insensitive suffixes to filter files. (ie \"csv\", \"parquet\", or \"json\")",
          "x-constraints": [
            "Each item: at least 1 character."
          ]
        }
      },
      "title": "A field to process the uploading of a file"
    },
    "FormField": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "This field's id can be used by downstream steps to refer to the value."
        },
        "asset": {
          "$ref": "#/definitions/AssetField"
        },
        "checkbox": {
          "$ref": "#/definitions/CheckboxField"
        },
        "text": {
          "$ref": "#/definitions/TextField"
        },
        "int": {
          "$ref": "#/definitions/IntField"
        },
        "double": {
          "$ref": "#/definitions/DoubleField"
        },
        "singleEnum": {
          "$ref": "#/definitions/SingleEnumField"
        },
        "multiEnum": {
          "$ref": "#/definitions/MultiEnumField"
        },
        "fileUpload": {
          "$ref": "#/definitions/FileUploadField"
        },
        "multiFileUpload": {
          "$ref": "#/definitions/MultiFileUploadField"
        },
        "label": {
          "type": "string",
          "description": "UI label for the field component. Overrides any label defined in the specific FormField type.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string",
          "description": "Help text describing how to use this input field.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        }
      },
      "description": "A field to be filled out by the user.\n\nSet exactly one of `asset`, `checkbox`, `text`, `int`, `double`, `singleEnum`, `multiEnum`, `fileUpload`, `multiFileUpload`.",
      "x-oneofs": [
        {
          "fields": [
            "asset",
            "checkbox",
            "text",
            "int",
            "double",
            "singleEnum",
            "multiEnum",
            "fileUpload",
            "multiFileUpload"
          ],
          "required": true
        }
      ],
      "example": {
        "id": "string",
        "asset": {
          "label": "string",
          "isRequired": true,
          "presetOptions": {
            "options": [
              {
                "rid": "string"
              }
            ],
            "defaultOption": {
              "rid": "string"
            }
          }
        },
        "label": "string",
        "description": "string"
      }
    },
    "FormStep": {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FormField"
          }
        }
      },
      "description": "A form step consists of a set of fields to be filled out by the user."
    },
    "GetProcedureAsNestedResponse": {
      "type": "object",
      "properties": {
        "nestedProcedure": {
          "$ref": "#/definitions/NestedProcedure"
        }
      }
    },
    "GetProcedureResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        },
        "displayGraph": {
          "$ref": "#/definitions/ProcedureDisplayGraph",
          "title": "Included if include_display_graph was set to true"
        }
      }
    },
    "IngestJobSuccessCondition": {
      "type": "object",
      "properties": {
        "fieldId": {
          "type": "string",
          "description": "The field ID that contains the IngestJobRid of the ingest job to monitor."
        }
      },
      "description": "The step will succeed when the associated ingest job succeeds. If the ingest job fails, the step will move to ERRORED."
    },
    "IntField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this int field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "isRequired": {
          "type": "boolean",
          "description": "Whether this field is required to be set complete the step."
        },
        "gteValue": {
          "type": "string",
          "format": "int64",
          "title": "if set, validate that input is at least this value"
        },
        "lteValue": {
          "type": "string",
          "format": "int64",
          "title": "if set, validate that input is at most this value"
        }
      },
      "description": "A field to capture an int value."
    },
    "IntegrationReference": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "description": "A constant integration RID.\n\nstring field_id = 2;"
        }
      },
      "title": "A reference to a notification Integration",
      "x-oneofs": [
        {
          "fields": [
            "rid"
          ],
          "required": true
        }
      ],
      "example": {
        "rid": "string"
      }
    },
    "MergeToMainResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        }
      }
    },
    "MultiAssetReference": {
      "type": "object",
      "properties": {
        "list": {
          "$ref": "#/definitions/AssetReferenceList"
        }
      },
      "title": "A reference to multiple assets",
      "x-oneofs": [
        {
          "fields": [
            "list"
          ],
          "required": true
        }
      ],
      "example": {
        "list": {
          "references": [
            {
              "rid": "string"
            }
          ]
        }
      }
    },
    "AssetReferenceList": {
      "type": "object",
      "properties": {
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AssetReference"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "MultiChecklistReference": {
      "type": "object",
      "properties": {
        "list": {
          "$ref": "#/definitions/ChecklistReferenceList"
        }
      },
      "title": "A reference to multiple checklists",
      "x-oneofs": [
        {
          "fields": [
            "list"
          ],
          "required": true
        }
      ],
      "example": {
        "list": {
          "references": [
            {
              "rid": "string"
            }
          ]
        }
      }
    },
    "ChecklistReferenceList": {
      "type": "object",
      "properties": {
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ChecklistReference"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "MultiEnumField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this options field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "options": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "List of predefined options that can be selected by the user"
        },
        "buttons": {
          "$ref": "#/definitions/EnumFieldButtonsInputType",
          "title": "renders a collection of checkboxes"
        },
        "dropdown": {
          "$ref": "#/definitions/EnumFieldMenuInputType",
          "title": "renders a typical drop down menu"
        },
        "allowCustom": {
          "type": "boolean",
          "description": "Whether a user can create and specify a new custom option not in the list of options."
        },
        "minCount": {
          "type": "integer",
          "format": "int64",
          "title": "If set, the user must select at least this many options `is_required` behavior can be achieved by setting `min_count` = 1"
        },
        "maxCount": {
          "type": "integer",
          "format": "int64",
          "title": "If set, the user can select at most this many options"
        }
      },
      "description": "A field to capture one or more of several options.\n\nSet exactly one of `buttons`, `dropdown`.",
      "x-oneofs": [
        {
          "fields": [
            "buttons",
            "dropdown"
          ],
          "required": true
        }
      ],
      "example": {
        "label": "string",
        "options": [
          "string"
        ],
        "buttons": {},
        "allowCustom": true,
        "minCount": 1,
        "maxCount": 1
      }
    },
    "MultiFileUploadField": {
      "type": "object",
      "properties": {
        "minCount": {
          "type": "integer",
          "format": "int64",
          "title": "Count of required files"
        },
        "maxCount": {
          "type": "integer",
          "format": "int64",
          "title": "File count limit"
        },
        "suffixFilters": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "title": "Optional list of case insensitive suffixes to filter files. (ie \"csv\", \"parquet\", or \"json\")",
          "x-constraints": [
            "Each item: at least 1 character."
          ]
        }
      },
      "title": "A field to process the uploading of a dynamic set of files"
    },
    "MultiIntegrationReference": {
      "type": "object",
      "properties": {
        "list": {
          "$ref": "#/definitions/IntegrationReferenceList"
        }
      },
      "title": "A reference to multiple notification Integrations",
      "x-oneofs": [
        {
          "fields": [
            "list"
          ],
          "required": true
        }
      ],
      "example": {
        "list": {
          "references": [
            {
              "rid": "string"
            }
          ]
        }
      }
    },
    "IntegrationReferenceList": {
      "type": "object",
      "properties": {
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/IntegrationReference"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "MultiRunReference": {
      "type": "object",
      "properties": {
        "list": {
          "$ref": "#/definitions/RunReferenceList"
        }
      },
      "title": "A reference to multiple runs",
      "x-oneofs": [
        {
          "fields": [
            "list"
          ],
          "required": true
        }
      ],
      "example": {
        "list": {
          "references": [
            {
              "fieldId": "string"
            }
          ]
        }
      }
    },
    "RunReferenceList": {
      "type": "object",
      "properties": {
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/RunReference"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "MultiStringReference": {
      "type": "object",
      "properties": {
        "fieldId": {
          "type": "string",
          "description": "The value is taken from a field in the current or previous steps."
        }
      },
      "title": "A reference to multiple string values",
      "x-oneofs": [
        {
          "fields": [
            "fieldId"
          ],
          "required": true
        }
      ],
      "example": {
        "fieldId": "string"
      }
    },
    "MultiWorkbookTemplateReference": {
      "type": "object",
      "properties": {
        "list": {
          "$ref": "#/definitions/WorkbookTemplateReferenceList"
        }
      },
      "title": "A reference to multiple workbook templates",
      "x-oneofs": [
        {
          "fields": [
            "list"
          ],
          "required": true
        }
      ],
      "example": {
        "list": {
          "references": [
            {
              "rid": "string"
            }
          ]
        }
      }
    },
    "WorkbookTemplateReferenceList": {
      "type": "object",
      "properties": {
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/WorkbookTemplateReference"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "NestedProcedure": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "title": "Title of the procedure",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string",
          "title": "Optional long-form description for the procedure"
        },
        "steps": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/NestedProcedureNode"
          },
          "title": "Steps in the procedure"
        },
        "globalFields": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FormField"
          }
        },
        "newGlobalFields": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FormField"
          },
          "description": "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}."
        }
      },
      "description": "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."
    },
    "NestedProcedureNode": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "The unique identifier for this step or section"
        },
        "title": {
          "type": "string",
          "description": "Title of this section or step.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string",
          "description": "Optional long-form description for this section or step."
        },
        "steps": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/NestedProcedureNode"
          },
          "description": "If this node is a section, then it can contain other sections and steps."
        },
        "step": {
          "$ref": "#/definitions/NestedStepNode",
          "description": "If this node is a step, then this field contains the step definition."
        }
      },
      "description": "A section or a step in a NestedProcedure."
    },
    "NestedStepNode": {
      "type": "object",
      "properties": {
        "isRequired": {
          "type": "boolean"
        },
        "autoStart": {
          "$ref": "#/definitions/AutoStartConfig"
        },
        "initialAutoProceedConfig": {
          "$ref": "#/definitions/AutoProceedConfig"
        },
        "successCondition": {
          "$ref": "#/definitions/SuccessCondition"
        },
        "completionActionConfigs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/CompletionActionConfig"
          }
        },
        "form": {
          "$ref": "#/definitions/FormStep"
        },
        "startIngest": {
          "$ref": "#/definitions/StartIngestStep"
        },
        "selectOrCreateAsset": {
          "$ref": "#/definitions/SelectOrCreateAssetStep"
        },
        "wait": {
          "$ref": "#/definitions/WaitStep"
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Optional attachments for the step description"
        }
      },
      "description": "These fields' docs are identical to those of ProcedureStepNode.\n\nSet exactly one of `form`, `startIngest`, `selectOrCreateAsset`, `wait`.",
      "x-oneofs": [
        {
          "fields": [
            "form",
            "startIngest",
            "selectOrCreateAsset",
            "wait"
          ],
          "required": true
        }
      ],
      "example": {
        "isRequired": true,
        "autoStart": {
          "allParents": {}
        },
        "initialAutoProceedConfig": {
          "disabled": {}
        },
        "successCondition": {
          "and": {
            "conditions": []
          }
        },
        "completionActionConfigs": [
          {
            "createEvent": {
              "name": "string",
              "description": "string",
              "labels": [
                "string"
              ],
              "properties": {
                "key": "string"
              },
              "assetFieldIds": [
                "string"
              ],
              "assetReferences": [
                {
                  "rid": "string"
                }
              ],
              "propertyRefs": [
                {
                  "key": {
                    "constant": "string"
                  },
                  "value": {
                    "constant": "string"
                  }
                }
              ]
            }
          }
        ],
        "form": {
          "fields": [
            {
              "id": "string",
              "asset": {
                "label": "string",
                "isRequired": true,
                "presetOptions": {
                  "options": [
                    {
                      "rid": "string"
                    }
                  ],
                  "defaultOption": {
                    "rid": "string"
                  }
                }
              },
              "label": "string",
              "description": "string"
            }
          ]
        },
        "attachments": [
          "string"
        ]
      }
    },
    "NodeList": {
      "type": "object",
      "properties": {
        "nodeIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "A list of node IDs."
    },
    "ParseNestedProcedureRequest": {
      "type": "object",
      "properties": {
        "nestedProcedure": {
          "$ref": "#/definitions/NestedProcedure"
        },
        "includeDisplayGraph": {
          "type": "boolean",
          "description": "If true, the display graph will be included in the response. Default is false."
        }
      },
      "example": {
        "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
      }
    },
    "ParseNestedProcedureResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        },
        "displayGraph": {
          "$ref": "#/definitions/ProcedureDisplayGraph",
          "title": "Included if include_display_graph was set to true"
        }
      }
    },
    "PresetAssetFieldOptions": {
      "type": "object",
      "properties": {
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AssetReference"
          },
          "description": "The list of options to choose from."
        },
        "defaultOption": {
          "$ref": "#/definitions/AssetReference",
          "description": "If set, this option will be selected by default, if it is present in the options. The user can still select a different option."
        }
      },
      "description": "A limited set of options to choose from, with an optional default option."
    },
    "PresetDatasetFieldOptions": {
      "type": "object",
      "properties": {
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/DatasetReference"
          },
          "description": "The list of options to choose from."
        },
        "defaultOption": {
          "$ref": "#/definitions/DatasetReference",
          "description": "If set, this option will be selected by default, if it is present in the options. The user can still select a different option."
        }
      },
      "description": "A limited set of options to choose from, with an optional default option."
    },
    "Procedure": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "description": "The RID of the procedure."
        },
        "commit": {
          "type": "string",
          "description": "The commit ID of this version of the procedure."
        },
        "metadata": {
          "$ref": "#/definitions/ProcedureMetadata",
          "description": "Metadata about the procedure."
        },
        "state": {
          "$ref": "#/definitions/ProcedureState",
          "description": "The versioned state of the procedure."
        }
      },
      "title": "A procedure describes a series of steps to be performed, typically in a specific order,"
    },
    "ProcedureDisplayGraph": {
      "type": "object",
      "properties": {
        "topLevelNodes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Sections or steps that do not belong to any parent sections. This is ordered in a topological ordering of steps."
        },
        "sectionToSortedChildren": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NodeList"
          },
          "title": "Map of section node IDs to their topologically sorted children"
        }
      },
      "description": "A simpler representation of the procedure graph that is used for display in a UI."
    },
    "ProcedureMetadata": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "isArchived": {
          "type": "boolean"
        },
        "isPublished": {
          "type": "boolean"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        },
        "createdBy": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "updatedBy": {
          "type": "string"
        },
        "workspace": {
          "type": "string"
        },
        "executionCount": {
          "type": "string",
          "format": "int64",
          "description": "Number of executions created from this procedure. Only populated by search."
        }
      },
      "description": "Metadata about a procedure that is not part of the versioned state."
    },
    "ProcedureNode": {
      "type": "object",
      "properties": {
        "section": {
          "$ref": "#/definitions/ProcedureSectionNode",
          "description": "A section node provides a visual grouping of other sections and steps."
        },
        "step": {
          "$ref": "#/definitions/ProcedureStepNode",
          "description": "A step node represents a step in the procedure. It serves as a \"template\" for the ExecutionStep that will be created during procedure execution."
        }
      },
      "description": "A procedure node is either a section or a step.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "section",
            "step"
          ],
          "required": true
        }
      ],
      "example": {
        "section": {
          "id": "string",
          "title": "string",
          "description": "string"
        }
      }
    },
    "ProcedureSearchQuery": {
      "type": "object",
      "properties": {
        "searchText": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "property": {
          "$ref": "#/definitions/types.Property"
        },
        "and": {
          "$ref": "#/definitions/ProcedureSearchAndQuery"
        },
        "or": {
          "$ref": "#/definitions/ProcedureSearchOrQuery"
        },
        "workspace": {
          "type": "string"
        },
        "createdBy": {
          "type": "string"
        },
        "isArchived": {
          "type": "boolean"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "searchText",
            "label",
            "property",
            "and",
            "or",
            "workspace",
            "createdBy",
            "isArchived"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "searchText": "string"
      }
    },
    "ProcedureSearchAndQuery": {
      "type": "object",
      "properties": {
        "queries": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProcedureSearchQuery"
          }
        }
      }
    },
    "ProcedureSearchOrQuery": {
      "type": "object",
      "properties": {
        "queries": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProcedureSearchQuery"
          }
        }
      }
    },
    "ProcedureSectionNode": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for this node in the procedure graph."
        },
        "title": {
          "type": "string",
          "title": "Title of this section",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "description": {
          "type": "string",
          "title": "Optional long-form description for this section"
        }
      },
      "description": "A procedure section node visually groups other sections and steps."
    },
    "ProcedureState": {
      "type": "object",
      "properties": {
        "globalFields": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FormField"
          }
        },
        "newGlobalFields": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FormField"
          },
          "description": "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": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ProcedureNode"
          },
          "description": "A map from node ID to the node."
        },
        "sectionEdges": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NodeList"
          },
          "description": "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": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NodeList"
          },
          "title": "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"
        }
      },
      "description": "ProcedureState is the versioned state of a procedure template."
    },
    "ProcedureStepContent": {
      "type": "object",
      "properties": {
        "form": {
          "$ref": "#/definitions/FormStep"
        },
        "startIngest": {
          "$ref": "#/definitions/StartIngestStep"
        },
        "selectOrCreateAsset": {
          "$ref": "#/definitions/SelectOrCreateAssetStep"
        },
        "wait": {
          "$ref": "#/definitions/WaitStep",
          "description": "..."
        }
      },
      "description": "The content of a procedure step. This typically involves some form of user interaction/input.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "form",
            "startIngest",
            "selectOrCreateAsset",
            "wait"
          ],
          "required": true
        }
      ],
      "example": {
        "form": {
          "fields": [
            {
              "id": "string",
              "asset": {
                "label": "string",
                "isRequired": true,
                "presetOptions": {
                  "options": [
                    {
                      "rid": "string"
                    }
                  ],
                  "defaultOption": {
                    "rid": "string"
                  }
                }
              },
              "label": "string",
              "description": "string"
            }
          ]
        }
      }
    },
    "ProcedureStepNode": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for this node in the procedure graph."
        },
        "title": {
          "type": "string",
          "title": "Title of this step",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "content": {
          "$ref": "#/definitions/ProcedureStepContent",
          "description": "The content of this step."
        },
        "description": {
          "type": "string",
          "title": "Optional long-form description for this step"
        },
        "isRequired": {
          "type": "boolean",
          "title": "is_required defaults to false, meaning that the step may be skipped"
        },
        "autoStart": {
          "$ref": "#/definitions/AutoStartConfig",
          "description": "Configuration for if and how the step should automatically transition from NOT_STARTED to IN_PROGRESS By default, this will be `all_parents`."
        },
        "initialAutoProceedConfig": {
          "$ref": "#/definitions/AutoProceedConfig",
          "description": "Configuration for if and how the step should automatically submit the step contents when requirements are met. By default, this will be `disabled`."
        },
        "successCondition": {
          "$ref": "#/definitions/SuccessCondition",
          "description": "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": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/CompletionActionConfig"
          },
          "description": "Configuration for the actions to take when the step transitions to a completed state (SUCCEEDED, ERRORED, SKIPPED) By default, there are no actions."
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Optional attachments for the step description"
        }
      },
      "description": "A procedure step node represents a step in the procedure."
    },
    "CommitBody": {
      "type": "object",
      "properties": {
        "branch": {
          "type": "string"
        },
        "latestCommitOnBranch": {
          "type": "string",
          "description": "If present, this commit ID must match the latest commit on the branch for the commit to succeed."
        },
        "message": {
          "type": "string"
        },
        "state": {
          "$ref": "#/definitions/ProcedureState"
        }
      },
      "example": {
        "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>"
              ]
            }
          }
        }
      }
    },
    "MergeToMainBody": {
      "type": "object",
      "properties": {
        "branch": {
          "type": "string"
        },
        "latestCommitOnMain": {
          "type": "string",
          "description": "If present, this commit ID must match the latest commit on main for the merge to succeed."
        },
        "message": {
          "type": "string"
        }
      },
      "required": [
        "message"
      ],
      "example": {
        "message": "<message>"
      }
    },
    "SaveWorkingStateBody": {
      "type": "object",
      "properties": {
        "branch": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "latestCommitOnBranch": {
          "type": "string",
          "description": "If present, this commit ID must match the latest commit on the branch for the save to succeed."
        },
        "state": {
          "$ref": "#/definitions/ProcedureState"
        }
      },
      "example": {
        "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>"
              ]
            }
          }
        }
      }
    },
    "UpdateProcedureMetadataBody": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "$ref": "#/definitions/LabelUpdateWrapper"
        },
        "properties": {
          "$ref": "#/definitions/PropertyUpdateWrapper"
        },
        "isArchived": {
          "type": "boolean"
        },
        "isPublished": {
          "type": "boolean"
        }
      },
      "example": {
        "title": "<title>",
        "description": "<description>",
        "labels": {
          "labels": [
            "<labels>"
          ]
        },
        "properties": {
          "properties": {
            "<key>": "<value>"
          }
        },
        "isArchived": true,
        "isPublished": true
      }
    },
    "PropertyReference": {
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringReference"
        },
        "value": {
          "$ref": "#/definitions/StringReference"
        }
      }
    },
    "RunReference": {
      "type": "object",
      "properties": {
        "fieldId": {
          "type": "string",
          "description": "The field id that will contain a RunRid value. The execution will fail if the field is not set properly."
        }
      },
      "title": "A reference to a single run",
      "x-oneofs": [
        {
          "fields": [
            "fieldId"
          ],
          "required": true
        }
      ],
      "example": {
        "fieldId": "string"
      }
    },
    "SaveWorkingStateResponse": {
      "type": "object",
      "properties": {
        "procedure": {
          "$ref": "#/definitions/Procedure"
        }
      }
    },
    "SearchProceduresRequest": {
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ProcedureSearchQuery"
        },
        "sortOptions": {
          "$ref": "#/definitions/SearchProceduresSortOptions",
          "title": "If not set, default is to sort by created_at descending"
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "description": "Page sizes greater than 1_000 will be rejected. Default pageSize is 100.",
          "minimum": 1,
          "maximum": 1000,
          "x-constraints": [
            "From 1 to 1,000."
          ]
        },
        "nextPageToken": {
          "type": "string"
        }
      },
      "example": {
        "query": {
          "searchText": "<search text>"
        },
        "sortOptions": {
          "isDescending": true,
          "sortField": "SEARCH_PROCEDURES_SORT_FIELD_NAME"
        },
        "pageSize": 1,
        "nextPageToken": "<next page token>"
      }
    },
    "SearchProceduresResponse": {
      "type": "object",
      "properties": {
        "procedureMetadata": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProcedureMetadata"
          }
        },
        "nextPageToken": {
          "type": "string"
        }
      }
    },
    "SearchProceduresSortField": {
      "type": "string",
      "enum": [
        "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED",
        "SEARCH_PROCEDURES_SORT_FIELD_NAME",
        "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT",
        "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT"
      ],
      "default": "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED",
      "example": "SEARCH_PROCEDURES_SORT_FIELD_NAME"
    },
    "SearchProceduresSortOptions": {
      "type": "object",
      "properties": {
        "isDescending": {
          "type": "boolean",
          "title": "Defaults to true (descending)"
        },
        "sortField": {
          "$ref": "#/definitions/SearchProceduresSortField",
          "title": "Defaults to CREATED_AT"
        }
      }
    },
    "SelectOrCreateAssetStep": {
      "type": "object",
      "properties": {
        "assetOutputFieldId": {
          "type": "string",
          "description": "If present, the AssetRid for this step will be available in outputs under this field ID."
        },
        "createAssetParameters": {
          "$ref": "#/definitions/CreateAssetParameters",
          "description": "If present, the user will be given the option to create a new asset restricted by these parameters."
        },
        "presetOptions": {
          "$ref": "#/definitions/PresetAssetFieldOptions",
          "description": "The asset must be chosen from preset options.\n\nThe asset must be chosen from a saved view. SavedViewRid saved_view = 4;"
        }
      },
      "description": "The user will be prompted to select an existing asset or create a new asset.",
      "x-oneofs": [
        {
          "fields": [
            "presetOptions"
          ],
          "required": false
        }
      ],
      "example": {
        "assetOutputFieldId": "string",
        "createAssetParameters": {
          "title": {
            "constant": "string"
          },
          "description": {
            "constant": "string"
          },
          "labels": {
            "constant": [
              "string"
            ],
            "userInput": {},
            "references": [
              {
                "constant": "string"
              }
            ]
          },
          "properties": {
            "constant": {
              "key": "string"
            },
            "userInput": {
              "requiredKeys": [
                "string"
              ],
              "suggestedKeys": [
                "string"
              ]
            },
            "references": [
              {
                "key": {
                  "constant": "string"
                },
                "value": {
                  "constant": "string"
                }
              }
            ]
          },
          "dataScopes": {
            "key": {
              "newDataset": {},
              "seriesTags": {
                "constant": {
                  "key": "string"
                },
                "userInput": {
                  "requiredKeys": [
                    "string"
                  ],
                  "suggestedKeys": [
                    "string"
                  ]
                },
                "references": [
                  {
                    "tagName": {
                      "constant": "string"
                    },
                    "tagValue": {
                      "constant": "string"
                    }
                  }
                ]
              }
            }
          }
        },
        "presetOptions": {
          "options": [
            {
              "rid": "string"
            }
          ],
          "defaultOption": {
            "rid": "string"
          }
        }
      }
    },
    "CreateAssetParameters": {
      "type": "object",
      "properties": {
        "title": {
          "$ref": "#/definitions/TitleParameter",
          "description": "If set, the new asset will be created with this title. Otherwise, the user should be prompted to put in a custom title."
        },
        "description": {
          "$ref": "#/definitions/DescriptionParameter",
          "description": "If set, the new asset will be created with this description."
        },
        "labels": {
          "$ref": "#/definitions/LabelsParameter",
          "description": "If set, the new asset will be created with these labels."
        },
        "properties": {
          "$ref": "#/definitions/PropertiesParameter",
          "description": "If set, the new asset will be created with these properties."
        },
        "dataScopes": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/DataScopeParameter"
          },
          "description": "Data scopes for the new asset. The keys are the ref names of the data scopes."
        }
      }
    },
    "DataScopeParameter": {
      "type": "object",
      "properties": {
        "newDataset": {
          "$ref": "#/definitions/NewDataset",
          "description": "Creates a new empty dataset."
        },
        "existingDataset": {
          "$ref": "#/definitions/ExistingDataset",
          "title": "Use existing dataset"
        },
        "seriesTags": {
          "$ref": "#/definitions/TagsParameter"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "newDataset",
            "existingDataset"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of `newDataset`, `existingDataset`.",
      "example": {
        "newDataset": {},
        "seriesTags": {
          "constant": {
            "key": "string"
          },
          "userInput": {
            "requiredKeys": [
              "string"
            ],
            "suggestedKeys": [
              "string"
            ]
          },
          "references": [
            {
              "tagName": {
                "constant": "string"
              },
              "tagValue": {
                "constant": "string"
              }
            }
          ]
        }
      }
    },
    "ExistingDataset": {
      "type": "object",
      "properties": {
        "presetOptions": {
          "$ref": "#/definitions/PresetDatasetFieldOptions",
          "description": "The dataset must be chosen from preset options."
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "presetOptions"
          ],
          "required": false
        }
      ],
      "example": {
        "presetOptions": {
          "options": [
            {
              "rid": "string"
            }
          ],
          "defaultOption": {
            "rid": "string"
          }
        }
      }
    },
    "NewDataset": {
      "type": "object",
      "title": "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"
    },
    "DescriptionParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "string",
          "description": "The description is always a constant string."
        },
        "fieldId": {
          "type": "string",
          "description": "The description is taken from a field in the current or previous steps.\n\nCan allow for free-form / guardrailed (templated?) user input."
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "constant",
            "fieldId"
          ],
          "required": false
        }
      ],
      "description": "Set at most one of the fields below.",
      "example": {
        "constant": "string"
      }
    },
    "LabelsParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Labels to always apply on the new asset."
        },
        "userInput": {
          "$ref": "#/definitions/LabelsParameter.UserInputOptions",
          "description": "If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels to provide the user with existing labels to choose from."
        },
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/StringReference"
          },
          "description": "Additional labels, each resolved from a constant or a field reference. These should supplement `constant` and also apply to the new asset."
        }
      }
    },
    "LabelsParameter.UserInputOptions": {
      "type": "object",
      "title": "Can allow for more configuration - e.g. default set of starting labels? (which can be overrideen)"
    },
    "PropertiesParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Properties to always apply on the new asset."
        },
        "userInput": {
          "$ref": "#/definitions/PropertiesParameter.UserInputOptions",
          "description": "If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels to provide the user with existing property keys/values to choose from."
        },
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/PropertyReference"
          },
          "description": "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": {
      "type": "object",
      "properties": {
        "requiredKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Each property key here must have a value provided by the user for asset creation."
        },
        "suggestedKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?",
          "title": "Each property key here will be suggested to the user but is not required for asset creation"
        }
      }
    },
    "TitleParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "string",
          "description": "The title as a string value."
        },
        "fieldId": {
          "type": "string",
          "description": "The title is taken from a field in the current or previous steps."
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "constant",
            "fieldId"
          ],
          "required": false
        }
      ],
      "description": "Set at most one of the fields below.",
      "example": {
        "constant": "string"
      }
    },
    "SendNotificationConfig": {
      "type": "object",
      "properties": {
        "integrations": {
          "$ref": "#/definitions/MultiIntegrationReference",
          "description": "The integration(s) to use to send the notification."
        },
        "title": {
          "$ref": "#/definitions/StringReference",
          "description": "The optional title of the notification (length constrained to 130 chars by the IntegrationService)."
        },
        "message": {
          "$ref": "#/definitions/StringReference",
          "description": "The message body of the notification.\n\nWe 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."
        }
      },
      "description": "An action to send a notification to one or more integrations when a step is completed."
    },
    "SingleEnumField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this options field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "options": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "List of predefined options that can be selected by the user"
        },
        "buttons": {
          "$ref": "#/definitions/EnumFieldButtonsInputType",
          "title": "renders a radio button component"
        },
        "dropdown": {
          "$ref": "#/definitions/EnumFieldMenuInputType",
          "title": "renders a typical drop down menu"
        },
        "allowCustom": {
          "type": "boolean",
          "description": "Whether a user can create and specify a new custom option not in the list of options."
        },
        "isRequired": {
          "type": "boolean",
          "title": "Whether a selection is required"
        }
      },
      "description": "A field to capture one of several options.\n\nSet exactly one of `buttons`, `dropdown`.",
      "x-oneofs": [
        {
          "fields": [
            "buttons",
            "dropdown"
          ],
          "required": true
        }
      ],
      "example": {
        "label": "string",
        "options": [
          "string"
        ],
        "buttons": {},
        "allowCustom": true,
        "isRequired": true
      }
    },
    "StartIngestStep": {
      "type": "object",
      "properties": {
        "asset": {
          "$ref": "#/definitions/AssetReference",
          "description": "The asset to ingest data into."
        },
        "refName": {
          "$ref": "#/definitions/StringReference",
          "description": "The data scope within the asset to ingest data into."
        },
        "ingestTypeConfig": {
          "$ref": "#/definitions/IngestTypeConfig",
          "description": "Restrict and pre-configure the type of ingest that can be started."
        },
        "ingestJobOutputFieldId": {
          "type": "string",
          "description": "If present, the ingest job RID for this step will be available in outputs under this field ID."
        }
      },
      "description": "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."
    },
    "IngestTypeConfig": {
      "type": "object",
      "properties": {
        "containerizedExtractor": {
          "$ref": "#/definitions/ContainerizedExtractorIngestConfig",
          "description": "The ingest job must be a containerized extractor ingest."
        },
        "dataflash": {
          "$ref": "#/definitions/DataflashIngestConfig"
        },
        "csv": {
          "$ref": "#/definitions/CsvIngestConfig"
        },
        "parquet": {
          "$ref": "#/definitions/ParquetIngestConfig"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "containerizedExtractor",
            "dataflash",
            "csv",
            "parquet"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "containerizedExtractor": {
          "rid": "string",
          "fileInputBindings": [
            {
              "environmentVariable": "string",
              "fileReference": {
                "fieldId": "string"
              }
            }
          ],
          "environmentInputBindings": [
            {
              "environmentVariable": "string",
              "value": {
                "constant": "string"
              }
            }
          ],
          "additionalFileTagBindings": [
            {
              "tagName": "string",
              "stringValue": {
                "constant": "string"
              }
            }
          ]
        }
      }
    },
    "ContainerizedExtractorIngestConfig": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "description": "The ingest job must use this specific containerized extractor."
        },
        "fileInputBindings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileInputBinding"
          },
          "description": "The step will prompt the user to upload a file for each extractor input that doesn't have a FileInputBinding."
        },
        "environmentInputBindings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/EnvironmentInputBinding"
          },
          "description": "String parameter bindings to pass to the containerized extractor as environment variables."
        },
        "additionalFileTagBindings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AdditionalFileTagBinding"
          },
          "description": "Additional file tags to apply to containerized extractor outputs."
        }
      }
    },
    "CsvIngestConfig": {
      "type": "object",
      "properties": {
        "timestampSeriesName": {
          "$ref": "#/definitions/StringReference",
          "title": "header for timestamp column"
        },
        "timestampType": {
          "$ref": "#/definitions/TimestampTypeParameter"
        },
        "fileInput": {
          "$ref": "#/definitions/FileReference",
          "title": "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"
        }
      }
    },
    "DataflashIngestConfig": {
      "type": "object",
      "properties": {
        "fileInput": {
          "$ref": "#/definitions/FileReference",
          "title": "File to ingest into the dataset. Should be a dataflash `.bin` file. Uses tags configured on the asset data scope as additional file tags"
        }
      }
    },
    "ParquetIngestConfig": {
      "type": "object",
      "properties": {
        "timestampSeriesName": {
          "$ref": "#/definitions/StringReference",
          "title": "header for timestamp column"
        },
        "timestampType": {
          "$ref": "#/definitions/TimestampTypeParameter"
        },
        "fileInput": {
          "$ref": "#/definitions/FileReference",
          "title": "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"
        }
      }
    },
    "StringReference": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "string",
          "title": "The value is a constant string"
        },
        "fieldId": {
          "type": "string",
          "description": "The value is taken from a field in the current or previous steps.\n\nstring template = 3;"
        }
      },
      "title": "A reference to a single string value",
      "x-oneofs": [
        {
          "fields": [
            "constant",
            "fieldId"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "constant": "string"
      }
    },
    "SuccessCondition": {
      "type": "object",
      "properties": {
        "and": {
          "$ref": "#/definitions/AndSuccessCondition"
        },
        "timer": {
          "$ref": "#/definitions/TimerSuccessCondition"
        },
        "ingestJob": {
          "$ref": "#/definitions/IngestJobSuccessCondition"
        },
        "channelValidation": {
          "$ref": "#/definitions/ChannelValidationSuccessCondition"
        },
        "webhook": {
          "$ref": "#/definitions/WebhookSuccessCondition",
          "title": "OrSuccessCondition or = 6;"
        }
      },
      "description": "The condition that must be met for a step to succeed after submitting its contents.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "and",
            "timer",
            "ingestJob",
            "channelValidation",
            "webhook"
          ],
          "required": true
        }
      ],
      "example": {
        "and": {
          "conditions": []
        }
      }
    },
    "TagReference": {
      "type": "object",
      "properties": {
        "tagName": {
          "$ref": "#/definitions/StringReference"
        },
        "tagValue": {
          "$ref": "#/definitions/StringReference"
        }
      }
    },
    "TagsParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags to always filter to on the dataset or asset data scope."
        },
        "userInput": {
          "$ref": "#/definitions/TagsParameter.UserInputOptions",
          "description": "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": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/TagReference"
          },
          "description": "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": {
      "type": "object",
      "properties": {
        "requiredKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Each tag key here must have a value provided by the user"
        },
        "suggestedKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?",
          "title": "Each tag key here will be suggested to the user but is not required"
        }
      }
    },
    "TextField": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "title": "Label to show for this text field deprecated in favor of label directly on FormField",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "simple": {
          "$ref": "#/definitions/TextFieldSimpleInputType",
          "title": "renders a simple html text input field"
        },
        "markdown": {
          "$ref": "#/definitions/TextFieldMarkdownInputType",
          "title": "renders a Markdown editor for longer inputs with formatting capabilities"
        },
        "minLength": {
          "type": "integer",
          "format": "int64",
          "title": "if set, validate that input is at least this many characters `is_required` can be achieved by setting `min_length >= 1`",
          "minimum": 0,
          "x-constraints": [
            "At least 0."
          ]
        },
        "maxLength": {
          "type": "integer",
          "format": "int64",
          "title": "if set, validate that input is at most this many characters",
          "minimum": 0,
          "x-constraints": [
            "At least 0."
          ]
        },
        "pattern": {
          "type": "string",
          "title": "if set, validate that input matches this regular expression pattern",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "patternDescription": {
          "type": "string",
          "title": "if set, show this message on pattern match failure instead of a generic error",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        }
      },
      "description": "A field to capture a string value.\n\nSet exactly one of `simple`, `markdown`. pattern must be present if pattern_description is present.",
      "x-oneofs": [
        {
          "fields": [
            "simple",
            "markdown"
          ],
          "required": true
        }
      ],
      "example": {
        "label": "string",
        "simple": {},
        "minLength": 0,
        "maxLength": 0,
        "pattern": "string",
        "patternDescription": "string"
      }
    },
    "TextFieldMarkdownInputType": {
      "type": "object"
    },
    "TextFieldSimpleInputType": {
      "type": "object"
    },
    "TimeRangeReference": {
      "type": "object",
      "properties": {
        "fromIngestJobs": {
          "$ref": "#/definitions/IngestJobList",
          "description": "The time range is the union of the time ranges ingested by all the specified ingest jobs."
        },
        "literal": {
          "$ref": "#/definitions/RangeLiteral"
        }
      },
      "title": "A reference to a time range",
      "x-oneofs": [
        {
          "fields": [
            "fromIngestJobs",
            "literal"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "fromIngestJobs": {
          "fieldIds": [
            "string"
          ]
        }
      }
    },
    "IngestJobList": {
      "type": "object",
      "properties": {
        "fieldIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field ids that contain IngestJobRids.",
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "RangeLiteral": {
      "type": "object",
      "properties": {
        "start": {
          "$ref": "#/definitions/TimestampReference",
          "description": "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": {
          "$ref": "#/definitions/TimestampReference"
        }
      }
    },
    "TimerSuccessCondition": {
      "type": "object",
      "properties": {
        "durationSeconds": {
          "type": "integer",
          "format": "int32",
          "description": "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.",
          "minimum": 0,
          "x-constraints": [
            "At least 0."
          ]
        }
      },
      "description": "A timer condition that will succeed the step after a specified duration."
    },
    "TimestampReference": {
      "type": "object",
      "properties": {
        "fieldId": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "format": "date-time",
          "title": "A literal/constant timestamp"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "fieldId",
            "constant"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "fieldId": "string"
      }
    },
    "TimestampTypeParameter": {
      "type": "object",
      "properties": {
        "constant": {
          "$ref": "#/definitions/TimestampType",
          "description": "Timestamp type to always use for ingest."
        },
        "userInput": {
          "$ref": "#/definitions/TimestampTypeParameter.UserInputOptions",
          "description": "If specified, allows user to enter timestamp metadata based on input options."
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "constant",
            "userInput"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "constant": {
          "relative": {
            "timeUnit": "string",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      }
    },
    "TimestampTypeParameter.UserInputOptions": {
      "type": "object",
      "title": "Can allow for more configuration"
    },
    "UnarchiveProceduresRequest": {
      "type": "object",
      "properties": {
        "procedureRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "example": {
        "procedureRids": [
          "<procedure rids>"
        ]
      }
    },
    "UnarchiveProceduresResponse": {
      "type": "object",
      "properties": {
        "procedureRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "UpdateProcedureMetadataResponse": {
      "type": "object",
      "properties": {
        "procedureMetadata": {
          "$ref": "#/definitions/ProcedureMetadata"
        }
      },
      "required": [
        "procedureMetadata"
      ]
    },
    "UpdateRunConfig": {
      "type": "object",
      "properties": {
        "runs": {
          "$ref": "#/definitions/MultiRunReference",
          "title": "The run(s) to update. Typically but not limited to a reference to a run created earlier in the procedure"
        },
        "name": {
          "$ref": "#/definitions/StringReference",
          "description": "Optional PATCH-style updates. Only set fields that should change. If unset, the run will not be updated."
        },
        "description": {
          "$ref": "#/definitions/StringReference"
        },
        "timeRange": {
          "$ref": "#/definitions/TimeRangeReference"
        },
        "labels": {
          "$ref": "#/definitions/MultiStringReference"
        },
        "properties": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/PropertyReference"
          }
        },
        "strictOverwrite": {
          "type": "boolean",
          "description": "When true, time fields overwrite existing values. When false, start only moves earlier, end only moves later (aligns with runs API strictOverwrite)."
        }
      },
      "description": "An action to update an existing run when a step is completed (e.g. set end time to previous step end time).\n\noption (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\" };",
      "required": [
        "runs"
      ]
    },
    "WaitStep": {
      "type": "object"
    },
    "WebhookDeliveryConfig": {
      "type": "object",
      "properties": {
        "maxRetries": {
          "type": "integer",
          "format": "int32",
          "title": "Maximum delivery attempts (default: 3, max: 10)",
          "minimum": 0,
          "maximum": 10,
          "x-constraints": [
            "From 0 to 10."
          ]
        },
        "retryIntervalSeconds": {
          "type": "string",
          "format": "int64",
          "title": "Initial retry interval seconds (default: 15, min: 5, max: 300)",
          "minimum": 5,
          "maximum": 300,
          "x-constraints": [
            "From 5 to 300."
          ]
        },
        "exponentialBackoff": {
          "type": "boolean",
          "title": "Use exponential backoff (default: true)"
        },
        "maxRetryIntervalSeconds": {
          "type": "string",
          "format": "int64",
          "title": "Max retry interval seconds (default: 300, max: 3600)",
          "minimum": 5,
          "maximum": 3600,
          "x-constraints": [
            "From 5 to 3,600."
          ]
        },
        "timeoutSeconds": {
          "type": "string",
          "format": "int64",
          "title": "Overall timeout seconds (default: 600, max: 86400)",
          "minimum": 1,
          "maximum": 86400,
          "x-constraints": [
            "From 1 to 86,400."
          ]
        }
      },
      "description": "Configuration for webhook delivery retry logic and timeouts."
    },
    "WebhookSuccessCondition": {
      "type": "object",
      "properties": {
        "integrationRid": {
          "type": "string",
          "title": "RID reference to a WebhookIntegration (the advanced integration type with HMAC signing)",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "deliveryConfig": {
          "$ref": "#/definitions/WebhookDeliveryConfig",
          "description": "Webhook delivery configuration. If not provided, server uses documented defaults."
        },
        "eventType": {
          "type": "string",
          "title": "Event type to send (e.g., \"procedure.step_waiting\")",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "payloadTemplate": {
          "type": "string",
          "description": "Advanced features:\n- Conditionals: {{#if environment}}production mode{{/if}}\n- Loops: {{#each tags}}{{this}}{{/each}}\n- Comparisons: {{#if (eq priority \"HIGH\")}}urgent{{/if}}\n- Default values: {{default environment \"unknown\"}}\n\nExample 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}} }\n\nVariables 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.",
          "title": "JSON payload template using Handlebars syntax (https://handlebarsjs.com/) Supports variable references using {{variable_name}} syntax:\n- {{execution_rid}} - Procedure execution RID\n- {{step_id}} - Current step ID\n- {{step_name}} - Current step name/title\n- {{procedure_name}} - Procedure name\n- {{field_id}} - Any global form field value (e.g., {{environment}}, {{approval_level}})\n- {{asset_rid}} - Asset RID if step has asset context\n- {{asset_name}} - Asset name if step has asset context",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        }
      },
      "description": "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.\n\nFailure behavior:\n- 4xx responses: Permanent failure, no retry (CLIENT_ERROR)\n- 5xx responses: Retry with exponential backoff until max_retries (SERVER_ERROR_MAX_RETRIES_EXCEEDED)\n- Network errors: Retry until max_retries (NETWORK_ERROR_MAX_RETRIES_EXCEEDED)\n- Timeout: Retry until timeout_seconds exceeded (OVERALL_TIMEOUT_EXCEEDED)\n- Redirects: Followed automatically, fails if redirect loop detected (REDIRECT_LOOP)"
    },
    "WorkbookTemplateReference": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "description": "A constant workbook template RID.\n\nstring field_id = 2;"
        }
      },
      "title": "A reference to a single workbook template",
      "x-oneofs": [
        {
          "fields": [
            "rid"
          ],
          "required": true
        }
      ],
      "example": {
        "rid": "string"
      }
    },
    "LabelUpdateWrapper": {
      "type": "object",
      "properties": {
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "Wrapper classes to allow for optional fields on update requests"
    },
    "types.Property": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "PropertyUpdateWrapper": {
      "type": "object",
      "properties": {
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "AbsoluteTimestamp": {
      "type": "object",
      "properties": {
        "iso8601": {
          "$ref": "#/definitions/Iso8601Timestamp"
        },
        "epochOfTimeUnit": {
          "$ref": "#/definitions/EpochTimestamp"
        },
        "customFormat": {
          "$ref": "#/definitions/CustomTimestamp"
        }
      },
      "description": "Absolute timestamp parser variants.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "iso8601",
            "epochOfTimeUnit",
            "customFormat"
          ],
          "required": true
        }
      ],
      "example": {
        "iso8601": {}
      }
    },
    "CustomTimestamp": {
      "type": "object",
      "properties": {
        "format": {
          "type": "string",
          "description": "The format string should be in the format of the `DateTimeFormatter` class in Java."
        },
        "defaultYear": {
          "type": "integer",
          "format": "int32",
          "description": "Default year is accepted as an optional field for cases like IRIG time format. Will be overridden by year in time format."
        },
        "defaultDayOfYear": {
          "type": "integer",
          "format": "int32",
          "description": "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.",
          "minimum": 1,
          "maximum": 366,
          "x-constraints": [
            "From 1 to 366."
          ]
        }
      },
      "description": "Absolute timestamps parsed with a user-supplied format string."
    },
    "EpochTimestamp": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "type": "string",
          "description": "Unit in which epoch values are expressed (e.g. SECONDS, MILLISECONDS)."
        }
      },
      "description": "Absolute timestamps expressed as an integer count of some time unit since the Unix epoch."
    },
    "Iso8601Timestamp": {
      "type": "object",
      "description": "Absolute timestamps serialized in ISO-8601 form. No additional parser configuration is needed."
    },
    "RelativeTimestamp": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "type": "string",
          "description": "Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias."
        },
        "offset": {
          "type": "string",
          "format": "date-time",
          "description": "Starting timestamp to use when indexing the file."
        }
      },
      "description": "Relative timestamp parser: interprets each row's timestamp as an offset from a fixed origin."
    },
    "TimestampType": {
      "type": "object",
      "properties": {
        "relative": {
          "$ref": "#/definitions/RelativeTimestamp"
        },
        "absolute": {
          "$ref": "#/definitions/AbsoluteTimestamp"
        }
      },
      "description": "Selects between relative-offset and absolute-timestamp parsing strategies.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "relative",
            "absolute"
          ],
          "required": true
        }
      ],
      "example": {
        "relative": {
          "timeUnit": "string",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    }
  },
  "securityDefinitions": {
    "ApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization",
      "description": "Your API key as a bearer token: `Authorization: Bearer <api key>`."
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ]
}
