Zuplo
API Gateway

OpenAPI-First API Gateway: Why Spec-Driven API Management Matters

Nate TottenNate Totten
March 16, 2026
9 min read

Learn what an OpenAPI-first API gateway is, why spec-driven API management reduces drift and errors, and how it compares to plugin-based OpenAPI support in Kong, Tyk, AWS API Gateway, and Apigee.

If you’ve ever maintained an API where the documentation says one thing and the gateway does another, you already understand the problem that an OpenAPI-first API gateway solves. Configuration drift — where your spec, your routing rules, and your actual gateway behavior slowly diverge — is one of the most common sources of bugs, security gaps, and wasted developer time in API management.

An OpenAPI-first API gateway eliminates this problem by making your OpenAPI specification the actual gateway configuration. No import step. No conversion tool. No second file that needs to stay in sync. The spec is the gateway.

What Is an OpenAPI-First API Gateway?

An OpenAPI-first API gateway uses an OpenAPI specification as its native configuration format. Instead of defining routes in one system and maintaining a separate OpenAPI document for documentation, the gateway reads its routing, validation, and policy configuration directly from the OpenAPI file.

This is fundamentally different from gateways that merely support OpenAPI through import tools or plugins. In those systems, the OpenAPI document is an input that gets converted into the gateway’s own proprietary configuration format. The original spec becomes a snapshot — a starting point that immediately begins drifting from reality as teams make changes through the gateway’s UI or CLI.

In an OpenAPI-first gateway, every route, every parameter schema, and every operation description lives in the OpenAPI document. When you change the spec, you change the gateway. When you read the spec, you see exactly what the gateway is doing.

The Problem with Plugin-Based OpenAPI Support

Most API gateways have added OpenAPI support over time, typically through import utilities, plugins, or conversion tools. While this is better than no OpenAPI support at all, it introduces a structural problem: two sources of truth.

Here’s how the major gateways handle OpenAPI today:

Kong requires the deck file openapi2kong CLI tool to convert an OpenAPI spec into Kong’s declarative configuration format. The conversion produces a separate YAML file with Kong-specific service and route definitions. Once converted, the original OpenAPI spec has no ongoing relationship with the gateway — changes to your API must be made in Kong’s configuration, not in the spec.

Tyk lets you import an OpenAPI document through its Dashboard API, Gateway API, or Dashboard GUI. The import creates a “Tyk OAS API Definition” that adds Tyk-specific extensions to the original document. While Tyk preserves the OpenAPI structure, the gateway still maintains its own internal representation, and updates require re-importing the spec or modifying the Tyk-enhanced definition directly.

AWS API Gateway supports importing OpenAPI definitions for REST APIs, but with significant limitations. Root-level security definitions are ignored. Cookie parameters and form data parameters are not supported. HTTP APIs don’t support request validation at all — the requestBody and schema fields are silently ignored during import. AWS also requires its own x-amazon-apigateway-* vendor extensions for integrations, authorizers, and other gateway-specific functionality.

Apigee lets you create an API proxy from an OpenAPI spec, but the import produces a proxy configuration that is entirely separate from the original document. The spec is used as a starting point for generating conditional flows and endpoint definitions, but from that point forward, the proxy has its own lifecycle. Keeping the spec and the proxy in sync requires manual effort or custom tooling.

The common pattern across all of these is the same: OpenAPI goes in, but the gateway’s own configuration comes out. The spec is a one-time input, not a living configuration.

Benefits of Spec-Driven API Management

When your OpenAPI specification is your gateway configuration, several problems disappear entirely.

Single Source of Truth

There’s one file that defines your routes, your request and response schemas, your operation descriptions, and your gateway policies. Developers, technical writers, and platform teams all look at the same document. There’s no question about whether the docs match the gateway, because they’re the same thing.

Automatic Request Validation from the Spec

With an OpenAPI-first gateway, you can enable request validation that enforces your spec’s JSON schemas on every incoming request. If your OpenAPI spec says a field is required, or that a parameter must be an integer, or that a request body must match a specific schema, the gateway can reject non-conforming requests with a detailed 400 Bad Request error before they reach your backend.

