AgentGateway · Schema

LocalConfig

AI GatewayAPI GatewayMCPLLMAgent-to-AgentOpen-SourceCNCFObservabilitySecurity

Properties

Name Type Description
config object config defines top-level settings for DNS, admin, networking, observability, and session management. Unlike other sections, these are applied only at startup, except modelCatalog, which is dynamically
binds array binds defines the low-level API for configuring the proxy. Each bind represents a single port the proxy listens on, as well as the full set of configuration (listeners, routes, backends) for that port
frontendPolicies object frontendPolicies defines top level policies applying to all traffic.
policies array policies defines additional policies that can be attached to various other configurations. This is an advanced feature; users should typically use the inline `policies` field under route/gateway.
workloads array workloads defines the set of workloads that the proxy can serve. These are selected by `services`. This is an advanced feature that is mostly for testing; usage of inline `backends` on routes and poli
services array services defines the set of services that the proxy can route to. These consist of `workloads`. This is an advanced feature that is mostly for testing; usage of inline `backends` on routes and policie
backends array backends defines explicit backends that can be referenced by routes and policies. Typically, inline backends are used on the routes/policies, but this allows re-using the same backend across different
routeGroups array routeGroups provides a set of route groups used for route delegation. This is an advanced feature primarily used for testing.
gateways object gateways defines the entrypoint to the proxy, setting up ports and listeners that features (LLM, MCP, and UI) and routes can attach to. Each gateway defines a port that proxy will listen on, and optio
routes array routes defines HTTP routes attached to one or more named gateways.
tcpRoutes array tcpRoutes defines TCP routes attached to one or more named TCP/TLS gateways.
llm object llm defines a set of LLM models to be exposed by the proxy. When configured, LLM models will be served under the attached `gateways` using the standard serving paths (`/v1/models`, `/v1/chat/completio
mcp object mcp defines a set of MCP servers exposed by the proxy. When configured, the MCP servers will be served under the attached `gateways` at /mcp and /sse. All MCP servers listed will be served as a single
ui object ui defines settings for how the UI and UI backend is exposed. By default, the UI is exposed only on the admin interface (typically localhost:15000). This setting allows attaching to `gateways` to serv
View JSON Schema on GitHub

JSON Schema

agentgateway-config-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "LocalConfig",
  "type": "object",
  "properties": {
    "config": {
      "description": "config defines top-level settings for DNS, admin, networking, observability, and session\nmanagement. Unlike other sections, these are applied only at startup, except modelCatalog,\nwhich is dynamically reloaded.",
      "anyOf": [
        {
          "$ref": "#/$defs/RawConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "binds": {
      "description": "binds defines the low-level API for configuring the proxy.\nEach bind represents a single port the proxy listens on, as well as the full set of configuration\n(listeners, routes, backends) for that port.\nDeprecated; usage of `gateways` and `routes` is recommended instead.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LocalBind"
      }
    },
    "frontendPolicies": {
      "description": "frontendPolicies defines top level policies applying to all traffic.",
      "$ref": "#/$defs/LocalFrontendPolicies"
    },
    "policies": {
      "description": "policies defines additional policies that can be attached to various other configurations.\nThis is an advanced feature; users should typically use the inline `policies` field under route/gateway.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LocalPolicy"
      }
    },
    "workloads": {
      "description": "workloads defines the set of workloads that the proxy can serve. These are selected by `services`.\nThis is an advanced feature that is mostly for testing; usage of inline `backends` on routes and\npolicies is typically preferred.",
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "default": []
    },
    "services": {
      "description": "services defines the set of services that the proxy can route to. These consist of `workloads`.\nThis is an advanced feature that is mostly for testing; usage of inline `backends` on routes and\npolicies is typically preferred.",
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "default": []
    },
    "backends": {
      "description": "backends defines explicit backends that can be referenced by routes and policies.\nTypically, inline backends are used on the routes/policies, but this allows re-using the same backend\nacross different configurations.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/FullLocalBackend"
      }
    },
    "routeGroups": {
      "description": "routeGroups provides a set of route groups used for route delegation. This is an advanced feature\nprimarily used for testing.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LocalRouteGroup"
      }
    },
    "gateways": {
      "description": "gateways defines the entrypoint to the proxy, setting up ports and listeners that features (LLM, MCP, and UI) and routes can attach to.\nEach gateway defines a port that proxy will listen on, and optionally TLS settings for that port.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/LocalGateway"
      }
    },
    "routes": {
      "description": "routes defines HTTP routes attached to one or more named gateways.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LocalAttachedRoute"
      }
    },
    "tcpRoutes": {
      "description": "tcpRoutes defines TCP routes attached to one or more named TCP/TLS gateways.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LocalAttachedTCPRoute"
      }
    },
    "llm": {
      "description": "llm defines a set of LLM models to be exposed by the proxy. When configured, LLM models will be\nserved under the attached `gateways` using the standard serving paths (`/v1/models`, `/v1/chat/completions`, etc).",
      "anyOf": [
        {
          "$ref": "#/$defs/LocalLLMConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "mcp": {
      "description": "mcp defines a set of MCP servers exposed by the proxy. When configured, the MCP servers will be\nserved under the attached `gateways` at /mcp and /sse.\nAll MCP servers listed will be served as a single virtual MCP server.",
      "anyOf": [
        {
          "$ref": "#/$defs/LocalSimpleMcpConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "ui": {
      "description": "ui defines settings for how the UI and UI backend is exposed. By default, the UI is exposed only\non the admin interface (typically localhost:15000). This setting allows attaching to `gateways`\nto serve externally, as well as attaching policies to UI traffic.\nIt is strongly recommended to utilize authentication (typically OIDC) when exposing the UI externally.",
      "anyOf": [
        {
          "$ref": "#/$defs/LocalUIConfig"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": false,
  "$defs": {
    "RawConfig": {
      "type": "object",
      "properties": {
        "enableIpv6": {
          "description": "Enable IPv6 address resolution and binding. Defaults to true.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "dns": {
          "description": "DNS resolver settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawDnsConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "localXdsPath": {
          "description": "Local XDS path. If not specified, the current configuration file will be used.",
          "type": [
            "string",
            "null"
          ]
        },
        "modelCatalog": {
          "description": "Model cost catalog sources; entries are merged in order, with later entries taking precedence.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ModelCatalogSource"
          }
        },
        "database": {
          "description": "Primary database used by local runtime features.",
          "anyOf": [
            {
              "$ref": "#/$defs/Config"
            },
            {
              "type": "null"
            }
          ]
        },
        "storage": {
          "description": "Controls whether UI-managed configuration is written to the config file or a DB overlay.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawStorageConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "caAddress": {
          "description": "Address of the Certificate Authority used to issue SPIFFE certificates.",
          "type": [
            "string",
            "null"
          ]
        },
        "caAuthToken": {
          "description": "Authentication token for communicating with the Certificate Authority.",
          "type": [
            "string",
            "null"
          ]
        },
        "xdsAddress": {
          "description": "Address of the xDS control plane used for dynamic configuration.",
          "type": [
            "string",
            "null"
          ]
        },
        "xdsAuthToken": {
          "description": "Authentication token for communicating with the xDS control plane.",
          "type": [
            "string",
            "null"
          ]
        },
        "spiffe": {
          "description": "Local SPIFFE Workload API configuration\nWhen set, listeners and backends may source their TLS identity from SPIFFE.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawSpiffeConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "namespace": {
          "description": "Kubernetes namespace for this gateway instance.",
          "type": [
            "string",
            "null"
          ]
        },
        "gateway": {
          "description": "Name of this gateway. Required when xDS is configured.",
          "type": [
            "string",
            "null"
          ]
        },
        "trustDomain": {
          "description": "SPIFFE trust domain for this gateway.",
          "type": [
            "string",
            "null"
          ]
        },
        "additionalTrustDomains": {
          "description": "Comma-separated list of additional SPIFFE trust domains accepted on inbound HBONE\nconnections. The local trust_domain is always implicitly included.",
          "type": [
            "string",
            "null"
          ]
        },
        "skipValidateTrustDomain": {
          "description": "When true, skip SPIFFE trust-domain verification on inbound HBONE connections.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "serviceAccount": {
          "description": "Kubernetes service account for this gateway, used in its SPIFFE identity.",
          "type": [
            "string",
            "null"
          ]
        },
        "clusterId": {
          "description": "Identifier for the cluster this gateway runs in. Defaults to \"Kubernetes\".",
          "type": [
            "string",
            "null"
          ]
        },
        "network": {
          "description": "Network name for this gateway, used for locality-aware routing.",
          "type": [
            "string",
            "null"
          ]
        },
        "adminAddr": {
          "description": "Admin UI address in the format \"ip:port\", \"localhost:port\", \"unix:/path/to/socket\", or \"off\"",
          "type": [
            "string",
            "null"
          ]
        },
        "standardAttributes": {
          "description": "Standard request log attributes populated for database-backed local runtime features.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawStandardAttributes"
            },
            {
              "type": "null"
            }
          ]
        },
        "statsAddr": {
          "description": "Stats/metrics server address in the format \"ip:port\", \"localhost:port\", \"unix:/path/to/socket\", or \"off\"",
          "type": [
            "string",
            "null"
          ]
        },
        "histograms": {
          "description": "Histogram representation to collect. Native histograms are exposed only through the\nPrometheus protobuf format. Defaults to classic.",
          "$ref": "#/$defs/HistogramMode",
          "default": "classic"
        },
        "readinessAddr": {
          "description": "Readiness probe server address in the format \"ip:port\", \"localhost:port\", \"unix:/path/to/socket\", or \"off\"",
          "type": [
            "string",
            "null"
          ]
        },
        "session": {
          "description": "Configuration for stateful session management",
          "anyOf": [
            {
              "$ref": "#/$defs/RawSession"
            },
            {
              "type": "null"
            }
          ]
        },
        "mcp": {
          "description": "MCP gateway settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawMcpConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "sensitiveHeaders": {
          "description": "Additional request headers whose values should be redacted from trace and debug output.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "customFunctions": {
          "description": "Custom CEL functions available to all CEL expressions. These can define re-usable snippets that\ncan be used in any expressions.\nConfigure as a block string containing one or more definitions, for example:\n`customFunctions: |`\n`  isInternal() { request.headers[\"x-env\"] == \"internal\" }`\n`  this.joined(prefix, parts...) { prefix + this + parts.join(\"\") }`",
          "type": "string",
          "default": ""
        },
        "connectionTerminationDeadline": {
          "description": "Maximum time to wait for connections to close gracefully during shutdown.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "connectionMinTerminationDeadline": {
          "description": "Minimum time to allow for graceful connection termination. Defaults to zero.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "workerThreads": {
          "description": "Number of worker threads for the async runtime. Accepts a number or a string such as \"auto\".",
          "anyOf": [
            {
              "$ref": "#/$defs/StringOrInt"
            },
            {
              "type": "null"
            }
          ]
        },
        "tracing": {
          "description": "Distributed tracing configuration.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawTracing"
            },
            {
              "type": "null"
            }
          ]
        },
        "logging": {
          "description": "Logging configuration, including filter, level, format, and custom fields.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawLogging"
            },
            {
              "type": "null"
            }
          ]
        },
        "metrics": {
          "description": "Metrics configuration, including metric removal and custom fields.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawMetrics"
            },
            {
              "type": "null"
            }
          ]
        },
        "backend": {
          "description": "Configuration for upstream connections, including keepalives, timeouts, and pooling.",
          "$ref": "#/$defs/BackendConfig",
          "default": {
            "keepalives": {
              "enabled": true,
              "time": "3m0s",
              "interval": "3m0s",
              "retries": 9
            },
            "connectTimeout": "11s",
            "poolIdleTimeout": "1m30s",
            "poolMaxSize": null
          }
        },
        "hbone": {
          "description": "HBONE (HTTP/2 CONNECT tunnel) protocol configuration.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawHBONE"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "RawDnsConfig": {
      "type": "object",
      "properties": {
        "lookupFamily": {
          "description": "Controls which IP address families the DNS resolver will query for\nupstream connections.\nAccepted values: All, Auto, V4Preferred, V4Only, V6Only.\nDefaults to Auto (IPv4-only when enableIpv6 is false, both when true).",
          "anyOf": [
            {
              "$ref": "#/$defs/DnsLookupFamily"
            },
            {
              "type": "null"
            }
          ]
        },
        "edns0": {
          "description": "Whether to enable EDNS0 (Extension Mechanisms for DNS) in the resolver.\nWhen `None`, the system-provided resolver setting is preserved.\nCan also be set via the `DNS_EDNS0` environment variable.",
          "type": [
            "boolean",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "DnsLookupFamily": {
      "description": "Controls which IP address families the DNS resolver will query for\nupstream (backend) connections.\n\n Maps to hickory_resolver's `LookupIpStrategy` under the hood.\n\nCan be set via the `DNS_LOOKUP_FAMILY` environment variable or the\n`dns.lookupFamily` field in the config file.\n\nSee: <https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto#enum-config-cluster-v3-cluster-dnslookupfamily>",
      "oneOf": [
        {
          "description": "Query for both A and AAAA records in parallel and use all results.",
          "type": "string",
          "const": "All"
        },
        {
          "description": "Automatically choose based on the `enable_ipv6` setting. When IPv6 is\nenabled this behaves like `V4Preferred`; otherwise `V4Only`.",
          "type": "string",
          "const": "Auto"
        },
        {
          "description": "Query for both A and AAAA, but prefer IPv4 addresses when both are\navailable.",
          "type": "string",
          "const": "V4Preferred"
        },
        {
          "description": "Only query for A (IPv4) records.",
          "type": "string",
          "const": "V4Only"
        },
        {
          "description": "Only query for AAAA (IPv6) records.",
          "type": "string",
          "const": "V6Only"
        }
      ]
    },
    "ModelCatalogSource": {
      "description": "A source of model cost catalog data.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "file": {
              "description": "Path to a file on disk containing the model cost catalog.",
              "type": "string"
            }
          },
          "required": [
            "file"
          ]
        },
        {
          "type": "object",
          "properties": {
            "inline": {
              "description": "Model cost catalog provided inline as a string.",
              "type": "string"
            }
          },
          "required": [
            "inline"
          ]
        },
        {
          "type": "object",
          "properties": {
            "inline": {
              "description": "Model cost catalog provided inline as structured data.",
              "$ref": "#/$defs/Catalog"
            }
          },
          "required": [
            "inline"
          ]
        }
      ]
    },
    "Catalog": {
      "type": "object",
      "properties": {
        "providers": {
          "description": "Map of provider name to its supported models and pricing.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/Provider"
          },
          "default": {}
        }
      },
      "additionalProperties": false
    },
    "Provider": {
      "type": "object",
      "properties": {
        "models": {
          "description": "Map of model ID to its pricing rates and tiers.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/Model"
          },
          "default": {}
        }
      },
      "additionalProperties": false
    },
    "Model": {
      "type": "object",
      "properties": {
        "rates": {
          "description": "Base pricing rates for this model.",
          "$ref": "#/$defs/Rates"
        },
        "tiers": {
          "description": "Context-length pricing tiers that override the base rates.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Tier"
          }
        },
        "tags": {
          "description": "Freeform capability/routing tags for this model.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "Rates": {
      "type": "object",
      "properties": {
        "input": {
          "description": "Cost per 1M input (prompt) tokens.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "output": {
          "description": "Cost per 1M output (completion) tokens.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "cacheRead": {
          "description": "Cost per 1M tokens read from cache.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "cacheWrite": {
          "description": "Cost per 1M tokens written to cache.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "reasoning": {
          "description": "Cost per 1M reasoning tokens. Falls back to the output rate if unset.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "inputAudio": {
          "description": "Cost per 1M input audio tokens. Falls back to the input rate if unset.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        },
        "outputAudio": {
          "description": "Cost per 1M output audio tokens. Falls back to the output rate if unset.",
          "anyOf": [
            {
              "$ref": "#/$defs/Money"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "Money": {
      "type": "string"
    },
    "Tier": {
      "type": "object",
      "properties": {
        "contextOver": {
          "description": "Context-token threshold above which this tier's rates apply.",
          "type": "integer",
          "format": "uint64",
          "minimum": 0
        },
        "rates": {
          "description": "Pricing rates for this tier, overlaid on the base model rates.",
          "$ref": "#/$defs/Rates"
        }
      },
      "additionalProperties": false,
      "required": [
        "contextOver",
        "rates"
      ]
    },
    "Config": {
      "type": "object",
      "properties": {
        "url": {
          "description": "Connection URL for the request log database. A postgres:// or postgresql:// URL uses Postgres; any other value is treated as a SQLite database.",
          "type": "string"
        },
        "maxConnections": {
          "description": "Maximum number of connections to open in this database's connection pool. Defaults to 5.\nWhen the request log and config stores have matching database settings, they share one pool\nwith this limit.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 1,
          "default": null
        }
      },
      "additionalProperties": false,
      "required": [
        "url"
      ]
    },
    "RawStorageConfig": {
      "type": "object",
      "properties": {
        "mode": {
          "$ref": "#/$defs/ConfigStoreMode",
          "default": "file"
        }
      },
      "additionalProperties": false
    },
    "ConfigStoreMode": {
      "oneOf": [
        {
          "description": "Store all UI-managed configuration in the local config file.",
          "type": "string",
          "const": "file"
        },
        {
          "description": "Read a file baseline and store UI-managed overlay resources in the configured database.",
          "type": "string",
          "const": "hybrid"
        },
        {
          "description": "Disallow write operations to the config from the UI",
          "type": "string",
          "const": "readOnly"
        }
      ]
    },
    "RawSpiffeConfig": {
      "type": "object",
      "properties": {
        "endpoint": {
          "description": "SPIFFE Workload API Endpoint (e.g. `unix:///run/spire/agent.sock`).",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "RawStandardAttributes": {
      "type": "object",
      "properties": {
        "user": {
          "description": "CEL expression used to populate the `agentgateway.user` request log attribute.",
          "type": [
            "string",
            "null"
          ]
        },
        "group": {
          "description": "CEL expression used to populate the `agentgateway.group` request log attribute.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "HistogramMode": {
      "oneOf": [
        {
          "description": "Collect classic histogram buckets only.",
          "type": "string",
          "const": "classic"
        },
        {
          "description": "Collect native histogram buckets only.",
          "type": "string",
          "const": "native"
        },
        {
          "description": "Collect both classic and native histogram buckets.",
          "type": "string",
          "const": "both"
        }
      ]
    },
    "RawSession": {
      "type": "object",
      "properties": {
        "key": {
          "description": "The AES-256-GCM session protection key to be used for session tokens.\nIf not set, sessions will not be encrypted.\nFor example, generated via `openssl rand -hex 32`.",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "key"
      ]
    },
    "RawMcpConfig": {
      "type": "object",
      "properties": {
        "sessionTtl": {
          "description": "Time to live for MCP sessions before they are closed automatically. Defaults to 30 minutes.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        }
      },
      "additionalProperties": false
    },
    "StringOrInt": {
      "type": [
        "string",
        "integer"
      ]
    },
    "RawTracing": {
      "type": "object",
      "properties": {
        "otlpEndpoint": {
          "description": "OTLP collector endpoint URL for exporting traces.",
          "type": [
            "string",
            "null"
          ]
        },
        "headers": {
          "description": "HTTP headers to include on OTLP trace exports, such as authentication headers.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        },
        "otlpProtocol": {
          "description": "OTLP transport protocol: `grpc` or `http`.",
          "$ref": "#/$defs/Protocol",
          "default": "grpc"
        },
        "fields": {
          "description": "Custom fields to add to or remove from trace spans.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawLoggingFields"
            },
            {
              "type": "null"
            }
          ]
        },
        "randomSampling": {
          "description": "Expression to determine the amount of *random sampling*.\nRandom sampling will initiate a new trace span if the incoming request does not have a trace already.\nThis should evaluate to either a float between 0.0-1.0 (0-100%) or true/false.\nThis defaults to 'false'.",
          "anyOf": [
            {
              "$ref": "#/$defs/StringBoolFloat"
            },
            {
              "type": "null"
            }
          ]
        },
        "clientSampling": {
          "description": "Expression to determine the amount of *client sampling*.\nClient sampling determines whether to initiate a new trace span if the incoming request does have a trace already.\nThis should evaluate to either a float between 0.0-1.0 (0-100%) or true/false.\nThis defaults to 'true'.",
          "anyOf": [
            {
              "$ref": "#/$defs/StringBoolFloat"
            },
            {
              "type": "null"
            }
          ]
        },
        "path": {
          "description": "OTLP path. Default is /v1/traces",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "Protocol": {
      "type": "string",
      "enum": [
        "grpc",
        "http"
      ]
    },
    "RawLoggingFields": {
      "type": "object",
      "properties": {
        "remove": {
          "description": "Field names to remove from log entries.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "add": {
          "description": "Map of field name to a CEL expression that computes the value to add to logs.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        }
      },
      "additionalProperties": false
    },
    "StringBoolFloat": {
      "type": [
        "string",
        "number",
        "boolean"
      ]
    },
    "RawLogging": {
      "type": "object",
      "properties": {
        "filter": {
          "description": "CEL expression that selects which requests are logged.",
          "type": [
            "string",
            "null"
          ]
        },
        "fields": {
          "description": "Custom fields to add to or remove from log entries.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawLoggingFields"
            },
            {
              "type": "null"
            }
          ]
        },
        "level": {
          "description": "Log level: a single level (e.g. `info`), a comma-separated string of per-module levels (e.g. `info,agent_core=trace`), or a list of per-module levels (e.g. `[info, agent_core=trace]`).",
          "anyOf": [
            {
              "$ref": "#/$defs/RawLoggingLevel"
            },
            {
              "type": "null"
            }
          ]
        },
        "format": {
          "description": "Log output format: `text` or `json`.",
          "anyOf": [
            {
              "$ref": "#/$defs/LoggingFormat"
            },
            {
              "type": "null"
            }
          ]
        },
        "database": {
          "description": "Log-store database configuration; enables request logging to a database backend.",
          "anyOf": [
            {
              "$ref": "#/$defs/Config"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "RawLoggingLevel": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "LoggingFormat": {
      "type": "string",
      "enum": [
        "text",
        "json"
      ]
    },
    "RawMetrics": {
      "type": "object",
      "properties": {
        "remove": {
          "description": "Metric names to exclude from collection.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "fields": {
          "description": "Custom fields to add to all metrics.",
          "anyOf": [
            {
              "$ref": "#/$defs/RawMetricFields"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "RawMetricFields": {
      "type": "object",
      "properties": {
        "add": {
          "description": "Map of field name to a CEL expression that computes the value to add to metrics.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        }
      },
      "additionalProperties": false
    },
    "BackendConfig": {
      "type": "object",
      "properties": {
        "keepalives": {
          "description": "TCP keepalive configuration for upstream connections.",
          "$ref": "#/$defs/KeepaliveConfig",
          "default": {
            "enabled": true,
            "time": "3m0s",
            "interval": "3m0s",
            "retries": 9
          }
        },
        "connectTimeout": {
          "description": "Maximum time to wait when establishing a connection to an upstream. Defaults to 11 seconds.",
          "type": "string",
          "default": "11s"
        },
        "poolIdleTimeout": {
          "description": "The maximum duration to keep an idle connection alive.",
          "type": "string",
          "default": "1m30s"
        },
        "poolMaxSize": {
          "description": "The maximum number of connections allowed in the pool, per hostname. If set, this will limit\nthe total number of connections kept alive to any given host.\nNote: excess connections will still be created, they will just not rem

# --- truncated at 32 KB (362 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/agentgateway/refs/heads/main/json-schema/agentgateway-config-schema.json

Work with this as data

Every JSON Schema 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 schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • 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 JSON Schema
curl "https://apis.io/api/v1/json-schemas/agentgateway-config"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

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

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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