Nortech Deriver API

This API includes endpoints that allow you to create and manage `Derivers`.

OpenAPI Specification

nortech-deriver-api-openapi.yml Raw ↑
openapi: 3.1.1
info:
  title: Nortech Asset Deriver API
  version: 1.0.0
  contact:
    name: Nortech AI
    url: https://nortech.ai
    email: support@nortech.ai
  summary: HTTP API for Nortech AI. Contact Nortech AI support for access.
  description: "This API is structured between three main API groups:\n* **Metadata API** - To navigate and get information about your assets.\n* **Signal Data API** - To query all signal data produced from your assets.\n* **Deriver API** - To create and manage derivers that produce computed signals.\n\n# Pagination\nAll `List` Endpoints support cursor pagination. In this pagination model, the client receives a `next.token` field in the response, \nwhich can be used as a `nextToken` query parameter to fetch the next page of results. \nThe `size` parameter defines the maximum number of results to return, the `sortBy` and `sortOrder` parameters define the field to sort by and its order."
  x-logo:
    url: https://branding-api.apps.nor.tech/logo-light
    backgroundColor: '#fafafa'
    altText: Nortech AI
    href: https://nortech.ai
servers:
- url: https://api.apps.nor.tech
  description: HTTP API for Nortech AI
security:
- Bearer Token: []
tags:
- name: Deriver
  description: This API includes endpoints that allow you to create and manage `Derivers`.