This isn’t a separate validation layer you need to configure — it reads the schemas that already exist in your OpenAPI document.

Documentation That Can’t Drift

When your developer portal is generated from the same file that configures your gateway, documentation accuracy becomes automatic. Every route, parameter, and schema in the portal reflects the live gateway configuration. There’s no deployment step where someone forgets to update the docs, because the docs are the configuration.

Reduced Configuration Drift and Human Error

In traditional gateways, adding a new endpoint means updating the gateway configuration, updating the OpenAPI spec, updating the documentation, and hoping all three stay in sync. In an OpenAPI-first gateway, you add the endpoint to the spec and everything else follows.

Better GitOps Integration

An OpenAPI document is a JSON or YAML file. It lives naturally in version control. Every change produces a meaningful diff. Code reviews can catch unintended route changes, missing validation schemas, or overly permissive parameter definitions. This is exactly how modern GitOps workflows are designed to work — infrastructure as code, reviewed and deployed through your standard CI/CD pipeline.

OpenAPI-First vs. Code-First vs. Design-First

The API development community has long debated code-first versus design-first approaches. An OpenAPI-first API gateway adds a third dimension to this discussion: enforcement at the gateway level.

Code-first means you write your backend code and generate an OpenAPI spec from annotations or decorators. The spec is an output, not an input. It describes what your code does, but nothing prevents your code from diverging from the spec.

Design-first means you write the OpenAPI spec before writing any code. The spec is the contract that both client and server agree to follow. But without enforcement, this is still just a social agreement — the gateway and backend can still diverge from the spec.

OpenAPI-first at the gateway level adds enforcement. The gateway reads the spec and uses it to route traffic, validate requests, and generate documentation. Your backend can still be code-first or design-first, but the gateway guarantees that the spec is enforced at the perimeter. Requests that don’t match the spec never reach your backend.

This is particularly valuable for teams that want the flexibility of code-first development with the reliability of design-first contracts. You can write your backend however you like, but the gateway enforces the spec regardless.

How Zuplo Implements OpenAPI-First

Zuplo is built from the ground up around OpenAPI as the native configuration format. When you create a Zuplo project, your routes are defined in a config/routes.oas.json file — a standard OpenAPI document that also serves as the gateway configuration.

The file uses standard OpenAPI 3.1 (compatible with 3.0) syntax for paths, operations, parameters, and schemas. Zuplo adds gateway-specific behavior through vendor extensions:

  • x-zuplo-route — defined inside each operation, this extension specifies the request handler, CORS policy, and inbound/outbound policies for that route
  • x-zuplo-path — defined at the path level, this controls path matching behavior

Here’s what an operation looks like in a Zuplo routes.oas.json file (showing only the paths section for brevity):

JSONjson
{
  "paths": {
    "/users/{id}": {
      "get": {
        "summary": "Get user by ID",
        "description": "Returns a single user by their unique identifier.",
        "operationId": "getUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "x-zuplo-route": {
          "corsPolicy": "none",
          "handler": {
            "export": "urlForwardHandler",
            "module": "$import(@zuplo/runtime)",
            "options": {
              "baseUrl": "https://api.example.com"
            }
          },
          "policies": {
            "inbound": ["api-key-auth", "rate-limit"]
          }
        }
      }
    }
  }
}

Combined with the standard top-level OpenAPI fields (openapi, info, components), this forms a valid OpenAPI document and a complete gateway configuration. The standard OpenAPI fields define the route, parameters, and response schemas. The x-zuplo-route extension adds the handler (where to forward requests) and policies (authentication, rate limiting, etc.).

Because the configuration is standard OpenAPI, you get several capabilities automatically:

  • Developer portal generation — Zuplo’s developer portal is built directly from the same routes.oas.json file, so API documentation is always accurate and always current
  • Request validation — enable the request validation policy to enforce the JSON schemas defined in your OpenAPI spec against every incoming request
  • GitOps workflows — the routes.oas.json file lives in your Git repository, so every change goes through version control and CI/CD
  • TypeScript extensibility — when you need custom logic beyond declarative policies, Zuplo supports custom policies written in TypeScript

OpenAPI Support Across API Gateways

