> For the complete documentation index, see [llms.txt](https://docs.enlyze.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enlyze.com/enlyze-api/api-referenz/data-sources.md).

# Data Sources

## Get Data Sources

> Returns a list of data sources in your organization.

```json
{"openapi":"3.1.0","info":{"title":"ENLYZE API","version":"v2"},"tags":[{"name":"Data Sources"}],"servers":[{"url":"/api"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","in":"header","name":"Authorization"}},"schemas":{"PaginatedDataSources":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DataSource"},"type":"array","title":"Data"},"metadata":{"$ref":"#/components/schemas/Metadata","description":"This field contains pagination metadata."}},"additionalProperties":false,"type":"object","required":["data","metadata"],"title":"PaginatedDataSources"},"DataSource":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"type":{"type":"string","title":"Type"},"readout_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Readout Limit"},"readout_interval":{"type":"integer","title":"Readout Interval"},"readout_status":{"$ref":"#/components/schemas/ReadoutStatus"},"name":{"type":"string","title":"Name","description":"The human readable name of the data source."},"spark":{"type":"string","format":"uuid","title":"SPARK","description":"Which SPARK reads from the data source. It must be located at the same site as the current SPARK."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the data source."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Specific model or name describing the data source as concretely as possible."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"General remarks concerning this data source."},"capabilities":{"$ref":"#/components/schemas/DataSourceCapabilities"},"machine":{"type":"string","format":"uuid","title":"Machine","description":"On which machine the data source is located."},"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"This field is deprecated, use the `readout_status.last_readout_at`","deprecated":true},"details":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AllenBradleyDetails"},{"$ref":"#/components/schemas/ModbusTcpDetails"},{"$ref":"#/components/schemas/S7PlusDetails"},{"$ref":"#/components/schemas/S7Details"},{"$ref":"#/components/schemas/KraussMaffeiDetails"},{"$ref":"#/components/schemas/FinsDetails"},{"$ref":"#/components/schemas/ReadOpcUaDetails"},{"$ref":"#/components/schemas/EnlyzeGatewayDetails"},{"$ref":"#/components/schemas/OdacDetails"},{"$ref":"#/components/schemas/PlastcontrolDetails"}],"discriminator":{"propertyName":"type","mapping":{"allen_bradley":"#/components/schemas/AllenBradleyDetails","enlyze_gateway":"#/components/schemas/EnlyzeGatewayDetails","fins":"#/components/schemas/FinsDetails","krauss_maffei":"#/components/schemas/KraussMaffeiDetails","modbus_tcp":"#/components/schemas/ModbusTcpDetails","odac":"#/components/schemas/OdacDetails","opcua":"#/components/schemas/ReadOpcUaDetails","plastcontrol":"#/components/schemas/PlastcontrolDetails","s7":"#/components/schemas/S7Details","s7plus":"#/components/schemas/S7PlusDetails"}}},{"type":"null"}],"title":"Data Source Details","description":"Data Source specific properties required for the connection to the data source"}},"type":"object","required":["uuid","type","readout_limit","readout_interval","readout_status","name","spark","manufacturer","device_model","note","capabilities","machine","last_readout_at","details"],"title":"DataSource"},"ReadoutStatus":{"properties":{"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"The last time the data source was successfully read out.                Is `null` if the data source has not been read out successfully yet."},"configured_variables":{"type":"integer","title":"Configured Variables","description":"Number of active or evaluated variables"},"state":{"oneOf":[{"$ref":"#/components/schemas/OkReadoutStatus"},{"$ref":"#/components/schemas/ErrorReadoutStatus"},{"$ref":"#/components/schemas/UnknownReadoutStatus"}],"title":"State","discriminator":{"propertyName":"type","mapping":{"ERROR":"#/components/schemas/ErrorReadoutStatus","OK":"#/components/schemas/OkReadoutStatus","UNKNOWN":"#/components/schemas/UnknownReadoutStatus"}}}},"type":"object","required":["last_readout_at","configured_variables","state"],"title":"ReadoutStatus"},"OkReadoutStatus":{"properties":{"type":{"type":"string","const":"OK","title":"Type","default":"OK"}},"type":"object","title":"OkReadoutStatus"},"ErrorReadoutStatus":{"properties":{"reason":{"oneOf":[{"$ref":"#/components/schemas/HostLookupError"},{"$ref":"#/components/schemas/NoRouteToHost"},{"$ref":"#/components/schemas/HostDown"},{"$ref":"#/components/schemas/NetworkUnreachable"},{"$ref":"#/components/schemas/ConnectionRefused"},{"$ref":"#/components/schemas/ConnectionReset"},{"$ref":"#/components/schemas/ConnectionClosed"},{"$ref":"#/components/schemas/Timeout"},{"$ref":"#/components/schemas/EnlyzeGatewayError"},{"$ref":"#/components/schemas/OpcUaErrorResponse"},{"$ref":"#/components/schemas/OpcUaNoMatchingEndpointPolicy"},{"$ref":"#/components/schemas/S7PlusError"},{"$ref":"#/components/schemas/FinsNetworkRelayError"},{"$ref":"#/components/schemas/UnknownReadoutFailureReason"}],"title":"Reason","description":"Details about what went wrong","discriminator":{"propertyName":"type","mapping":{"CONNECTION_CLOSED":"#/components/schemas/ConnectionClosed","CONNECTION_REFUSED":"#/components/schemas/ConnectionRefused","CONNECTION_RESET":"#/components/schemas/ConnectionReset","ENLYZE_GATEWAY_ERROR":"#/components/schemas/EnlyzeGatewayError","FINS_NETWORK_RELAY_ERROR":"#/components/schemas/FinsNetworkRelayError","HOST_DOWN":"#/components/schemas/HostDown","LOOKUP_ERROR":"#/components/schemas/HostLookupError","NETWORK_UNREACHABLE":"#/components/schemas/NetworkUnreachable","NO_ROUTE_TO_HOST":"#/components/schemas/NoRouteToHost","OPC_UA_ERROR_RESPONSE":"#/components/schemas/OpcUaErrorResponse","OPC_UA_NO_MATCHING_ENDPOINT_POLICY":"#/components/schemas/OpcUaNoMatchingEndpointPolicy","S7PLUS_ERROR":"#/components/schemas/S7PlusError","TIMEOUT":"#/components/schemas/Timeout","UNKNOWN":"#/components/schemas/UnknownReadoutFailureReason"}}},"error_at":{"type":"string","format":"date-time","title":"Error At","description":"The time this error occured"},"type":{"type":"string","const":"ERROR","title":"Type","default":"ERROR"}},"type":"object","required":["reason","error_at"],"title":"ErrorReadoutStatus"},"HostLookupError":{"properties":{"type":{"type":"string","const":"LOOKUP_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"HostLookupError"},"NoRouteToHost":{"properties":{"type":{"type":"string","const":"NO_ROUTE_TO_HOST","title":"Type"}},"type":"object","required":["type"],"title":"NoRouteToHost"},"HostDown":{"properties":{"type":{"type":"string","const":"HOST_DOWN","title":"Type"}},"type":"object","required":["type"],"title":"HostDown"},"NetworkUnreachable":{"properties":{"type":{"type":"string","const":"NETWORK_UNREACHABLE","title":"Type"}},"type":"object","required":["type"],"title":"NetworkUnreachable"},"ConnectionRefused":{"properties":{"type":{"type":"string","const":"CONNECTION_REFUSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionRefused"},"ConnectionReset":{"properties":{"type":{"type":"string","const":"CONNECTION_RESET","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionReset"},"ConnectionClosed":{"properties":{"type":{"type":"string","const":"CONNECTION_CLOSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionClosed"},"Timeout":{"properties":{"type":{"type":"string","const":"TIMEOUT","title":"Type"}},"type":"object","required":["type"],"title":"Timeout"},"EnlyzeGatewayError":{"properties":{"type":{"type":"string","const":"ENLYZE_GATEWAY_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"EnlyzeGatewayError"},"OpcUaErrorResponse":{"properties":{"type":{"type":"string","const":"OPC_UA_ERROR_RESPONSE","title":"Type"},"code":{"type":"integer","title":"Code","description":"The numerical error code returned by the OPC UA Server."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"A descriptive name corresponding to the error code."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A descriptive string corresponding to the error code."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"The error reason returned by the server."}},"type":"object","required":["type","code"],"title":"OpcUaErrorResponse"},"OpcUaNoMatchingEndpointPolicy":{"properties":{"type":{"type":"string","const":"OPC_UA_NO_MATCHING_ENDPOINT_POLICY","title":"Type"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The endpoint of the OPC UA server"},"endpoint_security_policy_uri":{"type":"string","title":"Endpoint Security Policy Uri","description":"The URI of the requested Endpoint Security Policy"},"message_security_mode":{"type":"string","title":"Message Security Mode","description":"The requested Message Security Mode"},"token_type":{"type":"string","title":"Token Type","description":"The configured Token Type"},"token_security_policy_uri":{"type":"string","title":"Token Security Policy Uri","description":"The requested Token Security Policy"}},"type":"object","required":["type","endpoint_url","endpoint_security_policy_uri","message_security_mode","token_type","token_security_policy_uri"],"title":"OpcUaNoMatchingEndpointPolicy"},"S7PlusError":{"properties":{"type":{"type":"string","const":"S7PLUS_ERROR","title":"Type"},"category":{"$ref":"#/components/schemas/S7PlusErrorCategory","description":"The category of the error. `AUTHENTICATION` can indicate an incorrect password or lack of permissions."}},"type":"object","required":["type","category"],"title":"S7PlusError"},"S7PlusErrorCategory":{"type":"string","enum":["AUTHENTICATION","UNKNOWN"],"title":"S7PlusErrorCategory"},"FinsNetworkRelayError":{"properties":{"type":{"type":"string","const":"FINS_NETWORK_RELAY_ERROR","title":"Type"},"response_code":{"type":"integer","title":"Response Code","description":"The FINS response (end) code reported by the relay."},"requested_node":{"type":"integer","title":"Requested Node","description":"The node number the request was addressed to."},"relay_network":{"type":"integer","title":"Relay Network","description":"The network address of the relay that reported the error."},"relay_node":{"type":"integer","title":"Relay Node","description":"The node address of the relay that reported the error."}},"type":"object","required":["type","response_code","requested_node","relay_network","relay_node"],"title":"FinsNetworkRelayError"},"UnknownReadoutFailureReason":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type"}},"type":"object","required":["type"],"title":"UnknownReadoutFailureReason"},"UnknownReadoutStatus":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type","default":"UNKNOWN"}},"type":"object","title":"UnknownReadoutStatus"},"DataSourceCapabilities":{"properties":{"variable_discovery":{"type":"boolean","title":"Variable Discovery","description":"Indicates whether variable discovery is supported."}},"type":"object","required":["variable_discovery"],"title":"DataSourceCapabilities"},"AllenBradleyDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":44818},"type":{"type":"string","const":"allen_bradley","title":"Type"}},"type":"object","required":["host","type"],"title":"AllenBradleyDetails"},"ModbusTcpDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":502},"ephemeral_connections":{"type":"boolean","title":"Ephemeral Connections","description":"Toggles whether to establish a new connection for each readout.","default":true},"type":{"type":"string","const":"modbus_tcp","title":"Type"}},"type":"object","required":["host","type"],"title":"ModbusTcpDetails"},"S7PlusDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"destination_tsap":{"$ref":"#/components/schemas/S7PlusDestinationTsap","description":"`SIMATIC-ROOT-ES` (Engineering Station) works most of the time. `SIMATIC-ROOT-HMI` (HMI)might work if connections with `SIMATIC-ROOT-ES`  fail for some reason like exceeded capacities.","default":"SIMATIC-ROOT-ES"},"type":{"type":"string","const":"s7plus","title":"Type"}},"type":"object","required":["host","port","type"],"title":"S7PlusDetails"},"S7PlusDestinationTsap":{"type":"string","enum":["SIMATIC-ROOT-ES","SIMATIC-ROOT-HMI"],"title":"S7PlusDestinationTsap"},"S7Details":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":102},"rack":{"type":"integer","title":"Rack","default":0},"slot":{"type":"integer","title":"Slot","default":2},"type":{"type":"string","const":"s7","title":"Type"}},"type":"object","required":["host","type"],"title":"S7Details"},"KraussMaffeiDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":18901},"machine":{"$ref":"#/components/schemas/KraussMaffeiMachine"},"initialization_mode":{"$ref":"#/components/schemas/KraussMaffeiInitializationMode"},"type":{"type":"string","const":"krauss_maffei","title":"Type"}},"type":"object","required":["host","machine","initialization_mode","type"],"title":"KraussMaffeiDetails"},"KraussMaffeiMachine":{"type":"string","enum":["C4","C5","C6"],"title":"KraussMaffeiMachine"},"KraussMaffeiInitializationMode":{"type":"string","enum":["Default","Extended"],"title":"KraussMaffeiInitializationMode"},"FinsDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":9600},"target_plc":{"$ref":"#/components/schemas/OmronTargetPlc","default":"Cs1OrNewer"},"local_address":{"type":"string","title":"Local Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the spark"},"remote_address":{"type":"string","title":"Remote Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the PLC"},"type":{"type":"string","const":"fins","title":"Type"}},"type":"object","required":["host","local_address","remote_address","type"],"title":"FinsDetails"},"OmronTargetPlc":{"type":"string","enum":["Classic","Cs1OrNewer"],"title":"OmronTargetPlc"},"ReadOpcUaDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The OPC-UA endpoint including the `opc.tcp://` prefix, the host and port as well as the server path"},"security_settings":{"$ref":"#/components/schemas/OpcUaSecuritySettings"},"type":{"type":"string","const":"opcua","title":"Type"},"user_identity":{"oneOf":[{"$ref":"#/components/schemas/OpcUaAnonymousUserIdentity"},{"$ref":"#/components/schemas/OpcUaUsernamePasswordIdentity"},{"$ref":"#/components/schemas/OpcUaX509CertificateUserIdentity"}],"title":"User Identity","description":"The user identity to use. This can be a basic Username-Password identity,a certificate and key or an anonymous identity implied by `Anonymous`.\nFor more background on user authentication check out the specification: https://opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User's%20Guide%20and%20Reference-QuickOPC/OPC%20UA%20User%20Authentication.html","discriminator":{"propertyName":"type","mapping":{"Anonymous":"#/components/schemas/OpcUaAnonymousUserIdentity","UserNamePassword":"#/components/schemas/OpcUaUsernamePasswordIdentity","X509Certificate":"#/components/schemas/OpcUaX509CertificateUserIdentity"}}}},"type":"object","required":["host","port","endpoint_url","security_settings","type","user_identity"],"title":"ReadOpcUaDetails"},"OpcUaSecuritySettings":{"properties":{"security_mode":{"$ref":"#/components/schemas/OpcUaMessageSecurityMode","description":"The message security mode to use. Modes other than `None` require a `security_policy` other than `None`."},"endpoint_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"},"token_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"}},"type":"object","required":["security_mode","endpoint_security_policy","token_security_policy"],"title":"OpcUaSecuritySettings"},"OpcUaMessageSecurityMode":{"type":"string","enum":["None","Sign","SignAndEncrypt"],"title":"OpcUaMessageSecurityMode"},"OpcUaSecurityPolicy":{"type":"string","enum":["None","Aes128-Sha256-RsaOaep","Aes256-Sha256-RsaPss","Basic128Rsa15","Basic256","Basic256Sha256"],"title":"OpcUaSecurityPolicy"},"OpcUaAnonymousUserIdentity":{"properties":{"type":{"type":"string","const":"Anonymous","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaAnonymousUserIdentity"},"OpcUaUsernamePasswordIdentity":{"properties":{"type":{"type":"string","const":"UserNamePassword","title":"Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["type","username","password"],"title":"OpcUaUsernamePasswordIdentity"},"OpcUaX509CertificateUserIdentity":{"properties":{"type":{"type":"string","const":"X509Certificate","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaX509CertificateUserIdentity"},"EnlyzeGatewayDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the computer running the Enlyze Gateway"},"port":{"type":"integer","title":"Port","description":"The port of the Enlyze Gateway"},"protocol_details":{"oneOf":[{"$ref":"#/components/schemas/OpcDaProtocolDetails"},{"$ref":"#/components/schemas/PviProtocolDetails"},{"$ref":"#/components/schemas/OtherProtocolDetails"}],"title":"Protocol Details","discriminator":{"propertyName":"protocol","mapping":{"OPC_DA":"#/components/schemas/OpcDaProtocolDetails","OTHER":"#/components/schemas/OtherProtocolDetails","PVI":"#/components/schemas/PviProtocolDetails"}}},"type":{"type":"string","const":"enlyze_gateway","title":"Type"}},"type":"object","required":["host","port","protocol_details","type"],"title":"EnlyzeGatewayDetails"},"OpcDaProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OPC_DA","title":"Protocol"},"server_name":{"type":"string","title":"Server Name","description":"The name of the OPC DA server"}},"type":"object","required":["protocol","server_name"],"title":"OpcDaProtocolDetails"},"PviProtocolDetails":{"properties":{"protocol":{"type":"string","const":"PVI","title":"Protocol"},"path":{"type":"string","title":"Path","description":"The path of a PVI node containing variables"}},"type":"object","required":["protocol","path"],"title":"PviProtocolDetails"},"OtherProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OTHER","title":"Protocol"}},"type":"object","required":["protocol"],"title":"OtherProtocolDetails"},"OdacDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","maximum":65535,"minimum":0,"title":"Port","default":2020},"type":{"type":"string","const":"odac","title":"Type"},"protocol_override":{"anyOf":[{"$ref":"#/components/schemas/OdacProtocolOverride"},{"type":"null"}],"description":"Force a specific protocol. This is a persistent PLC write."}},"type":"object","required":["host","type"],"title":"OdacDetails"},"OdacProtocolOverride":{"type":"string","enum":["odac","host"],"title":"OdacProtocolOverride"},"PlastcontrolDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"type":{"type":"string","const":"plastcontrol","title":"Type"},"readout_mode":{"oneOf":[{"$ref":"#/components/schemas/PlastcontrolActive"},{"$ref":"#/components/schemas/PlastcontrolPassive"}],"title":"Readout Mode","discriminator":{"propertyName":"type","mapping":{"active":"#/components/schemas/PlastcontrolActive","passive":"#/components/schemas/PlastcontrolPassive"}}}},"type":"object","required":["host","port","type","readout_mode"],"title":"PlastcontrolDetails"},"PlastcontrolActive":{"properties":{"type":{"type":"string","const":"active","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolActive"},"PlastcontrolPassive":{"properties":{"type":{"type":"string","const":"passive","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolPassive"},"Metadata":{"properties":{"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Pagination continuation point. Specify its value as the `cursor` parameter in a request with otherwise the same parameters to fetch the next page. `None`, if there is no more data to be fetched from the server."}},"additionalProperties":false,"type":"object","required":["next_cursor"],"title":"Metadata"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"paths":{"/v2/data-sources":{"get":{"tags":["Data Sources"],"summary":"Get Data Sources","description":"Returns a list of data sources in your organization.","operationId":"get_data_sources_v2_data_sources_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string","title":"Get page starting at cursor"}},{"name":"uuid","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"},"maxItems":50},{"type":"null"}],"title":"Filter by one or more data source UUIDs."}},{"name":"machine","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"},"maxItems":50},{"type":"null"}],"title":"Filter by one or more machine UUIDs."}},{"name":"spark","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"type":"string","format":"uuid"},"maxItems":50},{"type":"null"}],"title":"Filter by one or more SPARK UUIDs."}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDataSources"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}}}
```

## Post Data Source

> Create a new data source

```json
{"openapi":"3.1.0","info":{"title":"ENLYZE API","version":"v2"},"tags":[{"name":"Data Sources"}],"servers":[{"url":"/api"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","in":"header","name":"Authorization"}},"schemas":{"CreateDataSourceRequest":{"properties":{"name":{"type":"string","title":"Name","description":"The human readable name of the data source."},"spark":{"type":"string","format":"uuid","title":"SPARK","description":"Which SPARK reads from the data source. It must be located at the same site as the current SPARK."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the data source."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Specific model or name describing the data source as concretely as possible."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"General remarks concerning this data source."},"machine":{"type":"string","format":"uuid","title":"Machine","description":"On which machine the data source is located."},"details":{"oneOf":[{"$ref":"#/components/schemas/AllenBradleyDetails"},{"$ref":"#/components/schemas/ModbusTcpDetails"},{"$ref":"#/components/schemas/S7PlusDetails"},{"$ref":"#/components/schemas/S7Details"},{"$ref":"#/components/schemas/KraussMaffeiDetails"},{"$ref":"#/components/schemas/FinsDetails"},{"$ref":"#/components/schemas/CreateEnlyzeGatewayDetails"},{"$ref":"#/components/schemas/CreateOdacDetails"},{"$ref":"#/components/schemas/CreateOpcUaDetails"},{"$ref":"#/components/schemas/CreatePlastcontrolDetails"}],"title":"Data Source Details","description":"Data Source specific properties required for the connection to the data source","discriminator":{"propertyName":"type","mapping":{"allen_bradley":"#/components/schemas/AllenBradleyDetails","enlyze_gateway":"#/components/schemas/CreateEnlyzeGatewayDetails","fins":"#/components/schemas/FinsDetails","krauss_maffei":"#/components/schemas/KraussMaffeiDetails","modbus_tcp":"#/components/schemas/ModbusTcpDetails","odac":"#/components/schemas/CreateOdacDetails","opcua":"#/components/schemas/CreateOpcUaDetails","plastcontrol":"#/components/schemas/CreatePlastcontrolDetails","s7":"#/components/schemas/S7Details","s7plus":"#/components/schemas/S7PlusDetails"}}}},"type":"object","required":["name","spark","machine","details"],"title":"CreateDataSourceRequest"},"AllenBradleyDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":44818},"type":{"type":"string","const":"allen_bradley","title":"Type"}},"type":"object","required":["host","type"],"title":"AllenBradleyDetails"},"ModbusTcpDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":502},"ephemeral_connections":{"type":"boolean","title":"Ephemeral Connections","description":"Toggles whether to establish a new connection for each readout.","default":true},"type":{"type":"string","const":"modbus_tcp","title":"Type"}},"type":"object","required":["host","type"],"title":"ModbusTcpDetails"},"S7PlusDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"destination_tsap":{"$ref":"#/components/schemas/S7PlusDestinationTsap","description":"`SIMATIC-ROOT-ES` (Engineering Station) works most of the time. `SIMATIC-ROOT-HMI` (HMI)might work if connections with `SIMATIC-ROOT-ES`  fail for some reason like exceeded capacities.","default":"SIMATIC-ROOT-ES"},"type":{"type":"string","const":"s7plus","title":"Type"}},"type":"object","required":["host","port","type"],"title":"S7PlusDetails"},"S7PlusDestinationTsap":{"type":"string","enum":["SIMATIC-ROOT-ES","SIMATIC-ROOT-HMI"],"title":"S7PlusDestinationTsap"},"S7Details":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":102},"rack":{"type":"integer","title":"Rack","default":0},"slot":{"type":"integer","title":"Slot","default":2},"type":{"type":"string","const":"s7","title":"Type"}},"type":"object","required":["host","type"],"title":"S7Details"},"KraussMaffeiDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":18901},"machine":{"$ref":"#/components/schemas/KraussMaffeiMachine"},"initialization_mode":{"$ref":"#/components/schemas/KraussMaffeiInitializationMode"},"type":{"type":"string","const":"krauss_maffei","title":"Type"}},"type":"object","required":["host","machine","initialization_mode","type"],"title":"KraussMaffeiDetails"},"KraussMaffeiMachine":{"type":"string","enum":["C4","C5","C6"],"title":"KraussMaffeiMachine"},"KraussMaffeiInitializationMode":{"type":"string","enum":["Default","Extended"],"title":"KraussMaffeiInitializationMode"},"FinsDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":9600},"target_plc":{"$ref":"#/components/schemas/OmronTargetPlc","default":"Cs1OrNewer"},"local_address":{"type":"string","title":"Local Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the spark"},"remote_address":{"type":"string","title":"Remote Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the PLC"},"type":{"type":"string","const":"fins","title":"Type"}},"type":"object","required":["host","local_address","remote_address","type"],"title":"FinsDetails"},"OmronTargetPlc":{"type":"string","enum":["Classic","Cs1OrNewer"],"title":"OmronTargetPlc"},"CreateEnlyzeGatewayDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the computer running the Enlyze Gateway"},"port":{"type":"integer","title":"Port","description":"The port of the Enlyze Gateway"},"protocol_details":{"anyOf":[{"$ref":"#/components/schemas/OpcDaProtocolDetails"},{"$ref":"#/components/schemas/PviProtocolDetails"}],"title":"Protocol Details"},"type":{"type":"string","const":"enlyze_gateway","title":"Type"}},"type":"object","required":["host","port","protocol_details","type"],"title":"CreateEnlyzeGatewayDetails"},"OpcDaProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OPC_DA","title":"Protocol"},"server_name":{"type":"string","title":"Server Name","description":"The name of the OPC DA server"}},"type":"object","required":["protocol","server_name"],"title":"OpcDaProtocolDetails"},"PviProtocolDetails":{"properties":{"protocol":{"type":"string","const":"PVI","title":"Protocol"},"path":{"type":"string","title":"Path","description":"The path of a PVI node containing variables"}},"type":"object","required":["protocol","path"],"title":"PviProtocolDetails"},"CreateOdacDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","maximum":65535,"minimum":0,"title":"Port","default":2020},"type":{"type":"string","const":"odac","title":"Type"}},"type":"object","required":["host","type"],"title":"CreateOdacDetails"},"CreateOpcUaDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The OPC-UA endpoint including the `opc.tcp://` prefix, the host and port as well as the server path"},"security_settings":{"$ref":"#/components/schemas/OpcUaSecuritySettings"},"type":{"type":"string","const":"opcua","title":"Type"},"user_identity":{"oneOf":[{"$ref":"#/components/schemas/OpcUaAnonymousUserIdentity"},{"$ref":"#/components/schemas/OpcUaUsernamePasswordIdentity"}],"title":"User Identity","description":"The user identity to use. This can be a basic Username-Password identity or an anonymous identity implied by `Anonymous`.\nFor more background on user authentication check out the specification: https://opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User's%20Guide%20and%20Reference-QuickOPC/OPC%20UA%20User%20Authentication.html","discriminator":{"propertyName":"type","mapping":{"Anonymous":"#/components/schemas/OpcUaAnonymousUserIdentity","UserNamePassword":"#/components/schemas/OpcUaUsernamePasswordIdentity"}}}},"type":"object","required":["host","port","endpoint_url","security_settings","type","user_identity"],"title":"CreateOpcUaDetails"},"OpcUaSecuritySettings":{"properties":{"security_mode":{"$ref":"#/components/schemas/OpcUaMessageSecurityMode","description":"The message security mode to use. Modes other than `None` require a `security_policy` other than `None`."},"endpoint_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"},"token_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"}},"type":"object","required":["security_mode","endpoint_security_policy","token_security_policy"],"title":"OpcUaSecuritySettings"},"OpcUaMessageSecurityMode":{"type":"string","enum":["None","Sign","SignAndEncrypt"],"title":"OpcUaMessageSecurityMode"},"OpcUaSecurityPolicy":{"type":"string","enum":["None","Aes128-Sha256-RsaOaep","Aes256-Sha256-RsaPss","Basic128Rsa15","Basic256","Basic256Sha256"],"title":"OpcUaSecurityPolicy"},"OpcUaAnonymousUserIdentity":{"properties":{"type":{"type":"string","const":"Anonymous","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaAnonymousUserIdentity"},"OpcUaUsernamePasswordIdentity":{"properties":{"type":{"type":"string","const":"UserNamePassword","title":"Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["type","username","password"],"title":"OpcUaUsernamePasswordIdentity"},"CreatePlastcontrolDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"type":{"type":"string","const":"plastcontrol","title":"Type"},"readout_mode":{"$ref":"#/components/schemas/PlastcontrolActive"}},"type":"object","required":["host","port","type","readout_mode"],"title":"CreatePlastcontrolDetails"},"PlastcontrolActive":{"properties":{"type":{"type":"string","const":"active","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolActive"},"DataSource":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"type":{"type":"string","title":"Type"},"readout_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Readout Limit"},"readout_interval":{"type":"integer","title":"Readout Interval"},"readout_status":{"$ref":"#/components/schemas/ReadoutStatus"},"name":{"type":"string","title":"Name","description":"The human readable name of the data source."},"spark":{"type":"string","format":"uuid","title":"SPARK","description":"Which SPARK reads from the data source. It must be located at the same site as the current SPARK."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the data source."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Specific model or name describing the data source as concretely as possible."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"General remarks concerning this data source."},"capabilities":{"$ref":"#/components/schemas/DataSourceCapabilities"},"machine":{"type":"string","format":"uuid","title":"Machine","description":"On which machine the data source is located."},"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"This field is deprecated, use the `readout_status.last_readout_at`","deprecated":true},"details":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AllenBradleyDetails"},{"$ref":"#/components/schemas/ModbusTcpDetails"},{"$ref":"#/components/schemas/S7PlusDetails"},{"$ref":"#/components/schemas/S7Details"},{"$ref":"#/components/schemas/KraussMaffeiDetails"},{"$ref":"#/components/schemas/FinsDetails"},{"$ref":"#/components/schemas/ReadOpcUaDetails"},{"$ref":"#/components/schemas/EnlyzeGatewayDetails"},{"$ref":"#/components/schemas/OdacDetails"},{"$ref":"#/components/schemas/PlastcontrolDetails"}],"discriminator":{"propertyName":"type","mapping":{"allen_bradley":"#/components/schemas/AllenBradleyDetails","enlyze_gateway":"#/components/schemas/EnlyzeGatewayDetails","fins":"#/components/schemas/FinsDetails","krauss_maffei":"#/components/schemas/KraussMaffeiDetails","modbus_tcp":"#/components/schemas/ModbusTcpDetails","odac":"#/components/schemas/OdacDetails","opcua":"#/components/schemas/ReadOpcUaDetails","plastcontrol":"#/components/schemas/PlastcontrolDetails","s7":"#/components/schemas/S7Details","s7plus":"#/components/schemas/S7PlusDetails"}}},{"type":"null"}],"title":"Data Source Details","description":"Data Source specific properties required for the connection to the data source"}},"type":"object","required":["uuid","type","readout_limit","readout_interval","readout_status","name","spark","manufacturer","device_model","note","capabilities","machine","last_readout_at","details"],"title":"DataSource"},"ReadoutStatus":{"properties":{"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"The last time the data source was successfully read out.                Is `null` if the data source has not been read out successfully yet."},"configured_variables":{"type":"integer","title":"Configured Variables","description":"Number of active or evaluated variables"},"state":{"oneOf":[{"$ref":"#/components/schemas/OkReadoutStatus"},{"$ref":"#/components/schemas/ErrorReadoutStatus"},{"$ref":"#/components/schemas/UnknownReadoutStatus"}],"title":"State","discriminator":{"propertyName":"type","mapping":{"ERROR":"#/components/schemas/ErrorReadoutStatus","OK":"#/components/schemas/OkReadoutStatus","UNKNOWN":"#/components/schemas/UnknownReadoutStatus"}}}},"type":"object","required":["last_readout_at","configured_variables","state"],"title":"ReadoutStatus"},"OkReadoutStatus":{"properties":{"type":{"type":"string","const":"OK","title":"Type","default":"OK"}},"type":"object","title":"OkReadoutStatus"},"ErrorReadoutStatus":{"properties":{"reason":{"oneOf":[{"$ref":"#/components/schemas/HostLookupError"},{"$ref":"#/components/schemas/NoRouteToHost"},{"$ref":"#/components/schemas/HostDown"},{"$ref":"#/components/schemas/NetworkUnreachable"},{"$ref":"#/components/schemas/ConnectionRefused"},{"$ref":"#/components/schemas/ConnectionReset"},{"$ref":"#/components/schemas/ConnectionClosed"},{"$ref":"#/components/schemas/Timeout"},{"$ref":"#/components/schemas/EnlyzeGatewayError"},{"$ref":"#/components/schemas/OpcUaErrorResponse"},{"$ref":"#/components/schemas/OpcUaNoMatchingEndpointPolicy"},{"$ref":"#/components/schemas/S7PlusError"},{"$ref":"#/components/schemas/FinsNetworkRelayError"},{"$ref":"#/components/schemas/UnknownReadoutFailureReason"}],"title":"Reason","description":"Details about what went wrong","discriminator":{"propertyName":"type","mapping":{"CONNECTION_CLOSED":"#/components/schemas/ConnectionClosed","CONNECTION_REFUSED":"#/components/schemas/ConnectionRefused","CONNECTION_RESET":"#/components/schemas/ConnectionReset","ENLYZE_GATEWAY_ERROR":"#/components/schemas/EnlyzeGatewayError","FINS_NETWORK_RELAY_ERROR":"#/components/schemas/FinsNetworkRelayError","HOST_DOWN":"#/components/schemas/HostDown","LOOKUP_ERROR":"#/components/schemas/HostLookupError","NETWORK_UNREACHABLE":"#/components/schemas/NetworkUnreachable","NO_ROUTE_TO_HOST":"#/components/schemas/NoRouteToHost","OPC_UA_ERROR_RESPONSE":"#/components/schemas/OpcUaErrorResponse","OPC_UA_NO_MATCHING_ENDPOINT_POLICY":"#/components/schemas/OpcUaNoMatchingEndpointPolicy","S7PLUS_ERROR":"#/components/schemas/S7PlusError","TIMEOUT":"#/components/schemas/Timeout","UNKNOWN":"#/components/schemas/UnknownReadoutFailureReason"}}},"error_at":{"type":"string","format":"date-time","title":"Error At","description":"The time this error occured"},"type":{"type":"string","const":"ERROR","title":"Type","default":"ERROR"}},"type":"object","required":["reason","error_at"],"title":"ErrorReadoutStatus"},"HostLookupError":{"properties":{"type":{"type":"string","const":"LOOKUP_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"HostLookupError"},"NoRouteToHost":{"properties":{"type":{"type":"string","const":"NO_ROUTE_TO_HOST","title":"Type"}},"type":"object","required":["type"],"title":"NoRouteToHost"},"HostDown":{"properties":{"type":{"type":"string","const":"HOST_DOWN","title":"Type"}},"type":"object","required":["type"],"title":"HostDown"},"NetworkUnreachable":{"properties":{"type":{"type":"string","const":"NETWORK_UNREACHABLE","title":"Type"}},"type":"object","required":["type"],"title":"NetworkUnreachable"},"ConnectionRefused":{"properties":{"type":{"type":"string","const":"CONNECTION_REFUSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionRefused"},"ConnectionReset":{"properties":{"type":{"type":"string","const":"CONNECTION_RESET","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionReset"},"ConnectionClosed":{"properties":{"type":{"type":"string","const":"CONNECTION_CLOSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionClosed"},"Timeout":{"properties":{"type":{"type":"string","const":"TIMEOUT","title":"Type"}},"type":"object","required":["type"],"title":"Timeout"},"EnlyzeGatewayError":{"properties":{"type":{"type":"string","const":"ENLYZE_GATEWAY_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"EnlyzeGatewayError"},"OpcUaErrorResponse":{"properties":{"type":{"type":"string","const":"OPC_UA_ERROR_RESPONSE","title":"Type"},"code":{"type":"integer","title":"Code","description":"The numerical error code returned by the OPC UA Server."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"A descriptive name corresponding to the error code."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A descriptive string corresponding to the error code."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"The error reason returned by the server."}},"type":"object","required":["type","code"],"title":"OpcUaErrorResponse"},"OpcUaNoMatchingEndpointPolicy":{"properties":{"type":{"type":"string","const":"OPC_UA_NO_MATCHING_ENDPOINT_POLICY","title":"Type"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The endpoint of the OPC UA server"},"endpoint_security_policy_uri":{"type":"string","title":"Endpoint Security Policy Uri","description":"The URI of the requested Endpoint Security Policy"},"message_security_mode":{"type":"string","title":"Message Security Mode","description":"The requested Message Security Mode"},"token_type":{"type":"string","title":"Token Type","description":"The configured Token Type"},"token_security_policy_uri":{"type":"string","title":"Token Security Policy Uri","description":"The requested Token Security Policy"}},"type":"object","required":["type","endpoint_url","endpoint_security_policy_uri","message_security_mode","token_type","token_security_policy_uri"],"title":"OpcUaNoMatchingEndpointPolicy"},"S7PlusError":{"properties":{"type":{"type":"string","const":"S7PLUS_ERROR","title":"Type"},"category":{"$ref":"#/components/schemas/S7PlusErrorCategory","description":"The category of the error. `AUTHENTICATION` can indicate an incorrect password or lack of permissions."}},"type":"object","required":["type","category"],"title":"S7PlusError"},"S7PlusErrorCategory":{"type":"string","enum":["AUTHENTICATION","UNKNOWN"],"title":"S7PlusErrorCategory"},"FinsNetworkRelayError":{"properties":{"type":{"type":"string","const":"FINS_NETWORK_RELAY_ERROR","title":"Type"},"response_code":{"type":"integer","title":"Response Code","description":"The FINS response (end) code reported by the relay."},"requested_node":{"type":"integer","title":"Requested Node","description":"The node number the request was addressed to."},"relay_network":{"type":"integer","title":"Relay Network","description":"The network address of the relay that reported the error."},"relay_node":{"type":"integer","title":"Relay Node","description":"The node address of the relay that reported the error."}},"type":"object","required":["type","response_code","requested_node","relay_network","relay_node"],"title":"FinsNetworkRelayError"},"UnknownReadoutFailureReason":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type"}},"type":"object","required":["type"],"title":"UnknownReadoutFailureReason"},"UnknownReadoutStatus":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type","default":"UNKNOWN"}},"type":"object","title":"UnknownReadoutStatus"},"DataSourceCapabilities":{"properties":{"variable_discovery":{"type":"boolean","title":"Variable Discovery","description":"Indicates whether variable discovery is supported."}},"type":"object","required":["variable_discovery"],"title":"DataSourceCapabilities"},"ReadOpcUaDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The OPC-UA endpoint including the `opc.tcp://` prefix, the host and port as well as the server path"},"security_settings":{"$ref":"#/components/schemas/OpcUaSecuritySettings"},"type":{"type":"string","const":"opcua","title":"Type"},"user_identity":{"oneOf":[{"$ref":"#/components/schemas/OpcUaAnonymousUserIdentity"},{"$ref":"#/components/schemas/OpcUaUsernamePasswordIdentity"},{"$ref":"#/components/schemas/OpcUaX509CertificateUserIdentity"}],"title":"User Identity","description":"The user identity to use. This can be a basic Username-Password identity,a certificate and key or an anonymous identity implied by `Anonymous`.\nFor more background on user authentication check out the specification: https://opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User's%20Guide%20and%20Reference-QuickOPC/OPC%20UA%20User%20Authentication.html","discriminator":{"propertyName":"type","mapping":{"Anonymous":"#/components/schemas/OpcUaAnonymousUserIdentity","UserNamePassword":"#/components/schemas/OpcUaUsernamePasswordIdentity","X509Certificate":"#/components/schemas/OpcUaX509CertificateUserIdentity"}}}},"type":"object","required":["host","port","endpoint_url","security_settings","type","user_identity"],"title":"ReadOpcUaDetails"},"OpcUaX509CertificateUserIdentity":{"properties":{"type":{"type":"string","const":"X509Certificate","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaX509CertificateUserIdentity"},"EnlyzeGatewayDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the computer running the Enlyze Gateway"},"port":{"type":"integer","title":"Port","description":"The port of the Enlyze Gateway"},"protocol_details":{"oneOf":[{"$ref":"#/components/schemas/OpcDaProtocolDetails"},{"$ref":"#/components/schemas/PviProtocolDetails"},{"$ref":"#/components/schemas/OtherProtocolDetails"}],"title":"Protocol Details","discriminator":{"propertyName":"protocol","mapping":{"OPC_DA":"#/components/schemas/OpcDaProtocolDetails","OTHER":"#/components/schemas/OtherProtocolDetails","PVI":"#/components/schemas/PviProtocolDetails"}}},"type":{"type":"string","const":"enlyze_gateway","title":"Type"}},"type":"object","required":["host","port","protocol_details","type"],"title":"EnlyzeGatewayDetails"},"OtherProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OTHER","title":"Protocol"}},"type":"object","required":["protocol"],"title":"OtherProtocolDetails"},"OdacDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","maximum":65535,"minimum":0,"title":"Port","default":2020},"type":{"type":"string","const":"odac","title":"Type"},"protocol_override":{"anyOf":[{"$ref":"#/components/schemas/OdacProtocolOverride"},{"type":"null"}],"description":"Force a specific protocol. This is a persistent PLC write."}},"type":"object","required":["host","type"],"title":"OdacDetails"},"OdacProtocolOverride":{"type":"string","enum":["odac","host"],"title":"OdacProtocolOverride"},"PlastcontrolDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"type":{"type":"string","const":"plastcontrol","title":"Type"},"readout_mode":{"oneOf":[{"$ref":"#/components/schemas/PlastcontrolActive"},{"$ref":"#/components/schemas/PlastcontrolPassive"}],"title":"Readout Mode","discriminator":{"propertyName":"type","mapping":{"active":"#/components/schemas/PlastcontrolActive","passive":"#/components/schemas/PlastcontrolPassive"}}}},"type":"object","required":["host","port","type","readout_mode"],"title":"PlastcontrolDetails"},"PlastcontrolPassive":{"properties":{"type":{"type":"string","const":"passive","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolPassive"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"paths":{"/v2/data-sources":{"post":{"tags":["Data Sources"],"summary":"Post Data Source","description":"Create a new data source","operationId":"post_data_source_v2_data_sources_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDataSourceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSource"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}}}
```

## Get Data Source

> Returns details for a specific data source.

```json
{"openapi":"3.1.0","info":{"title":"ENLYZE API","version":"v2"},"tags":[{"name":"Data Sources"}],"servers":[{"url":"/api"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","in":"header","name":"Authorization"}},"schemas":{"DataSource":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"type":{"type":"string","title":"Type"},"readout_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Readout Limit"},"readout_interval":{"type":"integer","title":"Readout Interval"},"readout_status":{"$ref":"#/components/schemas/ReadoutStatus"},"name":{"type":"string","title":"Name","description":"The human readable name of the data source."},"spark":{"type":"string","format":"uuid","title":"SPARK","description":"Which SPARK reads from the data source. It must be located at the same site as the current SPARK."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the data source."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Specific model or name describing the data source as concretely as possible."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"General remarks concerning this data source."},"capabilities":{"$ref":"#/components/schemas/DataSourceCapabilities"},"machine":{"type":"string","format":"uuid","title":"Machine","description":"On which machine the data source is located."},"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"This field is deprecated, use the `readout_status.last_readout_at`","deprecated":true},"details":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AllenBradleyDetails"},{"$ref":"#/components/schemas/ModbusTcpDetails"},{"$ref":"#/components/schemas/S7PlusDetails"},{"$ref":"#/components/schemas/S7Details"},{"$ref":"#/components/schemas/KraussMaffeiDetails"},{"$ref":"#/components/schemas/FinsDetails"},{"$ref":"#/components/schemas/ReadOpcUaDetails"},{"$ref":"#/components/schemas/EnlyzeGatewayDetails"},{"$ref":"#/components/schemas/OdacDetails"},{"$ref":"#/components/schemas/PlastcontrolDetails"}],"discriminator":{"propertyName":"type","mapping":{"allen_bradley":"#/components/schemas/AllenBradleyDetails","enlyze_gateway":"#/components/schemas/EnlyzeGatewayDetails","fins":"#/components/schemas/FinsDetails","krauss_maffei":"#/components/schemas/KraussMaffeiDetails","modbus_tcp":"#/components/schemas/ModbusTcpDetails","odac":"#/components/schemas/OdacDetails","opcua":"#/components/schemas/ReadOpcUaDetails","plastcontrol":"#/components/schemas/PlastcontrolDetails","s7":"#/components/schemas/S7Details","s7plus":"#/components/schemas/S7PlusDetails"}}},{"type":"null"}],"title":"Data Source Details","description":"Data Source specific properties required for the connection to the data source"}},"type":"object","required":["uuid","type","readout_limit","readout_interval","readout_status","name","spark","manufacturer","device_model","note","capabilities","machine","last_readout_at","details"],"title":"DataSource"},"ReadoutStatus":{"properties":{"last_readout_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Readout At","description":"The last time the data source was successfully read out.                Is `null` if the data source has not been read out successfully yet."},"configured_variables":{"type":"integer","title":"Configured Variables","description":"Number of active or evaluated variables"},"state":{"oneOf":[{"$ref":"#/components/schemas/OkReadoutStatus"},{"$ref":"#/components/schemas/ErrorReadoutStatus"},{"$ref":"#/components/schemas/UnknownReadoutStatus"}],"title":"State","discriminator":{"propertyName":"type","mapping":{"ERROR":"#/components/schemas/ErrorReadoutStatus","OK":"#/components/schemas/OkReadoutStatus","UNKNOWN":"#/components/schemas/UnknownReadoutStatus"}}}},"type":"object","required":["last_readout_at","configured_variables","state"],"title":"ReadoutStatus"},"OkReadoutStatus":{"properties":{"type":{"type":"string","const":"OK","title":"Type","default":"OK"}},"type":"object","title":"OkReadoutStatus"},"ErrorReadoutStatus":{"properties":{"reason":{"oneOf":[{"$ref":"#/components/schemas/HostLookupError"},{"$ref":"#/components/schemas/NoRouteToHost"},{"$ref":"#/components/schemas/HostDown"},{"$ref":"#/components/schemas/NetworkUnreachable"},{"$ref":"#/components/schemas/ConnectionRefused"},{"$ref":"#/components/schemas/ConnectionReset"},{"$ref":"#/components/schemas/ConnectionClosed"},{"$ref":"#/components/schemas/Timeout"},{"$ref":"#/components/schemas/EnlyzeGatewayError"},{"$ref":"#/components/schemas/OpcUaErrorResponse"},{"$ref":"#/components/schemas/OpcUaNoMatchingEndpointPolicy"},{"$ref":"#/components/schemas/S7PlusError"},{"$ref":"#/components/schemas/FinsNetworkRelayError"},{"$ref":"#/components/schemas/UnknownReadoutFailureReason"}],"title":"Reason","description":"Details about what went wrong","discriminator":{"propertyName":"type","mapping":{"CONNECTION_CLOSED":"#/components/schemas/ConnectionClosed","CONNECTION_REFUSED":"#/components/schemas/ConnectionRefused","CONNECTION_RESET":"#/components/schemas/ConnectionReset","ENLYZE_GATEWAY_ERROR":"#/components/schemas/EnlyzeGatewayError","FINS_NETWORK_RELAY_ERROR":"#/components/schemas/FinsNetworkRelayError","HOST_DOWN":"#/components/schemas/HostDown","LOOKUP_ERROR":"#/components/schemas/HostLookupError","NETWORK_UNREACHABLE":"#/components/schemas/NetworkUnreachable","NO_ROUTE_TO_HOST":"#/components/schemas/NoRouteToHost","OPC_UA_ERROR_RESPONSE":"#/components/schemas/OpcUaErrorResponse","OPC_UA_NO_MATCHING_ENDPOINT_POLICY":"#/components/schemas/OpcUaNoMatchingEndpointPolicy","S7PLUS_ERROR":"#/components/schemas/S7PlusError","TIMEOUT":"#/components/schemas/Timeout","UNKNOWN":"#/components/schemas/UnknownReadoutFailureReason"}}},"error_at":{"type":"string","format":"date-time","title":"Error At","description":"The time this error occured"},"type":{"type":"string","const":"ERROR","title":"Type","default":"ERROR"}},"type":"object","required":["reason","error_at"],"title":"ErrorReadoutStatus"},"HostLookupError":{"properties":{"type":{"type":"string","const":"LOOKUP_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"HostLookupError"},"NoRouteToHost":{"properties":{"type":{"type":"string","const":"NO_ROUTE_TO_HOST","title":"Type"}},"type":"object","required":["type"],"title":"NoRouteToHost"},"HostDown":{"properties":{"type":{"type":"string","const":"HOST_DOWN","title":"Type"}},"type":"object","required":["type"],"title":"HostDown"},"NetworkUnreachable":{"properties":{"type":{"type":"string","const":"NETWORK_UNREACHABLE","title":"Type"}},"type":"object","required":["type"],"title":"NetworkUnreachable"},"ConnectionRefused":{"properties":{"type":{"type":"string","const":"CONNECTION_REFUSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionRefused"},"ConnectionReset":{"properties":{"type":{"type":"string","const":"CONNECTION_RESET","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionReset"},"ConnectionClosed":{"properties":{"type":{"type":"string","const":"CONNECTION_CLOSED","title":"Type"}},"type":"object","required":["type"],"title":"ConnectionClosed"},"Timeout":{"properties":{"type":{"type":"string","const":"TIMEOUT","title":"Type"}},"type":"object","required":["type"],"title":"Timeout"},"EnlyzeGatewayError":{"properties":{"type":{"type":"string","const":"ENLYZE_GATEWAY_ERROR","title":"Type"}},"type":"object","required":["type"],"title":"EnlyzeGatewayError"},"OpcUaErrorResponse":{"properties":{"type":{"type":"string","const":"OPC_UA_ERROR_RESPONSE","title":"Type"},"code":{"type":"integer","title":"Code","description":"The numerical error code returned by the OPC UA Server."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"A descriptive name corresponding to the error code."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A descriptive string corresponding to the error code."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"The error reason returned by the server."}},"type":"object","required":["type","code"],"title":"OpcUaErrorResponse"},"OpcUaNoMatchingEndpointPolicy":{"properties":{"type":{"type":"string","const":"OPC_UA_NO_MATCHING_ENDPOINT_POLICY","title":"Type"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The endpoint of the OPC UA server"},"endpoint_security_policy_uri":{"type":"string","title":"Endpoint Security Policy Uri","description":"The URI of the requested Endpoint Security Policy"},"message_security_mode":{"type":"string","title":"Message Security Mode","description":"The requested Message Security Mode"},"token_type":{"type":"string","title":"Token Type","description":"The configured Token Type"},"token_security_policy_uri":{"type":"string","title":"Token Security Policy Uri","description":"The requested Token Security Policy"}},"type":"object","required":["type","endpoint_url","endpoint_security_policy_uri","message_security_mode","token_type","token_security_policy_uri"],"title":"OpcUaNoMatchingEndpointPolicy"},"S7PlusError":{"properties":{"type":{"type":"string","const":"S7PLUS_ERROR","title":"Type"},"category":{"$ref":"#/components/schemas/S7PlusErrorCategory","description":"The category of the error. `AUTHENTICATION` can indicate an incorrect password or lack of permissions."}},"type":"object","required":["type","category"],"title":"S7PlusError"},"S7PlusErrorCategory":{"type":"string","enum":["AUTHENTICATION","UNKNOWN"],"title":"S7PlusErrorCategory"},"FinsNetworkRelayError":{"properties":{"type":{"type":"string","const":"FINS_NETWORK_RELAY_ERROR","title":"Type"},"response_code":{"type":"integer","title":"Response Code","description":"The FINS response (end) code reported by the relay."},"requested_node":{"type":"integer","title":"Requested Node","description":"The node number the request was addressed to."},"relay_network":{"type":"integer","title":"Relay Network","description":"The network address of the relay that reported the error."},"relay_node":{"type":"integer","title":"Relay Node","description":"The node address of the relay that reported the error."}},"type":"object","required":["type","response_code","requested_node","relay_network","relay_node"],"title":"FinsNetworkRelayError"},"UnknownReadoutFailureReason":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type"}},"type":"object","required":["type"],"title":"UnknownReadoutFailureReason"},"UnknownReadoutStatus":{"properties":{"type":{"type":"string","const":"UNKNOWN","title":"Type","default":"UNKNOWN"}},"type":"object","title":"UnknownReadoutStatus"},"DataSourceCapabilities":{"properties":{"variable_discovery":{"type":"boolean","title":"Variable Discovery","description":"Indicates whether variable discovery is supported."}},"type":"object","required":["variable_discovery"],"title":"DataSourceCapabilities"},"AllenBradleyDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":44818},"type":{"type":"string","const":"allen_bradley","title":"Type"}},"type":"object","required":["host","type"],"title":"AllenBradleyDetails"},"ModbusTcpDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":502},"ephemeral_connections":{"type":"boolean","title":"Ephemeral Connections","description":"Toggles whether to establish a new connection for each readout.","default":true},"type":{"type":"string","const":"modbus_tcp","title":"Type"}},"type":"object","required":["host","type"],"title":"ModbusTcpDetails"},"S7PlusDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"destination_tsap":{"$ref":"#/components/schemas/S7PlusDestinationTsap","description":"`SIMATIC-ROOT-ES` (Engineering Station) works most of the time. `SIMATIC-ROOT-HMI` (HMI)might work if connections with `SIMATIC-ROOT-ES`  fail for some reason like exceeded capacities.","default":"SIMATIC-ROOT-ES"},"type":{"type":"string","const":"s7plus","title":"Type"}},"type":"object","required":["host","port","type"],"title":"S7PlusDetails"},"S7PlusDestinationTsap":{"type":"string","enum":["SIMATIC-ROOT-ES","SIMATIC-ROOT-HMI"],"title":"S7PlusDestinationTsap"},"S7Details":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":102},"rack":{"type":"integer","title":"Rack","default":0},"slot":{"type":"integer","title":"Slot","default":2},"type":{"type":"string","const":"s7","title":"Type"}},"type":"object","required":["host","type"],"title":"S7Details"},"KraussMaffeiDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":18901},"machine":{"$ref":"#/components/schemas/KraussMaffeiMachine"},"initialization_mode":{"$ref":"#/components/schemas/KraussMaffeiInitializationMode"},"type":{"type":"string","const":"krauss_maffei","title":"Type"}},"type":"object","required":["host","machine","initialization_mode","type"],"title":"KraussMaffeiDetails"},"KraussMaffeiMachine":{"type":"string","enum":["C4","C5","C6"],"title":"KraussMaffeiMachine"},"KraussMaffeiInitializationMode":{"type":"string","enum":["Default","Extended"],"title":"KraussMaffeiInitializationMode"},"FinsDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":9600},"target_plc":{"$ref":"#/components/schemas/OmronTargetPlc","default":"Cs1OrNewer"},"local_address":{"type":"string","title":"Local Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the spark"},"remote_address":{"type":"string","title":"Remote Address","description":"OMRON device address (\"NETWORK.NODE.UNIT\") of the PLC"},"type":{"type":"string","const":"fins","title":"Type"}},"type":"object","required":["host","local_address","remote_address","type"],"title":"FinsDetails"},"OmronTargetPlc":{"type":"string","enum":["Classic","Cs1OrNewer"],"title":"OmronTargetPlc"},"ReadOpcUaDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The OPC-UA endpoint including the `opc.tcp://` prefix, the host and port as well as the server path"},"security_settings":{"$ref":"#/components/schemas/OpcUaSecuritySettings"},"type":{"type":"string","const":"opcua","title":"Type"},"user_identity":{"oneOf":[{"$ref":"#/components/schemas/OpcUaAnonymousUserIdentity"},{"$ref":"#/components/schemas/OpcUaUsernamePasswordIdentity"},{"$ref":"#/components/schemas/OpcUaX509CertificateUserIdentity"}],"title":"User Identity","description":"The user identity to use. This can be a basic Username-Password identity,a certificate and key or an anonymous identity implied by `Anonymous`.\nFor more background on user authentication check out the specification: https://opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User's%20Guide%20and%20Reference-QuickOPC/OPC%20UA%20User%20Authentication.html","discriminator":{"propertyName":"type","mapping":{"Anonymous":"#/components/schemas/OpcUaAnonymousUserIdentity","UserNamePassword":"#/components/schemas/OpcUaUsernamePasswordIdentity","X509Certificate":"#/components/schemas/OpcUaX509CertificateUserIdentity"}}}},"type":"object","required":["host","port","endpoint_url","security_settings","type","user_identity"],"title":"ReadOpcUaDetails"},"OpcUaSecuritySettings":{"properties":{"security_mode":{"$ref":"#/components/schemas/OpcUaMessageSecurityMode","description":"The message security mode to use. Modes other than `None` require a `security_policy` other than `None`."},"endpoint_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"},"token_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"}},"type":"object","required":["security_mode","endpoint_security_policy","token_security_policy"],"title":"OpcUaSecuritySettings"},"OpcUaMessageSecurityMode":{"type":"string","enum":["None","Sign","SignAndEncrypt"],"title":"OpcUaMessageSecurityMode"},"OpcUaSecurityPolicy":{"type":"string","enum":["None","Aes128-Sha256-RsaOaep","Aes256-Sha256-RsaPss","Basic128Rsa15","Basic256","Basic256Sha256"],"title":"OpcUaSecurityPolicy"},"OpcUaAnonymousUserIdentity":{"properties":{"type":{"type":"string","const":"Anonymous","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaAnonymousUserIdentity"},"OpcUaUsernamePasswordIdentity":{"properties":{"type":{"type":"string","const":"UserNamePassword","title":"Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["type","username","password"],"title":"OpcUaUsernamePasswordIdentity"},"OpcUaX509CertificateUserIdentity":{"properties":{"type":{"type":"string","const":"X509Certificate","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaX509CertificateUserIdentity"},"EnlyzeGatewayDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the computer running the Enlyze Gateway"},"port":{"type":"integer","title":"Port","description":"The port of the Enlyze Gateway"},"protocol_details":{"oneOf":[{"$ref":"#/components/schemas/OpcDaProtocolDetails"},{"$ref":"#/components/schemas/PviProtocolDetails"},{"$ref":"#/components/schemas/OtherProtocolDetails"}],"title":"Protocol Details","discriminator":{"propertyName":"protocol","mapping":{"OPC_DA":"#/components/schemas/OpcDaProtocolDetails","OTHER":"#/components/schemas/OtherProtocolDetails","PVI":"#/components/schemas/PviProtocolDetails"}}},"type":{"type":"string","const":"enlyze_gateway","title":"Type"}},"type":"object","required":["host","port","protocol_details","type"],"title":"EnlyzeGatewayDetails"},"OpcDaProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OPC_DA","title":"Protocol"},"server_name":{"type":"string","title":"Server Name","description":"The name of the OPC DA server"}},"type":"object","required":["protocol","server_name"],"title":"OpcDaProtocolDetails"},"PviProtocolDetails":{"properties":{"protocol":{"type":"string","const":"PVI","title":"Protocol"},"path":{"type":"string","title":"Path","description":"The path of a PVI node containing variables"}},"type":"object","required":["protocol","path"],"title":"PviProtocolDetails"},"OtherProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OTHER","title":"Protocol"}},"type":"object","required":["protocol"],"title":"OtherProtocolDetails"},"OdacDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","maximum":65535,"minimum":0,"title":"Port","default":2020},"type":{"type":"string","const":"odac","title":"Type"},"protocol_override":{"anyOf":[{"$ref":"#/components/schemas/OdacProtocolOverride"},{"type":"null"}],"description":"Force a specific protocol. This is a persistent PLC write."}},"type":"object","required":["host","type"],"title":"OdacDetails"},"OdacProtocolOverride":{"type":"string","enum":["odac","host"],"title":"OdacProtocolOverride"},"PlastcontrolDetails":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"type":{"type":"string","const":"plastcontrol","title":"Type"},"readout_mode":{"oneOf":[{"$ref":"#/components/schemas/PlastcontrolActive"},{"$ref":"#/components/schemas/PlastcontrolPassive"}],"title":"Readout Mode","discriminator":{"propertyName":"type","mapping":{"active":"#/components/schemas/PlastcontrolActive","passive":"#/components/schemas/PlastcontrolPassive"}}}},"type":"object","required":["host","port","type","readout_mode"],"title":"PlastcontrolDetails"},"PlastcontrolActive":{"properties":{"type":{"type":"string","const":"active","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolActive"},"PlastcontrolPassive":{"properties":{"type":{"type":"string","const":"passive","title":"Type"}},"type":"object","required":["type"],"title":"PlastcontrolPassive"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"paths":{"/v2/data-sources/{uuid}":{"get":{"tags":["Data Sources"],"summary":"Get Data Source","description":"Returns details for a specific data source.","operationId":"get_data_source_v2_data_sources__uuid__get","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The UUID of the site."}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSource"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}}}
```

## Delete Data Source

> Delete a data source

```json
{"openapi":"3.1.0","info":{"title":"ENLYZE API","version":"v2"},"tags":[{"name":"Data Sources"}],"servers":[{"url":"/api"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","in":"header","name":"Authorization"}},"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"paths":{"/v2/data-sources/{data_source_uuid}":{"delete":{"tags":["Data Sources"],"summary":"Delete Data Source","description":"Delete a data source","operationId":"delete_data_source_v2_data_sources__data_source_uuid__delete","parameters":[{"name":"data_source_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The UUID of the data source."}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}}}
```

## Update Data Source

> Update a data source

```json
{"openapi":"3.1.0","info":{"title":"ENLYZE API","version":"v2"},"tags":[{"name":"Data Sources"}],"servers":[{"url":"/api"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","in":"header","name":"Authorization"}},"schemas":{"UpdateDataSourceRequest":{"properties":{"name":{"type":"string","title":"Name","description":"The human readable name of the data source."},"spark":{"type":"string","format":"uuid","title":"SPARK","description":"Which SPARK reads from the data source. It must be located at the same site as the current SPARK."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the data source."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Specific model or name describing the data source as concretely as possible."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"General remarks concerning this data source."},"details":{"oneOf":[{"$ref":"#/components/schemas/PatchAllenBradleyDetails"},{"$ref":"#/components/schemas/PatchEnlyzeGatewayDetails"},{"$ref":"#/components/schemas/PatchKraussMaffeiDetails"},{"$ref":"#/components/schemas/PatchModbusTcpDetails"},{"$ref":"#/components/schemas/PatchOdacDetails"},{"$ref":"#/components/schemas/PatchFinsDetails"},{"$ref":"#/components/schemas/PatchOpcUaDetails"},{"$ref":"#/components/schemas/PatchPlastcontrolDetails"},{"$ref":"#/components/schemas/PatchS7Details"},{"$ref":"#/components/schemas/PatchS7PlusDetails"}],"title":"Data Source Details","description":"Data Source specific properties required for the connection to the data source","discriminator":{"propertyName":"type","mapping":{"allen_bradley":"#/components/schemas/PatchAllenBradleyDetails","enlyze_gateway":"#/components/schemas/PatchEnlyzeGatewayDetails","fins":"#/components/schemas/PatchFinsDetails","krauss_maffei":"#/components/schemas/PatchKraussMaffeiDetails","modbus_tcp":"#/components/schemas/PatchModbusTcpDetails","odac":"#/components/schemas/PatchOdacDetails","opcua":"#/components/schemas/PatchOpcUaDetails","plastcontrol":"#/components/schemas/PatchPlastcontrolDetails","s7":"#/components/schemas/PatchS7Details","s7plus":"#/components/schemas/PatchS7PlusDetails"}}}},"type":"object","title":"UpdateDataSourceRequest"},"PatchAllenBradleyDetails":{"properties":{"type":{"type":"string","const":"allen_bradley","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."}},"type":"object","required":["type"],"title":"PatchAllenBradleyDetails"},"PatchEnlyzeGatewayDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"type":{"type":"string","const":"enlyze_gateway","title":"Type"},"protocol_details":{"oneOf":[{"$ref":"#/components/schemas/OpcDaProtocolDetails"},{"$ref":"#/components/schemas/PviProtocolDetails"}],"title":"Protocol Details","discriminator":{"propertyName":"protocol","mapping":{"OPC_DA":"#/components/schemas/OpcDaProtocolDetails","PVI":"#/components/schemas/PviProtocolDetails"}}}},"type":"object","required":["type"],"title":"PatchEnlyzeGatewayDetails"},"OpcDaProtocolDetails":{"properties":{"protocol":{"type":"string","const":"OPC_DA","title":"Protocol"},"server_name":{"type":"string","title":"Server Name","description":"The name of the OPC DA server"}},"type":"object","required":["protocol","server_name"],"title":"OpcDaProtocolDetails"},"PviProtocolDetails":{"properties":{"protocol":{"type":"string","const":"PVI","title":"Protocol"},"path":{"type":"string","title":"Path","description":"The path of a PVI node containing variables"}},"type":"object","required":["protocol","path"],"title":"PviProtocolDetails"},"PatchKraussMaffeiDetails":{"properties":{"type":{"type":"string","const":"krauss_maffei","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"machine":{"$ref":"#/components/schemas/KraussMaffeiMachine"},"initialization_mode":{"$ref":"#/components/schemas/KraussMaffeiInitializationMode"}},"type":"object","required":["type","machine","initialization_mode"],"title":"PatchKraussMaffeiDetails"},"KraussMaffeiMachine":{"type":"string","enum":["C4","C5","C6"],"title":"KraussMaffeiMachine"},"KraussMaffeiInitializationMode":{"type":"string","enum":["Default","Extended"],"title":"KraussMaffeiInitializationMode"},"PatchModbusTcpDetails":{"properties":{"type":{"type":"string","const":"modbus_tcp","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"ephemeral_connections":{"type":"boolean","title":"Ephemeral Connections","description":"Toggles whether the connection to the Modbus device should be opened just-in-time for the readout and shutdown afterwards. This is necessary for Modbus devices that only support a single concurrent connection."}},"type":"object","required":["type"],"title":"PatchModbusTcpDetails"},"PatchOdacDetails":{"properties":{"type":{"type":"string","const":"odac","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."}},"type":"object","required":["type"],"title":"PatchOdacDetails"},"PatchFinsDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"target_plc":{"$ref":"#/components/schemas/OmronTargetPlc"},"local_address":{"type":"string","title":"Local Address"},"remote_address":{"type":"string","title":"Remote Address"},"type":{"type":"string","const":"fins","title":"Type"}},"type":"object","required":["type"],"title":"PatchFinsDetails"},"OmronTargetPlc":{"type":"string","enum":["Classic","Cs1OrNewer"],"title":"OmronTargetPlc"},"PatchOpcUaDetails":{"properties":{"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"endpoint_url":{"type":"string","title":"Endpoint Url","description":"The OPC-UA endpoint including the `opc.tcp://` prefix, the host and port as well as the server path"},"security_settings":{"$ref":"#/components/schemas/OpcUaSecuritySettings"},"type":{"type":"string","const":"opcua","title":"Type"},"user_identity":{"oneOf":[{"$ref":"#/components/schemas/OpcUaAnonymousUserIdentity"},{"$ref":"#/components/schemas/OpcUaUsernamePasswordIdentity"}],"title":"User Identity","discriminator":{"propertyName":"type","mapping":{"Anonymous":"#/components/schemas/OpcUaAnonymousUserIdentity","UserNamePassword":"#/components/schemas/OpcUaUsernamePasswordIdentity"}}}},"type":"object","required":["type"],"title":"PatchOpcUaDetails"},"OpcUaSecuritySettings":{"properties":{"security_mode":{"$ref":"#/components/schemas/OpcUaMessageSecurityMode","description":"The message security mode to use. Modes other than `None` require a `security_policy` other than `None`."},"endpoint_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"},"token_security_policy":{"$ref":"#/components/schemas/OpcUaSecurityPolicy"}},"type":"object","required":["security_mode","endpoint_security_policy","token_security_policy"],"title":"OpcUaSecuritySettings"},"OpcUaMessageSecurityMode":{"type":"string","enum":["None","Sign","SignAndEncrypt"],"title":"OpcUaMessageSecurityMode"},"OpcUaSecurityPolicy":{"type":"string","enum":["None","Aes128-Sha256-RsaOaep","Aes256-Sha256-RsaPss","Basic128Rsa15","Basic256","Basic256Sha256"],"title":"OpcUaSecurityPolicy"},"OpcUaAnonymousUserIdentity":{"properties":{"type":{"type":"string","const":"Anonymous","title":"Type"}},"type":"object","required":["type"],"title":"OpcUaAnonymousUserIdentity"},"OpcUaUsernamePasswordIdentity":{"properties":{"type":{"type":"string","const":"UserNamePassword","title":"Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["type","username","password"],"title":"OpcUaUsernamePasswordIdentity"},"PatchPlastcontrolDetails":{"properties":{"type":{"type":"string","const":"plastcontrol","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."}},"type":"object","required":["type"],"title":"PatchPlastcontrolDetails"},"PatchS7Details":{"properties":{"type":{"type":"string","const":"s7","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"rack":{"type":"integer","title":"Rack"},"slot":{"type":"integer","title":"Slot"}},"type":"object","required":["type"],"title":"PatchS7Details"},"PatchS7PlusDetails":{"properties":{"type":{"type":"string","const":"s7plus","title":"Type"},"host":{"type":"string","title":"Host","description":"Host or IP of the PLC."},"port":{"type":"integer","title":"Port","description":"Port the PLC is listening on."},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"destination_tsap":{"$ref":"#/components/schemas/S7PlusDestinationTsap"}},"type":"object","required":["type"],"title":"PatchS7PlusDetails"},"S7PlusDestinationTsap":{"type":"string","enum":["SIMATIC-ROOT-ES","SIMATIC-ROOT-HMI"],"title":"S7PlusDestinationTsap"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"paths":{"/v2/data-sources/{data_source_uuid}":{"patch":{"tags":["Data Sources"],"summary":"Update Data Source","description":"Update a data source","operationId":"update_data_source_v2_data_sources__data_source_uuid__patch","parameters":[{"name":"data_source_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The UUID of the data source."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDataSourceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}}}
```
