> ## Documentation Index
> Fetch the complete documentation index at: https://tyk.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Tyk Operator CRD Reference

> Field reference for every Tyk Operator Custom Resource Definition (CRD).

<Note>
  This page lists the fields of every Tyk Operator Custom Resource under its `spec`. Field names use dot notation for nested objects (`proxy.target_url`), `[]` for list items (`tags[]`), and `.{key}` for map entries (`auth_configs.{key}`). Within each group, required fields are listed first. Read-only `status` fields are not listed.
</Note>

## TykOasApiDefinition

TykOasApiDefinitionSpec defines the desired state of TykOasApiDefinition

### Top-Level Fields

<ParamField body="categories[]" type="string">
  Categories serve as identifiers for the API definitions, subsequently enabling the filtering of API listings based on these categories.
</ParamField>

### tykOAS

<ParamField body="tykOAS" type="object" required>
  TykOAS provides storage information about Tyk OAS
</ParamField>

<ParamField body="tykOAS.configmapRef" type="object" required>
  ConfigmapRef provides information of configmap in which Tyk OAS is stored
</ParamField>

<ParamField body="tykOAS.configmapRef.keyName" type="string" required>
  KeyName is the key of configmap in which Tyk OAS doc is stored
</ParamField>

<ParamField body="tykOAS.configmapRef.name" type="string" required>
  Name is the name of configmap
</ParamField>

<ParamField body="tykOAS.configmapRef.namespace" type="string">
  Namespace is the namespace of configmap. If Namespace is not provided, we assume that the ConfigMap is in the same namespace as TykOasApiDefinition resource.
</ParamField>

### certificatePinning

<ParamField body="certificatePinning" type="object">
  CertificatePinning contains the configuration related to certificate pinning. It is possible to set Kubernetes secrets containing certificates. It is used to set `upstream.certificatePinning` in Tyk OAS API Definition.
</ParamField>

<ParamField body="certificatePinning.enabled" type="boolean" required>
  Enabled is a boolean flag, if set to `true`, it enables certificate pinning for the API. Tyk classic API definition: `certificate_pinning_disabled`
</ParamField>

<ParamField body="certificatePinning.domainToPublicKeysMapping[]" type="object">
  DomainToPublicKeysMapping maintains the mapping of domain to pinned public keys. Tyk classic API definition: `pinned_public_keys`
</ParamField>

<ParamField body="certificatePinning.domainToPublicKeysMapping[].domain" type="string" required>
  Domain contains the domain name.
</ParamField>

<ParamField body="certificatePinning.domainToPublicKeysMapping[].publicKeyRefs[]" type="string">
  PublicKeyRefs holds a list of Kubernetes secret names that reside in the same namespace as current TykOasApiDefinition resource. The secret needs to be a type of TLS secret where the pinned public key is stored in `tls.crt` field. Each secret must contain a public key associated with the specified domain name. **NOTE** If you want to continue using secrets that are already created on Tyk Dashboard, specify their IDs in `publicKeys` field of TykOasApiDefinition CR. And then, Tyk Operator will merge this array which is specified through `publicKeys` field with new Tyk Secrets which will be created based on Kubernetes secrets defined in `publicKeyRefs`.
</ParamField>

<ParamField body="certificatePinning.domainToPublicKeysMapping[].publicKeys[]" type="string">
  PublicKeys contains a list of the public keys IDs pinned to the domain name. It only accepts Tyk IDs of the public keys. If you have Kubernetes secrets containing public keys of the domain, please use `publicKeysRefs` field instead of this one. As this one only works with already existing public keys on Tyk Dashboard.
</ParamField>

### clientCertificate

<ParamField body="clientCertificate" type="object">
  ClientCertificate is used to configure client certificates settings needed for MTLS connection between Tyk and client. It is used to set `server.clientCertificate` field of Tyk OAS API
</ParamField>

<ParamField body="clientCertificate.allowlist[]" type="string">
  Allowlist stores list of k8s secret names storing client certificates
</ParamField>

<ParamField body="clientCertificate.enabled" type="boolean">
  Enabled activates mTLS for the API.
</ParamField>

### contextRef

<ParamField body="contextRef" type="object">
  Context specify namespace/name of the OperatorContext object used for reconciling this APIDefinition
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

### customDomain

<ParamField body="customDomain" type="object">
  CustomDomain is the domain to bind this API to. This enforces domain matching for client requests. Tyk classic API definition: `domain`
</ParamField>

<ParamField body="customDomain.enabled" type="boolean" required>
  Enabled allow/disallow the usage of the domain.
</ParamField>

<ParamField body="customDomain.name" type="string" required>
  Name is the name of the domain.
</ParamField>

<ParamField body="customDomain.certificates[]" type="string">
  Certificates defines a field for specifying certificate IDs that the Tyk can utilise to dynamically load certificates for your custom domain. Tyk classic API definition: `certificates`
</ParamField>

<ParamField body="customDomain.certificatesRef[]" type="string">
  CertificatesRef defines a field for specifying certificates through Kubernetes secrets. Secrets need to be installed within the namespace of the TykOasApiDefinition resource.
</ParamField>

### jwtAuth

<ParamField body="jwtAuth" type="object">
  JwtAuth holds the configuration for the JWT middleware.
</ParamField>

<ParamField body="jwtAuth.defaultPoliciesRef[]" type="object">
  DefaultPolicies is a list of policies specified using their name and namespace.
</ParamField>

<ParamField body="jwtAuth.defaultPoliciesRef[].name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="jwtAuth.defaultPoliciesRef[].namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="jwtAuth.scopes" type="object">
  Scopes holds the scope to policy mappings for a claim name.
</ParamField>

<ParamField body="jwtAuth.scopes.claimName" type="string">
  ClaimName contains the claim name.
</ParamField>

<ParamField body="jwtAuth.scopes.scopeToPolicyMapping[]" type="object">
  ScopeToPolicyMapping contains the mappings of scopes to policy IDs.
</ParamField>

<ParamField body="jwtAuth.scopes.scopeToPolicyMapping[].policyRef" type="object">
  PolicyRef contains the referenced policy based on the name/namespace.
</ParamField>

<ParamField body="jwtAuth.scopes.scopeToPolicyMapping[].policyRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="jwtAuth.scopes.scopeToPolicyMapping[].policyRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="jwtAuth.scopes.scopeToPolicyMapping[].scope" type="string">
  Scope contains the scope name.
</ParamField>

### mutualTLS

<ParamField body="mutualTLS" type="object">
  MutualTLS represents the configuration for an Upstream mTLS.
</ParamField>

<ParamField body="mutualTLS.enabled" type="boolean" required>
  Enabled indicates if MTLS should be enabled or not.
</ParamField>

<ParamField body="mutualTLS.domainToCertificateMapping[]" type="object">
  DomainToCertificateMapping contains the configuration for an upstream server domain.
</ParamField>

<ParamField body="mutualTLS.domainToCertificateMapping[].domain" type="string" required>
  Domain refers to the domain name of an upstream server.
</ParamField>

<ParamField body="mutualTLS.domainToCertificateMapping[].certificateID" type="string">
  Certificate references to Tyk cert ID
</ParamField>

<ParamField body="mutualTLS.domainToCertificateMapping[].certificateRef" type="string">
  CertificateRef references the secret containing the domain's SSL Certificate.
</ParamField>

### upstreamRequestSigning

<ParamField body="upstreamRequestSigning" type="object">
  UpstreamRequestSigning configures HMAC-based request signing for upstream requests. When enabled, it ensures requests are signed before being sent to the upstream service using hmac-sha256 algorithm.
</ParamField>

<ParamField body="upstreamRequestSigning.algorithm" type="string">
  Algorithm for request signing. For Certificate, it can rsa-sha256. For Secret, it can be any of hmac-sha1, hmac-sha256, hmac-sha384, hmac-sha512. **Allowed values:** `hmac-sha1`, `hmac-sha256`, `hmac-sha384`, `hmac-sha512`, `rsa-sha256`.
</ParamField>

<ParamField body="upstreamRequestSigning.certificateRef" type="string">
  CertificateRef references the secret containing SSL Certificate.
</ParamField>

<ParamField body="upstreamRequestSigning.keyId" type="string">
  keyid is mandatory if algorithm is hmac type
</ParamField>

<ParamField body="upstreamRequestSigning.secretRef" type="object">
  SecretRef references HMAC secret
</ParamField>

<ParamField body="upstreamRequestSigning.secretRef.keyName" type="string" required>
  KeyName is the key of secret in which Tyk OAS doc is stored
</ParamField>

<ParamField body="upstreamRequestSigning.secretRef.name" type="string" required>
  Name is the name of the secret
</ParamField>

<ParamField body="upstreamRequestSigning.secretRef.namespace" type="string">
  Namespace is the namespace of secret. If Namespace is not provided, we assume that the secret is in the same namespace as TykOasApiDefinition resource.
</ParamField>

### versioning

<ParamField body="versioning" type="object">
  Versioning provides versioning information about this OAS API
</ParamField>

<ParamField body="versioning.enabled" type="boolean" required>
  Enabled is a boolean flag, if set to true it will enable versioning of the API.
</ParamField>

<ParamField body="versioning.default" type="string">
  Default contains the default version name if a request is issued without a version.
</ParamField>

<ParamField body="versioning.fallbackToDefault" type="boolean">
  FallbackToDefault specifies that the default version of the OAS API should be used if the requested version does not exist."
</ParamField>

<ParamField body="versioning.key" type="string">
  Key contains the name of the key to check for versioning information.
</ParamField>

<ParamField body="versioning.location" type="string">
  Location contains versioning location information. It can be one of the following: header, url-param, url. **Allowed values:** `header`, `url-param`, `url`.
</ParamField>

<ParamField body="versioning.name" type="string">
  Name contains the name of the version.
</ParamField>

<ParamField body="versioning.stripVersioningData" type="boolean">
  StripVersioningData if enabled, specifies that the API responses will be stripped of versioning data.
</ParamField>

<ParamField body="versioning.urlVersioningPattern" type="string">
  UrlVersioningPattern configure with a regex that matches the versioning identifier format in your URLs. This is essential when using stripVersioningData and fallbackToDefault with location=url."
</ParamField>

<ParamField body="versioning.versions[]" type="object">
  Versions contains a list of versions that map to individual API IDs.
</ParamField>

<ParamField body="versioning.versions[].name" type="string" required>
  Name contains the name of the referenced TykOasApiDefinition.
</ParamField>

<ParamField body="versioning.versions[].tykOasApiDefinitionRef" type="object" required>
  TykOasApiDefinitionRef references a TykOasApiDefinition Name and Namespace.
</ParamField>

<ParamField body="versioning.versions[].tykOasApiDefinitionRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="versioning.versions[].tykOasApiDefinitionRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## ApiDefinition

APIDefinitionSpec represents the configuration for a single proxied API and it's versions.

### Top-Level Fields

<ParamField body="name" type="string" required />

