openapi: 3.1.0 info: title: Thermo Fisher NanoDrop Ultra Web Authentication Measurements API description: The Thermo Scientific NanoDrop Ultra Web API provides RESTful access to instrument control and data retrieval for the NanoDrop Ultra microvolume UV-Vis spectrophotometer and fluorometer. Enables laboratory informatics integration, automated measurement workflows, sample data export, and instrument status monitoring. version: 1.0.0 contact: name: Thermo Fisher Scientific url: https://www.thermofisher.com/us/en/home/industrial/spectroscopy-elemental-isotope-analysis/molecular-spectroscopy/uv-vis-spectrophotometry/instruments/nanodrop.html license: name: Proprietary url: https://www.thermofisher.com servers: - url: http://{instrument-ip}:{port} description: NanoDrop Ultra instrument local network API variables: instrument-ip: description: IP address of the NanoDrop Ultra instrument on the local network. default: 192.168.1.100 port: description: API port. default: '8080' tags: - name: Measurements description: Sample measurements and spectra. paths: /api/measure: post: operationId: performMeasurement summary: Perform Measurement description: Initiates a sample measurement on the NanoDrop Ultra instrument using the specified method. The instrument must have a sample loaded on the pedestal before calling this endpoint. tags: - Measurements requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MeasurementRequest' responses: '200': description: Measurement completed successfully. content: application/json: schema: $ref: '#/components/schemas/MeasurementResult' '400': description: Invalid measurement request. '503': description: Instrument busy or not ready. /api/measurements: get: operationId: getMeasurements summary: Get Measurements description: Retrieves a list of stored measurements from the NanoDrop Ultra database. Supports filtering by date, sample ID, and method. tags: - Measurements parameters: - name: from_date in: query required: false schema: type: string format: date description: Filter measurements from this date. - name: to_date in: query required: false schema: type: string format: date description: Filter measurements to this date. - name: method in: query required: false schema: type: string description: Filter by measurement method name. - name: sample_id in: query required: false schema: type: string description: Filter by sample identifier. - name: limit in: query required: false schema: type: integer default: 100 description: Maximum number of records to return. - name: offset in: query required: false schema: type: integer default: 0 description: Pagination offset. responses: '200': description: Measurement list returned successfully. content: application/json: schema: $ref: '#/components/schemas/MeasurementListResponse' /api/measurements/{measurementId}: get: operationId: getMeasurementById summary: Get Measurement By ID description: Returns the full measurement data including spectrum for a specific measurement. tags: - Measurements parameters: - name: measurementId in: path required: true schema: type: string description: The unique measurement identifier. responses: '200': description: Measurement data returned successfully. content: application/json: schema: $ref: '#/components/schemas/MeasurementResult' '404': description: Measurement not found. components: schemas: MeasurementResult: type: object properties: measurement_id: type: string description: Unique measurement identifier. sample_id: type: string description: Sample identifier. sample_name: type: string description: Sample display name. method: type: string description: Measurement method used. timestamp: type: string format: date-time description: Measurement timestamp. operator: type: string description: Operator who performed the measurement. concentration: type: number description: Calculated concentration (ng/µL or µg/mL depending on method). unit: type: string description: Concentration unit. a260: type: number description: Absorbance at 260 nm. a280: type: number description: Absorbance at 280 nm. a260_a280_ratio: type: number description: A260/A280 purity ratio. a260_a230_ratio: type: number description: A260/A230 purity ratio. spectrum: type: array description: Full UV-Vis absorbance spectrum data points. items: type: object properties: wavelength: type: number description: Wavelength in nm. absorbance: type: number description: Absorbance value. MeasurementRequest: type: object required: - method properties: method: type: string description: Name of the measurement method to use. sample_id: type: string description: Sample identifier to associate with the measurement. sample_name: type: string description: Sample display name. operator: type: string description: Operator name. notes: type: string description: Optional measurement notes. MeasurementListResponse: type: object properties: total: type: integer measurements: type: array items: $ref: '#/components/schemas/MeasurementResult'