Element Biosciences Run Service API

RunService provides access to instrument runs, both sequencing and multiomics. Listing and reading run metadata requires the "runs:read" scope; listing run files and obtaining download credentials requires the "runs:download" scope.

Operations 4

GET /v1/runs ListRuns #
GET /v1/runs/{id} GetRun #
GET /v1/runs/{run_id}/credentials GetRunDownloadCredentials #
GET /v1/runs/{run_id}/files ListRunFiles #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/element-biosciences-runservice-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

element-biosciences-runservice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Element Biosciences Cloud Run Service API
  description: 'The Element Biosciences Cloud API provides programmatic access to data in

    the Element Biosciences Cloud platform: instrument runs (sequencing and

    multiomics), workflow executions, registered instruments, storage

    connections, and the files those resources produce.


    All paths are versioned under `/v1`.


    ## Authentication

    Every request must include an API key in the `x-api-key` header. Create and

    manage keys in the Element Biosciences Cloud console. Call `GET /v1/auth` to

    confirm which tenant a key belongs to.


    ## Scopes

    Each API key carries one or more scopes of the form

    `resource:action[:resource_id]`, for example `runs:read`,

    `executions:download`, or `storage:download:{connection_id}`. A request that

    is authenticated but lacks the required scope fails with HTTP 403 and the

    `INSUFFICIENT_SCOPE` reason. List endpoints transparently restrict results

    to the resources a key is scoped to.


    ## Pagination

    List endpoints are cursor-paginated. Set `page_size` to control the page

    length and pass the `next_page_token` from one response as the `page_token`

    of the next; an empty `next_page_token` indicates the last page.


    ## Errors

    Errors return a JSON body with an integer `code`, a human-readable

    `message`, and a `details` array. Each detail carries a machine-readable

    `reason` (for example `RUN_NOT_FOUND` or `INVALID_API_KEY`) and the

    `domain` `cloud-api.elembio.io`. The `request_id` in the detail metadata

    matches the `X-Request-ID` response header; include it when reporting

    problems.

    '
  version: 1.0.0
  contact:
    name: Element Biosciences
    url: https://www.elembio.io
servers:
- url: https://cloud-api.usw2.elembio.io
security:
- apiKey: []
tags:
- name: RunService
  description: "RunService provides access to instrument runs, both sequencing and\n multiomics. Listing and reading run metadata requires the \"runs:read\"\n scope; listing run files and obtaining download credentials requires the\n \"runs:download\" scope."
