Trino Client REST API

The Trino Client REST API enables clients to submit SQL queries to a Trino coordinator and retrieve results. Clients POST SQL to /v1/statement, then poll GET on the returned nextUri, and may DELETE nextUri to cancel. Used by all Trino client drivers (Python, Go, Java, JavaScript) and data tools like dbt, Grafana, and Apache Superset.

OpenAPI Specification

trino-client-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Trino Client REST API
  description: >-
    The Trino Client REST API allows clients to submit SQL queries to a Trino coordinator
    and retrieve results. The protocol is HTTP-based: clients POST a query to /v1/statement,
    then poll GET on the returned nextUri until results are fully retrieved, and may DELETE
    nextUri to cancel a running query. Trino is a distributed SQL query engine for big data
    analytics supporting connectors to data lakes, relational databases, and NoSQL stores.
  version: '480'
  contact:
    name: Trino Community
    url: https://trino.io/community.html
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
externalDocs:
  description: Trino Client REST API Documentation
  url: https://trino.io/docs/current/develop/client-protocol.html
servers:
  - url: http://{host}:{port}
    description: Trino coordinator
    variables:
      host:
        default: localhost
        description: Trino coordinator hostname or IP
      port:
        default: '8080'
        description: Trino coordinator HTTP port
security: []
tags:
  - name: Queries
    description: Submit and manage SQL queries
  - name: Cluster
    description: Cluster status and node information
paths:
  /v1/statement:
    post:
      operationId: submitStatement
      summary: Submit SQL Statement
      description: >-
        Submits an SQL query string for execution. Returns an initial QueryResults
        response which may contain the first batch of results and/or a nextUri for
        polling subsequent results. Clients must include the X-Trino-User header at
        minimum. Additional context headers (catalog, schema, session properties) may
        be provided to configure the query environment.
      tags:
        - Queries
      parameters:
        - name: X-Trino-User
          in: header
          required: true
          description: The user identity submitting the query
          schema:
            type: string
          example: alice
        - name: X-Trino-Catalog
          in: header
          required: false
          description: Default catalog for the query session
          schema:
            type: string
          example: hive
        - name: X-Trino-Schema
          in: header
          required: false
          description: Default schema for the query session
          schema:
            type: string
          example: default
        - name: X-Trino-Source
          in: header
          required: false
          description: Identifies the client application submitting the query
          schema:
            type: string
          example: my-app
        - name: X-Trino-Session
          in: header
          required: false
          description: >-
            Comma-separated list of session property assignments in
            key=value format
          schema:
            type: string
          example: query_max_memory=10GB,query_max_run_time=5m
        - name: X-Trino-Transaction-Id
          in: header
          required: false
          description: Transaction identifier for query grouping. Use NONE for auto-commit.
          schema:
            type: string
          example: NONE
        - name: X-Trino-Client-Tags
          in: header
          required: false
          description: Comma-separated client tags for resource group matching
          schema:
            type: string
        - name: X-Trino-Client-Info
          in: header
          required: false
          description: Arbitrary client-supplied metadata about the client
          schema:
            type: string
        - name: X-Trino-Time-Zone
          in: header
          required: false
          description: Time zone for the query session (IANA tz database format)
          schema:
            type: string
          example: America/New_York
        - name: X-Trino-Language
          in: header
          required: false
          description: BCP 47 language tag for locale-sensitive operations
          schema:
            type: string
          example: en-US
        - name: X-Trino-Trace-Token
          in: header
          required: false
          description: External trace token for distributed tracing correlation
          schema:
            type: string
        - name: X-Trino-Extra-Credential
          in: header
          required: false
          description: >-
            Connector-specific extra credentials in name=value format.
            May appear multiple times.
          schema:
            type: string
      requestBody:
        required: true
        description: The SQL query string to execute
        content:
          text/plain:
            schema:
              type: string
            example: SELECT * FROM system.runtime.nodes
      responses:
        '200':
          description: Query accepted and initial results returned
          headers:
            X-Trino-Set-Catalog:
              description: New default catalog set by the query (USE CATALOG statement)
              schema:
                type: string
            X-Trino-Set-Schema:
              description: New default schema set by the query (USE SCHEMA statement)
              schema:
                type: string
            X-Trino-Set-Session:
              description: Session property set by the query
              schema:
                type: string
            X-Trino-Clear-Session:
              description: Session property cleared by the query
              schema:
                type: string
            X-Trino-Started-Transaction-Id:
              description: Transaction ID started by a START TRANSACTION statement
              schema:
                type: string
            X-Trino-Clear-Transaction-Id:
              description: Indicates the transaction was committed or rolled back
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResults'
        '400':
          description: Bad request — malformed SQL or invalid session parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryError'
        '429':
          description: >-
            Too many requests. Client must wait the duration specified in
            Retry-After header before retrying.
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying
              schema:
                type: integer
        '503':
          description: Service unavailable — transient cluster error; retry after 50-100ms

  /v1/statement/{queryId}/{token}:
    get:
      operationId: getQueryResults
      summary: Get Query Results
      description: >-
        Retrieves the next batch of results for a running query. Clients should
        follow the nextUri from a previous QueryResults response. When no
        nextUri is present in the response, the query is complete.
      tags:
        - Queries
      parameters:
        - name: queryId
          in: path
          required: true
          description: The unique query identifier returned by POST /v1/statement
          schema:
            type: string
          example: 20240101_120000_00001_abcde
        - name: token
          in: path
          required: true
          description: Sequential token for paging through results
          schema:
            type: integer
            format: int64
          example: 1
        - name: X-Trino-User
          in: header
          required: true
          description: The user identity (must match original query submission)
          schema:
            type: string
        - name: maxWait
          in: query
          required: false
          description: Maximum duration to wait for results before returning empty batch
          schema:
            type: string
          example: 2s
        - name: targetResultSize
          in: query
          required: false
          description: Desired result batch size hint
          schema:
            type: string
          example: 1MB
      responses:
        '200':
          description: Next batch of results (may be empty if still processing)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResults'
        '404':
          description: Query not found — expired or already cancelled
        '429':
          description: Too many concurrent polls; wait and retry
          headers:
            Retry-After:
              schema:
                type: integer
    delete:
      operationId: cancelQuery
      summary: Cancel Query
      description: >-
        Cancels a running query. Clients should DELETE the nextUri returned by
        the most recent QueryResults response to abort execution.
      tags:
        - Queries
      parameters:
        - name: queryId
          in: path
          required: true
          description: The unique query identifier
          schema:
            type: string
        - name: token
          in: path
          required: true
          description: Sequential token matching the current position
          schema:
            type: integer
            format: int64
        - name: X-Trino-User
          in: header
          required: true
          description: The user identity
          schema:
            type: string
      responses:
        '204':
          description: Query successfully cancelled
        '404':
          description: Query not found

  /v1/info:
    get:
      operationId: getClusterInfo
      summary: Get Cluster Info
      description: >-
        Returns general information about the Trino cluster including version,
        uptime, and whether the coordinator is still starting up. Used by
        load balancers and Trino Gateway to verify cluster health.
      tags:
        - Cluster
      responses:
        '200':
          description: Cluster information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerInfo'

  /v1/node:
    get:
      operationId: listNodes
      summary: List Cluster Nodes
      description: >-
        Returns a list of all active worker nodes in the Trino cluster,
        including their node ID, URI, last heartbeat time, and resource usage.
      tags:
        - Cluster
      responses:
        '200':
          description: List of active nodes
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeStatus'

  /v1/query:
    get:
      operationId: listQueries
      summary: List Active Queries
      description: >-
        Returns a list of currently running and recently completed queries
        on the Trino coordinator. Useful for monitoring and management UIs.
      tags:
        - Queries
      parameters:
        - name: state
          in: query
          required: false
          description: Filter queries by state
          schema:
            type: string
            enum:
              - QUEUED
              - PLANNING
              - STARTING
              - RUNNING
              - FINISHING
              - FINISHED
              - FAILED
        - name: limit
          in: query
          required: false
          description: Maximum number of queries to return
          schema:
            type: integer
            default: 100
      responses:
        '200':
          description: List of query summaries
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/QuerySummary'