paths:
  /api/v1/derivers:
    get:
      operationId: v1.deriver.listDerivers
      summary: List Derivers
      description: List all `Derivers`.
      tags:
      - Deriver
      parameters:
      - name: size
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 100
        allowEmptyValue: true
        allowReserved: true
      - name: nextToken
        in: query
        schema:
          type: string
        allowEmptyValue: true
        allowReserved: true
      - name: sortBy
        in: query
        schema:
          enum:
          - id
          - name
          - createdAt
          - updatedAt
          - definition
          - description
          - startAt
          - status
          type: string
        allowEmptyValue: true
        allowReserved: true
      - name: sortOrder
        in: query
        schema:
          anyOf:
          - const: asc
          - const: desc
          default: asc
        allowEmptyValue: true
        allowReserved: true
      responses:
        '200':
          description: '`Deriver` list'
          content:
            application/json:
              schema:
                type: object
                properties:
                  size:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          minimum: 1
                          maximum: 9007199254740991
                          description: '`ID` of the `Deriver`'
                          examples:
                          - 10000
                        name:
                          type: string
                          description: Name of the `Deriver` class definition
                          examples:
                          - TestDeriver
                        definition:
                          type: string
                          examples:
                          - "\nimport bytewax.operators as op\n\nfrom nortech.derivers import Deriver, DeriverInput, DeriverInputs, DeriverOutput, DeriverOutputs\n\n\nclass TestDeriver(Deriver):\n    class Inputs(DeriverInputs):\n        input_1: float | None = DeriverInput(\n            workspace=\"workspace1\", asset=\"asset1\", division=\"division1\", unit=\"unit1\", signal=\"signal1\"\n        )\n        input_2: float | None = DeriverInput(\n            workspace=\"workspace2\", asset=\"asset2\", division=\"division2\", unit=\"unit2\", signal=\"signal2\"\n        )\n\n    class Outputs(DeriverOutputs):\n        output_1: float = DeriverOutput(\n            workspace=\"workspace1\",\n            asset=\"asset1\",\n            division=\"division1\",\n            unit=\"unit1\",\n            signal=\"new_signal1\",\n            description=\"output_1\",\n            long_description=\"output_1_long_description\",\n            physical_unit=\"m/s\",\n        )\n        output_2: str = DeriverOutput(\n            workspace=\"workspace2\",\n            asset=\"asset2\",\n            division=\"division2\",\n            unit=\"unit2\",\n            signal=\"new_signal2\",\n            description=\"output_2\",\n            long_description=\"output_2_long_description\",\n            physical_unit=\"m/s\",\n        )\n\n    def run(self, inputs: op.Stream[Inputs]) -> op.Stream[Outputs]:\n        return op.map(\n            \"\",\n            inputs,\n            lambda _input: self.Outputs(\n                timestamp=_input.timestamp,\n                output_1=_input.input_1 or 0,\n                output_2=str(_input.input_2),\n            ),\n        )\n\n"
                        description:
                          anyOf:
                          - type: string
                          - type: 'null'
                        startAt: {}
                        status:
                          enum:
                          - STARTING
                          - RUNNING
                          - STOPPED
                          - ERROR
                          type: string
                      required:
                      - id
                      - name
                      - definition
                      - status
                  next:
                    type: object
                    properties:
                      token:
                        type: string
                      href:
                        type: string
                        format: uri
                        examples:
                        - https://api.apps.nor.tech/api/v1?nextToken=abc
                    required:
                    - token
                    - href
                required:
                - size
                - data
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    const: Validation Error
                  details:
                    $schema: https://json-schema.org/draft/2020-12/schema
                    type: string
                required:
                - status
                - details
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    const: Unauthorized
                required:
                - status
    post:
      operationId: v1.deriver.createDeriver
      summary: Create Deriver
      description: Create a new `Deriver` **(Requires editor permissions)**
      tags:
      - Deriver
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                definition:
                  type: string
                  examples:
                  - "\nimport bytewax.operators as op\n\nfrom nortech.derivers import Deriver, DeriverInput, DeriverInputs, DeriverOutput, DeriverOutputs\n\n\nclass TestDeriver(Deriver):\n    class Inputs(DeriverInputs):\n        input_1: float | None = DeriverInput(\n            workspace=\"workspace1\", asset=\"asset1\", division=\"division1\", unit=\"unit1\", signal=\"signal1\"\n        )\n        input_2: float | None = DeriverInput(\n            workspace=\"workspace2\", asset=\"asset2\", division=\"division2\", unit=\"unit2\", signal=\"signal2\"\n        )\n\n    class Outputs(DeriverOutputs):\n        output_1: float = DeriverOutput(\n            workspace=\"workspace1\",\n            asset=\"asset1\",\n            division=\"division1\",\n            unit=\"unit1\",\n            signal=\"new_signal1\",\n            description=\"output_1\",\n            long_description=\"output_1_long_description\",\n            physical_unit=\"m/s\",\n        )\n        output_2: str = DeriverOutput(\n            workspace=\"workspace2\",\n            asset=\"asset2\",\n            division=\"division2\",\n            unit=\"unit2\",\n            signal=\"new_signal2\",\n            description=\"output_2\",\n            long_description=\"output_2_long_description\",\n            physical_unit=\"m/s\",\n        )\n\n    def run(self, inputs: op.Stream[Inputs]) -> op.Stream[Outputs]:\n        return op.map(\n            \"\",\n            inputs,\n            lambda _input: self.Outputs(\n                timestamp=_input.timestamp,\n                output_1=_input.input_1 or 0,\n                output_2=str(_input.input_2),\n            ),\n        )\n\n"
                description:
                  anyOf:
                  - type: string
                  - type: 'null'
                startAt:
                  anyOf:
                  - type: string
                    format: date-time
                  - type: 'null'
                  default: '2026-07-13T22:06:16.121Z'
                createParents:
                  type: boolean
                  default: false
                  description: Create parent resources if they don't exist
              required:
              - definition
      responses:
        '201':
          description: '`Deriver` created'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    minimum: 1
                    maximum: 9007199254740991
                    description: '`ID` of the `Deriver`'
                    examples:
                    - 10000
                  name:
                    type: string
                    description: Name of the `Deriver` class definition
                    examples:
                    - TestDeriver
                  createdAt:
                    type: string
                    format: date-time
                    x-native-type: date
                    description: '`Creation Date` of the `Deriver`'
                  updatedAt:
                    type: string
                    format: date-time
                    x-native-type: date
                    description: '`Update Date` of the `Deriver`'
                  definition:
                    type: string
                    examples:
                    - "\nimport bytewax.operators as op\n\nfrom nortech.derivers import Deriver, DeriverInput, DeriverInputs, DeriverOutput, DeriverOutputs\n\n\nclass TestDeriver(Deriver):\n    class Inputs(DeriverInputs):\n        input_1: float | None = DeriverInput(\n            workspace=\"workspace1\", asset=\"asset1\", division=\"division1\", unit=\"unit1\", signal=\"signal1\"\n        )\n        input_2: float | None = DeriverInput(\n            workspace=\"workspace2\", asset=\"asset2\", division=\"division2\", unit=\"unit2\", signal=\"signal2\"\n        )\n\n    class Outputs(DeriverOutputs):\n        output_1: float = DeriverOutput(\n            workspace=\"workspace1\",\n            asset=\"asset1\",\n            division=\"division1\",\n            unit=\"unit1\",\n            signal=\"new_signal1\",\n            description=\"output_1\",\n            long_description=\"output_1_long_description\",\n            physical_unit=\"m/s\",\n        )\n        output_2: str = DeriverOutput(\n            workspace=\"workspace2\",\n            asset=\"asset2\",\n            division=\"division2\",\n            unit=\"unit2\",\n            signal=\"new_signal2\",\n            description=\"output_2\",\n            long_description=\"output_2_long_description\",\n            physical_unit=\"m/s\",\n        )\n\n    def run(self, inputs: op.Stream[Inputs]) -> op.Stream[Outputs]:\n        return op.map(\n            \"\",\n            inputs,\n            lambda _input: self.Outputs(\n                timestamp=_input.timestamp,\n                output_1=_input.input_1 or 0,\n                output_2=str(_input.input_2),\n            ),\n        )\n\n"
                  description:
                    anyOf:
                    - type: string
                    - type: 'null'
                  startAt: {}
                  inputs:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          minimum: 1
                          maximum: 9007199254740991
                          description: '`ID` of the `Signal`'
                          examples:
                          - 10000
                        name:
                          type: string
                          description: '`Name` of the `Signal`'
                          examples:
                          - Signal 1
                        createdAt:
                          type: string
                          format: date-time
                          x-native-type: date
                          description: '`Creation Date` of the `Signal`'
                        updatedAt:
                          type: string
                          format: date-time
                          x-native-type: date
                          description: '`Update Date` of the `Signal`'
                        physicalUnit:
                          type: string
                          description: Physical unit of the `Signal`
                          examples:
                          - m/s
                        dataType:
                          anyOf:
                          - const: float
                          - const: boolean
                          - const: string
                          - const: json
                          description: '`Data type` of the `Signal`'
                        description:
                          anyOf:
                          - type: string
                          - type: 'null'
                          description: '`Description` of the `Signal`'
                          examples:
                          - Signal description
                        longDescription:
                          anyOf:
                          - type: string
                          - type: 'null'
                          description: Long description of the `Signal`
                          examples:
                          - Signal description
                        workspace:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Workspace`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Workspace`'
                              examples:
                              - Workspace 1
                          required:
                          - id
                          - name
                        asset:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Asset`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Asset`'
                              examples:
                              - Asset 1
                          required:
                          - id
                          - name
                        division:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Division`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Division`'
                              examples:
                              - Division 1
                          required:
                          - id
                          - name
                        unit:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Unit`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Unit`'
                              examples:
                              - Unit 1
                          required:
                          - id
                          - name
                      required:
                      - id
                      - name
                      - createdAt
                      - updatedAt
                      - physicalUnit
                      - dataType
                      - description
                      - longDescription
                      - workspace
                      - asset
                      - division
                      - unit
                      additionalProperties: false
                  outputs:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          minimum: 1
                          maximum: 9007199254740991
                          description: '`ID` of the `Signal`'
                          examples:
                          - 10000
                        name:
                          type: string
                          description: '`Name` of the `Signal`'
                          examples:
                          - Signal 1
                        createdAt:
                          type: string
                          format: date-time
                          x-native-type: date
                          description: '`Creation Date` of the `Signal`'
                        updatedAt:
                          type: string
                          format: date-time
                          x-native-type: date
                          description: '`Update Date` of the `Signal`'
                        physicalUnit:
                          type: string
                          description: Physical unit of the `Signal`
                          examples:
                          - m/s
                        dataType:
                          anyOf:
                          - const: float
                          - const: boolean
                          - const: string
                          - const: json
                          description: '`Data type` of the `Signal`'
                        description:
                          anyOf:
                          - type: string
                          - type: 'null'
                          description: '`Description` of the `Signal`'
                          examples:
                          - Signal description
                        longDescription:
                          anyOf:
                          - type: string
                          - type: 'null'
                          description: Long description of the `Signal`
                          examples:
                          - Signal description
                        workspace:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Workspace`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Workspace`'
                              examples:
                              - Workspace 1
                          required:
                          - id
                          - name
                        asset:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Asset`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Asset`'
                              examples:
                              - Asset 1
                          required:
                          - id
                          - name
                        division:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Division`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Division`'
                              examples:
                              - Division 1
                          required:
                          - id
                          - name
                        unit:
                          type: object
                          properties:
                            id:
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                              description: '`ID` of the `Unit`'
                              examples:
                              - 10000
                            name:
                              type: string
                              description: '`Name` of the `Unit`'
                              examples:
                              - Unit 1
                          required:
                          - id
                          - name
                      required:
                      - id
                      - name
                      - createdAt
                      - updatedAt
                      - physicalUnit
                      - dataType
                      - description
                      - longDescription
                      - workspace
                      - asset
                      - division
                      - unit
                      additionalProperties: false
                  status:
                    enum:
                    - STARTING
                    - RUNNING
                    - STOPPED
                    - ERROR
                    type: string
                required:
                - id
                - name
                - createdAt
                - updatedAt
                - definition
                - inputs
                - outputs
                - status
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    const: Validation Error
                  details:
                    $schema: https://json-schema.org/draft/2020-12/schema
                    type: string
                required:
                - status
                - details
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    const: Unauthorized
                required:
                - status
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                description: Forbidden
                properties:
                  status:
                    const: Forbidden
                required:
                - status
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  description: Workspaces not found
                  properties:
                    status:
                      const: Workspaces not found
                    details:
                      anyOf:
                      - type: object
                        properties:
                          inputs:
                            type: array
                            items:
                              type: object
                              properties:
                                workspace:
                                  type: string
                                  description: '`Name` of the `Workspace`'
                                  examples:
                                  - Workspace 1
                                asset:
                                  type: string
                                  description: '`Name` of the `Asset`'
                                  examples:
                                  - Asset 1
                                division:
                                  type: string
                                  description: '`Name` of the `Division`'
                                  examples:
                                  - Division 1
                                unit:
                                  type: string
                                  description: '`Name` of the `Unit`'
                                  examples:
                                  - Unit 1
                                signal:
                                  type: string
                                  description: '`Name` of the `Signal`'
                                  examples:
                                  - Signal 1
                                inputName:
                                  type: string
                                  description: Output name
                              required:
                              - workspace
                              - asset
                              - division
                              - unit
                              - signal
                              - inputName
                        required:
                        - inputs
                      - type: object
                        properties:
                          outputs:
                            type: array
                            items:
                              type: object
                              properties:
                                workspace:
                                  type: string
                                  description: '`Name` of the `Workspace`'
                                  examples:
                                  - Workspace 1
                                asset:
                                  type: string
                                  description: '`Name` of the `Asset`'
                                  examples:
                                  - Asset 1
                                division:
                                  type: string
                                  description: '`Name` of the `Division`'
                                  examples:
                                  - Division 1
                                unit:
                                  type: string
                                  description: '`Name` of the `Unit`'
                                  examples:
                                  - Unit 1
                                signal:
                                  type: string
                                  description: '`Name` of the `Signal`'
                                  examples:
                                  - Signal 1
                                outputName:
                                  type: string
                                  description: Output name
                              required:
                              - workspace
                              - asset
                              - division
                              - unit
                              - signal
                              - outputName
                        required:
                        - outputs
                  required:
                  - status
                  - details
                - type: object
                  description: Assets not found
                  properties:
                    status:
                      const: Assets not found
                    details:
                      anyOf:
                      - type: object
                        properties:
                          inputs:
                            type: array
                            items:
                              type: object
                              properties:
                                workspace:
                                  type: string
                                  description: '`Name` of the `Workspace`'
                                  examples:
                                  - Workspace 1
                                asset:
                                  type: string
                                  description: '`Name` of the `Asset`'
                                  examples:
                                  - Asset 1
                                division:
                                  type: string
                                  description: '`Name` of the `Division`'
                                  examples:
                                  - Division 1
                                unit:
                                  type: string
                                  description: '`Name` of the `Unit`'
                                  examples:
                                  - Unit 1
                                signal:
                                  type: string
                                  description: '`Name` of the `Signal`'
                                  examples:
                                  - Signal 1
                                inputName:
                                  type: string
                                  description: Output name
                              required:
                              - workspace
                              - asset
                              - division
                              - unit
                              - signal
                              - inputName
                        required:
                        - inputs
                      - type: object
                        properties:
                          outputs:
                            type: array
                            items:
                              type: object
                              properties:
                                workspace:
                                

# --- truncated at 32 KB (117 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nortech/refs/heads/main/openapi/nortech-deriver-api-openapi.yml