Siemens MindSphere IoT Time Series API

The MindSphere IoT Time Series API enables storing, querying, and retrieving time-series telemetry data from industrial equipment and IoT assets. Supports high-frequency data ingestion up to 1 Hz, bulk imports, and time-range queries for sensor and machine data organized by asset and aspect.

OpenAPI Specification

siemens-mindsphere-iot-timeseries-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Siemens MindSphere IoT Time Series API
  description: >-
    The MindSphere IoT Time Series API enables storing, querying, and retrieving
    time-series telemetry data from industrial equipment and IoT assets. Supports
    high-frequency data ingestion (up to 1 Hz), bulk imports, and time-range queries
    for sensor and machine data organized by asset and aspect.
  version: "3.0"
  contact:
    name: Siemens MindSphere Developer Support
    url: https://documentation.mindsphere.io/MindSphere/apis/iot-timeseries/api-timeseries-overview.html
servers:
  - url: https://gateway.eu1.mindsphere.io/api/iottimeseries/v3
    description: MindSphere EU1 Region

security:
  - BearerAuth: []

tags:
  - name: Timeseries
    description: Time-series data read and write operations

paths:
  /timeseries:
    put:
      operationId: putMultipleTimeseries
      summary: Ingest time-series data for multiple assets/aspects
      description: >-
        Creates or updates time-series data for multiple asset-aspect combinations
        in a single request. Each entry specifies an assetId, aspectName, and array
        of timestamped data points.
      tags:
        - Timeseries
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/TimeseriesInput'
      responses:
        '204':
          description: Data ingested successfully (no content)
        '400':
          description: Validation error in request payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

  /timeseries/{assetId}/{aspectName}:
    put:
      operationId: putTimeseries
      summary: Ingest time-series data for a single asset aspect
      description: >-
        Creates or updates time-series data for a specific asset and aspect.
        Each data point must include a _time field (ISO 8601 UTC) and values
        for aspect variables.
      tags:
        - Timeseries
      parameters:
        - $ref: '#/components/parameters/AssetId'
        - $ref: '#/components/parameters/AspectName'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/TimeseriesDataPoint'
      responses:
        '204':
          description: Data ingested successfully
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Asset or aspect not found

    get:
      operationId: getTimeseries
      summary: Query time-series data for an asset aspect
      description: >-
        Retrieves time-series data for a specific asset and aspect within a
        time range. Supports time range queries, field selection, and result
        limiting. Data is returned ordered by timestamp ascending.
      tags:
        - Timeseries
      parameters:
        - $ref: '#/components/parameters/AssetId'
        - $ref: '#/components/parameters/AspectName'
        - name: from
          in: query
          required: true
          description: Start of time range (ISO 8601 UTC)
          schema:
            type: string
            format: date-time
          example: "2026-01-01T00:00:00Z"
        - name: to
          in: query
          required: true
          description: End of time range (ISO 8601 UTC)
          schema:
            type: string
            format: date-time
          example: "2026-01-01T01:00:00Z"
        - name: limit
          in: query
          required: false
          description: Maximum number of data points to return (max 2000)
          schema:
            type: integer
            default: 2000
            maximum: 2000
        - name: select
          in: query
          required: false
          description: Comma-separated list of variable names to include
          schema:
            type: string
          example: "temperature,pressure"
        - name: sort
          in: query
          required: false
          description: Sort order by _time
          schema:
            type: string
            enum: [asc, desc]
            default: asc
        - name: latestValue
          in: query
          required: false
          description: Return only the most recent data point
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Time-series data points
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TimeseriesDataPoint'
        '400':
          description: Invalid query parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '404':
          description: Asset or aspect not found

    delete:
      operationId: deleteTimeseries
      summary: Delete time-series data for an asset aspect
      description: >-
        Deletes all time-series data within an hourly-aligned time range for a
        specific asset and aspect. The time range must align to UTC hour boundaries.
      tags:
        - Timeseries
      parameters:
        - $ref: '#/components/parameters/AssetId'
        - $ref: '#/components/parameters/AspectName'
        - name: from
          in: query
          required: true
          description: Start of hourly-aligned range (ISO 8601 UTC)
          schema:
            type: string
            format: date-time
          example: "2026-01-01T00:00:00Z"
        - name: to
          in: query
          required: true
          description: End of hourly-aligned range (ISO 8601 UTC)
          schema:
            type: string
            format: date-time
          example: "2026-01-01T01:00:00Z"
      responses:
        '204':
          description: Data deleted successfully
        '400':
          description: Invalid time range (not hour-aligned or invalid format)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden

components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: MindSphere Bearer token from OAuth2 token endpoint

  parameters:
    AssetId:
      name: assetId
      in: path
      required: true
      description: Unique MindSphere asset identifier (UUID)
      schema:
        type: string
        format: uuid
      example: "5d7e59d0-8c94-4bce-8a0c-3a7fcc9a1234"
    AspectName:
      name: aspectName
      in: path
      required: true
      description: Aspect name (must match asset type aspect configuration)
      schema:
        type: string
      example: "EnvironmentData"

  schemas:
    TimeseriesInput:
      type: object
      required:
        - assetId
        - aspectName
        - data
      properties:
        assetId:
          type: string
          format: uuid
        aspectName:
          type: string
        data:
          type: array
          items:
            $ref: '#/components/schemas/TimeseriesDataPoint'

    TimeseriesDataPoint:
      type: object
      required:
        - _time
      properties:
        _time:
          type: string
          format: date-time
          description: ISO 8601 UTC timestamp for the data point
          example: "2026-01-01T00:00:00.000Z"
      additionalProperties:
        description: >-
          Variable values keyed by variable name. Variable types are defined
          in the aspect configuration (DOUBLE, LONG, BOOLEAN, STRING, BIG_STRING,
          INT, TIMESTAMP).
        oneOf:
          - type: number
          - type: boolean
          - type: string
          - type: "null"

    ErrorResponse:
      type: object
      properties:
        id:
          type: string
          description: Unique error identifier
        message:
          type: string
        details:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              message:
                type: string