components:
  schemas:
    QueryResults:
      type: object
      description: Response from /v1/statement or a nextUri GET containing query results
      properties:
        id:
          type: string
          description: Unique query identifier
          example: 20240101_120000_00001_abcde
        infoUri:
          type: string
          format: uri
          description: URI for human-readable query information in the Trino Web UI
        nextUri:
          type: string
          format: uri
          description: >-
            URI to fetch the next batch of results. Absent when the query is complete.
            Clients must GET this URI to continue receiving results.
        columns:
          type: array
          description: Column definitions for the result set
          items:
            $ref: '#/components/schemas/Column'
        data:
          type: array
          description: >-
            Result rows as arrays of values ordered by column definitions.
            Absent when no data is available yet.
          items:
            type: array
            items: {}
        updateType:
          type: string
          description: >-
            DDL/DML operation type for non-SELECT statements
            (e.g., "CREATE TABLE", "INSERT")
          example: CREATE TABLE
        updateCount:
          type: integer
          format: int64
          description: Number of rows affected by a DML statement
        stats:
          $ref: '#/components/schemas/QueryStats'
        error:
          $ref: '#/components/schemas/QueryError'
        warnings:
          type: array
          description: Non-fatal warnings from query execution
          items:
            $ref: '#/components/schemas/Warning'

    Column:
      type: object
      description: Column metadata in a query result set
      required:
        - name
        - type
      properties:
        name:
          type: string
          description: Column name
          example: node_id
        type:
          type: string
          description: Trino type name
          example: varchar
        typeSignature:
          type: object
          description: Structured type signature for complex types
          properties:
            rawType:
              type: string
            arguments:
              type: array
              items: {}

    QueryStats:
      type: object
      description: Runtime statistics for a query
      properties:
        state:
          type: string
          description: Current query state
          enum:
            - QUEUED
            - PLANNING
            - STARTING
            - RUNNING
            - FINISHING
            - FINISHED
            - FAILED
        queued:
          type: boolean
        scheduled:
          type: boolean
        nodes:
          type: integer
          description: Number of nodes participating in the query
        totalSplits:
          type: integer
          format: int64
        queuedSplits:
          type: integer
          format: int64
        runningSplits:
          type: integer
          format: int64
        completedSplits:
          type: integer
          format: int64
        cpuTimeMillis:
          type: integer
          format: int64
        wallTimeMillis:
          type: integer
          format: int64
        queuedTimeMillis:
          type: integer
          format: int64
        elapsedTimeMillis:
          type: integer
          format: int64
        processedRows:
          type: integer
          format: int64
        processedBytes:
          type: integer
          format: int64
        peakMemoryBytes:
          type: integer
          format: int64
        spilledBytes:
          type: integer
          format: int64
        rootStage:
          $ref: '#/components/schemas/StageStats'
        progressPercentage:
          type: number
          format: double
          minimum: 0
          maximum: 100

    StageStats:
      type: object
      description: Statistics for a single query stage
      properties:
        stageId:
          type: string
        state:
          type: string
        done:
          type: boolean
        nodes:
          type: integer
        totalSplits:
          type: integer
          format: int64
        queuedSplits:
          type: integer
          format: int64
        runningSplits:
          type: integer
          format: int64
        completedSplits:
          type: integer
          format: int64
        cpuTimeMillis:
          type: integer
          format: int64
        wallTimeMillis:
          type: integer
          format: int64
        processedRows:
          type: integer
          format: int64
        processedBytes:
          type: integer
          format: int64
        subStages:
          type: array
          items:
            $ref: '#/components/schemas/StageStats'

    QueryError:
      type: object
      description: Error information when a query fails
      properties:
        message:
          type: string
          description: Human-readable error message
          example: "Query exceeded maximum memory limit of 10GB"
        sqlState:
          type: string
          description: ANSI SQL state code
          example: "42000"
        errorCode:
          type: integer
          description: Trino numeric error code
        errorName:
          type: string
          description: Symbolic error name
          example: QUERY_EXCEEDED_MEMORY_LIMIT
        errorType:
          type: string
          description: Error classification
          enum:
            - USER_ERROR
            - INTERNAL_ERROR
            - INSUFFICIENT_RESOURCES
            - EXTERNAL
        errorLocation:
          $ref: '#/components/schemas/ErrorLocation'
        failureInfo:
          type: object
          description: Detailed exception information

    ErrorLocation:
      type: object
      description: Source location of a query error
      properties:
        lineNumber:
          type: integer
          description: 1-based line number in the SQL query
        columnNumber:
          type: integer
          description: 1-based column number in the SQL query

    Warning:
      type: object
      description: Non-fatal warning from query execution
      properties:
        warningCode:
          type: object
          properties:
            code:
              type: integer
            name:
              type: string
        message:
          type: string

    ServerInfo:
      type: object
      description: Trino cluster information
      properties:
        nodeVersion:
          type: object
          properties:
            version:
              type: string
              description: Trino release version
              example: '480'
        environment:
          type: string
          description: Trino environment name (from node.environment config)
          example: production
        coordinator:
          type: boolean
          description: True if this node is the coordinator
        starting:
          type: boolean
          description: True if the cluster is still initializing
        uptime:
          type: string
          description: Human-readable uptime duration

    NodeStatus:
      type: object
      description: Status of a Trino cluster node
      properties:
        nodeId:
          type: string
          description: Unique node identifier
        nodeIp:
          type: string
          description: Node IP address
        lastResponseTime:
          type: string
          format: date-time
          description: Timestamp of last heartbeat
        recentRequests:
          type: number
          format: double
        recentFailures:
          type: number
          format: double
        recentSuccesses:
          type: number
          format: double
        age:
          type: string
          description: Duration since node joined the cluster

    QuerySummary:
      type: object
      description: Summary of a query for list views
      properties:
        queryId:
          type: string
          description: Unique query identifier
        state:
          type: string
          description: Current query state
        query:
          type: string
          description: The SQL text (may be truncated)
        self:
          type: string
          format: uri
          description: URI for the full query detail
        queryStats:
          $ref: '#/components/schemas/QueryStats'
        session:
          type: object
          description: Session context for the query
          properties:
            user:
              type: string
            catalog:
              type: string
            schema:
              type: string
            source:
              type: string