Vespa Query API

The Vespa Query (Search) API executes structured and vector queries against a Vespa application using YQL (Vespa Query Language). It supports text search with BM25, approximate-nearest-neighbor vector search over HNSW indexes, hybrid search, machine-learned ranking with multi-phase rank profiles, grouping/aggregation, pagination, result presentation, and tracing. Queries can be issued as GET requests with query-string parameters or POST requests with a JSON body for complex expressions.

Vespa Query API is one of 8 APIs that Vespa publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include AI, Search, Query, YQL, and Vector Search. The published artifact set on APIs.io includes an OpenAPI specification, API documentation, a getting-started guide, and 1 Naftiko capability spec.

OpenAPI Specification

vespa-query-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Vespa Query API
  description: |
    The Vespa Query (Search) API executes structured and vector queries against a Vespa application
    using YQL (Vespa Query Language). It supports text search with BM25, approximate-nearest-neighbor
    vector search over HNSW indexes, hybrid search, machine-learned ranking with multi-phase rank
    profiles, grouping/aggregation, pagination, result presentation, and tracing.

    The Query API can be called as a GET with query-string parameters or as a POST with a JSON body
    for complex query expressions. Responses are returned as JSON (default), CBOR, or XML.
  version: '1.0'
  contact:
    name: Vespa
    url: https://vespa.ai
  license:
    name: Apache 2.0
    url: https://github.com/vespa-engine/vespa/blob/master/LICENSE
servers:
  - url: http://localhost:8080
    description: Default local Vespa container endpoint
  - url: https://{endpoint}.vespa-cloud.com
    description: Vespa Cloud application endpoint
    variables:
      endpoint:
        default: example
        description: Vespa Cloud application endpoint hostname prefix
paths:
  /search/:
    get:
      operationId: queryGet
      summary: Execute Query Via GET
      description: Execute a Vespa query using URL-encoded query-string parameters.
      tags:
        - Query
      parameters:
        - name: yql
          in: query
          description: YQL query expression, e.g. `select * from sources * where userQuery()`.
          required: false
          schema:
            type: string
        - name: query
          in: query
          description: Simple user query string passed to the query parser.
          required: false
          schema:
            type: string
        - name: hits
          in: query
          description: Maximum number of hits to return.
          required: false
          schema:
            type: integer
            default: 10
        - name: offset
          in: query
          description: Number of hits to skip for pagination.
          required: false
          schema:
            type: integer
            default: 0
        - name: ranking.profile
          in: query
          description: Name of the rank profile to use for scoring.
          required: false
          schema:
            type: string
        - name: timeout
          in: query
          description: Query timeout, e.g. `500ms` or `5s`.
          required: false
          schema:
            type: string
        - name: trace.level
          in: query
          description: Trace verbosity level for debugging.
          required: false
          schema:
            type: integer
        - name: presentation.format
          in: query
          description: Response format. One of `json`, `cbor`, or `xml`.
          required: false
          schema:
            type: string
            enum: [json, cbor, xml]
            default: json
      responses:
        '200':
          description: Successful query result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResult'
        '400':
          description: Bad request (invalid YQL or parameters).
        '408':
          description: Query timed out.
        '500':
          description: Server error.
        '503':
          description: Service unavailable.
        '504':
          description: Gateway timeout.
    post:
      operationId: queryPost
      summary: Execute Query Via POST
      description: Execute a Vespa query whose parameters are provided as a JSON body. Equivalent to
        GET but allows longer YQL expressions and complex grouping/ranking inputs.
      tags:
        - Query
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryRequest'
      responses:
        '200':
          description: Successful query result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResult'
        '400':
          description: Bad request.
        '408':
          description: Query timed out.
        '500':
          description: Server error.
components:
  schemas:
    QueryRequest:
      type: object
      properties:
        yql:
          type: string
          description: YQL query expression.
        query:
          type: string
          description: Simple user query string.
        hits:
          type: integer
          default: 10
        offset:
          type: integer
          default: 0
        ranking:
          type: object
          description: Ranking configuration, including profile and feature inputs.
          additionalProperties: true
        presentation:
          type: object
          description: Presentation options such as summary class and bolding.
          additionalProperties: true
        model:
          type: object
          description: Query model parameters (defaultIndex, restrict, sources, type, language).
          additionalProperties: true
        select:
          type: string
          description: Grouping / aggregation specification.
        timeout:
          type: string
        trace:
          type: object
          additionalProperties: true
    QueryResult:
      type: object
      properties:
        root:
          $ref: '#/components/schemas/QueryRoot'
    QueryRoot:
      type: object
      properties:
        id:
          type: string
        relevance:
          type: number
        fields:
          type: object
          additionalProperties: true
        coverage:
          $ref: '#/components/schemas/Coverage'
        children:
          type: array
          items:
            $ref: '#/components/schemas/Hit'
    Hit:
      type: object
      properties:
        id:
          type: string
        relevance:
          type: number
        source:
          type: string
        fields:
          type: object
          additionalProperties: true
    Coverage:
      type: object
      properties:
        coverage:
          type: integer
        documents:
          type: integer
        full:
          type: boolean
        nodes:
          type: integer
        results:
          type: integer
        resultsFull:
          type: integer
  securitySchemes:
    mtls:
      type: http
      scheme: bearer
      description: Vespa Cloud endpoints typically use mTLS with a client data-plane certificate.