<ParamField body="protocol" type="string" required>
  APIProtocol is the network transport protocol supported by the gateway **Allowed values:** \`\`, `h2c`, `tcp`, `tls`, `http`, `https`.
</ParamField>

<ParamField body="active" type="boolean">
  Active specifies if the api is enabled or not
</ParamField>

<ParamField body="allowed_ips[]" type="string">
  AllowedIPs is a list of IP address that are whitelisted.When this is provided all IP address that is not on this list will be blocked and a 403 http status will be returned. The IP address can be IPv4 or IPv6.IP in CIDR notation is also supported.
</ParamField>

<ParamField body="api_id" type="string">
  Only set this field if you are referring to an existing API def. The Operator will use this APIID to link the CR with the API in Tyk Note: The values in the CR will become the new source of truth, overriding the existing API Definition
</ParamField>

<ParamField body="base_identity_provided_by" type="string">
  BaseIdentityProvidedBy sets Base Identity Provider for situation when multiple authentication mechanisms are used **Allowed values:** `auth_token`, `hmac_key`, `basic_auth_user`, `jwt_claim`, `oidc_user`, `oauth_key`.
</ParamField>

<ParamField body="blacklisted_ips[]" type="string">
  BlacklistedIPs is a list of IP address that will be blacklisted.This means if origin IP matches any IP in this list a 403 http status code will be returned. The IP address can be IPv4 or IPv6. IP in CIDR notation is also supported.
</ParamField>

<ParamField body="certificate_secret_names[]" type="string">
  CertificateSecretNames represents the names of the secrets that the controller should look for in the current namespace which contain the certificates.
</ParamField>

<ParamField body="certificates[]" type="string">
  Certificates is a list of Tyk Certificate IDs. e.g. orgid+fingerprint. Use CertificateSecretNames if using cert-manager
</ParamField>

<ParamField body="client_certificate_refs[]" type="string" />

<ParamField body="client_certificates[]" type="string" />

<ParamField body="config_data" type="object">
  ConfigData can be used to pass custom attributes (a JSON object) into your middleware, such as a virtual endpoint or header transform. Free-form object with arbitrary keys.
</ParamField>

<ParamField body="custom_middleware_bundle" type="string" />

<ParamField body="detailed_tracing" type="boolean" />

<ParamField body="disable_quota" type="boolean">
  DisableQuota allows you to disable quota middleware in a given API Definition.
</ParamField>

<ParamField body="disable_rate_limit" type="boolean">
  DisableRateLimit allows you to disable rate limits in a given API Definition.
</ParamField>

<ParamField body="do_not_track" type="boolean">
  DoNotTrack disables endpoint tracking for this API
</ParamField>

<ParamField body="domain" type="string">
  Domain represents a custom host header that the gateway will listen on for this API
</ParamField>

<ParamField body="enable_context_vars" type="boolean">
  EnableContextVars extracts request context variables from the start of the middleware chain. Set this to true to make them available to your transforms. Context Variables are available in the url rewriter, modify headers and body transforms.
</ParamField>

<ParamField body="enable_coprocess_auth" type="boolean" />

<ParamField body="enable_detailed_recording" type="boolean">
  EnableDetailedRecording instructs Tyk store the inbound request and outbound response data in HTTP Wire format as part of the Analytics data
</ParamField>

<ParamField body="enable_ip_blacklisting" type="boolean">
  EnableIPBlacklisting activates the ip blacklisting middleware.
</ParamField>

<ParamField body="enable_ip_whitelisting" type="boolean">
  EnableIPWhiteListing activates the ip whitelisting middleware.
</ParamField>

<ParamField body="enable_jwt" type="boolean">
  EnableJWT set JWT as the access method for this API.
</ParamField>

<ParamField body="enable_proxy_protocol" type="boolean" />

<ParamField body="id" type="string">
  For server use only, do not use
</ParamField>

<ParamField body="internal" type="boolean">
  Internal tells Tyk Gateway that this is a virtual API. It can only be routed to from other APIs.
</ParamField>

<ParamField body="jwt_client_base_field" type="string">
  JWTClientIDBaseField is the name of the field on JWT claim to use for client id. This field is mutually exclusive to jwt\_identity\_base\_field, meaning you can only set/use one and jwt\_identity\_base\_field takes precedence when both are set.
</ParamField>

<ParamField body="jwt_default_policies[]" type="string">
  JWTDefaultPolicies is a list of policies that will be used when base policy can't be extracted from the JWT token. When this list is provided the first element will be used as the base policy while the rest of elements will be applied.
</ParamField>

<ParamField body="jwt_expires_at_validation_skew" type="integer">
  JWTExpiresAtValidationSkew adds validation for expired at JWT claim. Given now = current unix time skew = jwt\_expires\_at\_validation\_skew exp = expired at If exp > (now - skew) then validation will fail with "token has expired"
</ParamField>

<ParamField body="jwt_identity_base_field" type="string">
  JWTIdentityBaseField Identifies the user or identity to be used in the Claims of the JWT. This will fallback to sub if not found. This field forms the basis of a new “virtual” token that gets used after validation. It means policy attributes are carried forward through Tyk for attribution purposes.
</ParamField>

<ParamField body="jwt_issued_at_validation_skew" type="integer">
  JWTIssuedAtValidationSkew adds validation for issued at JWT claim. Given now = current unix time skew = jwt\_issued\_at\_validation\_skew iat = the issued at jwt claim If iat > (now + skew) then validation will fail with "token used before issued"
</ParamField>

<ParamField body="jwt_not_before_validation_skew" type="integer">
  JWTNotBeforeValidationSkew adds validation for not before JWT claim. Given now = current unix time skew = jwt\_not\_before\_validation\_skew nbf = the not before jwt claim If nbf > (now + skew) then validation will fail with "token is not valid yet"
</ParamField>

<ParamField body="jwt_policy_field_name" type="string">
  JWTPolicyFieldName The policy ID to apply to the virtual token generated for a JWT
</ParamField>

<ParamField body="jwt_scope_claim_name" type="string">
  JWTScopeClaimName overides the key used for scope values in the JWT claims. By default the value is "scope"
</ParamField>

<ParamField body="jwt_signing_method" type="string">
  JWTSigningMethod algorithm used to sign jwt token **Allowed values:** \`\`, `rsa`, `hmac`, `ecdsa`.
</ParamField>

<ParamField body="jwt_skip_kid" type="boolean">
  JWTSkipKid when true we ingore using kid as the identity for a JWT token and instead use jwt\_identity\_base\_field if it was set or fallback to sub JWT claim.
</ParamField>

<ParamField body="jwt_source" type="string">
  JWTSource Must either be a base64 encoded valid RSA/HMAC key or a url to a resource serving JWK, this key will then be used to validate inbound JWT and throttle them according to the centralised JWT options and fields set in the configuration.
</ParamField>

<ParamField body="listen_port" type="integer" />

<ParamField body="org_id" type="string">
  OrgID is overwritten - no point setting this
</ParamField>

<ParamField body="session_lifetime" type="integer">
  SessionLifetime this is duration in seconds before the session key expires in redis. Example: If you want the session keys to be alive only 24 hours you can set this value to 86400 that we can break down to 60 \* 60 \* 24 = Total seconds in a day
</ParamField>

<ParamField body="strip_auth_data" type="boolean">
  StripAuthData ensures that any security tokens used for accessing APIs are stripped and not leaked to the upstream
</ParamField>

<ParamField body="tag_headers[]" type="string" />

<ParamField body="tags[]" type="string">
  Tags are named gateway nodes which tell gateway clusters whether to load an API or not. for example, to load the API in an ARA gateway, you might want to include an `edge` tag.
</ParamField>

<ParamField body="use_basic_auth" type="boolean">
  UseBasicAuth enables basic authentication
</ParamField>

<ParamField body="use_go_plugin_auth" type="boolean">
  Enable Go Plugin Auth. Needs to be combined with "use\_keyless:false"
</ParamField>

<ParamField body="use_keyless" type="boolean">
  UseKeylessAccess will switch off all key checking. Some analytics will still be recorded, but rate-limiting, quotas and security policies will not be possible (there is no session to attach requests to).
</ParamField>

<ParamField body="use_mutual_tls_auth" type="boolean">
  UseMutualTLSAuth enables mututal TLS authentication
</ParamField>

<ParamField body="use_oauth2" type="boolean">
  UseOAuth2 enables oauth2 authorization
</ParamField>

<ParamField body="use_standard_auth" type="boolean">
  UseStandardAuth enables simple bearer token authentication
</ParamField>

### proxy

<ParamField body="proxy" type="object" required>
  Proxy
</ParamField>

<ParamField body="proxy.target_url" type="string" required>
  TargetURL defines the target URL that the request should be proxied to.
</ParamField>

<ParamField body="proxy.check_host_against_uptime_tests" type="boolean">
  CheckHostAgainstUptimeTests will check the hostname of the outbound request against the downtime list generated by the uptime test host checker. If the host is found, then it is skipped or removed from the load balancer. This is only valid if uptime tests for the api are enabled.
</ParamField>

<ParamField body="proxy.disable_strip_slash" type="boolean">
  DisableStripSlash disables the stripping of the slash suffix from a URL. when `true` a request to [http://foo.bar/baz/](http://foo.bar/baz/) will be retained. when `false` a request to [http://foo.bar/baz/](http://foo.bar/baz/) will be matched to [http://foo.bar/baz](http://foo.bar/baz)
</ParamField>

<ParamField body="proxy.enable_load_balancing" type="boolean">
  EnableLoadBalancing enables Tyk's round-robin loadbalancer. Tyk will ignore the TargetURL field, and rely on the hosts in the Targets list
</ParamField>

<ParamField body="proxy.listen_path" type="string">
  ListenPath represents the path to listen on. e.g. `/api` or `/` or `/httpbin`. Any requests coming into the host, on the port that Tyk is configured to run on, that match this path will have the rules defined in the API Definition applied. Versioning assumes that different versions of an API will live on the same URL structure. If you are using URL-based versioning (e.g. /v1/function, /v2/function) then it is recommended to set up a separate non-versioned definition for each version as they are essentially separate APIs.
</ParamField>

<ParamField body="proxy.preserve_host_header" type="boolean">
  If PreserveHostHeader is set to true then the host header in the outbound request is retained to be the inbound hostname of the proxy.
</ParamField>

<ParamField body="proxy.service_discovery" type="object">
  ServiceDiscovery configures integration with an external service discovery system (for example Consul, etcd or Eureka) that the gateway queries to resolve the upstream target hosts at runtime.
</ParamField>

<ParamField body="proxy.service_discovery.cache_timeout" type="integer" required />

<ParamField body="proxy.service_discovery.data_path" type="string" required />

<ParamField body="proxy.service_discovery.endpoint_returns_list" type="boolean" required />

<ParamField body="proxy.service_discovery.parent_data_path" type="string" required />

<ParamField body="proxy.service_discovery.port_data_path" type="string" required />

<ParamField body="proxy.service_discovery.query_endpoint" type="string" required />

<ParamField body="proxy.service_discovery.target_path" type="string" required />

<ParamField body="proxy.service_discovery.use_discovery_service" type="boolean" required />

<ParamField body="proxy.service_discovery.use_nested_query" type="boolean" required />

<ParamField body="proxy.service_discovery.use_target_list" type="boolean" required />

<ParamField body="proxy.strip_listen_path" type="boolean">
  StripListenPath removes the inbound listen path in the outgoing request. e.g. [http://acme.com/httpbin/get](http://acme.com/httpbin/get) where `httpbin` is the listen path. The `httpbin` listen path which is used to identify the API loaded in Tyk is removed, and the outbound request would be [http://httpbin.org/get](http://httpbin.org/get)
</ParamField>

<ParamField body="proxy.target_internal" type="object" />

<ParamField body="proxy.target_internal.path" type="string">
  Path path on target , this does not include query parameters. example /myendpoint
</ParamField>

<ParamField body="proxy.target_internal.query" type="string">
  Query url query string to add to target example check\_limits=true
</ParamField>

<ParamField body="proxy.target_internal.target" type="object">
  API a namespaced/name to the api definition resource that you are targetting
</ParamField>

<ParamField body="proxy.target_internal.target.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="proxy.target_internal.target.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="proxy.target_list[]" type="string">
  Targets defines a list of upstream host targets. Tyk will then round-robin load balance between these targets. EnableLoadBalancing must be set to true in order to take advantage of this feature.
</ParamField>

<ParamField body="proxy.transport" type="object">
  Transport section exposes advanced transport level configurations such as minimum TLS version.
</ParamField>

<ParamField body="proxy.transport.proxy_url" type="string">
  ProxyURL specifies custom forward proxy & port. e.g. `http(s)://proxy.url:1234`
</ParamField>

