Thermo Fisher SampleManager LIMS REST API

The Thermo Scientific SampleManager LIMS REST API enables secure connection between software applications and the SampleManager LIMS system for simplified data exchange. Provides access to sample data, workflows, entities, results, and laboratory operations. Runs on port 56105 and supports token authentication.

OpenAPI Specification

thermo-fisher-samplemanager-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Thermo Fisher SampleManager LIMS REST API
  description: >-
    The Thermo Scientific SampleManager LIMS REST API enables secure connection
    between software applications and the SampleManager Laboratory Information
    Management System for simplified data exchange. Provides access to sample
    data, workflows, entity browsing, results, and laboratory operations.
    Supports token-based authentication with hardened session handling.
  version: 21.3.0
  contact:
    name: Thermo Fisher Scientific Digital Solutions
    url: https://www.thermofisher.com/us/en/home/digital-solutions/lab-informatics.html
  license:
    name: Proprietary
    url: https://www.thermofisher.com
servers:
  - url: https://{server}:{port}/smpwcfrestvgsm
    description: SampleManager LIMS REST API Server
    variables:
      server:
        description: The hostname of your SampleManager LIMS server.
        default: localhost
      port:
        description: The port the SampleManager WCF service runs on.
        default: "56105"
security:
  - bearerAuth: []
tags:
  - name: Samples
    description: Access and manage laboratory samples.
  - name: Entities
    description: Browse entity data from SampleManager.
  - name: Results
    description: Access test results and measurements.
  - name: Workflows
    description: Trigger and manage laboratory workflows.
  - name: Authentication
    description: Token-based authentication operations.
