openapi: 3.1.0 info: title: Rockwell FactoryTalk Optix REST API description: >- Rockwell Automation FactoryTalk Optix REST API provides programmatic access to HMI and SCADA visualization applications, enabling external system integration, tag read/write, alarm management, and runtime control of FactoryTalk Optix applications deployed in industrial automation environments. version: 1.5.0 contact: name: Rockwell Automation Support url: https://www.rockwellautomation.com/en-us/support/ license: name: Rockwell Automation Software License url: https://www.rockwellautomation.com/en-us/company/about-us/legal-notices/ servers: - url: https://{host}/api/v1 description: FactoryTalk Optix REST API variables: host: default: optix.example.com description: FactoryTalk Optix server hostname security: - oauth2: [] - apiKey: [] tags: - name: Alarms description: Alarm and event management - name: Recipes description: Recipe management - name: TrendData description: Historical trend data retrieval paths: /tags: get: operationId: listTags summary: List Tags description: Returns all tags (variables) defined in the FactoryTalk Optix project. tags: [] parameters: - name: nameFilter in: query description: Wildcard filter for tag names schema: type: string - name: tagType in: query description: Filter by tag type schema: type: string enum: [Bool, Int16, Int32, Int64, UInt16, UInt32, UInt64, Float, Double, String, DateTime] - name: limit in: query schema: type: integer default: 1000 - name: offset in: query schema: type: integer default: 0 responses: '200': description: Tag list content: application/json: schema: type: object properties: tags: type: array items: $ref: '#/components/schemas/Tag' totalCount: type: integer '401': $ref: '#/components/responses/Unauthorized' /tags/values: get: operationId: readTagValues summary: Read Multiple Tag Values description: Reads current values for a list of tags in a single request. tags: [] parameters: - name: names in: query required: true description: Comma-separated list of tag names to read schema: type: string example: Conveyor1.Speed,Pump1.Flow,Reactor1.Temperature responses: '200': description: Tag values content: application/json: schema: type: object properties: values: type: array items: $ref: '#/components/schemas/TagValue' '401': $ref: '#/components/responses/Unauthorized' post: operationId: writeTagValues summary: Write Multiple Tag Values description: Writes values to one or more tags. Requires write permission on each tag. tags: [] requestBody: required: true content: application/json: schema: type: object required: - writes properties: writes: type: array items: type: object required: - name - value properties: name: type: string description: Tag name value: description: Value to write (type must match tag data type) responses: '200': description: Write results content: application/json: schema: type: object properties: results: type: array items: type: object properties: name: type: string success: type: boolean error: type: string nullable: true '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' /tags/{tagName}: get: operationId: getTag summary: Get Tag Metadata description: Returns metadata and current value for a specific tag. tags: [] parameters: - $ref: '#/components/parameters/TagName' responses: '200': description: Tag details with current value content: application/json: schema: $ref: '#/components/schemas/TagDetail' '404': $ref: '#/components/responses/NotFound' /alarms: get: operationId: listAlarms summary: List Active Alarms description: Returns currently active and unacknowledged alarms. tags: - Alarms parameters: - name: status in: query description: Filter by alarm status schema: type: string enum: [ACTIVE, ACKNOWLEDGED, NORMAL] - name: severity in: query description: Minimum severity to return schema: type: string enum: [LOW, MEDIUM, HIGH, CRITICAL] - name: limit in: query schema: type: integer default: 100 - name: offset in: query schema: type: integer default: 0 responses: '200': description: Active alarm list content: application/json: schema: type: object properties: alarms: type: array items: $ref: '#/components/schemas/Alarm' totalCount: type: integer '401': $ref: '#/components/responses/Unauthorized' /alarms/{alarmId}/acknowledge: post: operationId: acknowledgeAlarm summary: Acknowledge an Alarm description: Acknowledges an active alarm, optionally with a comment. tags: - Alarms parameters: - name: alarmId in: path required: true schema: type: string requestBody: content: application/json: schema: type: object properties: comment: type: string description: Acknowledgment comment responses: '200': description: Alarm acknowledged '404': $ref: '#/components/responses/NotFound' /alarms/history: get: operationId: getAlarmHistory summary: Get Alarm History description: Returns historical alarm events within a time range. tags: - Alarms parameters: - name: startTime in: query required: true schema: type: string format: date-time - name: endTime in: query required: true schema: type: string format: date-time - name: tagName in: query description: Filter to specific tag schema: type: string - name: limit in: query schema: type: integer default: 500 responses: '200': description: Alarm history content: application/json: schema: type: object properties: alarmEvents: type: array items: $ref: '#/components/schemas/AlarmEvent' /trends/{tagName}: get: operationId: getTrendData summary: Get Historical Trend Data description: Returns historical trending data for a tag within a time range. tags: - TrendData parameters: - $ref: '#/components/parameters/TagName' - name: startTime in: query required: true schema: type: string format: date-time - name: endTime in: query required: true schema: type: string format: date-time - name: resolution in: query description: Data resolution (e.g., 1s, 1m, 1h) schema: type: string default: 1m - name: limit in: query schema: type: integer default: 1000 maximum: 10000 responses: '200': description: Trend data points content: application/json: schema: type: object properties: tagName: type: string dataPoints: type: array items: $ref: '#/components/schemas/TrendDataPoint' '404': $ref: '#/components/responses/NotFound' /recipes: get: operationId: listRecipes summary: List Recipes description: Returns recipes defined in the FactoryTalk Optix project. tags: - Recipes responses: '200': description: Recipe list content: application/json: schema: type: object properties: recipes: type: array items: $ref: '#/components/schemas/Recipe' /recipes/{recipeName}/apply: post: operationId: applyRecipe summary: Apply a Recipe description: Applies a recipe to a machine or unit, writing configured tag values. tags: - Recipes parameters: - name: recipeName in: path required: true schema: type: string responses: '200': description: Recipe applied successfully '404': $ref: '#/components/responses/NotFound' components: securitySchemes: oauth2: type: oauth2 flows: clientCredentials: tokenUrl: https://optix.example.com/auth/token scopes: optix.read: Read tag values and alarm data optix.write: Write tag values optix.admin: Manage recipes and project configuration apiKey: type: apiKey in: header name: X-Api-Key description: FactoryTalk Optix API key parameters: TagName: name: tagName in: path required: true description: Tag name (may use dot notation for nested tags, e.g. Conveyor1.Speed) schema: type: string responses: Unauthorized: description: Authentication required content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Tag: type: object description: A FactoryTalk Optix tag (process variable) properties: name: type: string description: Fully qualified tag name displayName: type: string description: type: string dataType: type: string enum: [Bool, Int16, Int32, Int64, UInt16, UInt32, UInt64, Float, Double, String, DateTime] engineeringUnit: type: string description: Unit of measure (e.g., RPM, °C, bar) readOnly: type: boolean alarmEnabled: type: boolean deadband: type: number format: double nullable: true TagValue: type: object properties: name: type: string value: description: Current tag value (type depends on tag dataType) quality: type: string enum: [GOOD, BAD, UNCERTAIN, COMM_FAILURE] timestamp: type: string format: date-time TagDetail: allOf: - $ref: '#/components/schemas/Tag' - type: object properties: currentValue: $ref: '#/components/schemas/TagValue' Alarm: type: object description: An active alarm condition properties: alarmId: type: string tagName: type: string alarmName: type: string description: type: string status: type: string enum: [ACTIVE, ACKNOWLEDGED, NORMAL] severity: type: string enum: [LOW, MEDIUM, HIGH, CRITICAL] activationTime: type: string format: date-time acknowledgmentTime: type: string format: date-time nullable: true acknowledgedBy: type: string nullable: true triggerValue: description: Tag value when alarm activated setpoint: description: Alarm setpoint/threshold value AlarmEvent: type: object properties: eventId: type: string alarmId: type: string tagName: type: string alarmName: type: string eventType: type: string enum: [ACTIVATED, ACKNOWLEDGED, RESET, DISABLED] timestamp: type: string format: date-time value: description: Tag value at event time user: type: string nullable: true comment: type: string nullable: true TrendDataPoint: type: object properties: timestamp: type: string format: date-time value: description: Tag value at this timestamp quality: type: string enum: [GOOD, BAD, UNCERTAIN] Recipe: type: object description: A FactoryTalk Optix recipe defining a set of tag values properties: name: type: string description: type: string category: type: string parameters: type: array description: Tag-value pairs that make up the recipe items: type: object properties: tagName: type: string value: description: Recipe parameter value units: type: string lastModified: type: string format: date-time modifiedBy: type: string Error: type: object properties: code: type: string message: type: string details: type: string