<ParamField body="proxy.transport.ssl_ciphers[]" type="string">
  SSLCipherSuites is an array of acceptable cipher suites. A list of allowed cipher suites can be found in the Go Crypto TLS package constants documentation [https://golang.org/pkg/crypto/tls/#pkg-constants](https://golang.org/pkg/crypto/tls/#pkg-constants)
</ParamField>

<ParamField body="proxy.transport.ssl_force_common_name_check" type="boolean">
  SSLForceCommonNameCheck forces hostname validation against the certificate Common Name
</ParamField>

<ParamField body="proxy.transport.ssl_insecure_skip_verify" type="boolean">
  SSLInsecureSkipVerify controls whether it is possible to use self-signed certificates when connecting to the upstream. This is applied to `TykMakeHttpRequest` & `TykMakeBatchRequest` in virtual endpoint middleware.
</ParamField>

<ParamField body="proxy.transport.ssl_min_version" type="integer">
  SSLMinVersion defines the minimum TLS version the gateway will use to establish a connection to the upstream. 1.0: 769; 1.1: 770; 1.2: 771; 1.3: 772. **Allowed values:** `769`, `770`, `771`, `772`.
</ParamField>

### analytics\_plugin

<ParamField body="analytics_plugin" type="object">
  AnalyticsPlugin is used to configure analytics plugin which enables editing or removal of all parts of analytics records, raw `request` and responses recorded by Tyk at the gateway level
</ParamField>

<ParamField body="analytics_plugin.enable" type="boolean" required />

<ParamField body="analytics_plugin.func_name" type="string" />

<ParamField body="analytics_plugin.plugin_path" type="string" />

### auth

<ParamField body="auth" type="object" />

<ParamField body="auth.auth_header_name" type="string" required />

<ParamField body="auth.cookie_name" type="string" />

<ParamField body="auth.param_name" type="string" />

<ParamField body="auth.signature" type="object" />

<ParamField body="auth.signature.algorithm" type="string" required />

<ParamField body="auth.signature.allowed_clock_skew" type="integer" required />

<ParamField body="auth.signature.error_code" type="integer" required />

<ParamField body="auth.signature.error_message" type="string" required />

<ParamField body="auth.signature.header" type="string" required />

<ParamField body="auth.signature.secret" type="string" required />

<ParamField body="auth.use_certificate" type="boolean" />

<ParamField body="auth.use_cookie" type="boolean" />

<ParamField body="auth.use_param" type="boolean" />

<ParamField body="auth.validate_signature" type="boolean" />

### auth\_configs

<ParamField body="auth_configs" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="auth_configs.{key}" type="object" />

<ParamField body="auth_configs.{key}.auth_header_name" type="string" required />

<ParamField body="auth_configs.{key}.cookie_name" type="string" />

<ParamField body="auth_configs.{key}.param_name" type="string" />

<ParamField body="auth_configs.{key}.signature" type="object" />

<ParamField body="auth_configs.{key}.signature.algorithm" type="string" required />

<ParamField body="auth_configs.{key}.signature.allowed_clock_skew" type="integer" required />

<ParamField body="auth_configs.{key}.signature.error_code" type="integer" required />

<ParamField body="auth_configs.{key}.signature.error_message" type="string" required />

<ParamField body="auth_configs.{key}.signature.header" type="string" required />

<ParamField body="auth_configs.{key}.signature.secret" type="string" required />

<ParamField body="auth_configs.{key}.use_certificate" type="boolean" />

<ParamField body="auth_configs.{key}.use_cookie" type="boolean" />

<ParamField body="auth_configs.{key}.use_param" type="boolean" />

<ParamField body="auth_configs.{key}.validate_signature" type="boolean" />

### cache\_options

<ParamField body="cache_options" type="object" />

<ParamField body="cache_options.cache_timeout" type="integer" required>
  CacheTimeout is the TTL for a cached object in seconds
</ParamField>

<ParamField body="cache_options.cache_all_safe_requests" type="boolean">
  CacheAllSafeRequests caches responses to (GET, HEAD, OPTIONS) requests overrides per-path cache settings in versions, applies across versions
</ParamField>

<ParamField body="cache_options.cache_by_headers[]" type="string">
  CacheByHeaders allows header values to be used as part of the cache key
</ParamField>

<ParamField body="cache_options.cache_control_ttl_header" type="string">
  CacheControlTTLHeader is the response header which tells Tyk how long it is safe to cache the response for
</ParamField>

<ParamField body="cache_options.cache_response_codes[]" type="integer">
  CacheOnlyResponseCodes is an array of response codes which are safe to cache. e.g. 404
</ParamField>

<ParamField body="cache_options.enable_cache" type="boolean">
  EnableCache turns global cache middleware on or off. It is still possible to enable caching on a per-path basis by explicitly setting the endpoint cache middleware. see `spec.version_data.versions.&#123;VERSION&#125;.extended_paths.cache[]`
</ParamField>

<ParamField body="cache_options.enable_upstream_cache_control" type="boolean">
  EnableUpstreamCacheControl instructs Tyk Cache to respect upstream cache control headers
</ParamField>

### contextRef

<ParamField body="contextRef" type="object">
  Context specify namespace/name of the OperatorContext object used for reconciling this APIDefinition
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

### CORS

<ParamField body="CORS" type="object" />

<ParamField body="CORS.allow_credentials" type="boolean">
  AllowCredentials if true will allow cookies
</ParamField>

<ParamField body="CORS.allowed_headers[]" type="string">
  AllowedHeaders are headers that are allowed within a request.
</ParamField>

<ParamField body="CORS.allowed_methods[]" type="string">
  AllowedMethods is a list of methods to allow access via. **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="CORS.allowed_origins[]" type="string">
  AllowedOrigins is a list of origin domains to allow access from.
</ParamField>

<ParamField body="CORS.debug" type="boolean">
  Debug if true, this option produces log files for the CORS middleware
</ParamField>

<ParamField body="CORS.enable" type="boolean">
  Enable when set to true it enables the cors middleware for the api
</ParamField>

<ParamField body="CORS.exposed_headers[]" type="string">
  ExposedHeaders is a list of headers that are exposed back in the response.
</ParamField>

<ParamField body="CORS.max_age" type="integer">
  MaxAge is the maximum age of credentials
</ParamField>

<ParamField body="CORS.options_passthrough" type="boolean">
  OptionsPassthrough allow CORS OPTIONS preflight request to be proxied directly to upstream, without authentication and rest of checks. This means that pre-flight requests generated by web-clients such as SwaggerUI or the Tyk Portal documentation system will be able to test the API using trial keys. If your service handles CORS natively, then enable this option.
</ParamField>

### custom\_middleware

<ParamField body="custom_middleware" type="object" />

<ParamField body="custom_middleware.driver" type="string" required />

<ParamField body="custom_middleware.auth_check" type="object" />

<ParamField body="custom_middleware.auth_check.name" type="string" required />

<ParamField body="custom_middleware.auth_check.path" type="string" required />

<ParamField body="custom_middleware.auth_check.raw_body_only" type="boolean" />

<ParamField body="custom_middleware.auth_check.require_session" type="boolean" />

<ParamField body="custom_middleware.id_extractor" type="object" />

<ParamField body="custom_middleware.id_extractor.extract_from" type="string" required />

<ParamField body="custom_middleware.id_extractor.extract_with" type="string" required />

<ParamField body="custom_middleware.id_extractor.extractor_config" type="object" required />

<ParamField body="custom_middleware.id_extractor.extractor_config.header_name" type="string" />

<ParamField body="custom_middleware.id_extractor.extractor_config.param_name" type="string" />

<ParamField body="custom_middleware.id_extractor.extractor_config.regex_expression" type="string" />

<ParamField body="custom_middleware.id_extractor.extractor_config.regex_match_index" type="integer" />

<ParamField body="custom_middleware.post[]" type="object" />

<ParamField body="custom_middleware.post[].name" type="string" required />

<ParamField body="custom_middleware.post[].path" type="string" required />

<ParamField body="custom_middleware.post[].raw_body_only" type="boolean" />

<ParamField body="custom_middleware.post[].require_session" type="boolean" />

<ParamField body="custom_middleware.post_key_auth[]" type="object" />

<ParamField body="custom_middleware.post_key_auth[].name" type="string" required />

<ParamField body="custom_middleware.post_key_auth[].path" type="string" required />

<ParamField body="custom_middleware.post_key_auth[].raw_body_only" type="boolean" />

<ParamField body="custom_middleware.post_key_auth[].require_session" type="boolean" />

<ParamField body="custom_middleware.pre[]" type="object" />

<ParamField body="custom_middleware.pre[].name" type="string" required />

<ParamField body="custom_middleware.pre[].path" type="string" required />

<ParamField body="custom_middleware.pre[].raw_body_only" type="boolean" />

<ParamField body="custom_middleware.pre[].require_session" type="boolean" />

<ParamField body="custom_middleware.response[]" type="object" />

<ParamField body="custom_middleware.response[].name" type="string" required />

<ParamField body="custom_middleware.response[].path" type="string" required />

<ParamField body="custom_middleware.response[].raw_body_only" type="boolean" />

<ParamField body="custom_middleware.response[].require_session" type="boolean" />

### definition

<ParamField body="definition" type="object">
  VersionDefinition is a struct that holds the version information for the API
</ParamField>

<ParamField body="definition.key" type="string" required />

<ParamField body="definition.location" type="string" required />

<ParamField body="definition.default" type="string" />

<ParamField body="definition.enabled" type="boolean" />

<ParamField body="definition.fallback_to_default" type="boolean" />

<ParamField body="definition.name" type="string" />

<ParamField body="definition.strip_path" type="boolean">
  Deprecated: use StripVersioningData instead.
</ParamField>

<ParamField body="definition.strip_versioning_data" type="boolean" />

<ParamField body="definition.url_versioning_pattern" type="string" />

<ParamField body="definition.versions" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="definition.versions.{key}" type="string" />

### event\_handlers

<ParamField body="event_handlers" type="object" />

<ParamField body="event_handlers.events" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="event_handlers.events.{key}[]" type="object" />

<ParamField body="event_handlers.events.{key}[].handler_meta" type="object" required>
  MapStringInterfaceType represents a generic struct used as a map\[string]interface\{}. Since an arbitrary JSON fields defined as map\[string]interface\{} is not feasible to use as a Kubernetes CRD, unstructured.Unstructured type is used. Free-form object with arbitrary keys.
</ParamField>

<ParamField body="event_handlers.events.{key}[].handler_name" type="string" required />

### global\_rate\_limit

<ParamField body="global_rate_limit" type="object">
  GlobalRateLimit is an API Level Global Rate Limit, which assesses all traffic coming into the API from all sources and ensures that the overall rate limit is not exceeded.
</ParamField>

<ParamField body="global_rate_limit.per" type="integer" required>
  Per represents a time window in seconds
</ParamField>

<ParamField body="global_rate_limit.rate" type="integer" required>
  Rate represents the number of requests allowed within a specified time window (Per)
</ParamField>

### graphql

<ParamField body="graphql" type="object">
  GraphQLConfig is the root config object for a GraphQL API.
</ParamField>

<ParamField body="graphql.enabled" type="boolean" required>
  Enabled indicates if GraphQL proxy should be enabled.
</ParamField>

<ParamField body="graphql.execution_mode" type="string" required>
  GraphQLExecutionMode is the mode to define how an api behaves. **Allowed values:** \`\`, `proxyOnly`, `executionEngine`, `supergraph`, `subgraph`.
</ParamField>

<ParamField body="graphql.engine" type="object">
  Engine holds the configuration for engine v2 and upwards.
</ParamField>

<ParamField body="graphql.engine.data_sources[]" type="object" required />

<ParamField body="graphql.engine.data_sources[].config" type="object" required>
  MapStringInterfaceType represents a generic struct used as a map\[string]interface\{}. Since an arbitrary JSON fields defined as map\[string]interface\{} is not feasible to use as a Kubernetes CRD, unstructured.Unstructured type is used. Free-form object with arbitrary keys.
</ParamField>

<ParamField body="graphql.engine.data_sources[].internal" type="boolean" required />

<ParamField body="graphql.engine.data_sources[].kind" type="string" required>
  **Allowed values:** `REST`, `GraphQL`, `Kafka`.
</ParamField>

<ParamField body="graphql.engine.data_sources[].name" type="string" required />

<ParamField body="graphql.engine.data_sources[].root_fields[]" type="object" required />

<ParamField body="graphql.engine.data_sources[].root_fields[].fields[]" type="string" required />

<ParamField body="graphql.engine.data_sources[].root_fields[].type" type="string" required />

<ParamField body="graphql.engine.field_configs[]" type="object" required />

<ParamField body="graphql.engine.field_configs[].disable_default_mapping" type="boolean" required />

<ParamField body="graphql.engine.field_configs[].field_name" type="string" required />

<ParamField body="graphql.engine.field_configs[].path[]" type="string" required />

<ParamField body="graphql.engine.field_configs[].type_name" type="string" required />

<ParamField body="graphql.engine.global_headers[]" type="object">
  GlobalHeaders for managing headers for UDG and all associated data sources
</ParamField>

<ParamField body="graphql.engine.global_headers[].key" type="string" required>
  Key is the name of the request header
</ParamField>

<ParamField body="graphql.engine.global_headers[].value" type="string" required>
  Value holds the value of the request header
</ParamField>

<ParamField body="graphql.graph_ref" type="string" />

<ParamField body="graphql.introspection" type="object">
  Introspection holds the configuration for GraphQL Introspection
</ParamField>

<ParamField body="graphql.introspection.disabled" type="boolean" />

<ParamField body="graphql.last_schema_update" type="string">
  LastSchemaUpdate contains the date and time of the last triggered schema update to the upstream.
</ParamField>

<ParamField body="graphql.playground" type="object">
  GraphQLPlayground is the Playground specific configuration.
</ParamField>

<ParamField body="graphql.playground.enabled" type="boolean" required>
  Enabled indicates if the playground should be enabled.
</ParamField>

<ParamField body="graphql.playground.path" type="string" required>
  Path sets the path on which the playground will be hosted if enabled.
</ParamField>

<ParamField body="graphql.proxy" type="object">
  Proxy holds the configuration for a proxy only api.
</ParamField>

<ParamField body="graphql.proxy.auth_headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="graphql.proxy.auth_headers.{key}" type="string" />

<ParamField body="graphql.proxy.features" type="object" />

<ParamField body="graphql.proxy.features.use_immutable_headers" type="boolean" />

<ParamField body="graphql.proxy.request_headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="graphql.proxy.request_headers.{key}" type="string" />

<ParamField body="graphql.proxy.request_headers_rewrite" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="graphql.proxy.request_headers_rewrite.{key}" type="object" />

<ParamField body="graphql.proxy.request_headers_rewrite.{key}.remove" type="boolean" required />

<ParamField body="graphql.proxy.request_headers_rewrite.{key}.value" type="string" required />

<ParamField body="graphql.proxy.subscription_type" type="string">
  SubscriptionType is the subscription protocol to use for graphql subscriptions **Allowed values:** \`\`, `graphql-ws`, `graphql-transport-ws`, `sse`.
</ParamField>

<ParamField body="graphql.proxy.use_response_extensions" type="object" />

<ParamField body="graphql.proxy.use_response_extensions.on_error_forwarding" type="boolean" required />

<ParamField body="graphql.schema" type="string">
  Schema is the GraphQL Schema exposed by the GraphQL API/Upstream/Engine.
</ParamField>

<ParamField body="graphql.subgraph" type="object">
  Subgraph holds the configuration for a GraphQL federation subgraph.
</ParamField>

<ParamField body="graphql.subgraph.sdl" type="string" required />

<ParamField body="graphql.supergraph" type="object">
  Supergraph holds the configuration for a GraphQL federation supergraph.
</ParamField>

<ParamField body="graphql.supergraph.disable_query_batching" type="boolean" />

<ParamField body="graphql.supergraph.global_headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="graphql.supergraph.global_headers.{key}" type="string" />

<ParamField body="graphql.supergraph.merged_sdl" type="string" />

<ParamField body="graphql.supergraph.subgraphs[]" type="object" />

<ParamField body="graphql.supergraph.subgraphs[].api_id" type="string" required>
  UUID v4 string (!not the same as \_id of APIDefinition)
</ParamField>

<ParamField body="graphql.supergraph.subgraphs[].headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="graphql.supergraph.subgraphs[].headers.{key}" type="string" />

<ParamField body="graphql.supergraph.subgraphs[].name" type="string" required />

<ParamField body="graphql.supergraph.subgraphs[].sdl" type="string" required>
  the schema definition language of the subgraph
</ParamField>

<ParamField body="graphql.supergraph.subgraphs[].url" type="string" required>
  The internal URL of the subgraph
</ParamField>

<ParamField body="graphql.supergraph.updated_at" type="string">
  UpdatedAt contains the date and time of the last update of a supergraph API.
</ParamField>

<ParamField body="graphql.type_field_configurations[]" type="object">
  TypeFieldConfigurations is a rule set of data source and mapping of a schema field.
</ParamField>

<ParamField body="graphql.type_field_configurations[].data_source" type="object" required />

<ParamField body="graphql.type_field_configurations[].data_source.kind" type="string" required>
  Kind defines the unique identifier of the DataSource Kind needs to match to the Planner "DataSourceName" name **Allowed values:** `GraphQLDataSource`, `HTTPJSONDataSource`.
</ParamField>

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config" type="object">
  Config is the DataSource specific configuration object Each Planner needs to make sure to parse their Config Object correctly
</ParamField>

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.url" type="string" required />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.body" type="string" />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.default_type_name" type="string" />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.headers[]" type="string" />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.status_code_type_name_mappings[]" type="object" />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.status_code_type_name_mappings[].status_code" type="integer" required />

<ParamField body="graphql.type_field_configurations[].data_source.data_source_config.status_code_type_name_mappings[].type_name" type="string" />

<ParamField body="graphql.type_field_configurations[].field_name" type="string" required />

<ParamField body="graphql.type_field_configurations[].mapping" type="object" required />

<ParamField body="graphql.type_field_configurations[].mapping.disabled" type="boolean" required />

<ParamField body="graphql.type_field_configurations[].mapping.path" type="string" required />

<ParamField body="graphql.type_field_configurations[].type_name" type="string" required />

<ParamField body="graphql.version" type="string">
  Version defines the version of the GraphQL config and engine to be used. **Allowed values:** `1`, `2`.
</ParamField>

### jwt\_scope\_to\_policy\_mapping

<ParamField body="jwt_scope_to_policy_mapping" type="object">
  JWTScopeToPolicyMapping this is a mapping of scope value to policy id. If this is set then a scope value found in this map will make the mappend policy to be applied.
</ParamField>

<ParamField body="jwt_scope_to_policy_mapping.{key}" type="string" />

### oauth\_meta

<ParamField body="oauth_meta" type="object" />

<ParamField body="oauth_meta.allowed_access_types[]" type="string" required>
  AllowedAccessTypes are an array of allowable access types. **Allowed values:** `authorization_code`, `refresh_token`, `password`, `client_credentials`.
</ParamField>

<ParamField body="oauth_meta.allowed_authorize_types[]" type="string" required>
  AllowedAuthorizeTypes is an array of allowable `response_type` parameters `token` or authorization code `code`. Choose token for client\_credentials or implicit grant types. **Allowed values:** `code`, `token`.
</ParamField>

<ParamField body="oauth_meta.auth_login_redirect" type="string">
  Login form to handle user login.
</ParamField>

### pinned\_public\_keys

<ParamField body="pinned_public_keys" type="object">
  PinnedPublicKeys allows you to whitelist public keys used to generate certificates, so you will be protected in case an upstream certificate is compromised. Please use PinnedPublicKeysRefs if using cert-manager.
</ParamField>

<ParamField body="pinned_public_keys.{key}" type="string" />

### pinned\_public\_keys\_refs

<ParamField body="pinned_public_keys_refs" type="object">
  PinnedPublicKeysRefs allows you to specify public keys using k8s secret. It takes domain name as a key and secret name as a value.
</ParamField>

<ParamField body="pinned_public_keys_refs.{key}" type="string" />

### response\_processors

<ParamField body="response_processors[]" type="object" />

<ParamField body="response_processors[].name" type="string" required />

### upstream\_certificate\_refs

<ParamField body="upstream_certificate_refs" type="object">
  UpstreamCertificateRefs is a map of domains and secret names that is used internally to obtain certificates from secrets in order to establish mTLS support for upstreams
</ParamField>

<ParamField body="upstream_certificate_refs.{key}" type="string" />

### upstream\_certificates

<ParamField body="upstream_certificates" type="object">
  UpstreamCertificates is a map of domains and certificate IDs that is used by the Tyk Gateway to provide mTLS support for upstreams
</ParamField>

<ParamField body="upstream_certificates.{key}" type="string" />

### uptime\_tests

<ParamField body="uptime_tests" type="object">
  UptimeTests is a struct that holds the uptime test information for the API
</ParamField>

<ParamField body="uptime_tests.check_list[]" type="object" />

<ParamField body="uptime_tests.check_list[].url" type="string" required />

<ParamField body="uptime_tests.check_list[].body" type="string" />

<ParamField body="uptime_tests.check_list[].commands[]" type="object" />

<ParamField body="uptime_tests.check_list[].commands[].message" type="string" required />

<ParamField body="uptime_tests.check_list[].commands[].name" type="string" required />

<ParamField body="uptime_tests.check_list[].enable_proxy_protocol" type="boolean" />

<ParamField body="uptime_tests.check_list[].headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="uptime_tests.check_list[].headers.{key}" type="string" />

<ParamField body="uptime_tests.check_list[].method" type="string">
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="uptime_tests.check_list[].protocol" type="string" />

<ParamField body="uptime_tests.check_list[].timeout" type="integer">
  A Duration represents the elapsed time between two instants as an int64 nanosecond count. The representation limits the largest representable duration to approximately 290 years.
</ParamField>

<ParamField body="uptime_tests.config" type="object" />

<ParamField body="uptime_tests.config.expire_utime_after" type="integer">
  must have an expireAt TTL index set ([http://docs.mongodb.org/manual/tutorial/expire-data/](http://docs.mongodb.org/manual/tutorial/expire-data/))
</ParamField>

<ParamField body="uptime_tests.config.recheck_wait" type="integer" />

<ParamField body="uptime_tests.config.service_discovery" type="object" />

<ParamField body="uptime_tests.config.service_discovery.cache_timeout" type="integer" required />

<ParamField body="uptime_tests.config.service_discovery.data_path" type="string" required />

<ParamField body="uptime_tests.config.service_discovery.endpoint_returns_list" type="boolean" required />

<ParamField body="uptime_tests.config.service_discovery.parent_data_path" type="string" required />

<ParamField body="uptime_tests.config.service_discovery.port_data_path" type="string" required />

<ParamField body="uptime_tests.config.service_discovery.query_endpoint" type="string" required />

<ParamField body="uptime_tests.config.service_discovery.target_path" type="string" required />

<ParamField body="uptime_tests.config.service_discovery.use_discovery_service" type="boolean" required />

<ParamField body="uptime_tests.config.service_discovery.use_nested_query" type="boolean" required />

<ParamField body="uptime_tests.config.service_discovery.use_target_list" type="boolean" required />

### version\_data

<ParamField body="version_data" type="object" />

<ParamField body="version_data.default_version" type="string" required />

<ParamField body="version_data.not_versioned" type="boolean" required />

<ParamField body="version_data.versions" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}" type="object" />

<ParamField body="version_data.versions.{key}.name" type="string" required />

<ParamField body="version_data.versions.{key}.expires" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[].cache_key_regex" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[].cache_response_codes[]" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.advance_cache_config[].timeout" type="integer" />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].ignore_case" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}.action" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}.code" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}.data" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}.headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].method_actions.{key}.headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.black_list[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.cache[]" type="string">
  List of paths which cache middleware should be enabled on
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].return_to_service_after" type="integer" required>
  ReturnToServiceAfter represents the time in seconds to return back to the service
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].samples" type="integer" required>
  Samples defines the number of requests to base the ThresholdPercent on
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].threshold_percent" type="string" required>
  ThresholdPercent is the percentage of requests that fail before breaker is tripped
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.circuit_breakers[].disable_half_open_state" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.do_not_track_endpoints[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.do_not_track_endpoints[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.do_not_track_endpoints[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.hard_timeouts[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.hard_timeouts[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.hard_timeouts[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.hard_timeouts[].timeout" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].ignore_case" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}.action" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}.code" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}.data" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}.headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].method_actions.{key}.headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.ignored[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.internal[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.internal[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.internal[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.method_transforms[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.method_transforms[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.method_transforms[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.method_transforms[].to_method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.size_limits[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.size_limits[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.size_limits[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.size_limits[].size_limit" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.track_endpoints[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.track_endpoints[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.track_endpoints[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].template_data" type="object" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].template_data.enable_session" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].template_data.input_type" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].template_data.template_mode" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform[].template_data.template_source" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].act_on" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].add_headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].add_headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].delete_headers[]" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_headers[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq[].filter" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq_response[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq_response[].filter" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq_response[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_jq_response[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].template_data" type="object" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].template_data.enable_session" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].template_data.input_type" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].template_data.template_mode" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response[].template_data.template_source" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].act_on" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].add_headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].add_headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].delete_headers[]" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.transform_response_headers[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].match_pattern" type="string" required>
  MatchPattern is a regular expression pattern to match the path
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].path" type="string" required>
  Path represents the endpoint listen path
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to" type="string">
  RewriteTo is the target path on the upstream, or target URL we wish to rewrite to
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal" type="object">
  RewriteToInternal serves as rewrite\_to but used when rewriting to target internal api's When rewrite\_to and rewrite\_to\_internal are both provided then rewrite\_to will take rewrite\_to\_internal
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal.path" type="string">
  Path path on target , this does not include query parameters. example /myendpoint
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal.query" type="string">
  Query url query string to add to target example check\_limits=true
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal.target" type="object">
  API a namespaced/name to the api definition resource that you are targetting
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal.target.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].rewrite_to_internal.target.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].on" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options" type="object" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.header_matches" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.header_matches.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.header_matches.{key}.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.header_matches.{key}.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.path_part_matches" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.path_part_matches.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.path_part_matches.{key}.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.path_part_matches.{key}.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.payload_matches" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.payload_matches.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.payload_matches.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.query_val_matches" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.query_val_matches.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.query_val_matches.{key}.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.query_val_matches.{key}.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.request_context_matches" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.request_context_matches.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.request_context_matches.{key}.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.request_context_matches.{key}.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.session_meta_matches" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.session_meta_matches.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.session_meta_matches.{key}.match_rx" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].options.session_meta_matches.{key}.reverse" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal" type="object">
  RewriteToInternal defines options that constructs a url that refers to an api that is loaded into the gateway.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal.path" type="string">
  Path path on target , this does not include query parameters. example /myendpoint
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal.query" type="string">
  Query url query string to add to target example check\_limits=true
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal.target" type="object">
  API a namespaced/name to the api definition resource that you are targetting
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal.target.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.url_rewrites[].triggers[].rewrite_to_internal.target.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[].error_response_code" type="integer" required>
  Allows override of default 422 Unprocessable Entity response code for validation errors.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[].schema" type="object" required>
  Schema represents schema field that verifies user requests against a specified JSON schema and check that the data sent to your API by a consumer is in the right format. Free-form object with arbitrary keys.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.validate_json[].disabled" type="boolean" />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].function_source_type" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].function_source_uri" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].method" type="string" required>
  HttpMethod represents HTTP request method **Allowed values:** `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`, `CONNECT`, `TRACE`.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].path" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].proxy_on_error" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].response_function_name" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.virtual[].use_session" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[]" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].ignore_case" type="boolean" required />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}" type="object" />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}.action" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}.code" type="integer" required />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}.data" type="string" required />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}.headers" type="object" required>
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].method_actions.{key}.headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.extended_paths.white_list[].path" type="string" required />

<ParamField body="version_data.versions.{key}.global_headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.global_headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.global_headers_remove[]" type="string" />

<ParamField body="version_data.versions.{key}.global_response_headers" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="version_data.versions.{key}.global_response_headers.{key}" type="string" />

<ParamField body="version_data.versions.{key}.global_response_headers_remove[]" type="string" />

<ParamField body="version_data.versions.{key}.global_size_limit" type="integer" />

<ParamField body="version_data.versions.{key}.ignore_endpoint_case" type="boolean" />

<ParamField body="version_data.versions.{key}.override_target" type="string" />

<ParamField body="version_data.versions.{key}.paths" type="object" />

<ParamField body="version_data.versions.{key}.paths.black_list[]" type="string" />

<ParamField body="version_data.versions.{key}.paths.ignored[]" type="string" />

<ParamField body="version_data.versions.{key}.paths.white_list[]" type="string" />

<ParamField body="version_data.versions.{key}.use_extended_paths" type="boolean" />

## TykStreamsApiDefinition

TykStreamsApiDefinitionSpec defines the desired state of TykStreamsApiDefinition

### tykStreams

<ParamField body="tykStreams" type="object" required>
  TykStreams provides storage information about Tyk Streams
</ParamField>

<ParamField body="tykStreams.configmapRef" type="object" required>
  ConfigmapRef provides information of configmap in which Tyk Streams is stored
</ParamField>

<ParamField body="tykStreams.configmapRef.keyName" type="string" required>
  KeyName is the key of configmap in which Tyk OAS doc is stored
</ParamField>

<ParamField body="tykStreams.configmapRef.name" type="string" required>
  Name is the name of configmap
</ParamField>

<ParamField body="tykStreams.configmapRef.namespace" type="string">
  Namespace is the namespace of configmap. If Namespace is not provided, we assume that the ConfigMap is in the same namespace as TykOasApiDefinition resource.
</ParamField>

### contextRef

<ParamField body="contextRef" type="object">
  Context specify namespace/name of the OperatorContext object used for reconciling this APIDefinition
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## TykMcpProxyDefinition

TykMcpProxyDefinitionSpec defines the desired state of TykMcpProxyDefinition

### tykMCP

<ParamField body="tykMCP" type="object" required>
  TykMCP provides storage information about MCP proxy configuration
</ParamField>

<ParamField body="tykMCP.configmapRef" type="object" required>
  ConfigmapRef provides information of configmap in which MCP OAS document is stored
</ParamField>

<ParamField body="tykMCP.configmapRef.keyName" type="string" required>
  KeyName is the key of configmap in which Tyk OAS doc is stored
</ParamField>

<ParamField body="tykMCP.configmapRef.name" type="string" required>
  Name is the name of configmap
</ParamField>

<ParamField body="tykMCP.configmapRef.namespace" type="string">
  Namespace is the namespace of configmap. If Namespace is not provided, we assume that the ConfigMap is in the same namespace as TykOasApiDefinition resource.
</ParamField>

### contextRef

<ParamField body="contextRef" type="object">
  Context specify namespace/name of the OperatorContext object used for reconciling this APIDefinition
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## SecurityPolicy

SecurityPolicySpec defines the desired state of SecurityPolicy

### Top-Level Fields

<ParamField body="active" type="boolean" required>
  Active must be set to `true` for Tyk to load the security policy into memory.
</ParamField>

<ParamField body="name" type="string" required>
  Name represents the name of the security policy as displayed in the Dashboard
</ParamField>

<ParamField body="state" type="string" required>
  State can be active, draft or deny active: All keys are active and new keys can be created. draft: All keys are active but no new keys can be created. deny: All keys are deactivated and no keys can be created. **Allowed values:** `active`, `draft`, `deny`.
</ParamField>

<ParamField body="_id" type="string">
  MID ("\_id") is generated by Tyk once the resource is created. Do NOT fill this in.
</ParamField>

<ParamField body="enable_http_signature_validation" type="boolean" />

<ParamField body="hmac_enabled" type="boolean" />

<ParamField body="id" type="string">
  If you are linking an existing Policy ID to a new YAML CRD, then fill in this ID field with the "\_id" field. See policies.md readme for more info
</ParamField>

<ParamField body="is_inactive" type="boolean">
  IsInactive applies to the key itself. Allows enabling or disabling the policy without deleting it.
</ParamField>

<ParamField body="key_expires_in" type="integer">
  KeyExpiresIn is the number of seconds till key expiry. For 1 hour is 3600. Default never expire or 0
</ParamField>

<ParamField body="max_query_depth" type="integer">
  Max depth of a GraphQL query
</ParamField>

<ParamField body="org_id" type="string">
  OrgID is overwritten - no point setting this
</ParamField>

<ParamField body="per" type="integer">
  To be used in conjunction with "Rate". Per seconds. 1 minute=60. 1 hour=3600 omit or "-1" for unlimited
</ParamField>

<ParamField body="quota_max" type="integer">
  Value of Quota allowed, omit or "-1" for unlimited
</ParamField>

<ParamField body="quota_renewal_rate" type="integer">
  Value reset length, in seconds, omit or "-1" for unlimited
</ParamField>

<ParamField body="rate" type="integer">
  Rate limit per X seconds (x="Per"), omit or "-1" for unlimited
</ParamField>

<ParamField body="tags[]" type="string">
  Custom tags to apply to the key, get transfered to the analytics
</ParamField>

<ParamField body="throttle_interval" type="integer">
  If rate limited, how many seconds to retry a request for. omit or "-1" for unlimited
</ParamField>

<ParamField body="throttle_retry_limit" type="integer">
  Number of retries before returning error. omit or "-1" for unlimited
</ParamField>

### access\_rights

<ParamField body="access_rights" type="object">
  Map of string keys to values.
</ParamField>

<ParamField body="access_rights.{key}" type="object">
  AccessDefinition defines which versions of an API a key has access to
</ParamField>

<ParamField body="access_rights.{key}.name" type="string" required>
  Name of the ApiDefinition resource to target
</ParamField>

<ParamField body="access_rights.{key}.namespace" type="string" required>
  Namespace of the ApiDefinition resource to target
</ParamField>

<ParamField body="access_rights.{key}.allowance_scope" type="string" />

<ParamField body="access_rights.{key}.allowed_types[]" type="object">
  Field access of GraphQL APIs can be restricted by setting up an allowed types list in a policy or directly on a key.
</ParamField>

<ParamField body="access_rights.{key}.allowed_types[].fields[]" type="string" required />

<ParamField body="access_rights.{key}.allowed_types[].name" type="string" required />

<ParamField body="access_rights.{key}.allowed_urls[]" type="object">
  AccessSpec defines what URLS a user has access to and what methods are enabled
</ParamField>

<ParamField body="access_rights.{key}.allowed_urls[].methods[]" type="string" required />

<ParamField body="access_rights.{key}.allowed_urls[].url" type="string" required />

<ParamField body="access_rights.{key}.api_id" type="string">
  APIID is the ID of the API this access rule grants access to. It is normally resolved automatically from the referenced ApiDefinition resource, so you do not usually need to set it manually.
</ParamField>

<ParamField body="access_rights.{key}.api_name" type="string">
  APIName is the name of the API this access rule grants access to. It is normally resolved automatically from the referenced ApiDefinition resource, so you do not usually need to set it manually.
</ParamField>

<ParamField body="access_rights.{key}.disable_introspection" type="boolean">
  DisableIntrospection disables GraphQL introspection if it is set to True.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[]" type="object">
  Endpoints is a collection of Endpoint.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[]" type="object">
  EndpointMethods is a collection of EndpointMethod.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights.{key}.endpoints[].methods[].name" type="string" />

<ParamField body="access_rights.{key}.endpoints[].path" type="string" />

<ParamField body="access_rights.{key}.field_access_rights[]" type="object">
  FieldAccessRights is array of depth limit settings per GraphQL APIs.
</ParamField>

<ParamField body="access_rights.{key}.field_access_rights[].field_name" type="string">
  FieldName represents the name of the Query or Mutation which the limit applies to.
</ParamField>

<ParamField body="access_rights.{key}.field_access_rights[].limits" type="object">
  Limit specifies the numerical value of the limit.
</ParamField>

<ParamField body="access_rights.{key}.field_access_rights[].limits.max_query_depth" type="integer" required>
  MaxQueryDepth represents the numerical value of the limit.
</ParamField>

<ParamField body="access_rights.{key}.field_access_rights[].type_name" type="string">
  TypeName points to a type on which depth limit is set. It can be either Query (most common case) or Mutation
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[]" type="object">
  JSONRPCMethods defines per-JSON-RPC-method rate limits.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods[].name" type="string">
  Name is the JSON-RPC method name (e.g., "tools/call", "resources/read").
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods_access_rights" type="object">
  JSONRPCMethodsAccessRights defines allow/block lists for JSON-RPC methods.
</ParamField>

<ParamField body="access_rights.{key}.json_rpc_methods_access_rights.allowed[]" type="string" />

<ParamField body="access_rights.{key}.json_rpc_methods_access_rights.blocked[]" type="string" />

<ParamField body="access_rights.{key}.kind" type="string" default="ApiDefinition">
  Kind represents the kind of the linked API Definition resource. It can be either "ApiDefinition" or "TykOasApiDefinition" (case sensitive way). By default, Kind is set to "ApiDefinition". **Allowed values:** `ApiDefinition`, `TykOasApiDefinition`, `TykStreamsApiDefinition`, `TykMcpProxyDefinition`.
</ParamField>

<ParamField body="access_rights.{key}.limit" type="object">
  APILimit stores quota and rate limit on ACL level (per API)
</ParamField>

<ParamField body="access_rights.{key}.limit.per" type="integer" required />

<ParamField body="access_rights.{key}.limit.quota_max" type="integer" required />

<ParamField body="access_rights.{key}.limit.quota_renewal_rate" type="integer" required />

<ParamField body="access_rights.{key}.limit.rate" type="integer" required />

<ParamField body="access_rights.{key}.limit.throttle_interval" type="integer" required />

<ParamField body="access_rights.{key}.limit.throttle_retry_limit" type="integer" required />

<ParamField body="access_rights.{key}.limit.max_query_depth" type="integer" />

<ParamField body="access_rights.{key}.limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights.{key}.limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights.{key}.limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights.{key}.limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights.{key}.limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights.{key}.limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights.{key}.mcp_access_rights" type="object">
  MCPAccessRights defines allow/block lists for MCP tools, resources, and prompts.
</ParamField>

<ParamField body="access_rights.{key}.mcp_access_rights.prompts" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights.{key}.mcp_access_rights.prompts.allowed[]" type="string" />

<ParamField body="access_rights.{key}.mcp_access_rights.prompts.blocked[]" type="string" />

<ParamField body="access_rights.{key}.mcp_access_rights.resources" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights.{key}.mcp_access_rights.resources.allowed[]" type="string" />

<ParamField body="access_rights.{key}.mcp_access_rights.resources.blocked[]" type="string" />

<ParamField body="access_rights.{key}.mcp_access_rights.tools" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights.{key}.mcp_access_rights.tools.allowed[]" type="string" />

<ParamField body="access_rights.{key}.mcp_access_rights.tools.blocked[]" type="string" />

<ParamField body="access_rights.{key}.mcp_primitives[]" type="object">
  MCPPrimitives defines per-primitive rate limits for MCP tools, resources, and prompts.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].name" type="string">
  Name is the primitive name (tool name, resource URI, or prompt name).
</ParamField>

<ParamField body="access_rights.{key}.mcp_primitives[].type" type="string">
  Type is the MCP primitive type: "tool", "resource", or "prompt". **Allowed values:** `tool`, `resource`, `prompt`.
</ParamField>

<ParamField body="access_rights.{key}.restricted_types[]" type="object">
  Field access of GraphQL APIs can be restricted by setting up an allowed types list in a policy or directly on a key.
</ParamField>

<ParamField body="access_rights.{key}.restricted_types[].fields[]" type="string" required />

<ParamField body="access_rights.{key}.restricted_types[].name" type="string" required />

<ParamField body="access_rights.{key}.versions[]" type="string" />

### access\_rights\_array

<ParamField body="access_rights_array[]" type="object">
  AccessDefinition defines which versions of an API a key has access to
</ParamField>

<ParamField body="access_rights_array[].name" type="string" required>
  Name of the ApiDefinition resource to target
</ParamField>

<ParamField body="access_rights_array[].namespace" type="string" required>
  Namespace of the ApiDefinition resource to target
</ParamField>

<ParamField body="access_rights_array[].allowance_scope" type="string" />

<ParamField body="access_rights_array[].allowed_types[]" type="object">
  Field access of GraphQL APIs can be restricted by setting up an allowed types list in a policy or directly on a key.
</ParamField>

<ParamField body="access_rights_array[].allowed_types[].fields[]" type="string" required />

<ParamField body="access_rights_array[].allowed_types[].name" type="string" required />

<ParamField body="access_rights_array[].allowed_urls[]" type="object">
  AccessSpec defines what URLS a user has access to and what methods are enabled
</ParamField>

<ParamField body="access_rights_array[].allowed_urls[].methods[]" type="string" required />

<ParamField body="access_rights_array[].allowed_urls[].url" type="string" required />

<ParamField body="access_rights_array[].api_id" type="string">
  APIID is the ID of the API this access rule grants access to. It is normally resolved automatically from the referenced ApiDefinition resource, so you do not usually need to set it manually.
</ParamField>

<ParamField body="access_rights_array[].api_name" type="string">
  APIName is the name of the API this access rule grants access to. It is normally resolved automatically from the referenced ApiDefinition resource, so you do not usually need to set it manually.
</ParamField>

<ParamField body="access_rights_array[].disable_introspection" type="boolean">
  DisableIntrospection disables GraphQL introspection if it is set to True.
</ParamField>

<ParamField body="access_rights_array[].endpoints[]" type="object">
  Endpoints is a collection of Endpoint.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[]" type="object">
  EndpointMethods is a collection of EndpointMethod.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights_array[].endpoints[].methods[].name" type="string" />

<ParamField body="access_rights_array[].endpoints[].path" type="string" />

<ParamField body="access_rights_array[].field_access_rights[]" type="object">
  FieldAccessRights is array of depth limit settings per GraphQL APIs.
</ParamField>

<ParamField body="access_rights_array[].field_access_rights[].field_name" type="string">
  FieldName represents the name of the Query or Mutation which the limit applies to.
</ParamField>

<ParamField body="access_rights_array[].field_access_rights[].limits" type="object">
  Limit specifies the numerical value of the limit.
</ParamField>

<ParamField body="access_rights_array[].field_access_rights[].limits.max_query_depth" type="integer" required>
  MaxQueryDepth represents the numerical value of the limit.
</ParamField>

<ParamField body="access_rights_array[].field_access_rights[].type_name" type="string">
  TypeName points to a type on which depth limit is set. It can be either Query (most common case) or Mutation
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[]" type="object">
  JSONRPCMethods defines per-JSON-RPC-method rate limits.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods[].name" type="string">
  Name is the JSON-RPC method name (e.g., "tools/call", "resources/read").
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods_access_rights" type="object">
  JSONRPCMethodsAccessRights defines allow/block lists for JSON-RPC methods.
</ParamField>

<ParamField body="access_rights_array[].json_rpc_methods_access_rights.allowed[]" type="string" />

<ParamField body="access_rights_array[].json_rpc_methods_access_rights.blocked[]" type="string" />

<ParamField body="access_rights_array[].kind" type="string" default="ApiDefinition">
  Kind represents the kind of the linked API Definition resource. It can be either "ApiDefinition" or "TykOasApiDefinition" (case sensitive way). By default, Kind is set to "ApiDefinition". **Allowed values:** `ApiDefinition`, `TykOasApiDefinition`, `TykStreamsApiDefinition`, `TykMcpProxyDefinition`.
</ParamField>

<ParamField body="access_rights_array[].limit" type="object">
  APILimit stores quota and rate limit on ACL level (per API)
</ParamField>

<ParamField body="access_rights_array[].limit.per" type="integer" required />

<ParamField body="access_rights_array[].limit.quota_max" type="integer" required />

<ParamField body="access_rights_array[].limit.quota_renewal_rate" type="integer" required />

<ParamField body="access_rights_array[].limit.rate" type="integer" required />

<ParamField body="access_rights_array[].limit.throttle_interval" type="integer" required />

<ParamField body="access_rights_array[].limit.throttle_retry_limit" type="integer" required />

<ParamField body="access_rights_array[].limit.max_query_depth" type="integer" />

<ParamField body="access_rights_array[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights_array[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights_array[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights_array[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights_array[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights_array[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights_array[].mcp_access_rights" type="object">
  MCPAccessRights defines allow/block lists for MCP tools, resources, and prompts.
</ParamField>

<ParamField body="access_rights_array[].mcp_access_rights.prompts" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights_array[].mcp_access_rights.prompts.allowed[]" type="string" />

<ParamField body="access_rights_array[].mcp_access_rights.prompts.blocked[]" type="string" />

<ParamField body="access_rights_array[].mcp_access_rights.resources" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights_array[].mcp_access_rights.resources.allowed[]" type="string" />

<ParamField body="access_rights_array[].mcp_access_rights.resources.blocked[]" type="string" />

<ParamField body="access_rights_array[].mcp_access_rights.tools" type="object">
  AccessControlRules defines allow/block lists for access control.
</ParamField>

<ParamField body="access_rights_array[].mcp_access_rights.tools.allowed[]" type="string" />

<ParamField body="access_rights_array[].mcp_access_rights.tools.blocked[]" type="string" />

<ParamField body="access_rights_array[].mcp_primitives[]" type="object">
  MCPPrimitives defines per-primitive rate limits for MCP tools, resources, and prompts.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit" type="object">
  RateLimit holds rate limit configuration.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.per" type="string" required>
  Per is the interval at which rate limit is enforced.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.rate" type="string" required>
  Rate is the allowed number of requests per interval.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing" type="object">
  Smoothing contains rate limit smoothing settings.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing.enabled" type="boolean" required>
  Enabled indicates if rate limit smoothing is active.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing.delay" type="integer">
  Delay is the minimum time between rate limit changes (in seconds).
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing.step" type="integer">
  Step is the increment/decrement for adjusting the rate limit.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing.threshold" type="integer">
  Threshold is the request rate above which smoothing is applied.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].limit.smoothing.trigger" type="string">
  Trigger is the step factor determining when smoothing events trigger.
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].name" type="string">
  Name is the primitive name (tool name, resource URI, or prompt name).
</ParamField>

<ParamField body="access_rights_array[].mcp_primitives[].type" type="string">
  Type is the MCP primitive type: "tool", "resource", or "prompt". **Allowed values:** `tool`, `resource`, `prompt`.
</ParamField>

<ParamField body="access_rights_array[].restricted_types[]" type="object">
  Field access of GraphQL APIs can be restricted by setting up an allowed types list in a policy or directly on a key.
</ParamField>

<ParamField body="access_rights_array[].restricted_types[].fields[]" type="string" required />

<ParamField body="access_rights_array[].restricted_types[].name" type="string" required />

<ParamField body="access_rights_array[].versions[]" type="string" />

### contextRef

<ParamField body="contextRef" type="object">
  Context specify namespace/name of the OperatorContext object used for reconciling this APIDefinition
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

### meta\_data

<ParamField body="meta_data" type="object">
  LastUpdated string `json:"last_updated"`
</ParamField>

<ParamField body="meta_data.{key}" type="string" />

### partitions

<ParamField body="partitions" type="object" />

<ParamField body="partitions.acl" type="boolean" />

<ParamField body="partitions.complexity" type="boolean" />

<ParamField body="partitions.per_api" type="boolean" />

<ParamField body="partitions.quota" type="boolean" />

<ParamField body="partitions.rate_limit" type="boolean" />

## APIDescription

APIDescriptionSpec defines the desired state of APIDescription

### Top-Level Fields

<ParamField body="auth_type" type="string">
  AuthType displays as a badge next to the name of the API **Allowed values:** `keyless`, `jwt`, `oauth`, `authToken`.
</ParamField>

<ParamField body="documentation" type="string">
  Do not set Documentation. Use `docs` instead.
</ParamField>

<ParamField body="is_keyless" type="boolean">
  IsKeyless toggles visibility of the `Request an API Key button`. Use this when AuthType is keyless, jwt or oauth.
</ParamField>

<ParamField body="long_description" type="string">
  LongDescription can be markdown. It allows you to describe the capabilities of the API and is displayed just below the name and AuthType in the catalogue listing page.
</ParamField>

<ParamField body="name" type="string">
  Name is the title of the API that you wish to be published to the catalogue
</ParamField>

<ParamField body="policy_id" type="string">
  PolicyID explicitly sets the policy\_id to be published. We do not recommend that this value is set directly. Rather, use `policyRef` instead.
</ParamField>

<ParamField body="short_description" type="string">
  ShortDescription is a brief summary of the API shown in the portal catalogue. Note that it may not be rendered by the default portal templates.
</ParamField>

<ParamField body="show" type="boolean">
  Show toggles visibility of the API in the portal catalogue
</ParamField>

<ParamField body="version" type="string" default="v2">
  Version should always be v2 **Allowed values:** `v2`.
</ParamField>

### config

<ParamField body="config" type="object">
  Config optionally overrides individual fields of the portal's PortalConfig for this catalogue.
</ParamField>

<ParamField body="config.catalogue_login_only" type="boolean">
  CatalogueLoginOnly limits access to catalogues for login users only.
</ParamField>

<ParamField body="config.dcr_options" type="object">
  DCROptions dynamic client registration options.
</ParamField>

<ParamField body="config.dcr_options.grant_types[]" type="string" required>
  GrantTypes is an array of OAuth 2.0 grant type strings that the client can use at the token endpoint. **Allowed values:** `client_credentials`, `authorization_code`, `refresh_token`.
</ParamField>

<ParamField body="config.dcr_options.idp_host" type="string" required>
  IDPHost is the fully qualified hostname of the Identity Provider. e.g. [https://mysubdomain.eu.auth0.com](https://mysubdomain.eu.auth0.com)
</ParamField>

<ParamField body="config.dcr_options.registration_endpoint" type="string" required>
  RegistrationEndpoint is the registration\_endpoint as presented in the /.well-known/openid-configuration document.
</ParamField>

<ParamField body="config.dcr_options.token_endpoint_auth_method" type="string" required>
  TokenEndpointAuthMethod is an indicator of the requested authentication method for the token endpoint. "none": The client is a public client and does not have a client secret. "client\_secret\_post": The client uses the HTTP POST parameters "client\_secret\_basic": The client uses HTTP Basic authentication **Allowed values:** `client_secret_basic`, `client_secret_post`, `client_secret_jwt`, `private_key_jwt`, `none`.
</ParamField>

<ParamField body="config.dcr_options.access_token" type="string">
  AccessToken represents an optional bearer token to authenticate with against the registration endpoint
</ParamField>

<ParamField body="config.dcr_options.provider" type="string">
  Provider is an optional enum of the provider which allows Tyk to register clients outside the standard DCR spec and perform provider specific logic. If your provider is not in this list, please omit. Upon failure, submit a support ticket so that we may extend support for your provider. **Allowed values:** `gluu`, `keycloak`, `okta`.
</ParamField>

<ParamField body="config.dcr_options.response_types[]" type="string">
  ResponseTypes is an array of OAuth 2.0 response type strings that the client can use at the authorization endpoint. **Allowed values:** `code`, `token`.
</ParamField>

<ParamField body="config.disable_auto_login" type="boolean" />

<ParamField body="config.disable_login" type="boolean">
  DisableLogin disables login on developer portal.If you do not want developers to be able to login, set this value to true. You can use this configuration option in the portal templates to display or hide the login form as well as disabling the actual login method.
</ParamField>

<ParamField body="config.disable_signup" type="boolean">
  DisableSignup stop developer sign-up to the portal.This will stop developers from being able to signup, they will need to be created manually, or assigned keys via the key management API.
</ParamField>

<ParamField body="config.email" type="string" />

<ParamField body="config.enable_dcr" type="boolean">
  EnableDCR activates dynamic client registration.
</ParamField>

<ParamField body="config.enable_multi_selection" type="boolean">
  EnableMultiSelection enables subscribing to multiple APIs with single key.User will be able subscript any combination of exposed catalogues of the same authentication type
</ParamField>

<ParamField body="config.id" type="string">
  Set by the server. DO NOT set this field it is read only.
</ParamField>

<ParamField body="config.key_request_fields[]" type="string">
  KeyRequestFields is a slice of fields which are asked of the portal developer when requesting an api key
</ParamField>

<ParamField body="config.mail_options" type="object" />

<ParamField body="config.mail_options.email_copy" type="object" required />

<ParamField body="config.mail_options.email_copy.key_email" type="object" required />

<ParamField body="config.mail_options.email_copy.key_email.body" type="string" required />

<ParamField body="config.mail_options.email_copy.key_email.enabled" type="boolean" required />

<ParamField body="config.mail_options.email_copy.key_email.hide_token_data" type="boolean" required />

<ParamField body="config.mail_options.email_copy.key_email.sign_off" type="string" required />

<ParamField body="config.mail_options.email_copy.key_email.subject" type="string" required />

<ParamField body="config.mail_options.email_copy.reset_password_email" type="object" required />

<ParamField body="config.mail_options.email_copy.reset_password_email.body" type="string" required />

<ParamField body="config.mail_options.email_copy.reset_password_email.enabled" type="boolean" required />

<ParamField body="config.mail_options.email_copy.reset_password_email.hide_token_data" type="boolean" required />

<ParamField body="config.mail_options.email_copy.reset_password_email.sign_off" type="string" required />

<ParamField body="config.mail_options.email_copy.reset_password_email.subject" type="string" required />

<ParamField body="config.mail_options.email_copy.welcome_email" type="object" required />

<ParamField body="config.mail_options.email_copy.welcome_email.body" type="string" required />

<ParamField body="config.mail_options.email_copy.welcome_email.enabled" type="boolean" required />

<ParamField body="config.mail_options.email_copy.welcome_email.hide_token_data" type="boolean" required />

<ParamField body="config.mail_options.email_copy.welcome_email.sign_off" type="string" required />

<ParamField body="config.mail_options.email_copy.welcome_email.subject" type="string" required />

<ParamField body="config.mail_options.mail_from_email" type="string" required />

<ParamField body="config.mail_options.mail_from_name" type="string" required />

<ParamField body="config.oauth_usage_limit" type="integer">
  OAuthUsageLimit is the maximum permitted number of OAuth clients
</ParamField>

<ParamField body="config.org_id" type="string">
  OrgID is the organization ID
</ParamField>

<ParamField body="config.override" type="boolean">
  Override overides global settings. These Catalogue settings are currently being overwritten by the Global Catalogue settings. Toggle the checkbox below to override them for this Catalogue.
</ParamField>

<ParamField body="config.redirect_on_key_request" type="boolean">
  RedirectOnKeyRequest redirects key requests. WHen set to true it will redirect key requests to the url specified in RedirectTo field
</ParamField>

<ParamField body="config.redirect_to" type="string">
  RedirectTo is a url used to redirect key requests
</ParamField>

<ParamField body="config.require_key_approval" type="boolean">
  RequireKeyApproval requires reviewing of all key requests before approving them. By default developers will auto-enroll into an API and be given an API key. If you wish to review key requests before giving developers access to the API, enable this option and you will manually need to approve them in the 'Key requests' section of the dashboard.
</ParamField>

<ParamField body="config.secure_key_approval" type="boolean">
  SecureKeyApproval enables Secure key approval.By default, API keys when approved are sent in an email to the Developer. By enabling this option, the Developer will instead receive a link where they can go to generate the API key securely
</ParamField>

<ParamField body="config.signup_fields[]" type="string">
  SignUpFields is a slice of fields which are asked of the portal developer when they register for an account
</ParamField>

### contextRef

<ParamField body="contextRef" type="object" />

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

### docs

<ParamField body="docs" type="object" />

<ParamField body="docs.doc_type" type="string" required>
  **Allowed values:** `swagger`, `swagger_custom_url`, `graphql`.
</ParamField>

<ParamField body="docs.documentation" type="string" />

### fields

<ParamField body="fields" type="object">
  Fields is a generic map of key:value pairs. You may wish to use this to tag a catalogue as type:internal or type:public Then apply logic at the template layer to dynamically display catalogue apis to different user types.
</ParamField>

<ParamField body="fields.{key}" type="string" />

### policyRef

<ParamField body="policyRef" type="object" />

<ParamField body="policyRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="policyRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## OperatorContext

OperatorContextSpec defines the desired state of OperatorContext

### env

<ParamField body="env" type="object">
  Env is the values of the admin api endpoint that the operator will use to reconcile resources
</ParamField>

<ParamField body="env.auth" type="string" />

<ParamField body="env.ingress" type="object" />

<ParamField body="env.ingress.httpPort" type="integer" />

<ParamField body="env.ingress.httpsPort" type="integer" />

<ParamField body="env.insecureSkipVerify" type="boolean" />

<ParamField body="env.mode" type="string">
  OperatorContextMode is the mode to which the admin api binding is done values are ce for community edition and pro for dashboard **Allowed values:** `ce`, `pro`.
</ParamField>

<ParamField body="env.org" type="string" />

<ParamField body="env.url" type="string" />

<ParamField body="env.user_group_owners[]" type="string" />

<ParamField body="env.user_owners[]" type="string" />

### secretRef

<ParamField body="secretRef" type="object">
  Reference to k8s secret resource that we load environment from.
</ParamField>

<ParamField body="secretRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="secretRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## PortalAPICatalogue

PortalAPICatalogueSpec defines the desired state of PortalAPICatalogue

### Top-Level Fields

<ParamField body="email" type="string">
  Email is Catalogue owner email address.Catalogue owner will be notified at this email address when an API subscription request is submitted or granted
</ParamField>

<ParamField body="org_id" type="string">
  OrgID is the organization ID
</ParamField>

### apis

<ParamField body="apis[]" type="object">
  APIDescriptionList is a list of PortalCatalogueDescription published on this PortalAPICatalogue
</ParamField>

<ParamField body="apis[].apiDescriptionRef" type="object" />

<ParamField body="apis[].apiDescriptionRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="apis[].apiDescriptionRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="apis[].auth_type" type="string">
  AuthType displays as a badge next to the name of the API **Allowed values:** `keyless`, `jwt`, `oauth`, `authToken`.
</ParamField>

<ParamField body="apis[].config" type="object">
  Config optionally overrides individual fields of the portal's PortalConfig for this catalogue.
</ParamField>

<ParamField body="apis[].config.catalogue_login_only" type="boolean">
  CatalogueLoginOnly limits access to catalogues for login users only.
</ParamField>

<ParamField body="apis[].config.dcr_options" type="object">
  DCROptions dynamic client registration options.
</ParamField>

<ParamField body="apis[].config.dcr_options.grant_types[]" type="string" required>
  GrantTypes is an array of OAuth 2.0 grant type strings that the client can use at the token endpoint. **Allowed values:** `client_credentials`, `authorization_code`, `refresh_token`.
</ParamField>

<ParamField body="apis[].config.dcr_options.idp_host" type="string" required>
  IDPHost is the fully qualified hostname of the Identity Provider. e.g. [https://mysubdomain.eu.auth0.com](https://mysubdomain.eu.auth0.com)
</ParamField>

<ParamField body="apis[].config.dcr_options.registration_endpoint" type="string" required>
  RegistrationEndpoint is the registration\_endpoint as presented in the /.well-known/openid-configuration document.
</ParamField>

<ParamField body="apis[].config.dcr_options.token_endpoint_auth_method" type="string" required>
  TokenEndpointAuthMethod is an indicator of the requested authentication method for the token endpoint. "none": The client is a public client and does not have a client secret. "client\_secret\_post": The client uses the HTTP POST parameters "client\_secret\_basic": The client uses HTTP Basic authentication **Allowed values:** `client_secret_basic`, `client_secret_post`, `client_secret_jwt`, `private_key_jwt`, `none`.
</ParamField>

<ParamField body="apis[].config.dcr_options.access_token" type="string">
  AccessToken represents an optional bearer token to authenticate with against the registration endpoint
</ParamField>

<ParamField body="apis[].config.dcr_options.provider" type="string">
  Provider is an optional enum of the provider which allows Tyk to register clients outside the standard DCR spec and perform provider specific logic. If your provider is not in this list, please omit. Upon failure, submit a support ticket so that we may extend support for your provider. **Allowed values:** `gluu`, `keycloak`, `okta`.
</ParamField>

<ParamField body="apis[].config.dcr_options.response_types[]" type="string">
  ResponseTypes is an array of OAuth 2.0 response type strings that the client can use at the authorization endpoint. **Allowed values:** `code`, `token`.
</ParamField>

<ParamField body="apis[].config.disable_auto_login" type="boolean" />

<ParamField body="apis[].config.disable_login" type="boolean">
  DisableLogin disables login on developer portal.If you do not want developers to be able to login, set this value to true. You can use this configuration option in the portal templates to display or hide the login form as well as disabling the actual login method.
</ParamField>

<ParamField body="apis[].config.disable_signup" type="boolean">
  DisableSignup stop developer sign-up to the portal.This will stop developers from being able to signup, they will need to be created manually, or assigned keys via the key management API.
</ParamField>

<ParamField body="apis[].config.email" type="string" />

<ParamField body="apis[].config.enable_dcr" type="boolean">
  EnableDCR activates dynamic client registration.
</ParamField>

<ParamField body="apis[].config.enable_multi_selection" type="boolean">
  EnableMultiSelection enables subscribing to multiple APIs with single key.User will be able subscript any combination of exposed catalogues of the same authentication type
</ParamField>

<ParamField body="apis[].config.id" type="string">
  Set by the server. DO NOT set this field it is read only.
</ParamField>

<ParamField body="apis[].config.key_request_fields[]" type="string">
  KeyRequestFields is a slice of fields which are asked of the portal developer when requesting an api key
</ParamField>

<ParamField body="apis[].config.mail_options" type="object" />

<ParamField body="apis[].config.mail_options.email_copy" type="object" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email" type="object" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email.body" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email.enabled" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email.hide_token_data" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email.sign_off" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.key_email.subject" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email" type="object" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email.body" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email.enabled" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email.hide_token_data" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email.sign_off" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.reset_password_email.subject" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email" type="object" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email.body" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email.enabled" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email.hide_token_data" type="boolean" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email.sign_off" type="string" required />

<ParamField body="apis[].config.mail_options.email_copy.welcome_email.subject" type="string" required />

<ParamField body="apis[].config.mail_options.mail_from_email" type="string" required />

<ParamField body="apis[].config.mail_options.mail_from_name" type="string" required />

<ParamField body="apis[].config.oauth_usage_limit" type="integer">
  OAuthUsageLimit is the maximum permitted number of OAuth clients
</ParamField>

<ParamField body="apis[].config.org_id" type="string">
  OrgID is the organization ID
</ParamField>

<ParamField body="apis[].config.override" type="boolean">
  Override overides global settings. These Catalogue settings are currently being overwritten by the Global Catalogue settings. Toggle the checkbox below to override them for this Catalogue.
</ParamField>

<ParamField body="apis[].config.redirect_on_key_request" type="boolean">
  RedirectOnKeyRequest redirects key requests. WHen set to true it will redirect key requests to the url specified in RedirectTo field
</ParamField>

<ParamField body="apis[].config.redirect_to" type="string">
  RedirectTo is a url used to redirect key requests
</ParamField>

<ParamField body="apis[].config.require_key_approval" type="boolean">
  RequireKeyApproval requires reviewing of all key requests before approving them. By default developers will auto-enroll into an API and be given an API key. If you wish to review key requests before giving developers access to the API, enable this option and you will manually need to approve them in the 'Key requests' section of the dashboard.
</ParamField>

<ParamField body="apis[].config.secure_key_approval" type="boolean">
  SecureKeyApproval enables Secure key approval.By default, API keys when approved are sent in an email to the Developer. By enabling this option, the Developer will instead receive a link where they can go to generate the API key securely
</ParamField>

<ParamField body="apis[].config.signup_fields[]" type="string">
  SignUpFields is a slice of fields which are asked of the portal developer when they register for an account
</ParamField>

<ParamField body="apis[].docs" type="object" />

<ParamField body="apis[].docs.doc_type" type="string" required>
  **Allowed values:** `swagger`, `swagger_custom_url`, `graphql`.
</ParamField>

<ParamField body="apis[].docs.documentation" type="string" />

<ParamField body="apis[].documentation" type="string">
  Do not set Documentation. Use `docs` instead.
</ParamField>

<ParamField body="apis[].fields" type="object">
  Fields is a generic map of key:value pairs. You may wish to use this to tag a catalogue as type:internal or type:public Then apply logic at the template layer to dynamically display catalogue apis to different user types.
</ParamField>

<ParamField body="apis[].fields.{key}" type="string" />

<ParamField body="apis[].is_keyless" type="boolean">
  IsKeyless toggles visibility of the `Request an API Key button`. Use this when AuthType is keyless, jwt or oauth.
</ParamField>

<ParamField body="apis[].long_description" type="string">
  LongDescription can be markdown. It allows you to describe the capabilities of the API and is displayed just below the name and AuthType in the catalogue listing page.
</ParamField>

<ParamField body="apis[].name" type="string">
  Name is the title of the API that you wish to be published to the catalogue
</ParamField>

<ParamField body="apis[].policy_id" type="string">
  PolicyID explicitly sets the policy\_id to be published. We do not recommend that this value is set directly. Rather, use `policyRef` instead.
</ParamField>

<ParamField body="apis[].policyRef" type="object" />

<ParamField body="apis[].policyRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="apis[].policyRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

<ParamField body="apis[].short_description" type="string">
  ShortDescription is a brief summary of the API shown in the portal catalogue. Note that it may not be rendered by the default portal templates.
</ParamField>

<ParamField body="apis[].show" type="boolean">
  Show toggles visibility of the API in the portal catalogue
</ParamField>

<ParamField body="apis[].version" type="string" default="v2">
  Version should always be v2 **Allowed values:** `v2`.
</ParamField>

### contextRef

<ParamField body="contextRef" type="object">
  Context is reference to OperatorContext resource. Set this if you want to target a specific OperatorContext. When omitted default OperatorContext is used.
</ParamField>

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

## PortalConfig

PortalConfigSpec defines the desired state of PortalConfig

### Top-Level Fields

<ParamField body="catalogue_login_only" type="boolean">
  CatalogueLoginOnly limits access to catalogues for login users only.
</ParamField>

<ParamField body="disable_auto_login" type="boolean" />

<ParamField body="disable_login" type="boolean">
  DisableLogin disables login on developer portal.If you do not want developers to be able to login, set this value to true. You can use this configuration option in the portal templates to display or hide the login form as well as disabling the actual login method.
</ParamField>

<ParamField body="disable_signup" type="boolean">
  DisableSignup stop developer sign-up to the portal.This will stop developers from being able to signup, they will need to be created manually, or assigned keys via the key management API.
</ParamField>

<ParamField body="email" type="string" />

<ParamField body="enable_dcr" type="boolean">
  EnableDCR activates dynamic client registration.
</ParamField>

<ParamField body="enable_multi_selection" type="boolean">
  EnableMultiSelection enables subscribing to multiple APIs with single key.User will be able subscript any combination of exposed catalogues of the same authentication type
</ParamField>

<ParamField body="id" type="string">
  Set by the server. DO NOT set this field it is read only.
</ParamField>

<ParamField body="key_request_fields[]" type="string">
  KeyRequestFields is a slice of fields which are asked of the portal developer when requesting an api key
</ParamField>

<ParamField body="oauth_usage_limit" type="integer">
  OAuthUsageLimit is the maximum permitted number of OAuth clients
</ParamField>

<ParamField body="org_id" type="string">
  OrgID is the organization ID
</ParamField>

<ParamField body="override" type="boolean">
  Override overides global settings. These Catalogue settings are currently being overwritten by the Global Catalogue settings. Toggle the checkbox below to override them for this Catalogue.
</ParamField>

<ParamField body="redirect_on_key_request" type="boolean">
  RedirectOnKeyRequest redirects key requests. WHen set to true it will redirect key requests to the url specified in RedirectTo field
</ParamField>

<ParamField body="redirect_to" type="string">
  RedirectTo is a url used to redirect key requests
</ParamField>

<ParamField body="require_key_approval" type="boolean">
  RequireKeyApproval requires reviewing of all key requests before approving them. By default developers will auto-enroll into an API and be given an API key. If you wish to review key requests before giving developers access to the API, enable this option and you will manually need to approve them in the 'Key requests' section of the dashboard.
</ParamField>

<ParamField body="secure_key_approval" type="boolean">
  SecureKeyApproval enables Secure key approval.By default, API keys when approved are sent in an email to the Developer. By enabling this option, the Developer will instead receive a link where they can go to generate the API key securely
</ParamField>

<ParamField body="signup_fields[]" type="string">
  SignUpFields is a slice of fields which are asked of the portal developer when they register for an account
</ParamField>

### contextRef

<ParamField body="contextRef" type="object" />

<ParamField body="contextRef.name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="contextRef.namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>

### dcr\_options

<ParamField body="dcr_options" type="object">
  DCROptions dynamic client registration options.
</ParamField>

<ParamField body="dcr_options.grant_types[]" type="string" required>
  GrantTypes is an array of OAuth 2.0 grant type strings that the client can use at the token endpoint. **Allowed values:** `client_credentials`, `authorization_code`, `refresh_token`.
</ParamField>

<ParamField body="dcr_options.idp_host" type="string" required>
  IDPHost is the fully qualified hostname of the Identity Provider. e.g. [https://mysubdomain.eu.auth0.com](https://mysubdomain.eu.auth0.com)
</ParamField>

<ParamField body="dcr_options.registration_endpoint" type="string" required>
  RegistrationEndpoint is the registration\_endpoint as presented in the /.well-known/openid-configuration document.
</ParamField>

<ParamField body="dcr_options.token_endpoint_auth_method" type="string" required>
  TokenEndpointAuthMethod is an indicator of the requested authentication method for the token endpoint. "none": The client is a public client and does not have a client secret. "client\_secret\_post": The client uses the HTTP POST parameters "client\_secret\_basic": The client uses HTTP Basic authentication **Allowed values:** `client_secret_basic`, `client_secret_post`, `client_secret_jwt`, `private_key_jwt`, `none`.
</ParamField>

<ParamField body="dcr_options.access_token" type="string">
  AccessToken represents an optional bearer token to authenticate with against the registration endpoint
</ParamField>

<ParamField body="dcr_options.provider" type="string">
  Provider is an optional enum of the provider which allows Tyk to register clients outside the standard DCR spec and perform provider specific logic. If your provider is not in this list, please omit. Upon failure, submit a support ticket so that we may extend support for your provider. **Allowed values:** `gluu`, `keycloak`, `okta`.
</ParamField>

<ParamField body="dcr_options.response_types[]" type="string">
  ResponseTypes is an array of OAuth 2.0 response type strings that the client can use at the authorization endpoint. **Allowed values:** `code`, `token`.
</ParamField>

### mail\_options

<ParamField body="mail_options" type="object" />

<ParamField body="mail_options.email_copy" type="object" required />

<ParamField body="mail_options.email_copy.key_email" type="object" required />

<ParamField body="mail_options.email_copy.key_email.body" type="string" required />

<ParamField body="mail_options.email_copy.key_email.enabled" type="boolean" required />

<ParamField body="mail_options.email_copy.key_email.hide_token_data" type="boolean" required />

<ParamField body="mail_options.email_copy.key_email.sign_off" type="string" required />

<ParamField body="mail_options.email_copy.key_email.subject" type="string" required />

<ParamField body="mail_options.email_copy.reset_password_email" type="object" required />

<ParamField body="mail_options.email_copy.reset_password_email.body" type="string" required />

<ParamField body="mail_options.email_copy.reset_password_email.enabled" type="boolean" required />

<ParamField body="mail_options.email_copy.reset_password_email.hide_token_data" type="boolean" required />

<ParamField body="mail_options.email_copy.reset_password_email.sign_off" type="string" required />

<ParamField body="mail_options.email_copy.reset_password_email.subject" type="string" required />

<ParamField body="mail_options.email_copy.welcome_email" type="object" required />

<ParamField body="mail_options.email_copy.welcome_email.body" type="string" required />

<ParamField body="mail_options.email_copy.welcome_email.enabled" type="boolean" required />

<ParamField body="mail_options.email_copy.welcome_email.hide_token_data" type="boolean" required />

<ParamField body="mail_options.email_copy.welcome_email.sign_off" type="string" required />

<ParamField body="mail_options.email_copy.welcome_email.subject" type="string" required />

<ParamField body="mail_options.mail_from_email" type="string" required />

<ParamField body="mail_options.mail_from_name" type="string" required />

## SubGraph

SubGraphSpec defines the desired state of SubGraph

### Top-Level Fields

<ParamField body="schema" type="string" required />

<ParamField body="sdl" type="string" required />

## SuperGraph

SuperGraphSpec defines the desired state of SuperGraph

### Top-Level Fields

<ParamField body="merged_sdl" type="string" />

<ParamField body="schema" type="string" />

### subgraph\_refs

<ParamField body="subgraph_refs[]" type="object" required />

<ParamField body="subgraph_refs[].name" type="string" required>
  k8s resource name
</ParamField>

<ParamField body="subgraph_refs[].namespace" type="string">
  The k8s namespace of the resource being targeted. When omitted this will be set to the namespace of the object that is being reconciled.
</ParamField>