Not all OpenAPI support is the same. Here’s how the approaches compare:

Zuplo — OpenAPI-Native

OpenAPI is the configuration format. Routes, schemas, and policies are defined directly in the OpenAPI document. No conversion step. Documentation, validation, and routing all read from the same file. Supports OpenAPI 3.1 and 3.0.

Kong — Conversion-Based

Uses the deck file openapi2kong CLI to convert OpenAPI specs into Kong’s declarative config. The conversion is a one-time operation — changes must be made in Kong’s config, not the original spec. Requires rebuilding the conversion pipeline whenever the spec changes.

Tyk — Import-Based

Offers OpenAPI import via API, CLI, or Dashboard. Creates a Tyk-enhanced version of the spec with gateway-specific extensions. Closer to the spec than Kong’s approach, but the gateway still operates on its own internal representation. Supports OAS 3.0.x.

AWS API Gateway — Partial Import

Imports OpenAPI for REST APIs with multiple limitations: no root-level security, no cookie parameters, no form data parameters. HTTP APIs silently ignore request validation schemas. Requires x-amazon-apigateway-* extensions for integrations and authorizers. REST APIs support both OpenAPI 2.0 and 3.0. HTTP APIs support only OpenAPI 3.0.

Apigee — Proxy Generation

Uses OpenAPI specs to generate API proxy configurations. The import creates conditional flows and endpoint definitions, but the resulting proxy is a separate artifact with its own lifecycle. Keeping the spec and proxy in sync is a manual process. Supports OpenAPI 2.0 and 3.0.

The key distinction is between gateways that consume OpenAPI (converting it into something else) and gateways that are OpenAPI (using the spec directly as configuration). Only the latter approach eliminates configuration drift entirely.

Getting Started with an OpenAPI-First Gateway

If you have an existing OpenAPI spec, deploying it as an OpenAPI-first gateway with Zuplo takes just a few steps:

  1. Create a Zuplo project — sign up at zuplo.com and create a new project
  2. Import your OpenAPI spec — bring your existing spec into the project as the routes.oas.json file, or start building routes in the OpenAPI-native route designer
  3. Add policies — attach authentication, rate limiting, and validation policies directly to your routes using the x-zuplo-route extension
  4. Deploy — push to your Git repository and Zuplo automatically deploys your gateway along with a developer portal generated from your spec
  5. Iterate — every spec change updates the gateway, the validation rules, and the documentation in one step

For teams already practicing design-first API development, this workflow feels natural — you’re already writing the OpenAPI spec, and now that spec does double duty as your gateway configuration.

When an OpenAPI-First Gateway Makes Sense

An OpenAPI-first approach is particularly valuable when:

  • You already maintain OpenAPI specs — if your team writes specs for documentation or code generation, making them the gateway configuration eliminates a maintenance burden
  • Configuration drift is a real problem — if you’ve experienced bugs caused by the gateway, the docs, and the backend disagreeing about the API contract, a single source of truth solves this
  • You want request validation without custom code — validating requests against a schema defined in the spec is far simpler than writing validation middleware
  • Developer experience matters — an always-accurate developer portal that matches the live gateway configuration makes onboarding faster and support tickets rarer
  • You use GitOps — an OpenAPI file in a Git repository is a natural fit for infrastructure-as-code workflows with pull request reviews and automated deployments

The OpenAPI-first approach is less important if your API has no spec (though that’s increasingly rare), or if your gateway needs are limited to simple reverse proxying without documentation or validation.

Conclusion

The API gateway market has broadly recognized that OpenAPI support matters — every major gateway now offers some form of spec import or conversion. But there’s a fundamental difference between gateways that use OpenAPI as an input and gateways that use it as their native language.

An OpenAPI-first gateway eliminates the translation layer between your spec and your gateway configuration. One file defines your routes, your validation rules, your documentation, and your policies. When that file changes, everything stays in sync automatically.

If you’re evaluating API gateways and you already invest in OpenAPI specifications, look for one where the spec isn’t just an import — it’s the foundation. Explore how Zuplo’s OpenAPI-native approach works and see what it looks like when your spec and your gateway are the same thing.