paths:
  /mobile/login:
    post:
      operationId: login
      summary: Login
      description: >-
        Authenticates a user and returns a session token for subsequent
        API calls. Token must be included in the Authorization header.
      tags:
        - Authentication
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
      responses:
        '200':
          description: Login successful. Returns session token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '401':
          description: Invalid credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

  /mobile/logout:
    post:
      operationId: logout
      summary: Logout
      description: Invalidates the current session token.
      tags:
        - Authentication
      responses:
        '200':
          description: Logout successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          description: Unauthorized or token already expired.

  /mobile/browses/{entity}:
    get:
      operationId: browseEntity
      summary: Browse Entity
      description: >-
        Returns a list of records for the specified SampleManager entity
        (e.g., SAMPLE, TEST, RESULT, CUSTOMER). Supports filtering and sorting.
      tags:
        - Entities
      parameters:
        - name: entity
          in: path
          required: true
          schema:
            type: string
          description: >-
            The SampleManager entity name (e.g., SAMPLE, TEST, RESULT,
            CUSTOMER, BATCH_HEADER, ANALYSIS).
        - name: criteria
          in: query
          required: false
          schema:
            type: string
          description: >-
            Filter criteria using SampleManager query syntax
            (e.g., STATUS='A' AND SAMPLED_DATE > '2026-01-01').
        - name: orderby
          in: query
          required: false
          schema:
            type: string
          description: Field name to sort results by.
        - name: ascending
          in: query
          required: false
          schema:
            type: boolean
            default: true
          description: Sort direction.
        - name: pagesize
          in: query
          required: false
          schema:
            type: integer
            default: 50
          description: Number of records per page.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
          description: Page number (1-based).
      responses:
        '200':
          description: Entity records returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrowseResponse'
        '401':
          description: Unauthorized.
        '404':
          description: Entity not found.

  /mobile/browses/{entity}/{id}:
    get:
      operationId: getEntityById
      summary: Get Entity By ID
      description: >-
        Returns a single record for the specified entity and record identity.
      tags:
        - Entities
      parameters:
        - name: entity
          in: path
          required: true
          schema:
            type: string
          description: The SampleManager entity name.
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The record identity (primary key value).
      responses:
        '200':
          description: Entity record returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityRecord'
        '401':
          description: Unauthorized.
        '404':
          description: Record not found.

  /mobile/samples:
    get:
      operationId: getSamples
      summary: Get Samples
      description: >-
        Returns a list of laboratory samples accessible to the authenticated user.
        Supports filtering by status, date range, and other criteria.
      tags:
        - Samples
      parameters:
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum: [A, C, X, L]
          description: >-
            Sample status filter (A=Authorized, C=Completed, X=Cancelled, L=Login pending).
        - name: from_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filter samples from this date (YYYY-MM-DD).
        - name: to_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filter samples to this date (YYYY-MM-DD).
        - name: pagesize
          in: query
          required: false
          schema:
            type: integer
            default: 50
          description: Number of records per page.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
          description: Page number.
      responses:
        '200':
          description: Sample list returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SampleListResponse'
        '401':
          description: Unauthorized.

  /mobile/samples/{sampleId}:
    get:
      operationId: getSampleById
      summary: Get Sample By ID
      description: Returns details for a specific laboratory sample.
      tags:
        - Samples
      parameters:
        - name: sampleId
          in: path
          required: true
          schema:
            type: string
          description: The sample identity/barcode.
      responses:
        '200':
          description: Sample details returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sample'
        '401':
          description: Unauthorized.
        '404':
          description: Sample not found.

  /mobile/samples/{sampleId}/results:
    get:
      operationId: getSampleResults
      summary: Get Sample Results
      description: >-
        Returns all test results associated with a specific sample.
      tags:
        - Results
      parameters:
        - name: sampleId
          in: path
          required: true
          schema:
            type: string
          description: The sample identity/barcode.
      responses:
        '200':
          description: Sample results returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultListResponse'
        '401':
          description: Unauthorized.
        '404':
          description: Sample not found.

  /mobile/results:
    post:
      operationId: submitResults
      summary: Submit Results
      description: >-
        Submits test results for one or more samples. Triggers result
        entry workflows and validation in SampleManager.
      tags:
        - Results
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResultSubmitRequest'
      responses:
        '200':
          description: Results submitted successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          description: Invalid result data.
        '401':
          description: Unauthorized.

  /mobile/workflows/{workflowName}/trigger:
    post:
      operationId: triggerWorkflow
      summary: Trigger Workflow
      description: >-
        Triggers a named workflow in SampleManager, passing optional
        parameters to the workflow.
      tags:
        - Workflows
      parameters:
        - name: workflowName
          in: path
          required: true
          schema:
            type: string
          description: The name of the SampleManager workflow to trigger.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowTriggerRequest'
      responses:
        '200':
          description: Workflow triggered successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowTriggerResponse'
        '400':
          description: Invalid workflow parameters.
        '401':
          description: Unauthorized.
        '404':
          description: Workflow not found.

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Session token obtained from the /mobile/login endpoint.
        Pass as "Bearer {token}" in the Authorization header.
  schemas:
    LoginRequest:
      type: object
      required: [username, password]
      properties:
        username:
          type: string
          description: SampleManager username.
        password:
          type: string
          description: SampleManager password.
        instance:
          type: string
          description: SampleManager instance name (if multiple instances).

    LoginResponse:
      type: object
      properties:
        token:
          type: string
          description: Session token for subsequent API calls.
        expires:
          type: string
          format: date-time
          description: Token expiration timestamp.
        username:
          type: string
          description: Authenticated username.

    BrowseResponse:
      type: object
      properties:
        total:
          type: integer
          description: Total number of matching records.
        page:
          type: integer
          description: Current page number.
        pagesize:
          type: integer
          description: Records per page.
        records:
          type: array
          items:
            $ref: '#/components/schemas/EntityRecord'

    EntityRecord:
      type: object
      description: A generic SampleManager entity record. Field names depend on the entity type.
      additionalProperties: true
      properties:
        identity:
          type: string
          description: The primary key of the record.

    Sample:
      type: object
      properties:
        identity:
          type: string
          description: Sample identity/barcode.
        description:
          type: string
          description: Sample description.
        status:
          type: string
          description: Sample status code.
        sampled_date:
          type: string
          format: date
          description: Date the sample was collected.
        customer:
          type: string
          description: Customer identity associated with the sample.
        product:
          type: string
          description: Product identity associated with the sample.
        analysis:
          type: string
          description: Analysis assigned to the sample.
        due_date:
          type: string
          format: date
          description: Due date for sample results.

    SampleListResponse:
      type: object
      properties:
        total:
          type: integer
        page:
          type: integer
        pagesize:
          type: integer
        samples:
          type: array
          items:
            $ref: '#/components/schemas/Sample'

    Result:
      type: object
      properties:
        sample_id:
          type: string
          description: Parent sample identity.
        test:
          type: string
          description: Test identity.
        component:
          type: string
          description: Component being measured.
        result_value:
          type: string
          description: The result value (string to support text and numeric results).
        units:
          type: string
          description: Unit of measurement.
        status:
          type: string
          description: Result status code.
        entered_on:
          type: string
          format: date-time
          description: When the result was entered.
        entered_by:
          type: string
          description: User who entered the result.

    ResultListResponse:
      type: object
      properties:
        total:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Result'

    ResultSubmitRequest:
      type: object
      properties:
        sample_id:
          type: string
          description: Target sample identity.
        results:
          type: array
          items:
            type: object
            properties:
              test:
                type: string
              component:
                type: string
              result_value:
                type: string
              units:
                type: string

    WorkflowTriggerRequest:
      type: object
      description: Optional parameters to pass to the workflow.
      additionalProperties: true

    WorkflowTriggerResponse:
      type: object
      properties:
        success:
          type: boolean
        workflow_id:
          type: string
          description: Identifier of the triggered workflow instance.
        message:
          type: string

    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string

    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        message:
          type: string