Skip to content

Importing an OpenAPI API

Updated October 19, 2026

An OpenAPI spec describes your API; Voozeo derives one tool per operation from it. This page explains how to import it and keep it up to date.

Accepted formats

  • Versions: OpenAPI 3.0.x and 3.1.x. Swagger 2.0 is rejected (UNSUPPORTED_SPEC_VERSION): convert it to OpenAPI 3 first.
  • Formats: JSON or YAML, files ending in .json, .yaml or .yml.
  • Size: 5 MB maximum, whether it is a file or a URL.

Import a file

  1. Open the server's "Sources" tab and click "Import an OpenAPI spec".
  2. Choose the "File" method and select your file.
  3. Click "Import".

A message shows the number of generated tools, with a "View tools" link.

Import from a URL

Choose the "URL" method and enter the public HTTPS address of the spec. Voozeo downloads it: the download is limited to 10 seconds, and a non-2xx response gives UPSTREAM_FETCH_FAILED. Private or internal addresses are refused (UNSAFE_URL). If your spec is not public, import it as a file instead.

The whole import must finish within 28 seconds, otherwise it fails with INGESTION_TIMEOUT.

References ($ref)

Only local references (#/components/schemas/Order) are followed. Voozeo replaces them with their content, with these safeguards:

  • nesting deeper than 10 levels is replaced by an empty schema;
  • a circular reference is replaced by an empty schema;
  • a reference to an external file or URL is ignored (empty schema).

Each of these cases produces a warning (see Warnings).

One source per server

A server holds a single OpenAPI spec. A new import replaces the previous one: that is how updates work.

Update the spec

Simply import the new version. Your customizations (enabled state, name, tool description) are kept for operations that still exist: Voozeo recognizes them by their operationId or, failing that, by method and path. Renaming an operationId in the spec therefore creates a new tool. A base URL you entered yourself in the "Target API" tab is never overwritten. Otherwise the base URL is the first servers entry of the spec (variables replaced by their default value); it must be HTTPS, otherwise it is ignored.

Warnings

A successful import may come with warnings, shown in the "Sources" tab (20 at most, then "And N more."):

CodeWhat it means
EXTERNAL_REF_IGNOREDExternal reference ignored.
REF_DEPTH_EXCEEDEDNesting beyond 10 levels, empty schema.
REF_CYCLE_REPLACEDCircular reference, empty schema.
SCHEMA_TRUNCATEDSchema too large, simplified.
UNSUPPORTED_BODY_MEDIA_TYPERequest body is not JSON, not exposed.
NO_SERVER_URLNo usable server URL: set the target API.
SERVER_URL_NOT_HTTPSThe spec's server URL is not HTTPS, ignored.
TOOLS_DISABLED_OVER_LIMITTools disabled to respect your plan (see Choosing and describing tools).
INVALID_PATHA path that does not start with / is ignored, with its operations.

Limits

  • At most 1,000 operations per spec (beyond that: INVALID_SPEC).
  • The request body is only exposed when it is JSON.
  • A spec whose expanded content is excessive is refused (INVALID_SPEC, "compiled configuration too large").

Common errors

Example

Here is a minimal spec that produces two tools, listProducts and getOrder:

openapi: 3.0.3
info:
  title: Shop
  version: 1.0.0
servers:
  - url: https://api.example.com
paths:
  /products:
    get:
      operationId: listProducts
      summary: List the products
      parameters:
        - name: inStock
          in: query
          schema: { type: boolean }
      responses:
        "200": { description: OK }
  /orders/{id}:
    get:
      operationId: getOrder
      summary: Read an order by its identifier
      parameters:
        - name: id
          in: path
          required: true
          schema: { type: string }
      responses:
        "200": { description: OK }

After the import, the base URL https://api.example.com is picked up in the "Target API" tab.

Get started