Scispot Labsheets API

LIMS-style structured data tables for registries, sample tracking, and assay data

OpenAPI Specification

scispot-labsheets-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Scispot ELN Labsheets API
  description: The Scispot REST API provides programmatic access to all features of the Scispot laboratory data platform. Scispot is an API-first Electronic Lab Notebook (ELN) and Laboratory Information Management System (LIMS) designed for modern life science and biotech labs. The API enables programmatic management of Labsheets (structured LIMS data), ELN protocols and experiments, Manifests (plates, boxes, racks), and biological Sequences. Every GUI action in Scispot is available through the API, supporting automation, computational biology workflows, instrument integration, and data pipeline development. Authenticated via personal API tokens with role-based access control (RBAC).
  version: 1.0.0
  contact:
    name: Scispot Developer Support
    url: https://docs.scispot.com/
  termsOfService: https://www.scispot.com/terms
servers:
- url: https://api.scispot.com/v1
  description: Scispot Production API
security:
- ApiKeyAuth: []
tags:
- name: Labsheets
  description: LIMS-style structured data tables for registries, sample tracking, and assay data
paths:
  /labsheets:
    get:
      operationId: listLabsheets
      summary: List Labsheets
      description: Retrieve a list of all Labsheets in the workspace. Labsheets are structured data tables that serve as the LIMS backbone of Scispot, used for registries, sample tracking, assay results, and inventory.
      tags:
      - Labsheets
      parameters:
      - name: page
        in: query
        description: Page number for pagination
        required: false
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: limit
        in: query
        description: Number of results per page
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
      responses:
        '200':
          description: List of labsheets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabsheetListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /labsheets/{labsheetId}/rows:
    get:
      operationId: getLabsheetRows
      summary: Get Labsheet Rows
      description: Retrieve all rows from a specific Labsheet. Returns structured data records with all column values for each row in the labsheet.
      tags:
      - Labsheets
      parameters:
      - name: labsheetId
        in: path
        description: Unique identifier of the Labsheet
        required: true
        schema:
          type: string
      - name: page
        in: query
        description: Page number for pagination
        required: false
        schema:
          type: integer
          default: 1
      - name: limit
        in: query
        description: Number of rows per page
        required: false
        schema:
          type: integer
          maximum: 100
          default: 50
      responses:
        '200':
          description: Labsheet rows
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabsheetRowsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: addLabsheetRow
      summary: Add Labsheet Row
      description: Add a new row to a Labsheet. Accepts column values as key-value pairs matching the Labsheet schema. Supports barcode assignment and metadata attachment for sample tracking workflows.
      tags:
      - Labsheets
      parameters:
      - name: labsheetId
        in: path
        description: Unique identifier of the Labsheet
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabsheetRowInput'
      responses:
        '201':
          description: Row added successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabsheetRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /labsheets/{labsheetId}/rows/{rowId}:
    get:
      operationId: getLabsheetRow
      summary: Get Labsheet Row
      description: Retrieve a single row from a Labsheet by its unique row identifier.
      tags:
      - Labsheets
      parameters:
      - name: labsheetId
        in: path
        description: Unique identifier of the Labsheet
        required: true
        schema:
          type: string
      - name: rowId
        in: path
        description: Unique identifier of the row
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Labsheet row
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabsheetRow'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateLabsheetRow
      summary: Update Labsheet Row
      description: Update an existing row in a Labsheet. Accepts updated column values as key-value pairs. Only specified fields are updated.
      tags:
      - Labsheets
      parameters:
      - name: labsheetId
        in: path
        description: Unique identifier of the Labsheet
        required: true
        schema:
          type: string
      - name: rowId
        in: path
        description: Unique identifier of the row
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabsheetRowInput'
      responses:
        '200':
          description: Row updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabsheetRow'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteLabsheetRow
      summary: Delete Labsheet Row
      description: Delete a row from a Labsheet by its unique identifier.
      tags:
      - Labsheets
      parameters:
      - name: labsheetId
        in: path
        description: Unique identifier of the Labsheet
        required: true
        schema:
          type: string
      - name: rowId
        in: path
        description: Unique identifier of the row
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Row deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    LabsheetRowInput:
      type: object
      description: Input for creating or updating a labsheet row
      properties:
        barcode:
          type: string
          description: Optional barcode for the row
        data:
          type: object
          description: Column values as key-value pairs
          additionalProperties: true
      required:
      - data
    LabsheetRow:
      type: object
      properties:
        id:
          type: string
          description: Unique row identifier
        labsheetId:
          type: string
          description: Parent labsheet identifier
        barcode:
          type: string
          description: Barcode associated with this row
        data:
          type: object
          description: Column values as key-value pairs
          additionalProperties: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Labsheet:
      type: object
      properties:
        id:
          type: string
          description: Unique labsheet identifier
        name:
          type: string
          description: Name of the labsheet
        description:
          type: string
          description: Description of the labsheet purpose
        columns:
          type: array
          description: Column definitions for the labsheet
          items:
            $ref: '#/components/schemas/LabsheetColumn'
        rowCount:
          type: integer
          description: Number of rows in the labsheet
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    LabsheetColumn:
      type: object
      properties:
        name:
          type: string
          description: Column name
        type:
          type: string
          enum:
          - text
          - number
          - date
          - barcode
          - lookup
          - file
          - formula
          description: Column data type
        required:
          type: boolean
          description: Whether this column is required
    LabsheetListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Labsheet'
        total:
          type: integer
          description: Total number of labsheets
        page:
          type: integer
        limit:
          type: integer
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error type
        message:
          type: string
          description: Human-readable error message
        code:
          type: integer
          description: Error code
    LabsheetRowsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/LabsheetRow'
        total:
          type: integer
        page:
          type: integer
        limit:
          type: integer
  responses:
    Unauthorized:
      description: API key missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Invalid request parameters or body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Requested resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: apiKey
      description: Personal API token generated from Scispot Account Settings > Personal Tokens. All API requests require this header.