{
  "swagger": "2.0",
  "info": {
    "title": "Data connector service",
    "version": "0.1507.0",
    "description": "Send your API key as a bearer token: `Authorization: Bearer <api key>`."
  },
  "tags": [
    {
      "name": "DataConnectorService",
      "x-displayName": "Data connector service",
      "description": "Service for managing data connectors to external data sources.",
      "x-errors": [
        {
          "status": 404,
          "errorCode": "NOT_FOUND",
          "errorName": "NominalDataConnectorV1:DataConnectorErrorTypeConnectorNotFound",
          "message": "Data connector not found"
        },
        {
          "status": 403,
          "errorCode": "PERMISSION_DENIED",
          "errorName": "NominalDataConnectorV1:DataConnectorErrorTypeConnectorNotAuthorized",
          "message": "Data connector not found"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "NominalDataConnectorV1:DataConnectorErrorTypeTargetDatasetNotInWorkspace",
          "message": "Data connector not found"
        }
      ]
    }
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/data-connector/v1/batch-get": {
      "post": {
        "operationId": "DataConnectorService_BatchGetDataConnectors",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/BatchGetDataConnectorsResponse"
            },
            "x-example": {
              "dataConnectors": [
                {
                  "dataConnectorRid": "<data connector rid>",
                  "name": "<name>",
                  "description": "<description>",
                  "connectionDetails": {
                    "opcUa": {
                      "uri": "<uri>",
                      "authenticationConfig": {
                        "anonymous": {}
                      },
                      "scrapingConfig": {
                        "nodeExplorationConfig": {
                          "opcUaTraversalConfig": {
                            "rootNodes": [
                              {
                                "namespace": 1,
                                "identifier": {
                                  "numeric": 1
                                }
                              }
                            ],
                            "skipNodes": [
                              {
                                "namespace": 1,
                                "identifier": {
                                  "numeric": 1
                                }
                              }
                            ],
                            "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                          }
                        },
                        "unitNodeName": "<unit node name>",
                        "channelNamingConvention": {
                          "nodeId": {}
                        },
                        "overrideHost": true,
                        "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                        "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                        "timestampHandling": {
                          "server": {}
                        },
                        "dataChangeFilter": {
                          "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                          "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                          "deadbandValue": 1
                        },
                        "dataAcquisitionConfig": {
                          "subscription": {
                            "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                            "dataChangeFilter": {
                              "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                              "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                              "deadbandValue": 1
                            }
                          }
                        }
                      }
                    }
                  },
                  "workspaceRid": "<workspace rid>",
                  "targetDatasetRid": "<target dataset rid>",
                  "createdAt": "2026-01-01T00:00:00Z"
                }
              ]
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BatchGetDataConnectorsRequest"
            },
            "x-example": {
              "dataConnectorRids": [
                "<data connector rids>"
              ]
            }
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Batch get data connectors",
        "description": "Gets the settings for a batch of data connectors. Connectors in workspaces the caller lacks workspace:view on are omitted rather than failing the call."
      }
    },
    "/data-connector/v1/connector": {
      "post": {
        "operationId": "DataConnectorService_CreateDataConnector",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/CreateDataConnectorResponse"
            },
            "x-example": {
              "dataConnector": {
                "dataConnectorRid": "<data connector rid>",
                "name": "<name>",
                "description": "<description>",
                "connectionDetails": {
                  "opcUa": {
                    "uri": "<uri>",
                    "authenticationConfig": {
                      "anonymous": {}
                    },
                    "scrapingConfig": {
                      "nodeExplorationConfig": {
                        "opcUaTraversalConfig": {
                          "rootNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "skipNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                        }
                      },
                      "unitNodeName": "<unit node name>",
                      "channelNamingConvention": {
                        "nodeId": {}
                      },
                      "overrideHost": true,
                      "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                      "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                      "timestampHandling": {
                        "server": {}
                      },
                      "dataChangeFilter": {
                        "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                        "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                        "deadbandValue": 1
                      },
                      "dataAcquisitionConfig": {
                        "subscription": {
                          "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                          "dataChangeFilter": {
                            "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                            "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                            "deadbandValue": 1
                          }
                        }
                      }
                    }
                  }
                },
                "workspaceRid": "<workspace rid>",
                "targetDatasetRid": "<target dataset rid>",
                "createdAt": "2026-01-01T00:00:00Z"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateDataConnectorRequest"
            },
            "x-example": {
              "name": "<name>",
              "connectionDetails": {
                "opcUa": {
                  "uri": "<uri>",
                  "authenticationConfig": {
                    "anonymous": {}
                  },
                  "scrapingConfig": {
                    "nodeExplorationConfig": {
                      "opcUaTraversalConfig": {
                        "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                      }
                    },
                    "unitNodeName": "<unit node name>",
                    "channelNamingConvention": {
                      "nodeId": {}
                    },
                    "overrideHost": true,
                    "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                    "timestampHandling": {
                      "server": {}
                    }
                  }
                }
              },
              "workspaceRid": "<workspace rid>",
              "targetDatasetRid": "<target dataset rid>"
            }
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Create data connector",
        "description": "Creates a new data connector configuration"
      }
    },
    "/data-connector/v1/search": {
      "get": {
        "operationId": "DataConnectorService_Search",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/SearchResponse"
            },
            "x-example": {
              "dataConnectors": [
                {
                  "dataConnectorRid": "<data connector rid>",
                  "name": "<name>",
                  "description": "<description>",
                  "connectionDetails": {
                    "opcUa": {
                      "uri": "<uri>",
                      "authenticationConfig": {
                        "anonymous": {}
                      },
                      "scrapingConfig": {
                        "nodeExplorationConfig": {
                          "opcUaTraversalConfig": {
                            "rootNodes": [
                              {
                                "namespace": 1,
                                "identifier": {
                                  "numeric": 1
                                }
                              }
                            ],
                            "skipNodes": [
                              {
                                "namespace": 1,
                                "identifier": {
                                  "numeric": 1
                                }
                              }
                            ],
                            "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                          }
                        },
                        "unitNodeName": "<unit node name>",
                        "channelNamingConvention": {
                          "nodeId": {}
                        },
                        "overrideHost": true,
                        "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                        "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                        "timestampHandling": {
                          "server": {}
                        },
                        "dataChangeFilter": {
                          "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                          "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                          "deadbandValue": 1
                        },
                        "dataAcquisitionConfig": {
                          "subscription": {
                            "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                            "dataChangeFilter": {
                              "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                              "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                              "deadbandValue": 1
                            }
                          }
                        }
                      }
                    }
                  },
                  "workspaceRid": "<workspace rid>",
                  "targetDatasetRid": "<target dataset rid>",
                  "createdAt": "2026-01-01T00:00:00Z"
                }
              ],
              "pageToken": "<page token>"
            }
          }
        },
        "parameters": [
          {
            "name": "workspaceRid",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "filter.name.name",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "filter.description.description",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "filter.targetDataset.targetDatasetRid",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "pageSize",
            "description": "If unspecified, defaults to 100",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "pageToken",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "sortBy.field",
            "description": "If unspecified, defaults to SORT_FIELD_UPDATE_AT",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "SORT_FIELD_UNSPECIFIED",
              "SORT_FIELD_UPDATED_AT"
            ],
            "default": "SORT_FIELD_UNSPECIFIED"
          },
          {
            "name": "sortBy.order",
            "description": "If unspecified, defaults to SORT_ORDER_DESC",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "SORT_ORDER_UNSPECIFIED",
              "SORT_ORDER_ASC",
              "SORT_ORDER_DESC"
            ],
            "default": "SORT_ORDER_UNSPECIFIED"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Search",
        "description": "List the data connectors matching the search criteria. The JSON transcoder ranks literal path segments above `/{...}` template captures, so the literal `/search` route wins over the `/{data_connector_rid}` template regardless of declaration order."
      }
    },
    "/data-connector/v1/{dataConnectorRid}": {
      "get": {
        "operationId": "DataConnectorService_GetDataConnector",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetDataConnectorResponse"
            },
            "x-example": {
              "dataConnector": {
                "dataConnectorRid": "<data connector rid>",
                "name": "<name>",
                "description": "<description>",
                "connectionDetails": {
                  "opcUa": {
                    "uri": "<uri>",
                    "authenticationConfig": {
                      "anonymous": {}
                    },
                    "scrapingConfig": {
                      "nodeExplorationConfig": {
                        "opcUaTraversalConfig": {
                          "rootNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "skipNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                        }
                      },
                      "unitNodeName": "<unit node name>",
                      "channelNamingConvention": {
                        "nodeId": {}
                      },
                      "overrideHost": true,
                      "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                      "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                      "timestampHandling": {
                        "server": {}
                      },
                      "dataChangeFilter": {
                        "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                        "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                        "deadbandValue": 1
                      },
                      "dataAcquisitionConfig": {
                        "subscription": {
                          "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                          "dataChangeFilter": {
                            "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                            "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                            "deadbandValue": 1
                          }
                        }
                      }
                    }
                  }
                },
                "workspaceRid": "<workspace rid>",
                "targetDatasetRid": "<target dataset rid>",
                "createdAt": "2026-01-01T00:00:00Z"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Get data connector",
        "description": "Gets the settings for a data connector"
      },
      "delete": {
        "operationId": "DataConnectorService_DeleteDataConnector",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/DeleteDataConnectorResponse"
            },
            "x-example": {}
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Delete data connector",
        "description": "Deletes a data connector. This operation is idempotent."
      },
      "post": {
        "operationId": "DataConnectorService_UpdateDataConnector",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/UpdateDataConnectorResponse"
            },
            "x-example": {
              "dataConnector": {
                "dataConnectorRid": "<data connector rid>",
                "name": "<name>",
                "description": "<description>",
                "connectionDetails": {
                  "opcUa": {
                    "uri": "<uri>",
                    "authenticationConfig": {
                      "anonymous": {}
                    },
                    "scrapingConfig": {
                      "nodeExplorationConfig": {
                        "opcUaTraversalConfig": {
                          "rootNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "skipNodes": [
                            {
                              "namespace": 1,
                              "identifier": {
                                "numeric": 1
                              }
                            }
                          ],
                          "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                        }
                      },
                      "unitNodeName": "<unit node name>",
                      "channelNamingConvention": {
                        "nodeId": {}
                      },
                      "overrideHost": true,
                      "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                      "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                      "timestampHandling": {
                        "server": {}
                      },
                      "dataChangeFilter": {
                        "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                        "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                        "deadbandValue": 1
                      },
                      "dataAcquisitionConfig": {
                        "subscription": {
                          "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                          "dataChangeFilter": {
                            "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                            "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                            "deadbandValue": 1
                          }
                        }
                      }
                    }
                  }
                },
                "workspaceRid": "<workspace rid>",
                "targetDatasetRid": "<target dataset rid>",
                "createdAt": "2026-01-01T00:00:00Z"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UpdateDataConnectorBody"
            },
            "x-example": {
              "name": "<name>",
              "description": "<description>",
              "connectionDetails": {
                "opcUa": {
                  "uri": "<uri>",
                  "authenticationConfig": {
                    "anonymous": {}
                  },
                  "scrapingConfig": {
                    "nodeExplorationConfig": {
                      "opcUaTraversalConfig": {
                        "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                      }
                    },
                    "unitNodeName": "<unit node name>",
                    "channelNamingConvention": {
                      "nodeId": {}
                    },
                    "overrideHost": true,
                    "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
                    "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                    "timestampHandling": {
                      "server": {}
                    },
                    "dataChangeFilter": {
                      "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                      "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                      "deadbandValue": 1
                    },
                    "dataAcquisitionConfig": {
                      "subscription": {
                        "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                        "dataChangeFilter": {
                          "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                          "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                          "deadbandValue": 1
                        }
                      }
                    }
                  }
                }
              },
              "targetDatasetRid": "<target dataset rid>"
            }
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Update data connector",
        "description": "Updates the settings for a data connector. `body: \"*\"` is required here. google.api.http routes fields outside the path and body to the query string, which has no spelling for a message field, so the body is the only place `connection_details` can travel — and it keeps connector credentials out of URLs, which proxy and CDN access logs retain."
      }
    },
    "/data-connector/v1/{dataConnectorRid}/session": {
      "get": {
        "operationId": "DataConnectorService_GetSessionStatus",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetSessionStatusResponse"
            },
            "x-example": {
              "none": {}
            }
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Get session status",
        "description": "Gets the session status for a connection"
      }
    },
    "/data-connector/v1/{dataConnectorRid}/session/start": {
      "post": {
        "operationId": "DataConnectorService_StartSession",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/StartSessionResponse"
            },
            "x-example": {}
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Start session",
        "description": "Starts a session for a connection"
      }
    },
    "/data-connector/v1/{dataConnectorRid}/session/stop": {
      "post": {
        "operationId": "DataConnectorService_StopSession",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/StopSessionResponse"
            },
            "x-example": {}
          }
        },
        "parameters": [
          {
            "name": "dataConnectorRid",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataConnectorService"
        ],
        "summary": "Stop session",
        "description": "Stops a session for a connection"
      }
    }
  },
  "definitions": {
    "ActiveSessionStatus": {
      "type": "object",
      "properties": {
        "replicaStatus": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ReplicaStatus"
          }
        }
      }
    },
    "BatchGetDataConnectorsRequest": {
      "type": "object",
      "properties": {
        "dataConnectorRids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 100,
          "x-constraints": [
            "At most 100 items."
          ]
        }
      },
      "example": {
        "dataConnectorRids": [
          "<data connector rids>"
        ]
      }
    },
    "BatchGetDataConnectorsResponse": {
      "type": "object",
      "properties": {
        "dataConnectors": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/DataConnector"
          }
        }
      }
    },
    "CreateDataConnectorRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "connectionDetails": {
          "$ref": "#/definitions/DataConnectorDetails"
        },
        "workspaceRid": {
          "type": "string"
        },
        "targetDatasetRid": {
          "type": "string"
        }
      },
      "title": "Request to create a new data connector",
      "required": [
        "name",
        "connectionDetails",
        "workspaceRid",
        "targetDatasetRid"
      ],
      "example": {
        "name": "<name>",
        "connectionDetails": {
          "opcUa": {
            "uri": "<uri>",
            "authenticationConfig": {
              "anonymous": {}
            },
            "scrapingConfig": {
              "nodeExplorationConfig": {
                "opcUaTraversalConfig": {
                  "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                }
              },
              "unitNodeName": "<unit node name>",
              "channelNamingConvention": {
                "nodeId": {}
              },
              "overrideHost": true,
              "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
              "timestampHandling": {
                "server": {}
              }
            }
          }
        },
        "workspaceRid": "<workspace rid>",
        "targetDatasetRid": "<target dataset rid>"
      }
    },
    "CreateDataConnectorResponse": {
      "type": "object",
      "properties": {
        "dataConnector": {
          "$ref": "#/definitions/DataConnector"
        }
      },
      "title": "Response for creating a new data connector"
    },
    "DataConnector": {
      "type": "object",
      "properties": {
        "dataConnectorRid": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "connectionDetails": {
          "$ref": "#/definitions/DataConnectorDetailsSecrets"
        },
        "workspaceRid": {
          "type": "string"
        },
        "targetDatasetRid": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "title": "A configured data connector"
    },
    "DataConnectorDetails": {
      "type": "object",
      "properties": {
        "opcUa": {
          "$ref": "#/definitions/OpcUaConnectorDetails"
        }
      },
      "title": "Union type for different data connector types",
      "x-oneofs": [
        {
          "fields": [
            "opcUa"
          ],
          "required": true
        }
      ],
      "example": {
        "opcUa": {
          "uri": "string",
          "authenticationConfig": {
            "anonymous": {}
          },
          "scrapingConfig": {
            "nodeExplorationConfig": {
              "opcUaTraversalConfig": {
                "rootNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "skipNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
              }
            },
            "unitNodeName": "string",
            "channelNamingConvention": {
              "nodeId": {}
            },
            "overrideHost": true,
            "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
            "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
            "timestampHandling": {
              "server": {}
            },
            "dataChangeFilter": {
              "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
              "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
              "deadbandValue": 1
            },
            "dataAcquisitionConfig": {
              "subscription": {
                "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                "dataChangeFilter": {
                  "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                  "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                  "deadbandValue": 1
                }
              }
            }
          }
        }
      }
    },
    "DataConnectorDetailsSecrets": {
      "type": "object",
      "properties": {
        "opcUa": {
          "$ref": "#/definitions/OpcUaConnectorDetailsSecret"
        }
      },
      "title": "Union type for different data connector types with secrets",
      "x-oneofs": [
        {
          "fields": [
            "opcUa"
          ],
          "required": true
        }
      ],
      "example": {
        "opcUa": {
          "uri": "string",
          "authenticationConfig": {
            "anonymous": {}
          },
          "scrapingConfig": {
            "nodeExplorationConfig": {
              "opcUaTraversalConfig": {
                "rootNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "skipNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
              }
            },
            "unitNodeName": "string",
            "channelNamingConvention": {
              "nodeId": {}
            },
            "overrideHost": true,
            "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
            "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
            "timestampHandling": {
              "server": {}
            },
            "dataChangeFilter": {
              "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
              "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
              "deadbandValue": 1
            },
            "dataAcquisitionConfig": {
              "subscription": {
                "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                "dataChangeFilter": {
                  "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                  "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                  "deadbandValue": 1
                }
              }
            }
          }
        }
      }
    },
    "DataConnectorDetailsUpdates": {
      "type": "object",
      "properties": {
        "opcUa": {
          "$ref": "#/definitions/OpcUaConnectorDetailsUpdates"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "opcUa"
          ],
          "required": true
        }
      ],
      "example": {
        "opcUa": {
          "uri": "string",
          "authenticationConfig": {
            "anonymous": {}
          },
          "scrapingConfig": {
            "nodeExplorationConfig": {
              "opcUaTraversalConfig": {
                "rootNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "skipNodes": [
                  {
                    "namespace": 1,
                    "identifier": {
                      "numeric": 1
                    }
                  }
                ],
                "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
              }
            },
            "unitNodeName": "string",
            "channelNamingConvention": {
              "nodeId": {}
            },
            "overrideHost": true,
            "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
            "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
            "timestampHandling": {
              "server": {}
            },
            "dataChangeFilter": {
              "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
              "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
              "deadbandValue": 1
            },
            "dataAcquisitionConfig": {
              "subscription": {
                "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                "dataChangeFilter": {
                  "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                  "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                  "deadbandValue": 1
                }
              }
            }
          }
        }
      }
    },
    "UpdateDataConnectorBody": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "connectionDetails": {
          "$ref": "#/definitions/DataConnectorDetailsUpdates"
        },
        "targetDatasetRid": {
          "type": "string"
        }
      },
      "example": {
        "name": "<name>",
        "description": "<description>",
        "connectionDetails": {
          "opcUa": {
            "uri": "<uri>",
            "authenticationConfig": {
              "anonymous": {}
            },
            "scrapingConfig": {
              "nodeExplorationConfig": {
                "opcUaTraversalConfig": {
                  "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
                }
              },
              "unitNodeName": "<unit node name>",
              "channelNamingConvention": {
                "nodeId": {}
              },
              "overrideHost": true,
              "unknownDataTypeHandling": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
              "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
              "timestampHandling": {
                "server": {}
              },
              "dataChangeFilter": {
                "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                "deadbandValue": 1
              },
              "dataAcquisitionConfig": {
                "subscription": {
                  "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
                  "dataChangeFilter": {
                    "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
                    "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
                    "deadbandValue": 1
                  }
                }
              }
            }
          }
        },
        "targetDatasetRid": "<target dataset rid>"
      }
    },
    "DeleteDataConnectorResponse": {
      "type": "object"
    },
    "GetDataConnectorResponse": {
      "type": "object",
      "properties": {
        "dataConnector": {
          "$ref": "#/definitions/DataConnector"
        }
      }
    },
    "GetSessionStatusResponse": {
      "type": "object",
      "properties": {
        "none": {
          "type": "object",
          "properties": {}
        },
        "active": {
          "$ref": "#/definitions/ActiveSessionStatus"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "none",
            "active"
          ],
          "required": false
        }
      ],
      "description": "Set at most one of the fields below.",
      "example": {
        "none": {}
      }
    },
    "OpcAuthenticationConfig": {
      "type": "object",
      "properties": {
        "anonymous": {
          "type": "object",
          "properties": {}
        },
        "usernamePassword": {
          "$ref": "#/definitions/OpcUsernamePasswordAuthentication"
        },
        "token": {
          "$ref": "#/definitions/OpcTokenAuthentication"
        }
      },
      "title": "Authentication configuration for OPC-UA server connection",
      "x-oneofs": [
        {
          "fields": [
            "anonymous",
            "usernamePassword",
            "token"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "anonymous": {}
      }
    },
    "OpcAuthenticationConfigSecret": {
      "type": "object",
      "properties": {
        "anonymous": {
          "type": "object",
          "properties": {}
        },
        "usernamePassword": {
          "$ref": "#/definitions/OpcUsernamePasswordAuthenticationSecret"
        },
        "token": {
          "$ref": "#/definitions/OpcTokenAuthenticationSecret"
        }
      },
      "title": "Authentication configuration for OPC-UA server connection with secrets",
      "x-oneofs": [
        {
          "fields": [
            "anonymous",
            "usernamePassword",
            "token"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "anonymous": {}
      }
    },
    "OpcIdentifierValue": {
      "type": "object",
      "properties": {
        "numeric": {
          "type": "integer",
          "format": "int32"
        },
        "string": {
          "type": "string"
        }
      },
      "title": "The identifier field for an OPC-UA node",
      "x-oneofs": [
        {
          "fields": [
            "numeric",
            "string"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "numeric": 1
      }
    },
    "OpcNode": {
      "type": "object",
      "properties": {
        "namespace": {
          "type": "integer",
          "format": "int64"
        },
        "identifier": {
          "$ref": "#/definitions/OpcIdentifierValue"
        }
      },
      "title": "An OPC-UA node",
      "required": [
        "identifier"
      ]
    },
    "OpcTokenAuthentication": {
      "type": "object",
      "properties": {
        "token": {
          "type": "string"
        }
      },
      "required": [
        "token"
      ]
    },
    "OpcTokenAuthenticationSecret": {
      "type": "object",
      "properties": {
        "token": {
          "type": "string"
        }
      }
    },
    "OpcUaChannelNamingConvention": {
      "type": "object",
      "properties": {
        "nodeId": {
          "$ref": "#/definitions/OpcUaNodeId",
          "title": "For example, \"NodeId{ns=3;i=1010}\""
        },
        "browseName": {
          "$ref": "#/definitions/OpcUaBrowseName",
          "title": "The \"name\" field under the \"BrowseName\" attribute"
        },
        "displayName": {
          "$ref": "#/definitions/OpcUaDisplayName",
          "title": "The \"text\" field under the \"DisplayName\" attribute"
        },
        "fullPath": {
          "$ref": "#/definitions/OpcUaFullPath",
          "description": "The full path of the node, separated by a delimiter. Use this setting for creating the hierarchical prefix tree."
        }
      },
      "title": "How do you want to map the names of OPC-UA nodes to Nominal channels?",
      "x-oneofs": [
        {
          "fields": [
            "nodeId",
            "browseName",
            "displayName",
            "fullPath"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "nodeId": {}
      }
    },
    "OpcUaBrowseName": {
      "type": "object"
    },
    "OpcUaDisplayName": {
      "type": "object"
    },
    "OpcUaFullPath": {
      "type": "object",
      "properties": {
        "rootNodes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/OpcNode"
          },
          "description": "We will build path up to any of these nodes, or the Objects folder."
        },
        "delimiter": {
          "type": "string",
          "description": "Custom delimiter for path separation. Defaults to \"/\" if not specified."
        },
        "arrayTagNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Array TagNames to extract out of the path. For example, if the path is \"/airplane/wing[1]/drag\", specifying the TagName \"wing\" would represent this with the channel \"/airplane/drag\" with \"wing\":\"1\" as a tag."
        }
      },
      "title": "Configuration for full path naming convention"
    },
    "OpcUaNodeId": {
      "type": "object"
    },
    "OpcUaConnectorDetails": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string"
        },
        "authenticationConfig": {
          "$ref": "#/definitions/OpcAuthenticationConfig"
        },
        "scrapingConfig": {
          "$ref": "#/definitions/OpcUaScrapingConfig"
        }
      },
      "title": "Configuration for connecting to an OPC-UA server",
      "required": [
        "uri",
        "authenticationConfig",
        "scrapingConfig"
      ]
    },
    "OpcUaConnectorDetailsSecret": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string"
        },
        "authenticationConfig": {
          "$ref": "#/definitions/OpcAuthenticationConfigSecret"
        },
        "scrapingConfig": {
          "$ref": "#/definitions/OpcUaScrapingConfig"
        }
      },
      "title": "Configuration for connecting to an OPC-UA server with secrets"
    },
    "OpcUaConnectorDetailsUpdates": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string"
        },
        "authenticationConfig": {
          "$ref": "#/definitions/OpcAuthenticationConfig"
        },
        "scrapingConfig": {
          "$ref": "#/definitions/OpcUaScrapingConfigUpdates"
        }
      },
      "title": "Updated configuration for connecting to an OPC-UA server"
    },
    "OpcUaDataAcquisitionConfig": {
      "type": "object",
      "properties": {
        "subscription": {
          "$ref": "#/definitions/OpcUaSubscriptionConfig",
          "title": "Use OPC-UA subscriptions to receive data changes pushed from the server"
        },
        "polling": {
          "$ref": "#/definitions/OpcUaPollingConfig",
          "title": "Periodically poll the server for current node values"
        }
      },
      "title": "Configuration for how data should be acquired from the OPC-UA server",
      "x-oneofs": [
        {
          "fields": [
            "subscription",
            "polling"
          ],
          "required": false
        }
      ],
      "description": "Set at most one of the fields below.",
      "example": {
        "subscription": {
          "failedMonitorHandling": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
          "dataChangeFilter": {
            "trigger": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
            "deadbandType": "OPC_UA_DEADBAND_TYPE_NONE",
            "deadbandValue": 1
          }
        }
      }
    },
    "OpcUaDataChangeFilter": {
      "type": "object",
      "properties": {
        "trigger": {
          "$ref": "#/definitions/OpcUaDataChangeTrigger",
          "description": "The trigger for the data change filter."
        },
        "deadbandType": {
          "$ref": "#/definitions/OpcUaDeadbandType"
        },
        "deadbandValue": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "OpcUaDataChangeTrigger": {
      "type": "string",
      "enum": [
        "OPC_UA_DATA_CHANGE_TRIGGER_UNSPECIFIED",
        "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
        "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE",
        "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE_TIMESTAMP"
      ],
      "default": "OPC_UA_DATA_CHANGE_TRIGGER_UNSPECIFIED",
      "example": "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY"
    },
    "OpcUaDeadbandType": {
      "type": "string",
      "enum": [
        "OPC_UA_DEADBAND_TYPE_UNSPECIFIED",
        "OPC_UA_DEADBAND_TYPE_NONE",
        "OPC_UA_DEADBAND_TYPE_ABSOLUTE",
        "OPC_UA_DEADBAND_TYPE_PERCENT"
      ],
      "default": "OPC_UA_DEADBAND_TYPE_UNSPECIFIED",
      "example": "OPC_UA_DEADBAND_TYPE_NONE"
    },
    "OpcUaDirectNodeSubscription": {
      "type": "object",
      "properties": {
        "nodes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/OpcNode"
          },
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        }
      }
    },
    "OpcUaFailedMonitorHandling": {
      "type": "string",
      "enum": [
        "OPC_UA_FAILED_MONITOR_HANDLING_UNSPECIFIED",
        "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
        "OPC_UA_FAILED_MONITOR_HANDLING_IGNORE"
      ],
      "default": "OPC_UA_FAILED_MONITOR_HANDLING_UNSPECIFIED",
      "example": "OPC_UA_FAILED_MONITOR_HANDLING_ERROR"
    },
    "OpcUaNodeExplorationConfig": {
      "type": "object",
      "properties": {
        "opcUaTraversalConfig": {
          "$ref": "#/definitions/OpcUaTraversalConfig"
        },
        "opcUaDirectNodeSubscription": {
          "$ref": "#/definitions/OpcUaDirectNodeSubscription"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "opcUaTraversalConfig",
            "opcUaDirectNodeSubscription"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "opcUaTraversalConfig": {
          "rootNodes": [
            {
              "namespace": 1,
              "identifier": {
                "numeric": 1
              }
            }
          ],
          "skipNodes": [
            {
              "namespace": 1,
              "identifier": {
                "numeric": 1
              }
            }
          ],
          "referenceExplorationType": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
        }
      }
    },
    "OpcUaPollingConfig": {
      "type": "object",
      "properties": {
        "pollingIntervalMs": {
          "type": "string",
          "format": "uint64",
          "description": "The interval between polls in milliseconds. Defaults to 1000ms if not specified."
        }
      },
      "title": "Configuration for polling-based data acquisition"
    },
    "OpcUaReferenceExplorationType": {
      "type": "string",
      "enum": [
        "OPC_UA_REFERENCE_EXPLORATION_TYPE_UNSPECIFIED",
        "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES",
        "OPC_UA_REFERENCE_EXPLORATION_TYPE_HIERARCHICAL_REFERENCES"
      ],
      "default": "OPC_UA_REFERENCE_EXPLORATION_TYPE_UNSPECIFIED",
      "example": "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES"
    },
    "OpcUaScrapingConfig": {
      "type": "object",
      "properties": {
        "nodeExplorationConfig": {
          "$ref": "#/definitions/OpcUaNodeExplorationConfig"
        },
        "unitNodeName": {
          "type": "string",
          "description": "The browse name of the node under which the unit is stored for the nodes we scrape."
        },
        "channelNamingConvention": {
          "$ref": "#/definitions/OpcUaChannelNamingConvention"
        },
        "overrideHost": {
          "type": "boolean",
          "description": "If true, we will override the host and port of the OPC UA server with the host and port of the original server URL."
        },
        "unknownDataTypeHandling": {
          "$ref": "#/definitions/OpcUaUnknownDataTypeHandling",
          "title": "How we will handle unknown data types when we read them from the server"
        },
        "failedMonitorHandling": {
          "$ref": "#/definitions/OpcUaFailedMonitorHandling",
          "description": "Deprecated: Use data_acquisition_config.subscription.failed_monitor_handling instead.",
          "x-deprecated": true
        },
        "timestampHandling": {
          "$ref": "#/definitions/OpcUaTimestampHandling",
          "title": "What timestamps should we write for the channels?"
        },
        "dataChangeFilter": {
          "$ref": "#/definitions/OpcUaDataChangeFilter",
          "description": "Deprecated: Use data_acquisition_config.subscription.data_change_filter instead.",
          "x-deprecated": true
        },
        "dataAcquisitionConfig": {
          "$ref": "#/definitions/OpcUaDataAcquisitionConfig",
          "description": "Configuration for how data should be acquired from the server. If not specified, defaults to subscription mode using the deprecated fields above."
        }
      },
      "title": "Configuration for determining how data is discovered and handled",
      "required": [
        "nodeExplorationConfig",
        "unitNodeName",
        "channelNamingConvention",
        "overrideHost",
        "unknownDataTypeHandling",
        "timestampHandling"
      ],
      "description": "Polling mode can only be used with server time."
    },
    "OpcUaScrapingConfigUpdates": {
      "type": "object",
      "properties": {
        "nodeExplorationConfig": {
          "$ref": "#/definitions/OpcUaNodeExplorationConfig"
        },
        "unitNodeName": {
          "type": "string",
          "description": "The browse name of the node under which the unit is stored for the nodes we scrape."
        },
        "channelNamingConvention": {
          "$ref": "#/definitions/OpcUaChannelNamingConvention"
        },
        "overrideHost": {
          "type": "boolean",
          "description": "If true, we will override the host and port of the OPC UA server with the host and port of the original server URL."
        },
        "unknownDataTypeHandling": {
          "$ref": "#/definitions/OpcUaUnknownDataTypeHandling",
          "title": "How we will handle unknown data types when we read them from the server"
        },
        "failedMonitorHandling": {
          "$ref": "#/definitions/OpcUaFailedMonitorHandling",
          "description": "Deprecated: Use data_acquisition_config.subscription.failed_monitor_handling instead.",
          "x-deprecated": true
        },
        "timestampHandling": {
          "$ref": "#/definitions/OpcUaTimestampHandling",
          "title": "What timestamps should we write for the channels?"
        },
        "dataChangeFilter": {
          "$ref": "#/definitions/OpcUaDataChangeFilter",
          "description": "Deprecated: Use data_acquisition_config.subscription.data_change_filter instead.",
          "x-deprecated": true
        },
        "dataAcquisitionConfig": {
          "$ref": "#/definitions/OpcUaDataAcquisitionConfig",
          "description": "Configuration for how data should be acquired from the server."
        }
      },
      "title": "Updated configuration for determining how data is discovered and handled",
      "description": "Polling mode can only be used with server time."
    },
    "OpcUaSubscriptionConfig": {
      "type": "object",
      "properties": {
        "failedMonitorHandling": {
          "$ref": "#/definitions/OpcUaFailedMonitorHandling",
          "description": "How to handle situations where there are failed monitors."
        },
        "dataChangeFilter": {
          "$ref": "#/definitions/OpcUaDataChangeFilter",
          "description": "The data change filter to be applied for the monitored items in the subscription."
        }
      },
      "title": "Configuration for subscription-based data acquisition",
      "required": [
        "failedMonitorHandling",
        "dataChangeFilter"
      ]
    },
    "OpcUaTimestampHandling": {
      "type": "object",
      "properties": {
        "server": {
          "$ref": "#/definitions/OpcUaServerTime"
        },
        "source": {
          "$ref": "#/definitions/OpcUaSourceTime"
        },
        "relative": {
          "$ref": "#/definitions/OpcUaRelativeTimestamp"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "server",
            "source",
            "relative"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "server": {}
      }
    },
    "OpcUaRelativeTimestamp": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "string",
          "format": "date-time"
        }
      },
      "description": "Use the server timestamp, but add an optional offset. By default, the offset will be the time now. This is useful for when the server starts at an epoch time of 0."
    },
    "OpcUaServerTime": {
      "type": "object",
      "title": "Use the server timestamp https://reference.opcfoundation.org/Core/Part4/v104/docs/7.7.4"
    },
    "OpcUaSourceTime": {
      "type": "object",
      "title": "Use the source timestamp https://reference.opcfoundation.org/Core/Part4/v104/docs/7.7.3"
    },
    "OpcUaTraversalConfig": {
      "type": "object",
      "properties": {
        "rootNodes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/OpcNode"
          },
          "title": "Root nodes to start traversing for variable nodes. For each node specified here, we will recursively traverse child nodes until there are none left. If empty, defaults to starting from the objects folder node NodeId{ns=0;i=85}"
        },
        "skipNodes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/OpcNode"
          },
          "description": "We will not subscribe to any of these nodes."
        },
        "referenceExplorationType": {
          "$ref": "#/definitions/OpcUaReferenceExplorationType",
          "description": "The type of references that we will follow when traversing the root nodes in the OPC UA server."
        }
      },
      "required": [
        "referenceExplorationType"
      ]
    },
    "OpcUaUnknownDataTypeHandling": {
      "type": "string",
      "enum": [
        "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_UNSPECIFIED",
        "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
        "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_DOUBLE",
        "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_STRING"
      ],
      "default": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_UNSPECIFIED",
      "title": "- OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR: If we encounter an unknown data type, we will error out\n - OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_DOUBLE: If we encounter an unknown data type, we will assume it is a double\n - OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_STRING: If we encounter an unknown data type, we will assume it is a string",
      "example": "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR"
    },
    "OpcUsernamePasswordAuthentication": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      },
      "required": [
        "username",
        "password"
      ]
    },
    "OpcUsernamePasswordAuthenticationSecret": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      },
      "required": [
        "username"
      ]
    },
    "ReplicaStatus": {
      "type": "string",
      "enum": [
        "REPLICA_STATUS_UNSPECIFIED",
        "REPLICA_STATUS_STARTING",
        "REPLICA_STATUS_SUBSCRIBING",
        "REPLICA_STATUS_RUNNING",
        "REPLICA_STATUS_STOPPING",
        "REPLICA_STATUS_STOPPED"
      ],
      "default": "REPLICA_STATUS_UNSPECIFIED",
      "example": "REPLICA_STATUS_STARTING"
    },
    "SearchResponse": {
      "type": "object",
      "properties": {
        "dataConnectors": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/DataConnector"
          }
        },
        "pageToken": {
          "type": "string"
        }
      }
    },
    "StartSessionResponse": {
      "type": "object"
    },
    "StopSessionResponse": {
      "type": "object"
    },
    "UpdateDataConnectorResponse": {
      "type": "object",
      "properties": {
        "dataConnector": {
          "$ref": "#/definitions/DataConnector"
        }
      }
    }
  },
  "securityDefinitions": {
    "ApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization",
      "description": "Your API key as a bearer token: `Authorization: Bearer <api key>`."
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ]
}