paths:
  /v1/runs:
    get:
      tags:
      - RunService
      summary: ListRuns
      description: List runs accessible to the authenticated tenant, optionally filtered.
      operationId: RunService_ListRuns
      parameters:
      - name: filter
        in: query
        description: "Search and filter expression. Space-separated `keyword:value` terms are\n ANDed together; bare text with no keyword searches all string fields. For\n numeric and date fields, replace the colon with a comparison operator\n (`>=`, `<=`, `>`, `<`, `!=`). List alternatives for one keyword with\n commas, e.g. `status:completed,failed`. Dates accept ISO-8601 or relative\n offsets such as `7d` or `1mo`.\n\n Filterable keywords:\n\n - **String:** `name`, `id`, `description`, `tags`, `instrument.name`, `instrument.serial_number`, `instrument.model`, `storage.connection_id`, `setup.sequencing.kit_name`, `setup.sequencing.library_structure`, `setup.sequencing.prep_type`, `setup.sequencing.polony_density`, `setup.sequencing.filter_mask`, `setup.sequencing.panel.name`, `setup.multiomics.panel.name`, `setup.multiomics.cartridge.name`\n - **Enum:** `type` (`sequencing`, `multiomics`), `status`, `output.kind` (`sequencing_run`, `multiomics_run`; an alias for `type`), `setup.multiomics.kit_type` (`cytoprofiling`, `direct_in_sample_sequencing`, `antibody_screening`, `tissue`, `protein_screening`), `setup.multiomics.well_layout` (`twelve_well_circle`, `twelve_well_square`, `two_well`, `one_well`, `twelve_well_standard`, `forty_eight_well`)\n - **Date:** `time_created`, `time_started`, `time_completed`, `time_updated`\n - **Numeric:** `metrics.sequencing.total_reads`, `metrics.sequencing.total_yield`, `metrics.sequencing.estimated_reads`, `metrics.sequencing.q30`, `metrics.sequencing.q40`, `metrics.sequencing.q50`, `metrics.sequencing.avg_q`, `metrics.sequencing.error_rate`, `metrics.sequencing.phix_alignment_rate`, `metrics.multiomics.total_cell_count`, `metrics.multiomics.total_cell_confluency`, `metrics.multiomics.total_percent_assigned`, `setup.sequencing.pmg_shift`\n - **Boolean:** `setup.sequencing.low_diversity`\n\n Examples:\n\n - `type:sequencing status:completed time_completed>=7d`\n - `instrument.serial_number:AV223501 metrics.sequencing.q30>=90`"
        schema:
          type: string
          title: filter
          description: "Search and filter expression. Space-separated `keyword:value` terms are\n ANDed together; bare text with no keyword searches all string fields. For\n numeric and date fields, replace the colon with a comparison operator\n (`>=`, `<=`, `>`, `<`, `!=`). List alternatives for one keyword with\n commas, e.g. `status:completed,failed`. Dates accept ISO-8601 or relative\n offsets such as `7d` or `1mo`.\n\n Filterable keywords:\n\n - **String:** `name`, `id`, `description`, `tags`, `instrument.name`, `instrument.serial_number`, `instrument.model`, `storage.connection_id`, `setup.sequencing.kit_name`, `setup.sequencing.library_structure`, `setup.sequencing.prep_type`, `setup.sequencing.polony_density`, `setup.sequencing.filter_mask`, `setup.sequencing.panel.name`, `setup.multiomics.panel.name`, `setup.multiomics.cartridge.name`\n - **Enum:** `type` (`sequencing`, `multiomics`), `status`, `output.kind` (`sequencing_run`, `multiomics_run`; an alias for `type`), `setup.multiomics.kit_type` (`cytoprofiling`, `direct_in_sample_sequencing`, `antibody_screening`, `tissue`, `protein_screening`), `setup.multiomics.well_layout` (`twelve_well_circle`, `twelve_well_square`, `two_well`, `one_well`, `twelve_well_standard`, `forty_eight_well`)\n - **Date:** `time_created`, `time_started`, `time_completed`, `time_updated`\n - **Numeric:** `metrics.sequencing.total_reads`, `metrics.sequencing.total_yield`, `metrics.sequencing.estimated_reads`, `metrics.sequencing.q30`, `metrics.sequencing.q40`, `metrics.sequencing.q50`, `metrics.sequencing.avg_q`, `metrics.sequencing.error_rate`, `metrics.sequencing.phix_alignment_rate`, `metrics.multiomics.total_cell_count`, `metrics.multiomics.total_cell_confluency`, `metrics.multiomics.total_percent_assigned`, `setup.sequencing.pmg_shift`\n - **Boolean:** `setup.sequencing.low_diversity`\n\n Examples:\n\n - `type:sequencing status:completed time_completed>=7d`\n - `instrument.serial_number:AV223501 metrics.sequencing.q30>=90`"
      - name: pageSize
        in: query
        description: 'Maximum number of runs to return (default: 100, max: 1000)'
        schema:
          type: integer
          title: page_size
          format: int32
          description: 'Maximum number of runs to return (default: 100, max: 1000)'
      - name: pageToken
        in: query
        description: Token for pagination
        schema:
          type: string
          title: page_token
          description: Token for pagination
      - name: includeTotalCount
        in: query
        description: If true, include total_count in the response (adds a count query)
        schema:
          type: boolean
          title: include_total_count
          description: If true, include total_count in the response (adds a count query)
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/elembio.cloud.v1.ListRunsResponse'
        '400':
          description: Bad request — the request was malformed or a parameter was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized — the API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden — the API key lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found — the requested resource does not exist or is not accessible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/runs/{id}:
    get:
      tags:
      - RunService
      summary: GetRun
      description: Get a single run by its ID.
      operationId: RunService_GetRun
      parameters:
      - name: id
        in: path
        description: The unique identifier of the run
        required: true
        schema:
          type: string
          title: id
          description: The unique identifier of the run
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/elembio.cloud.v1.GetRunResponse'
        '400':
          description: Bad request — the request was malformed or a parameter was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized — the API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden — the API key lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found — the requested resource does not exist or is not accessible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/runs/{run_id}/credentials:
    get:
      tags:
      - RunService
      summary: GetRunDownloadCredentials
      description: "Get temporary, read-only S3 credentials scoped to a run's storage\n location. Use these for bulk or repeated downloads via the AWS CLI or\n SDK instead of per-object presigned URLs."
      operationId: RunService_GetRunDownloadCredentials
      parameters:
      - name: run_id
        in: path
        description: The run ID
        required: true
        schema:
          type: string
          title: run_id
          description: The run ID
      - name: prefix
        in: query
        description: "Optional path prefix within the run to scope credentials to.\n Run-relative, identical semantics to ListRunFilesRequest.prefix.\n \"..\" segments are rejected. When omitted, credentials are scoped to\n the whole run (the run root)."
        schema:
          type: string
          title: prefix
          description: "Optional path prefix within the run to scope credentials to.\n Run-relative, identical semantics to ListRunFilesRequest.prefix.\n \"..\" segments are rejected. When omitted, credentials are scoped to\n the whole run (the run root)."
      - name: expirationSeconds
        in: query
        description: "Lifetime of the returned credentials, in seconds. Optional; defaults to\n 1 hour (when 0 or unset). Minimum 900s. Capped by AWS: up to 36h (129600s)\n for federation-token connections, or the role's MaxSessionDuration (12h\n typical) for role-backed connections. Values below the minimum or above the\n cap are rejected."
        schema:
          type: integer
          title: expiration_seconds
          format: int32
          description: "Lifetime of the returned credentials, in seconds. Optional; defaults to\n 1 hour (when 0 or unset). Minimum 900s. Capped by AWS: up to 36h (129600s)\n for federation-token connections, or the role's MaxSessionDuration (12h\n typical) for role-backed connections. Values below the minimum or above the\n cap are rejected."
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/elembio.cloud.v1.GetRunDownloadCredentialsResponse'
        '400':
          description: Bad request — the request was malformed or a parameter was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized — the API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden — the API key lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found — the requested resource does not exist or is not accessible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/runs/{run_id}/files:
    get:
      tags:
      - RunService
      summary: ListRunFiles
      description: List the files produced by a run, drawn from the run's storage location.
      operationId: RunService_ListRunFiles
      parameters:
      - name: run_id
        in: path
        description: The run ID
        required: true
        schema:
          type: string
          title: run_id
          description: The run ID
      - name: prefix
        in: query
        description: "Path prefix within the run, e.g. \"visualization/\" or \"Stats/foo\".\n The run is a self-contained namespace: paths do not include any\n bucket-level or workflow-level layout. Round-trips with File.path\n returned by this RPC. \"..\" segments are rejected.\n Optional: when omitted, lists the whole run (the run root)."
        schema:
          type: string
          title: prefix
          description: "Path prefix within the run, e.g. \"visualization/\" or \"Stats/foo\".\n The run is a self-contained namespace: paths do not include any\n bucket-level or workflow-level layout. Round-trips with File.path\n returned by this RPC. \"..\" segments are rejected.\n Optional: when omitted, lists the whole run (the run root)."
      - name: recursive
        in: query
        description: "If true, list all files recursively under the prefix (default: true)\n If false, list only files and subdirectories at the current level"
        schema:
          type: boolean
          title: recursive
          description: "If true, list all files recursively under the prefix (default: true)\n If false, list only files and subdirectories at the current level"
      - name: pageSize
        in: query
        description: 'Maximum number of files to return per page (default: 1000, max: 1000)'
        schema:
          type: integer
          title: page_size
          format: int32
          description: 'Maximum number of files to return per page (default: 1000, max: 1000)'
      - name: pageToken
        in: query
        description: Continuation token from previous response (passthrough from storage)
        schema:
          type: string
          title: page_token
          description: Continuation token from previous response (passthrough from storage)
      - name: includeDownloadUrl
        in: query
        description: "If true, populate File.download_url (a presigned URL) on each returned\n file. Defaults to false. Set to true only when the caller intends to\n fetch file content from the response: generating presigned URLs has a\n per-object cost and the URLs themselves are credentials with a\n multi-hour lifetime. Use GetRunDownloadCredentials when long-lived\n bulk access is required."
        schema:
          type: boolean
          title: include_download_url
          description: "If true, populate File.download_url (a presigned URL) on each returned\n file. Defaults to false. Set to true only when the caller intends to\n fetch file content from the response: generating presigned URLs has a\n per-object cost and the URLs themselves are credentials with a\n multi-hour lifetime. Use GetRunDownloadCredentials when long-lived\n bulk access is required."
      - name: downloadUrlExpirationSeconds
        in: query
        description: "Lifetime of the presigned download_url, in seconds. Optional; defaults to\n 1 hour. Only applies when include_download_url = true. Max 7 days."
        schema:
          type: integer
          title: download_url_expiration_seconds
          format: int32
          description: "Lifetime of the presigned download_url, in seconds. Optional; defaults to\n 1 hour. Only applies when include_download_url = true. Max 7 days."
      - name: includeDownloadChecksum
        in: query
        description: "If true, presign each download_url with S3 ChecksumMode=ENABLED so the\n object's stored checksum is returned on the GET (in the\n x-amz-checksum-<algo> response header) and a client can verify download\n integrity in a single streaming pass. Defaults false; has no effect unless\n include_download_url = true. When enabled the presigned URL signs the\n x-amz-checksum-mode request header, so the fetch MUST send\n x-amz-checksum-mode:ENABLED — a plain GET that omits it fails with HTTP\n 403. Best-effort: objects stored without a checksum return none.\n\n Applies only to AWS S3-backed storage connections; other storage backends\n do not presign S3 GETs and silently ignore this field."
        schema:
          type: boolean
          title: include_download_checksum
          description: "If true, presign each download_url with S3 ChecksumMode=ENABLED so the\n object's stored checksum is returned on the GET (in the\n x-amz-checksum-<algo> response header) and a client can verify download\n integrity in a single streaming pass. Defaults false; has no effect unless\n include_download_url = true. When enabled the presigned URL signs the\n x-amz-checksum-mode request header, so the fetch MUST send\n x-amz-checksum-mode:ENABLED — a plain GET that omits it fails with HTTP\n 403. Best-effort: objects stored without a checksum return none.\n\n Applies only to AWS S3-backed storage connections; other storage backends\n do not presign S3 GETs and silently ignore this field."
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/elembio.cloud.v1.ListRunFilesResponse'
        '400':
          description: Bad request — the request was malformed or a parameter was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized — the API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden — the API key lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found — the requested resource does not exist or is not accessible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    elembio.cloud.v1.ListRunsResponse:
      type: object
      properties:
        runs:
          type: array
          items:
            $ref: '#/components/schemas/elembio.cloud.v1.Run'
          title: runs
          description: List of runs
        nextPageToken:
          type: string
          title: next_page_token
          description: Token for the next page (empty if no more results)
        previousPageToken:
          type: string
          title: previous_page_token
          description: Token for the previous page (empty if on first page)
        totalCount:
          type:
          - integer
          - 'null'
          title: total_count
          format: int32
          description: Total number of runs matching the filter (only if include_total_count was true)
      title: ListRunsResponse
      additionalProperties: false
      description: Response containing a list of runs
    elembio.cloud.v1.Well:
      type: object
      properties:
        location:
          type: string
          title: location
          description: e.g., "A1", "B2"
        label:
          type: string
          title: label
      title: Well
      additionalProperties: false
      description: Well information for multiomics runs
    elembio.cloud.v1.RunMetrics:
      type: object
      properties:
        sequencing:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.SequencingMetrics'
          - type: 'null'
          title: sequencing
        multiomics:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.MultiomicsMetrics'
          - type: 'null'
          title: multiomics
      title: RunMetrics
      additionalProperties: false
      description: "Run metrics/results, grouped by run type.\n Only one of the type-specific sub-messages will be populated per run."
    elembio.cloud.v1.RunSetup:
      type: object
      properties:
        sequencing:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.SequencingSetup'
          - type: 'null'
          title: sequencing
        multiomics:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.MultiomicsSetup'
          - type: 'null'
          title: multiomics
      title: RunSetup
      additionalProperties: false
      description: "Run setup configuration, grouped by run type.\n Only one of the type-specific sub-messages will be populated per run."
    elembio.cloud.v1.RunRecipe:
      type: object
      properties:
        id:
          type: string
          title: id
          description: Recipe identifier.
        name:
          type: string
          title: name
          description: Recipe name.
      title: RunRecipe
      additionalProperties: false
      description: Element recipe selected for a run.
    elembio.cloud.v1.MultiomicsSetup:
      type: object
      properties:
        panel:
          title: panel
          $ref: '#/components/schemas/elembio.cloud.v1.Panel'
        kitType:
          type: string
          title: kit_type
          description: "The multiomics kit used for the run. Possible values: `cytoprofiling`,\n `direct_in_sample_sequencing`, `antibody_screening`, `tissue`,\n `protein_screening`."
        kitId:
          type: string
          title: kit_id
        cartridge:
          title: cartridge
          $ref: '#/components/schemas/elembio.cloud.v1.Cartridge'
        wellLayout:
          type: string
          title: well_layout
          description: "The well plate layout used for the run. Possible values:\n `twelve_well_circle`, `twelve_well_square`, `two_well`, `one_well`,\n `twelve_well_standard`, `forty_eight_well`."
        wells:
          type: array
          items:
            $ref: '#/components/schemas/elembio.cloud.v1.Well'
          title: wells
        batches:
          type: array
          items:
            $ref: '#/components/schemas/elembio.cloud.v1.Batch'
          title: batches
        smallCell:
          type: boolean
          title: small_cell
        tallCell:
          type: boolean
          title: tall_cell
        flowcell:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.Consumable'
          - type: 'null'
          title: flowcell
          description: Multiomics consumable details from run setup
        buffer:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.Consumable'
          - type: 'null'
          title: buffer
        panelCartridge:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.Consumable'
          - type: 'null'
          title: panel_cartridge
      title: MultiomicsSetup
      additionalProperties: false
      description: Multiomics run setup/configuration fields
    elembio.cloud.v1.Run:
      type: object
      properties:
        id:
          type: string
          title: id
          description: Unique identifier for the run
        name:
          type: string
          title: name
          description: Human-readable name of the run
        description:
          type: string
          title: description
          description: Optional description
        type:
          type: string
          title: type
          description: 'Type of run. Possible values: "sequencing", "multiomics".'
        status:
          title: status
          description: Current status of the run
          $ref: '#/components/schemas/elembio.cloud.v1.RunStatus'
        instrument:
          title: instrument
          description: Instrument that performed the run
          $ref: '#/components/schemas/elembio.cloud.v1.RunInstrument'
        output:
          title: output
          description: Output location and content kinds for run data
          $ref: '#/components/schemas/elembio.cloud.v1.Output'
        timeCreated:
          title: time_created
          description: Timestamps
          $ref: '#/components/schemas/google.protobuf.Timestamp'
        timeStarted:
          oneOf:
          - $ref: '#/components/schemas/google.protobuf.Timestamp'
          - type: 'null'
          title: time_started
        timeCompleted:
          oneOf:
          - $ref: '#/components/schemas/google.protobuf.Timestamp'
          - type: 'null'
          title: time_completed
        timeUpdated:
          oneOf:
          - $ref: '#/components/schemas/google.protobuf.Timestamp'
          - type: 'null'
          title: time_updated
        tags:
          type: array
          items:
            type: string
          title: tags
          description: User-defined tags
        recipe:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.RunRecipe'
          - type: 'null'
          title: recipe
          description: Recipe used for the run (if an Element recipe was selected)
        manifest:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.RunManifest'
          - type: 'null'
          title: manifest
          description: "Run manifest metadata.\n On ListRuns only filename is populated; on GetRun the full object\n (including download_url) is populated."
        design:
          oneOf:
          - $ref: '#/components/schemas/elembio.cloud.v1.RunDesign'
          - type: 'null'
          title: design
          description: Design associated with the run (sequencing or multiomics)
        operator:
          type: string
          title: operator
          description: User who operated (initiated) the run on the instrument
        setup:
          title: setup
          description: Run setup configuration, grouped by run type
          $ref: '#/components/schemas/elembio.cloud.v1.RunSetup'
        metrics:
          title: metrics
          description: Run metrics/results, grouped by run type
          $ref: '#/components/schemas/elembio.cloud.v1.RunMetrics'
      title: Run
      additionalProperties: false
      description: A Run represents an instrument run (either sequencing or multiomics)
    elembio.cloud.v1.ListRunFilesResponse:
      type: object
      properties:
        files:
          type: array
          items:
            $ref: '#/components/schemas/elembio.cloud.v1.File'
          title: files
          description: List of files
        subdirectories:
          type: array
          items:
            type: string
          title: subdirectories
          description: Subdirectories at this level (only populated when recursive=false)
        nextPageToken:
          type: string
          title: next_page_token
          description: Continuation token for the next page
        isTruncated:
          type: boolean
          title: is_truncated
          description: Indicates if the results were truncated
      title: ListRunFilesResponse
      additionalProperties: false
      description: Response containing files for a run
    elembio.cloud.v1.S3Credentials:
      type: object
      properties:
        region:
          type: string
          title: region
          description: 'AWS region. Example: "us-west-2".'
        bucket:
          type: string
          title: bucket
          description: S3 bucket name.
        prefix:
          type:
          - string
          - 'null'
          title: prefix
          description: "Key prefix the credentials are scoped to — bucket-absolute, since\n this value is consumed directly by the AWS CLI / SDK. Distinct from\n the request-side `prefix`, which is connection-relative."
        accessKeyId:
          type: string
          title: access_key_id
          description: Temporary AWS access key ID
        secretAccessKey:
          type: string
          title: secret_access_key
          description: Temporary AWS secret access key
        sessionToken:
          type: string
          title: session_token
          description: STS session token
        expiration:
          title: expiration
          description: When the credentials expire
          $ref: '#/components/schemas/google.protobuf.Timestamp'
      title: S3Credentials
      additionalProperties: false
      description: "Temporary read-only AWS S3 credentials scoped to a bucket and prefix.\n Use with the AWS CLI, AWS SDK, or any S3-compatible tool. The credentials\n expire at the time given by expiration; request new credentials when they\n near expiry."
    elembio.cloud.v1.Consumable:
      type: object
      properties:
        serialNumber:
          type: string
          title: serial_number
        partNumber:
          type: string
          title: part_number
        lotNumber:
          type: string
          title: lot_number
        expiration:
          title: expiration
          $ref: '#/components/schemas/google.protobuf.Timestamp'
      title: Consumable
      additionalProperties: false
      description: Consumable information (used for both run types)
    Error:
      type: object
      description: Error response returned by all endpoints when a request fails.
      properties:
        code:
          type: integer
          description: Numeric status code corresponding to the HTTP response status
        message:
          type: string
          description: Human-readable error message
        details:
          type: array
          description: Structured error details with machine-readable reason codes
          items:
            $ref: '#/components/schemas/ErrorDetail'
      required:
      - code
      - message
      examples:
      - code: 404
        message: Run not found.
        details:
        - reason: RUN_NOT_FOUND
          domain: cloud-api.elembio.io
          metadata:
            request_id: 550e8400-e29b-41d4-a716-446655440000
      - code: 401
        message: Invalid API key.
        details:
        - reason: INVALID_API_KEY
          domain: cloud-api.elembio.io
          metadata:
            request_id: 550e8400-e29b-41d4-a716-446655440001
    elembio.cloud.v1.SequencingMetrics:
      type: object
      properties:
        phixAlignmentRate:
          type:
          - number
          - 'null'
          title: phix_alignment_rate
          format: float
        totalYield:
          type:
          - integer
          - string
          - 'null'
          title: total_yield
          format: int64
        totalReads:
          type:
          - integer
          - string
          - 'null'
          title: total_reads
          format: int64
        estimatedReads:
          type:
          - integer
          - string
          - 'null'
          title: estimated_reads
          format: int64
     

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/element-biosciences/refs/heads/main/openapi/element-biosciences-runservice-api-openapi.yml