{
  "openapi": "3.0.0",
  "info": {
    "title": "ngrok OpenAPI",
    "version": "1.0.0",
    "description": "The ngrok REST API at https://api.ngrok.com provides programmatic access to provision and configure every ngrok resource: endpoints, domains, API keys, IP policies, tunnels, certificates, and more. Full documentation: https://ngrok.com/docs/api\n\n**Authentication:** Send an API key as a bearer token: \"Authorization: Bearer {API key}\". Create and revoke keys at https://dashboard.ngrok.com/api-keys or via the /api_keys resource. Requests without credentials receive an error with code ERR_NGROK_200.\n\n**Versioning and deprecation policy:** Every request must include the \"ngrok-version: 2\" header; a missing header returns HTTP 400 with error code ERR_NGROK_218. Version 2 is the current version; all earlier versions are deprecated. ngrok never makes breaking changes to a published API version. Breaking changes ship only as a new version that clients explicitly opt in to via this header. Additive changes (new resources, methods, and fields, and bug fixes that match documented behavior) may ship to a live version. Full policy: https://ngrok.com/docs/api#versioning-and-api-stability\n\n**Rate limits:** By default, the API allows 120 requests per rolling 60-second window per account; some plans have higher limits. Exceeding the limit returns HTTP 429 with error code ERR_NGROK_226; wait for the window to pass before retrying. Details: https://ngrok.com/docs/errors/err_ngrok_226\n\n**Errors:** Every 4xx and 5xx response carries the Error schema: the status_code, a human-readable msg, and in most cases a globally unique machine-readable error_code and a details object. Every error code is documented at https://ngrok.com/docs/errors\n"
  },
  "servers": [
    {
      "url": "https://api.ngrok.com"
    }
  ],
  "security": [
    {
      "authentication": []
    }
  ],
  "paths": {
    "/abuse_reports": {
      "post": {
        "summary": "Create",
        "description": "Creates a new abuse report which will be reviewed by our system and abuse response team. This API is only available to authorized accounts. Contact abuse@ngrok.com to request access\n",
        "tags": [
          "AbuseReports"
        ],
        "operationId": "AbuseReportsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AbuseReportCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates a new abuse report which will be reviewed by our system and abuse response team. This API is only available to authorized accounts. Contact abuse@ngrok.com to request access\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbuseReport"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/abuse_reports/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get the detailed status of abuse report by ID.\n",
        "tags": [
          "AbuseReports"
        ],
        "operationId": "AbuseReportsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the detailed status of abuse report by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbuseReport"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/agent_ingresses": {
      "post": {
        "summary": "Create",
        "description": "Create a new Agent Ingress. The ngrok agent can be configured to connect to ngrok via the new set of addresses on the returned Agent Ingress.\n",
        "tags": [
          "AgentIngresses"
        ],
        "operationId": "AgentIngressesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentIngressCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Agent Ingress. The ngrok agent can be configured to connect to ngrok via the new set of addresses on the returned Agent Ingress.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIngress"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Agent Ingresses owned by this account\n",
        "tags": [
          "AgentIngresses"
        ],
        "operationId": "AgentIngressesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, domain\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Agent Ingresses owned by this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIngressList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/agent_ingresses/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an Agent Ingress by ID\n",
        "tags": [
          "AgentIngresses"
        ],
        "operationId": "AgentIngressesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an Agent Ingress by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of an Agent Ingress by ID.\n",
        "tags": [
          "AgentIngresses"
        ],
        "operationId": "AgentIngressesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of an Agent Ingress by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIngress"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an Agent Ingress by ID.\n",
        "tags": [
          "AgentIngresses"
        ],
        "operationId": "AgentIngressesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentIngressUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an Agent Ingress by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIngress"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ai_gateway_provider_keys": {
      "post": {
        "summary": "Create",
        "description": "Create a new AI Gateway Provider Key\n",
        "tags": [
          "AIGatewayProviderKeys"
        ],
        "operationId": "AiGatewayProviderKeysCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIGatewayProviderKeyCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new AI Gateway Provider Key\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayProviderKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List AI Gateway Provider Keys\n",
        "tags": [
          "AIGatewayProviderKeys"
        ],
        "operationId": "AiGatewayProviderKeysList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ai_gateway_api_key_id",
            "description": "Filter by the AI Gateway API Key ID this provider key is attached to.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List AI Gateway Provider Keys\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayProviderKeyList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ai_gateway_provider_keys/{id}": {
      "patch": {
        "summary": "Update",
        "description": "Update an existing AI Gateway Provider Key by ID\n",
        "tags": [
          "AIGatewayProviderKeys"
        ],
        "operationId": "AiGatewayProviderKeysUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique identifier for this provider key\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIGatewayProviderKeyUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an existing AI Gateway Provider Key by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayProviderKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an AI Gateway Provider Key\n",
        "tags": [
          "AIGatewayProviderKeys"
        ],
        "operationId": "AiGatewayProviderKeysDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an AI Gateway Provider Key\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get an AI Gateway Provider Key by ID\n",
        "tags": [
          "AIGatewayProviderKeys"
        ],
        "operationId": "AiGatewayProviderKeysGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an AI Gateway Provider Key by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayProviderKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ai_gateway_api_keys": {
      "post": {
        "summary": "Create",
        "description": "Create a new AI Gateway API Key\n",
        "tags": [
          "AIGatewayAPIKeys"
        ],
        "operationId": "AiGatewayApiKeysCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIGatewayAPIKeyCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new AI Gateway API Key\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayAPIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all AI Gateway API Keys owned by account\n",
        "tags": [
          "AIGatewayAPIKeys"
        ],
        "operationId": "AiGatewayApiKeysList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all AI Gateway API Keys owned by account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayAPIKeyList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ai_gateway_api_keys/{id}": {
      "patch": {
        "summary": "Update",
        "description": "Update an existing AI Gateway API Key by ID\n",
        "tags": [
          "AIGatewayAPIKeys"
        ],
        "operationId": "AiGatewayApiKeysUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique identifier for this API key\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIGatewayAPIKeyUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an existing AI Gateway API Key by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayAPIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an AI Gateway API Key\n",
        "tags": [
          "AIGatewayAPIKeys"
        ],
        "operationId": "AiGatewayApiKeysDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an AI Gateway API Key\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get an AI Gateway API Key by ID\n",
        "tags": [
          "AIGatewayAPIKeys"
        ],
        "operationId": "AiGatewayApiKeysGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an AI Gateway API Key by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIGatewayAPIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/api_keys": {
      "post": {
        "summary": "Create",
        "description": "Create a new API key. The generated API key can be used to authenticate to the ngrok API.\n",
        "tags": [
          "APIKeys"
        ],
        "operationId": "ApiKeysCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/APIKeyCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new API key. The generated API key can be used to authenticate to the ngrok API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all API keys owned by this account\n",
        "tags": [
          "APIKeys"
        ],
        "operationId": "ApiKeysList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, owner_id, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all API keys owned by this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKeyList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/api_keys/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an API key by ID\n",
        "tags": [
          "APIKeys"
        ],
        "operationId": "ApiKeysDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an API key by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of an API key by ID.\n",
        "tags": [
          "APIKeys"
        ],
        "operationId": "ApiKeysGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of an API key by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an API key by ID.\n",
        "tags": [
          "APIKeys"
        ],
        "operationId": "ApiKeysUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/APIKeyUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an API key by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/app/sessions": {
      "get": {
        "summary": "List",
        "description": "List all application sessions for this account.\n",
        "tags": [
          "ApplicationSessions"
        ],
        "operationId": "ApplicationSessionsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all application sessions for this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationSessionList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/app/sessions/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get an application session by ID.\n",
        "tags": [
          "ApplicationSessions"
        ],
        "operationId": "ApplicationSessionsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an application session by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationSession"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an application session by ID.\n",
        "tags": [
          "ApplicationSessions"
        ],
        "operationId": "ApplicationSessionsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an application session by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/app/users": {
      "get": {
        "summary": "List",
        "description": "List all application users for this account.\n",
        "tags": [
          "ApplicationUsers"
        ],
        "operationId": "ApplicationUsersList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all application users for this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationUserList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/app/users/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get an application user by ID.\n",
        "tags": [
          "ApplicationUsers"
        ],
        "operationId": "ApplicationUsersGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an application user by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an application user by ID.\n",
        "tags": [
          "ApplicationUsers"
        ],
        "operationId": "ApplicationUsersDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an application user by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnel_sessions": {
      "get": {
        "summary": "List",
        "description": "List all online tunnel sessions running on this account.\n",
        "tags": [
          "TunnelSessions"
        ],
        "operationId": "TunnelSessionsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, metadata, agent_version, ip, os, region, started_at, credential\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all online tunnel sessions running on this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelSessionList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnel_sessions/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get the detailed status of a tunnel session by ID\n",
        "tags": [
          "TunnelSessions"
        ],
        "operationId": "TunnelSessionsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the detailed status of a tunnel session by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelSession"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnel_sessions/{id}/restart": {
      "post": {
        "summary": "Restart",
        "description": "Issues a command instructing the ngrok agent to restart. The agent restarts itself by calling exec() on platforms that support it. This operation is notably not supported on Windows. When an agent restarts, it reconnects with a new tunnel session ID.\n",
        "tags": [
          "TunnelSessions"
        ],
        "operationId": "TunnelSessionsRestart",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Item"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Issues a command instructing the ngrok agent to restart. The agent restarts itself by calling exec() on platforms that support it. This operation is notably not supported on Windows. When an agent restarts, it reconnects with a new tunnel session ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnel_sessions/{id}/stop": {
      "post": {
        "summary": "Stop",
        "description": "Issues a command instructing the ngrok agent that started this tunnel session to exit.\n",
        "tags": [
          "TunnelSessions"
        ],
        "operationId": "TunnelSessionsStop",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Item"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Issues a command instructing the ngrok agent that started this tunnel session to exit.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnel_sessions/{id}/update": {
      "post": {
        "summary": "Update",
        "description": "Issues a command instructing the ngrok agent to update itself to the latest version. After this call completes successfully, the ngrok agent will be in the update process. A caller should wait some amount of time to allow the update to complete (at least 10 seconds) before making a call to the Restart endpoint to request that the agent restart itself to start using the new code. This call will never update an ngrok agent to a new major version which could cause breaking compatibility issues. If you wish to update to a new major version, that must be done manually. Still, please be aware that updating your ngrok agent could break your integration. This call will fail in any of the following circumstances: there is no update available the ngrok agent's configuration disabled update checks the agent is currently in process of updating the agent has already successfully updated but has not yet been restarted\n",
        "tags": [
          "TunnelSessions"
        ],
        "operationId": "TunnelSessionsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TunnelSessionsUpdate"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Issues a command instructing the ngrok agent to update itself to the latest version. After this call completes successfully, the ngrok agent will be in the update process. A caller should wait some amount of time to allow the update to complete (at least 10 seconds) before making a call to the Restart endpoint to request that the agent restart itself to start using the new code. This call will never update an ngrok agent to a new major version which could cause breaking compatibility issues. If you wish to update to a new major version, that must be done manually. Still, please be aware that updating your ngrok agent could break your integration. This call will fail in any of the following circumstances: there is no update available the ngrok agent's configuration disabled update checks the agent is currently in process of updating the agent has already successfully updated but has not yet been restarted\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/failover": {
      "post": {
        "summary": "Create",
        "description": "Create a new Failover backend\n",
        "tags": [
          "FailoverBackends"
        ],
        "operationId": "FailoverBackendsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FailoverBackendCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Failover backend\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailoverBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Failover backends on this account\n",
        "tags": [
          "FailoverBackends"
        ],
        "operationId": "FailoverBackendsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Failover backends on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailoverBackendList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/failover/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a Failover backend by ID.\n",
        "tags": [
          "FailoverBackends"
        ],
        "operationId": "FailoverBackendsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a Failover backend by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a Failover backend by ID\n",
        "tags": [
          "FailoverBackends"
        ],
        "operationId": "FailoverBackendsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a Failover backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailoverBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update Failover backend by ID\n",
        "tags": [
          "FailoverBackends"
        ],
        "operationId": "FailoverBackendsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FailoverBackendUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update Failover backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailoverBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/http_response": {
      "post": {
        "summary": "Create",
        "tags": [
          "HTTPResponseBackends"
        ],
        "operationId": "HttpResponseBackendsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPResponseBackendCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPResponseBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "tags": [
          "HTTPResponseBackends"
        ],
        "operationId": "HttpResponseBackendsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPResponseBackendList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/http_response/{id}": {
      "delete": {
        "summary": "Delete",
        "tags": [
          "HTTPResponseBackends"
        ],
        "operationId": "HttpResponseBackendsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "HTTPResponseBackends"
        ],
        "operationId": "HttpResponseBackendsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPResponseBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "tags": [
          "HTTPResponseBackends"
        ],
        "operationId": "HttpResponseBackendsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPResponseBackendUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPResponseBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/static": {
      "post": {
        "summary": "Create",
        "description": "Create a new static backend\n",
        "tags": [
          "StaticBackends"
        ],
        "operationId": "StaticBackendsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StaticBackendCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new static backend\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StaticBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all static backends on this account\n",
        "tags": [
          "StaticBackends"
        ],
        "operationId": "StaticBackendsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all static backends on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StaticBackendList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/static/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a static backend by ID.\n",
        "tags": [
          "StaticBackends"
        ],
        "operationId": "StaticBackendsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a static backend by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a static backend by ID\n",
        "tags": [
          "StaticBackends"
        ],
        "operationId": "StaticBackendsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a static backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StaticBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update static backend by ID\n",
        "tags": [
          "StaticBackends"
        ],
        "operationId": "StaticBackendsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StaticBackendUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update static backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StaticBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/tunnel_group": {
      "post": {
        "summary": "Create",
        "description": "Create a new TunnelGroup backend\n",
        "tags": [
          "TunnelGroupBackends"
        ],
        "operationId": "TunnelGroupBackendsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TunnelGroupBackendCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new TunnelGroup backend\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelGroupBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all TunnelGroup backends on this account\n",
        "tags": [
          "TunnelGroupBackends"
        ],
        "operationId": "TunnelGroupBackendsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all TunnelGroup backends on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelGroupBackendList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/tunnel_group/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a TunnelGroup backend by ID.\n",
        "tags": [
          "TunnelGroupBackends"
        ],
        "operationId": "TunnelGroupBackendsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a TunnelGroup backend by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a TunnelGroup backend by ID\n",
        "tags": [
          "TunnelGroupBackends"
        ],
        "operationId": "TunnelGroupBackendsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a TunnelGroup backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelGroupBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update TunnelGroup backend by ID\n",
        "tags": [
          "TunnelGroupBackends"
        ],
        "operationId": "TunnelGroupBackendsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TunnelGroupBackendUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update TunnelGroup backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelGroupBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/weighted": {
      "post": {
        "summary": "Create",
        "description": "Create a new Weighted backend\n",
        "tags": [
          "WeightedBackends"
        ],
        "operationId": "WeightedBackendsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WeightedBackendCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Weighted backend\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WeightedBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Weighted backends on this account\n",
        "tags": [
          "WeightedBackends"
        ],
        "operationId": "WeightedBackendsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Weighted backends on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WeightedBackendList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/backends/weighted/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a Weighted backend by ID.\n",
        "tags": [
          "WeightedBackends"
        ],
        "operationId": "WeightedBackendsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a Weighted backend by ID.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a Weighted backend by ID\n",
        "tags": [
          "WeightedBackends"
        ],
        "operationId": "WeightedBackendsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a Weighted backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WeightedBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update Weighted backend by ID\n",
        "tags": [
          "WeightedBackends"
        ],
        "operationId": "WeightedBackendsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WeightedBackendUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update Weighted backend by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WeightedBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/bot_users": {
      "post": {
        "summary": "Create",
        "description": "Create a new bot user\n",
        "tags": [
          "BotUsers"
        ],
        "operationId": "BotUsersCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BotUserCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new bot user\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BotUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all bot users in this account.\n",
        "tags": [
          "BotUsers"
        ],
        "operationId": "BotUsersList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all bot users in this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BotUserList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/bot_users/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a bot user by ID\n",
        "tags": [
          "BotUsers"
        ],
        "operationId": "BotUsersDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a bot user by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of a Bot User by ID.\n",
        "tags": [
          "BotUsers"
        ],
        "operationId": "BotUsersGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of a Bot User by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BotUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of a bot user by ID.\n",
        "tags": [
          "BotUsers"
        ],
        "operationId": "BotUsersUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BotUserUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of a bot user by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BotUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/certificate_authorities": {
      "post": {
        "summary": "Create",
        "description": "Upload a new Certificate Authority\n",
        "tags": [
          "CertificateAuthorities"
        ],
        "operationId": "CertificateAuthoritiesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CertificateAuthorityCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Upload a new Certificate Authority\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Certificate Authority on this account\n",
        "tags": [
          "CertificateAuthorities"
        ],
        "operationId": "CertificateAuthoritiesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, subject_common_name, not_before, not_after\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Certificate Authority on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CertificateAuthorityList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/certificate_authorities/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a Certificate Authority\n",
        "tags": [
          "CertificateAuthorities"
        ],
        "operationId": "CertificateAuthoritiesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a Certificate Authority\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a certificate authority\n",
        "tags": [
          "CertificateAuthorities"
        ],
        "operationId": "CertificateAuthoritiesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a certificate authority\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of a Certificate Authority by ID\n",
        "tags": [
          "CertificateAuthorities"
        ],
        "operationId": "CertificateAuthoritiesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CertificateAuthorityUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of a Certificate Authority by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/credentials": {
      "post": {
        "summary": "Create",
        "description": "Create a new tunnel authtoken credential. This authtoken credential can be used to start a new tunnel session. The response to this API call is the only time the generated token is available. If you need it for future use, you must save it securely yourself.\n",
        "tags": [
          "Credentials"
        ],
        "operationId": "CredentialsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CredentialCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new tunnel authtoken credential. This authtoken credential can be used to start a new tunnel session. The response to this API call is the only time the generated token is available. If you need it for future use, you must save it securely yourself.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Credential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all tunnel authtoken credentials on this account\n",
        "tags": [
          "Credentials"
        ],
        "operationId": "CredentialsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, owner_id, acl, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all tunnel authtoken credentials on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CredentialList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/credentials/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a tunnel authtoken credential by ID\n",
        "tags": [
          "Credentials"
        ],
        "operationId": "CredentialsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a tunnel authtoken credential by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a tunnel authtoken credential\n",
        "tags": [
          "Credentials"
        ],
        "operationId": "CredentialsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a tunnel authtoken credential\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Credential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an tunnel authtoken credential by ID\n",
        "tags": [
          "Credentials"
        ],
        "operationId": "CredentialsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CredentialUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an tunnel authtoken credential by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Credential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes": {
      "post": {
        "summary": "Create",
        "description": "Create an HTTPS Edge Route\n",
        "tags": [
          "EdgesHTTPSRoutes"
        ],
        "operationId": "EdgesHttpsRoutesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPSEdgeRouteCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create an HTTPS Edge Route\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdgeRoute"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get an HTTPS Edge Route by ID\n",
        "tags": [
          "EdgesHTTPSRoutes"
        ],
        "operationId": "EdgesHttpsRoutesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an HTTPS Edge Route by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdgeRoute"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Updates an HTTPS Edge Route by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
        "tags": [
          "EdgesHTTPSRoutes"
        ],
        "operationId": "EdgesHttpsRoutesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPSEdgeRouteUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updates an HTTPS Edge Route by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdgeRoute"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an HTTPS Edge Route by ID\n",
        "tags": [
          "EdgesHTTPSRoutes"
        ],
        "operationId": "EdgesHttpsRoutesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an HTTPS Edge Route by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https": {
      "post": {
        "summary": "Create",
        "description": "Create an HTTPS Edge\n",
        "tags": [
          "EdgesHTTPS"
        ],
        "operationId": "EdgesHttpsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPSEdgeCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create an HTTPS Edge\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "Returns a list of all HTTPS Edges on this account\n",
        "tags": [
          "EdgesHTTPS"
        ],
        "operationId": "EdgesHttpsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of all HTTPS Edges on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdgeList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get an HTTPS Edge by ID\n",
        "tags": [
          "EdgesHTTPS"
        ],
        "operationId": "EdgesHttpsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an HTTPS Edge by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Updates an HTTPS Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
        "tags": [
          "EdgesHTTPS"
        ],
        "operationId": "EdgesHttpsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HTTPSEdgeUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updates an HTTPS Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an HTTPS Edge by ID\n",
        "tags": [
          "EdgesHTTPS"
        ],
        "operationId": "EdgesHttpsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an HTTPS Edge by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{id}/mutual_tls": {
      "put": {
        "summary": "Replace",
        "tags": [
          "HTTPSEdgeMutualTLSModule"
        ],
        "operationId": "HttpsEdgeMutualTlsModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeMutualTLSReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointMutualTLS"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "HTTPSEdgeMutualTLSModule"
        ],
        "operationId": "HttpsEdgeMutualTlsModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointMutualTLS"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "HTTPSEdgeMutualTLSModule"
        ],
        "operationId": "HttpsEdgeMutualTlsModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{id}/tls_termination": {
      "put": {
        "summary": "Replace",
        "tags": [
          "HTTPSEdgeTLSTerminationModule"
        ],
        "operationId": "HttpsEdgeTlsTerminationModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeTLSTerminationAtEdgeReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTLSTermination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "HTTPSEdgeTLSTerminationModule"
        ],
        "operationId": "HttpsEdgeTlsTerminationModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTLSTermination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "HTTPSEdgeTLSTerminationModule"
        ],
        "operationId": "HttpsEdgeTlsTerminationModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/backend": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteBackendModule"
        ],
        "operationId": "EdgeRouteBackendModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteBackendReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteBackendModule"
        ],
        "operationId": "EdgeRouteBackendModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteBackendModule"
        ],
        "operationId": "EdgeRouteBackendModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/ip_restriction": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteIPRestrictionModule"
        ],
        "operationId": "EdgeRouteIpRestrictionModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteIPRestrictionReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteIPRestrictionModule"
        ],
        "operationId": "EdgeRouteIpRestrictionModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteIPRestrictionModule"
        ],
        "operationId": "EdgeRouteIpRestrictionModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/request_headers": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteRequestHeadersModule"
        ],
        "operationId": "EdgeRouteRequestHeadersModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteRequestHeadersReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointRequestHeaders"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteRequestHeadersModule"
        ],
        "operationId": "EdgeRouteRequestHeadersModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointRequestHeaders"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteRequestHeadersModule"
        ],
        "operationId": "EdgeRouteRequestHeadersModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/response_headers": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteResponseHeadersModule"
        ],
        "operationId": "EdgeRouteResponseHeadersModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteResponseHeadersReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointResponseHeaders"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteResponseHeadersModule"
        ],
        "operationId": "EdgeRouteResponseHeadersModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointResponseHeaders"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteResponseHeadersModule"
        ],
        "operationId": "EdgeRouteResponseHeadersModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/compression": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteCompressionModule"
        ],
        "operationId": "EdgeRouteCompressionModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteCompressionReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointCompression"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteCompressionModule"
        ],
        "operationId": "EdgeRouteCompressionModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointCompression"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteCompressionModule"
        ],
        "operationId": "EdgeRouteCompressionModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/circuit_breaker": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteCircuitBreakerModule"
        ],
        "operationId": "EdgeRouteCircuitBreakerModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteCircuitBreakerReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointCircuitBreaker"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteCircuitBreakerModule"
        ],
        "operationId": "EdgeRouteCircuitBreakerModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointCircuitBreaker"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteCircuitBreakerModule"
        ],
        "operationId": "EdgeRouteCircuitBreakerModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/webhook_verification": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteWebhookVerificationModule"
        ],
        "operationId": "EdgeRouteWebhookVerificationModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteWebhookVerificationReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointWebhookValidation"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteWebhookVerificationModule"
        ],
        "operationId": "EdgeRouteWebhookVerificationModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointWebhookValidation"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteWebhookVerificationModule"
        ],
        "operationId": "EdgeRouteWebhookVerificationModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/oauth": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteOAuthModule"
        ],
        "operationId": "EdgeRouteOAuthModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteOAuthReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointOAuth"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteOAuthModule"
        ],
        "operationId": "EdgeRouteOAuthModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointOAuth"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteOAuthModule"
        ],
        "operationId": "EdgeRouteOAuthModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/saml": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteSAMLModule"
        ],
        "operationId": "EdgeRouteSamlModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteSAMLReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointSAML"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteSAMLModule"
        ],
        "operationId": "EdgeRouteSamlModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointSAML"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteSAMLModule"
        ],
        "operationId": "EdgeRouteSamlModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/oidc": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteOIDCModule"
        ],
        "operationId": "EdgeRouteOidcModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteOIDCReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointOIDC"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteOIDCModule"
        ],
        "operationId": "EdgeRouteOidcModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointOIDC"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteOIDCModule"
        ],
        "operationId": "EdgeRouteOidcModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/websocket_tcp_converter": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteWebsocketTCPConverterModule"
        ],
        "operationId": "EdgeRouteWebsocketTcpConverterModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteWebsocketTCPConverterReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteWebsocketTCPConverterModule"
        ],
        "operationId": "EdgeRouteWebsocketTcpConverterModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteWebsocketTCPConverterModule"
        ],
        "operationId": "EdgeRouteWebsocketTcpConverterModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/user_agent_filter": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteUserAgentFilterModule"
        ],
        "operationId": "EdgeRouteUserAgentFilterModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteUserAgentFilterReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointUserAgentFilter"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteUserAgentFilterModule"
        ],
        "operationId": "EdgeRouteUserAgentFilterModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointUserAgentFilter"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteUserAgentFilterModule"
        ],
        "operationId": "EdgeRouteUserAgentFilterModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/https/{edge_id}/routes/{id}/traffic_policy": {
      "put": {
        "summary": "Replace",
        "tags": [
          "EdgeRouteTrafficPolicyModule"
        ],
        "operationId": "EdgeRouteTrafficPolicyModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeRouteTrafficPolicyReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "EdgeRouteTrafficPolicyModule"
        ],
        "operationId": "EdgeRouteTrafficPolicyModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "EdgeRouteTrafficPolicyModule"
        ],
        "operationId": "EdgeRouteTrafficPolicyModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "edge_id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "description": "unique identifier of this edge route\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tcp": {
      "post": {
        "summary": "Create",
        "description": "Create a TCP Edge\n",
        "tags": [
          "EdgesTCP"
        ],
        "operationId": "EdgesTcpCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TCPEdgeCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a TCP Edge\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TCPEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "Returns a list of all TCP Edges on this account\n",
        "tags": [
          "EdgesTCP"
        ],
        "operationId": "EdgesTcpList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of all TCP Edges on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TCPEdgeList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tcp/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get a TCP Edge by ID\n",
        "tags": [
          "EdgesTCP"
        ],
        "operationId": "EdgesTcpGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get a TCP Edge by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TCPEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Updates a TCP Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
        "tags": [
          "EdgesTCP"
        ],
        "operationId": "EdgesTcpUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TCPEdgeUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updates a TCP Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TCPEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete a TCP Edge by ID\n",
        "tags": [
          "EdgesTCP"
        ],
        "operationId": "EdgesTcpDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a TCP Edge by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tcp/{id}/backend": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TCPEdgeBackendModule"
        ],
        "operationId": "TcpEdgeBackendModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeBackendReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TCPEdgeBackendModule"
        ],
        "operationId": "TcpEdgeBackendModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TCPEdgeBackendModule"
        ],
        "operationId": "TcpEdgeBackendModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tcp/{id}/ip_restriction": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TCPEdgeIPRestrictionModule"
        ],
        "operationId": "TcpEdgeIpRestrictionModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeIPRestrictionReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TCPEdgeIPRestrictionModule"
        ],
        "operationId": "TcpEdgeIpRestrictionModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TCPEdgeIPRestrictionModule"
        ],
        "operationId": "TcpEdgeIpRestrictionModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tcp/{id}/traffic_policy": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TCPEdgeTrafficPolicyModule"
        ],
        "operationId": "TcpEdgeTrafficPolicyModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeTrafficPolicyReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TCPEdgeTrafficPolicyModule"
        ],
        "operationId": "TcpEdgeTrafficPolicyModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TCPEdgeTrafficPolicyModule"
        ],
        "operationId": "TcpEdgeTrafficPolicyModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls": {
      "post": {
        "summary": "Create",
        "description": "Create a TLS Edge\n",
        "tags": [
          "EdgesTLS"
        ],
        "operationId": "EdgesTlsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TLSEdgeCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a TLS Edge\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "Returns a list of all TLS Edges on this account\n",
        "tags": [
          "EdgesTLS"
        ],
        "operationId": "EdgesTlsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of all TLS Edges on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSEdgeList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get a TLS Edge by ID\n",
        "tags": [
          "EdgesTLS"
        ],
        "operationId": "EdgesTlsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get a TLS Edge by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Updates a TLS Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
        "tags": [
          "EdgesTLS"
        ],
        "operationId": "EdgesTlsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique identifier of this edge\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TLSEdgeUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updates a TLS Edge by ID. If a module is not specified in the update, it will not be modified. However, each module configuration that is specified will completely replace the existing value. There is no way to delete an existing module via this API, instead use the delete module API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSEdge"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete a TLS Edge by ID\n",
        "tags": [
          "EdgesTLS"
        ],
        "operationId": "EdgesTlsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a TLS Edge by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}/backend": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TLSEdgeBackendModule"
        ],
        "operationId": "TlsEdgeBackendModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeBackendReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TLSEdgeBackendModule"
        ],
        "operationId": "TlsEdgeBackendModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointBackend"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TLSEdgeBackendModule"
        ],
        "operationId": "TlsEdgeBackendModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}/ip_restriction": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TLSEdgeIPRestrictionModule"
        ],
        "operationId": "TlsEdgeIpRestrictionModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeIPRestrictionReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TLSEdgeIPRestrictionModule"
        ],
        "operationId": "TlsEdgeIpRestrictionModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointIPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TLSEdgeIPRestrictionModule"
        ],
        "operationId": "TlsEdgeIpRestrictionModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}/mutual_tls": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TLSEdgeMutualTLSModule"
        ],
        "operationId": "TlsEdgeMutualTlsModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeMutualTLSReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointMutualTLS"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TLSEdgeMutualTLSModule"
        ],
        "operationId": "TlsEdgeMutualTlsModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointMutualTLS"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TLSEdgeMutualTLSModule"
        ],
        "operationId": "TlsEdgeMutualTlsModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}/tls_termination": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TLSEdgeTLSTerminationModule"
        ],
        "operationId": "TlsEdgeTlsTerminationModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeTLSTerminationReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTLSTermination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TLSEdgeTLSTerminationModule"
        ],
        "operationId": "TlsEdgeTlsTerminationModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTLSTermination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TLSEdgeTLSTerminationModule"
        ],
        "operationId": "TlsEdgeTlsTerminationModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/edges/tls/{id}/traffic_policy": {
      "put": {
        "summary": "Replace",
        "tags": [
          "TLSEdgeTrafficPolicyModule"
        ],
        "operationId": "TlsEdgeTrafficPolicyModuleReplace",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdgeTrafficPolicyReplace"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "tags": [
          "TLSEdgeTrafficPolicyModule"
        ],
        "operationId": "TlsEdgeTrafficPolicyModuleGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "n/a",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointTrafficPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "tags": [
          "TLSEdgeTrafficPolicyModule"
        ],
        "operationId": "TlsEdgeTrafficPolicyModuleDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "n/a"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/endpoints": {
      "post": {
        "summary": "Create",
        "description": "Create an endpoint, currently available only for cloud endpoints\n",
        "tags": [
          "Endpoints"
        ],
        "operationId": "EndpointsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create an endpoint, currently available only for cloud endpoints\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all active endpoints on the account\n",
        "tags": [
          "Endpoints"
        ],
        "operationId": "EndpointsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, url, type, pooling_enabled, region, scheme, description, metadata, name, created_at, principal.id, bindings\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all active endpoints on the account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/endpoints/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get the status of an endpoint by ID\n",
        "tags": [
          "Endpoints"
        ],
        "operationId": "EndpointsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the status of an endpoint by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update an Endpoint by ID, currently available only for cloud endpoints\n",
        "tags": [
          "Endpoints"
        ],
        "operationId": "EndpointsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "unique endpoint resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an Endpoint by ID, currently available only for cloud endpoints\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete an Endpoint by ID, currently available only for cloud endpoints\n",
        "tags": [
          "Endpoints"
        ],
        "operationId": "EndpointsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an Endpoint by ID, currently available only for cloud endpoints\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_destinations": {
      "post": {
        "summary": "Create",
        "description": "Create a new Event Destination. It will not apply to anything until it is associated with an Event Subscription.\n",
        "tags": [
          "EventDestinations"
        ],
        "operationId": "EventDestinationsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventDestinationCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Event Destination. It will not apply to anything until it is associated with an Event Subscription.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDestination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Event Destinations on this account.\n",
        "tags": [
          "EventDestinations"
        ],
        "operationId": "EventDestinationsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Event Destinations on this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDestinationList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_destinations/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an Event Destination. If the Event Destination is still referenced by an Event Subscription.\n",
        "tags": [
          "EventDestinations"
        ],
        "operationId": "EventDestinationsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an Event Destination. If the Event Destination is still referenced by an Event Subscription.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an Event Destination by ID.\n",
        "tags": [
          "EventDestinations"
        ],
        "operationId": "EventDestinationsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an Event Destination by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDestination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an Event Destination.\n",
        "tags": [
          "EventDestinations"
        ],
        "operationId": "EventDestinationsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "Unique identifier for this Event Destination.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventDestinationUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an Event Destination.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDestination"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_subscriptions": {
      "post": {
        "summary": "Create",
        "description": "Create an Event Subscription.\n",
        "tags": [
          "EventSubscriptions"
        ],
        "operationId": "EventSubscriptionsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventSubscriptionCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create an Event Subscription.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List this Account's Event Subscriptions.\n",
        "tags": [
          "EventSubscriptions"
        ],
        "operationId": "EventSubscriptionsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List this Account's Event Subscriptions.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_subscriptions/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an Event Subscription.\n",
        "tags": [
          "EventSubscriptions"
        ],
        "operationId": "EventSubscriptionsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an Event Subscription.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get an Event Subscription by ID.\n",
        "tags": [
          "EventSubscriptions"
        ],
        "operationId": "EventSubscriptionsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get an Event Subscription by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update an Event Subscription.\n",
        "tags": [
          "EventSubscriptions"
        ],
        "operationId": "EventSubscriptionsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "Unique identifier for this Event Subscription.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventSubscriptionUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an Event Subscription.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_subscriptions/{subscription_id}/sources": {
      "post": {
        "summary": "Create",
        "description": "Add an additional type for which this event subscription will trigger\n",
        "tags": [
          "EventSources"
        ],
        "operationId": "EventSourcesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "subscription_id",
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventSourceCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Add an additional type for which this event subscription will trigger\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSource"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List the types for which this event subscription will trigger\n",
        "tags": [
          "EventSources"
        ],
        "operationId": "EventSourcesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "subscription_id",
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List the types for which this event subscription will trigger\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSourceList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/event_subscriptions/{subscription_id}/sources/{type}": {
      "delete": {
        "summary": "Delete",
        "description": "Remove a type for which this event subscription will trigger\n",
        "tags": [
          "EventSources"
        ],
        "operationId": "EventSourcesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "subscription_id",
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "Type of event for which an event subscription will trigger\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Remove a type for which this event subscription will trigger\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details for a given type that triggers for the given event subscription\n",
        "tags": [
          "EventSources"
        ],
        "operationId": "EventSourcesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "subscription_id",
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "Type of event for which an event subscription will trigger\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details for a given type that triggers for the given event subscription\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSource"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update the type for which this event subscription will trigger\n",
        "tags": [
          "EventSources"
        ],
        "operationId": "EventSourcesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "subscription_id",
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "Type of event for which an event subscription will trigger\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventSourceUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update the type for which this event subscription will trigger\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSource"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_policies": {
      "post": {
        "summary": "Create",
        "description": "Create a new IP policy. It will not apply to any traffic until you associate to a traffic source via an endpoint configuration or IP restriction.\n",
        "tags": [
          "IPPolicies"
        ],
        "operationId": "IpPoliciesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPPolicyCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new IP policy. It will not apply to any traffic until you associate to a traffic source via an endpoint configuration or IP restriction.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all IP policies on this account\n",
        "tags": [
          "IPPolicies"
        ],
        "operationId": "IpPoliciesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, name\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all IP policies on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicyList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_policies/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an IP policy. If the IP policy is referenced by another object for the purposes of traffic restriction it will be treated as if the IP policy remains but has zero rules.\n",
        "tags": [
          "IPPolicies"
        ],
        "operationId": "IpPoliciesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an IP policy. If the IP policy is referenced by another object for the purposes of traffic restriction it will be treated as if the IP policy remains but has zero rules.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an IP policy by ID.\n",
        "tags": [
          "IPPolicies"
        ],
        "operationId": "IpPoliciesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an IP policy by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an IP policy by ID\n",
        "tags": [
          "IPPolicies"
        ],
        "operationId": "IpPoliciesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPPolicyUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an IP policy by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicy"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_policy_rules": {
      "post": {
        "summary": "Create",
        "description": "Create a new IP policy rule attached to an IP Policy.\n",
        "tags": [
          "IPPolicyRules"
        ],
        "operationId": "IpPolicyRulesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPPolicyRuleCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new IP policy rule attached to an IP Policy.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicyRule"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all IP policy rules on this account\n",
        "tags": [
          "IPPolicyRules"
        ],
        "operationId": "IpPolicyRulesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, cidr, ip_policy_id, action\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all IP policy rules on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicyRuleList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_policy_rules/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an IP policy rule.\n",
        "tags": [
          "IPPolicyRules"
        ],
        "operationId": "IpPolicyRulesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an IP policy rule.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an IP policy rule by ID.\n",
        "tags": [
          "IPPolicyRules"
        ],
        "operationId": "IpPolicyRulesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an IP policy rule by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicyRule"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an IP policy rule by ID\n",
        "tags": [
          "IPPolicyRules"
        ],
        "operationId": "IpPolicyRulesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPPolicyRuleUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an IP policy rule by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPPolicyRule"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_restrictions": {
      "post": {
        "summary": "Create",
        "description": "Create a new IP restriction\n",
        "tags": [
          "IPRestrictions"
        ],
        "operationId": "IpRestrictionsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPRestrictionCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new IP restriction\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPRestriction"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all IP restrictions on this account\n",
        "tags": [
          "IPRestrictions"
        ],
        "operationId": "IpRestrictionsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all IP restrictions on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPRestrictionList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ip_restrictions/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an IP restriction\n",
        "tags": [
          "IPRestrictions"
        ],
        "operationId": "IpRestrictionsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an IP restriction\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an IP restriction\n",
        "tags": [
          "IPRestrictions"
        ],
        "operationId": "IpRestrictionsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an IP restriction\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPRestriction"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an IP restriction by ID\n",
        "tags": [
          "IPRestrictions"
        ],
        "operationId": "IpRestrictionsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IPRestrictionUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an IP restriction by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IPRestriction"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_addrs": {
      "post": {
        "summary": "Create",
        "description": "Create a new reserved address.\n",
        "tags": [
          "ReservedAddrs"
        ],
        "operationId": "ReservedAddrsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservedAddrCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new reserved address.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedAddr"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all reserved addresses on this account.\n",
        "tags": [
          "ReservedAddrs"
        ],
        "operationId": "ReservedAddrsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, addr, region, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all reserved addresses on this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedAddrList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_addrs/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a reserved address.\n",
        "tags": [
          "ReservedAddrs"
        ],
        "operationId": "ReservedAddrsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a reserved address.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of a reserved address.\n",
        "tags": [
          "ReservedAddrs"
        ],
        "operationId": "ReservedAddrsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of a reserved address.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedAddr"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update the attributes of a reserved address.\n",
        "tags": [
          "ReservedAddrs"
        ],
        "operationId": "ReservedAddrsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservedAddrUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update the attributes of a reserved address.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedAddr"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_domains": {
      "post": {
        "summary": "Create",
        "description": "Create a new reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservedDomainCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new reserved domain.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedDomain"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all reserved domains on this account.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, domain, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all reserved domains on this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedDomainList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_domains/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a reserved domain.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of a reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of a reserved domain.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedDomain"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update the attributes of a reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservedDomainUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update the attributes of a reserved domain.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedDomain"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_domains/{id}/certificate": {
      "delete": {
        "summary": "DeleteCertificate",
        "description": "Detach the certificate attached to a reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsDeleteCertificate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Detach the certificate attached to a reserved domain.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/reserved_domains/{id}/certificate_management_policy": {
      "delete": {
        "summary": "DeleteCertificateManagementPolicy",
        "description": "Detach the certificate management policy attached to a reserved domain.\n",
        "tags": [
          "ReservedDomains"
        ],
        "operationId": "ReservedDomainsDeleteCertificateManagementPolicy",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Detach the certificate management policy attached to a reserved domain.\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/vault_secrets": {
      "post": {
        "summary": "Create",
        "description": "Create a new Secret\n",
        "tags": [
          "Secrets"
        ],
        "operationId": "SecretsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Secret\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Secret"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Secrets owned by account\n",
        "tags": [
          "Secrets"
        ],
        "operationId": "SecretsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, name\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Secrets owned by account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecretList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/vault_secrets/{id}": {
      "patch": {
        "summary": "Update",
        "description": "Update an existing Secret by ID\n",
        "tags": [
          "Secrets"
        ],
        "operationId": "SecretsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "identifier for Secret\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an existing Secret by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Secret"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete a Secret\n",
        "tags": [
          "Secrets"
        ],
        "operationId": "SecretsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a Secret\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get a Secret by ID\n",
        "tags": [
          "Secrets"
        ],
        "operationId": "SecretsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get a Secret by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Secret"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/service_users": {
      "post": {
        "summary": "Create",
        "description": "Create a new service user\n",
        "tags": [
          "ServiceUsers"
        ],
        "operationId": "ServiceUsersCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceUserCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new service user\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all service users in this account.\n",
        "tags": [
          "ServiceUsers"
        ],
        "operationId": "ServiceUsersList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, name, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all service users in this account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUserList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/service_users/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a service user by ID\n",
        "tags": [
          "ServiceUsers"
        ],
        "operationId": "ServiceUsersDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a service user by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get the details of a Bot User by ID.\n",
        "tags": [
          "ServiceUsers"
        ],
        "operationId": "ServiceUsersGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the details of a Bot User by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of a service user by ID.\n",
        "tags": [
          "ServiceUsers"
        ],
        "operationId": "ServiceUsersUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceUserUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of a service user by ID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUser"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_certificate_authorities": {
      "post": {
        "summary": "Create",
        "description": "Create a new SSH Certificate Authority\n",
        "tags": [
          "SSHCertificateAuthorities"
        ],
        "operationId": "SshCertificateAuthoritiesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHCertificateAuthorityCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new SSH Certificate Authority\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all SSH Certificate Authorities on this account\n",
        "tags": [
          "SSHCertificateAuthorities"
        ],
        "operationId": "SshCertificateAuthoritiesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all SSH Certificate Authorities on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCertificateAuthorityList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_certificate_authorities/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an SSH Certificate Authority\n",
        "tags": [
          "SSHCertificateAuthorities"
        ],
        "operationId": "SshCertificateAuthoritiesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an SSH Certificate Authority\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an SSH Certificate Authority\n",
        "tags": [
          "SSHCertificateAuthorities"
        ],
        "operationId": "SshCertificateAuthoritiesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an SSH Certificate Authority\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update an SSH Certificate Authority\n",
        "tags": [
          "SSHCertificateAuthorities"
        ],
        "operationId": "SshCertificateAuthoritiesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHCertificateAuthorityUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an SSH Certificate Authority\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCertificateAuthority"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_credentials": {
      "post": {
        "summary": "Create",
        "description": "Create a new ssh_credential from an uploaded public SSH key. This ssh credential can be used to start new tunnels via ngrok's SSH gateway.\n",
        "tags": [
          "SSHCredentials"
        ],
        "operationId": "SshCredentialsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHCredentialCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new ssh_credential from an uploaded public SSH key. This ssh credential can be used to start new tunnels via ngrok's SSH gateway.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCredential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all ssh credentials on this account\n",
        "tags": [
          "SSHCredentials"
        ],
        "operationId": "SshCredentialsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, owner_id, acl, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all ssh credentials on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCredentialList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_credentials/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an ssh_credential by ID\n",
        "tags": [
          "SSHCredentials"
        ],
        "operationId": "SshCredentialsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an ssh_credential by ID\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an ssh_credential\n",
        "tags": [
          "SSHCredentials"
        ],
        "operationId": "SshCredentialsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an ssh_credential\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCredential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of an ssh_credential by ID\n",
        "tags": [
          "SSHCredentials"
        ],
        "operationId": "SshCredentialsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHCredentialUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of an ssh_credential by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHCredential"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_host_certificates": {
      "post": {
        "summary": "Create",
        "description": "Create a new SSH Host Certificate\n",
        "tags": [
          "SSHHostCertificates"
        ],
        "operationId": "SshHostCertificatesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHHostCertificateCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new SSH Host Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHHostCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all SSH Host Certificates issued on this account\n",
        "tags": [
          "SSHHostCertificates"
        ],
        "operationId": "SshHostCertificatesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all SSH Host Certificates issued on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHHostCertificateList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_host_certificates/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an SSH Host Certificate\n",
        "tags": [
          "SSHHostCertificates"
        ],
        "operationId": "SshHostCertificatesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an SSH Host Certificate\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an SSH Host Certificate\n",
        "tags": [
          "SSHHostCertificates"
        ],
        "operationId": "SshHostCertificatesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an SSH Host Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHHostCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update an SSH Host Certificate\n",
        "tags": [
          "SSHHostCertificates"
        ],
        "operationId": "SshHostCertificatesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHHostCertificateUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an SSH Host Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHHostCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_user_certificates": {
      "post": {
        "summary": "Create",
        "description": "Create a new SSH User Certificate\n",
        "tags": [
          "SSHUserCertificates"
        ],
        "operationId": "SshUserCertificatesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHUserCertificateCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new SSH User Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHUserCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all SSH User Certificates issued on this account\n",
        "tags": [
          "SSHUserCertificates"
        ],
        "operationId": "SshUserCertificatesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all SSH User Certificates issued on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHUserCertificateList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/ssh_user_certificates/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete an SSH User Certificate\n",
        "tags": [
          "SSHUserCertificates"
        ],
        "operationId": "SshUserCertificatesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete an SSH User Certificate\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about an SSH User Certificate\n",
        "tags": [
          "SSHUserCertificates"
        ],
        "operationId": "SshUserCertificatesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about an SSH User Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHUserCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update an SSH User Certificate\n",
        "tags": [
          "SSHUserCertificates"
        ],
        "operationId": "SshUserCertificatesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SSHUserCertificateUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an SSH User Certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SSHUserCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tls_certificates": {
      "post": {
        "summary": "Create",
        "description": "Upload a new TLS certificate\n",
        "tags": [
          "TLSCertificates"
        ],
        "operationId": "TlsCertificatesCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TLSCertificateCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Upload a new TLS certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all TLS certificates on this account\n",
        "tags": [
          "TLSCertificates"
        ],
        "operationId": "TlsCertificatesList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, description, metadata, subject_common_name, not_before, not_after, serial_number, created_at\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all TLS certificates on this account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSCertificateList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tls_certificates/{id}": {
      "delete": {
        "summary": "Delete",
        "description": "Delete a TLS certificate\n",
        "tags": [
          "TLSCertificates"
        ],
        "operationId": "TlsCertificatesDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a TLS certificate\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get detailed information about a TLS certificate\n",
        "tags": [
          "TLSCertificates"
        ],
        "operationId": "TlsCertificatesGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get detailed information about a TLS certificate\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "patch": {
        "summary": "Update",
        "description": "Update attributes of a TLS Certificate by ID\n",
        "tags": [
          "TLSCertificates"
        ],
        "operationId": "TlsCertificatesUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TLSCertificateUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update attributes of a TLS Certificate by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TLSCertificate"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnels": {
      "get": {
        "summary": "List",
        "description": "List all online tunnels currently running on the account.\n",
        "tags": [
          "Tunnels"
        ],
        "operationId": "TunnelsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all online tunnels currently running on the account.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TunnelList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/tunnels/{id}": {
      "get": {
        "summary": "Get",
        "description": "Get the status of a tunnel by ID\n",
        "tags": [
          "Tunnels"
        ],
        "operationId": "TunnelsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get the status of a tunnel by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tunnel"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/vaults": {
      "post": {
        "summary": "Create",
        "description": "Create a new Vault\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsCreate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VaultCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Create a new Vault\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Vault"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "List",
        "description": "List all Vaults owned by account\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsList",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "before_id",
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\nFilterable fields: id, created_at, description, metadata, name\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List all Vaults owned by account\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/vaults/{id}": {
      "patch": {
        "summary": "Update",
        "description": "Update an existing Vault by ID\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsUpdate",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "identifier for Vault\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VaultUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update an existing Vault by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Vault"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "delete": {
        "summary": "Delete",
        "description": "Delete a Vault\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsDelete",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete a Vault\n"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      },
      "get": {
        "summary": "Get",
        "description": "Get a Vault by ID\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsGet",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get a Vault by ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Vault"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/vaults/{id}/secrets": {
      "get": {
        "summary": "GetSecretsByVault",
        "description": "Get Secrets by Vault ID\n",
        "tags": [
          "Vaults"
        ],
        "operationId": "VaultsGetSecretsByVault",
        "parameters": [
          {
            "$ref": "#/components/parameters/ngrokVersion"
          },
          {
            "name": "id",
            "description": "a resource identifier\n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Secrets by Vault ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecretList"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "authentication": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "parameters": {
      "ngrokVersion": {
        "name": "ngrok-version",
        "in": "header",
        "required": true,
        "schema": {
          "type": "integer",
          "default": 2
        }
      }
    },
    "responses": {
      "Error": {
        "description": "An error. The body carries a machine-readable error_code and a human-readable msg; every code is documented at https://ngrok.com/docs/errors. A 429 with error code ERR_NGROK_226 means the account exceeded the documented request-rate limit.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "description": "The error body every api.ngrok.com 4xx and 5xx response returns. Every error condition has a globally unique, documented error code; see https://ngrok.com/docs/errors\n",
        "required": [
          "status_code",
          "msg"
        ],
        "properties": {
          "error_code": {
            "description": "Globally unique machine-readable error code, for example ERR_NGROK_226. Each code is documented at https://ngrok.com/docs/errors/reference. Omitted on transport-level errors such as a plain 404 for an unknown path.\n",
            "type": "string"
          },
          "status_code": {
            "description": "The HTTP status code of the response, duplicated in the body.\n",
            "type": "integer"
          },
          "msg": {
            "description": "Human-readable description of the error and how to resolve it.\n",
            "type": "string"
          },
          "details": {
            "description": "Additional error context. details.operation_id identifies the failed request when contacting support.\n",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "Empty": {
        "type": "object"
      },
      "Item": {
        "type": "object",
        "properties": {
          "id": {
            "description": "a resource identifier\n",
            "type": "string"
          }
        }
      },
      "Paging": {
        "type": "object",
        "properties": {
          "before_id": {
            "description": "n/a",
            "type": "string"
          },
          "limit": {
            "description": "n/a",
            "type": "string"
          }
        }
      },
      "FilteredPaging": {
        "type": "object",
        "properties": {
          "before_id": {
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "type": "string"
          },
          "limit": {
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "type": "string"
          },
          "filter": {
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\n",
            "type": "string"
          }
        }
      },
      "ItemPaging": {
        "type": "object",
        "properties": {
          "id": {
            "description": "a resource identifier\n",
            "type": "string"
          },
          "before_id": {
            "description": "n/a",
            "type": "string"
          },
          "limit": {
            "description": "n/a",
            "type": "string"
          }
        }
      },
      "Ref": {
        "type": "object",
        "properties": {
          "id": {
            "description": "a resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "a uri for locating a resource\n",
            "type": "string"
          }
        }
      },
      "AbuseReport": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the abuse report\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the abuse report API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp that the abuse report record was created in RFC 3339 format\n",
            "type": "string"
          },
          "urls": {
            "description": "a list of URLs containing suspected abusive content\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "description": "arbitrary user-defined data about this abuse report. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "status": {
            "description": "Indicates whether ngrok has processed the abuse report. one of `PENDING`, `PROCESSED`, or `PARTIALLY_PROCESSED`\n",
            "type": "string"
          },
          "hostnames": {
            "description": "an array of hostname statuses related to the report\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbuseReportHostname"
            }
          }
        }
      },
      "AbuseReportHostname": {
        "type": "object",
        "properties": {
          "hostname": {
            "description": "the hostname ngrok has parsed out of one of the reported URLs in this abuse report\n",
            "type": "string"
          },
          "status": {
            "description": "indicates what action ngrok has taken against the hostname. one of `PENDING`, `BANNED`, `UNBANNED`, or `IGNORE`\n",
            "type": "string"
          }
        }
      },
      "AbuseReportCreate": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "description": "a list of URLs containing suspected abusive content\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "description": "arbitrary user-defined data about this abuse report. Optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "AgentIngressCreate": {
        "type": "object",
        "required": [
          "domain"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of the use of this Agent Ingress. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Agent Ingress. optional, max 4096 bytes\n",
            "type": "string"
          },
          "domain": {
            "description": "the domain that you own to be used as the base domain name to generate regional agent ingress domains.\n",
            "type": "string"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled. Optional.\n",
            "$ref": "#/components/schemas/AgentIngressCertPolicy"
          }
        }
      },
      "AgentIngressUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the use of this Agent Ingress. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Agent Ingress. optional, max 4096 bytes\n",
            "type": "string"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled. Optional.\n",
            "$ref": "#/components/schemas/AgentIngressCertPolicy"
          }
        }
      },
      "AgentIngress": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique Agent Ingress resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI to the API resource of this Agent ingress\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the use of this Agent Ingress. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Agent Ingress. optional, max 4096 bytes\n",
            "type": "string"
          },
          "domain": {
            "description": "the domain that you own to be used as the base domain name to generate regional agent ingress domains.\n",
            "type": "string"
          },
          "ns_targets": {
            "description": "a list of target values to use as the values of NS records for the domain property these values will delegate control over the domain to ngrok\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "region_domains": {
            "description": "a list of regional agent ingress domains that are subdomains of the value of domain this value may increase over time as ngrok adds more regions\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "created_at": {
            "description": "timestamp when the Agent Ingress was created, RFC 3339 format\n",
            "type": "string"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled\n",
            "$ref": "#/components/schemas/AgentIngressCertPolicy"
          },
          "certificate_management_status": {
            "description": "status of the automatic certificate management for this domain, or null if automatic management is disabled\n",
            "$ref": "#/components/schemas/AgentIngressCertStatus"
          }
        }
      },
      "AgentIngressList": {
        "type": "object",
        "properties": {
          "ingresses": {
            "description": "the list of Agent Ingresses owned by this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentIngress"
            }
          },
          "uri": {
            "description": "URI of the Agent Ingress list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "AgentIngressCertPolicy": {
        "type": "object",
        "properties": {
          "authority": {
            "description": "certificate authority to request certificates from. The only supported value is letsencrypt.\n",
            "type": "string"
          },
          "private_key_type": {
            "description": "type of private key to use when requesting certificates. Defaults to rsa, can be either rsa or ecdsa.\n",
            "type": "string"
          }
        }
      },
      "AgentIngressCertStatus": {
        "type": "object",
        "properties": {
          "renews_at": {
            "description": "timestamp when the next renewal will be requested, RFC 3339 format\n",
            "type": "string"
          },
          "provisioning_job": {
            "description": "status of the certificate provisioning job, or null if the certificiate isn't being provisioned or renewed\n",
            "$ref": "#/components/schemas/AgentIngressCertJob"
          }
        }
      },
      "AgentIngressCertJob": {
        "type": "object",
        "properties": {
          "error_code": {
            "description": "if present, an error code indicating why provisioning is failing. It may be either a temporary condition (INTERNAL_ERROR), or a permanent one the user must correct (DNS_ERROR).\n",
            "type": "string"
          },
          "msg": {
            "description": "a message describing the current status or error\n",
            "type": "string"
          },
          "started_at": {
            "description": "timestamp when the provisioning job started, RFC 3339 format\n",
            "type": "string"
          },
          "retries_at": {
            "description": "timestamp when the provisioning job will be retried\n",
            "type": "string"
          }
        }
      },
      "AIGatewayProviderKeyCreate": {
        "type": "object",
        "required": [
          "ai_gateway_api_key_id",
          "provider_id",
          "value"
        ],
        "properties": {
          "ai_gateway_api_key_id": {
            "description": "unique identifier of the AI Gateway API Key this provider key is attached to\n",
            "type": "string"
          },
          "provider_id": {
            "description": "which AI provider this key is for, e.g. \"openai\", \"anthropic\"\n",
            "type": "string"
          },
          "value": {
            "description": "plaintext provider key value — write-only input\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this provider key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this provider key\n",
            "type": "string"
          }
        }
      },
      "AIGatewayProviderKeyUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this provider key\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this provider key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this provider key\n",
            "type": "string"
          }
        }
      },
      "AIGatewayProviderKey": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this provider key\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of this AI Gateway Provider Key API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "Timestamp when the provider key was created (RFC 3339 format)\n",
            "type": "string"
          },
          "updated_at": {
            "description": "Timestamp when the provider key was last updated (RFC 3339 format)\n",
            "type": "string"
          },
          "provider_id": {
            "description": "which AI provider this key is for, e.g. \"openai\", \"anthropic\"\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this provider key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this provider key\n",
            "type": "string"
          },
          "created_by": {
            "description": "reference to who created this provider key\n",
            "$ref": "#/components/schemas/Ref"
          },
          "last_updated_by": {
            "description": "reference to who last updated this provider key\n",
            "$ref": "#/components/schemas/Ref"
          },
          "ai_gateway_api_key": {
            "description": "reference to the AI Gateway API Key this provider key is attached to\n",
            "$ref": "#/components/schemas/Ref"
          },
          "display_name": {
            "description": "redacted display form of the key value, e.g. sk-abc***xyz\n",
            "type": "string"
          },
          "last_used": {
            "description": "Timestamp when the provider key was last used (RFC 3339 format)\n",
            "type": "string"
          }
        }
      },
      "AIGatewayProviderKeyPaging": {
        "type": "object",
        "properties": {
          "before_id": {
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "type": "string"
          },
          "limit": {
            "description": "Constrains the number of results in the dataset.\n",
            "type": "string"
          },
          "ai_gateway_api_key_id": {
            "description": "Filter by the AI Gateway API Key ID this provider key is attached to.\n",
            "type": "string"
          }
        }
      },
      "AIGatewayProviderKeyList": {
        "type": "object",
        "properties": {
          "ai_gateway_provider_keys": {
            "description": "the list of AI Gateway Provider Keys for this AI Gateway API Key\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AIGatewayProviderKey"
            }
          },
          "uri": {
            "description": "n/a",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page of results, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "AIGatewayAPIKeyCreate": {
        "type": "object",
        "required": [
          "endpoint_id"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of this API key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this API key\n",
            "type": "string"
          },
          "endpoint_id": {
            "description": "unique identifier of the AI Gateway endpoint this key is associated with\n",
            "type": "string"
          },
          "provider_keys": {
            "description": "optional list of provider keys to attach to this managed key at create time\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AIGatewayAPIKeyProviderKeyCreate"
            }
          }
        }
      },
      "AIGatewayAPIKeyUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this API key\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this API key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this API key\n",
            "type": "string"
          },
          "endpoint_id": {
            "description": "unique identifier of the AI Gateway endpoint to associate this key with\n",
            "type": "string"
          }
        }
      },
      "AIGatewayAPIKey": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this API key\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of this AI Gateway API Key API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "Timestamp when the API key was created (RFC 3339 format)\n",
            "type": "string"
          },
          "updated_at": {
            "description": "Timestamp when the API key was last updated (RFC 3339 format)\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this API key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this API key\n",
            "type": "string"
          },
          "created_by": {
            "description": "reference to who created this API key\n",
            "$ref": "#/components/schemas/Ref"
          },
          "last_updated_by": {
            "description": "reference to who last updated this API key\n",
            "$ref": "#/components/schemas/Ref"
          },
          "endpoint": {
            "description": "reference to the AI Gateway endpoint this key is associated with\n",
            "$ref": "#/components/schemas/Ref"
          },
          "token": {
            "description": "the API key token. Only provided when the key is first created.\n",
            "type": "string"
          },
          "display_name": {
            "description": "n/a",
            "type": "string"
          },
          "last_used": {
            "description": "n/a",
            "type": "string"
          },
          "provider_keys": {
            "description": "provider keys attached to this managed key\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AIGatewayProviderKey"
            }
          }
        }
      },
      "AIGatewayAPIKeyProviderKeyCreate": {
        "type": "object",
        "required": [
          "provider_id",
          "name",
          "value"
        ],
        "properties": {
          "provider_id": {
            "description": "which AI provider this key is for, ex: \"openai\" / \"anthropic\"\n",
            "type": "string"
          },
          "name": {
            "description": "user-friendly label for this key\n",
            "type": "string"
          },
          "value": {
            "description": "plaintext provider key value — write-only input\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this provider key\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined metadata for this provider key\n",
            "type": "string"
          }
        }
      },
      "AIGatewayAPIKeyList": {
        "type": "object",
        "properties": {
          "ai_gateway_api_keys": {
            "description": "the list of AI Gateway API Keys for this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AIGatewayAPIKey"
            }
          },
          "uri": {
            "description": "n/a",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page of results, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "APIKeyCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of what uses the API key to authenticate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined data of this API key. optional, max 4096 bytes\n",
            "type": "string"
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Bot. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Bot.\n",
            "type": "string"
          }
        }
      },
      "APIKeyUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what uses the API key to authenticate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined data of this API key. optional, max 4096 bytes\n",
            "type": "string"
          }
        }
      },
      "APIKey": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique API key resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI to the API resource of this API key\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what uses the API key to authenticate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined data of this API key. optional, max 4096 bytes\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the api key was created, RFC 3339 format\n",
            "type": "string"
          },
          "token": {
            "description": "the bearer token that can be placed into the Authorization header to authenticate request to the ngrok API. **This value is only available one time, on the API response from key creation. Otherwise it is null.**\n",
            "type": "string"
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Bot. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Bot.\n",
            "type": "string"
          }
        }
      },
      "APIKeyList": {
        "type": "object",
        "properties": {
          "keys": {
            "description": "the list of API keys for this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIKey"
            }
          },
          "uri": {
            "description": "URI of the API keys list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "ApplicationSession": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique application session resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the application session API resource\n",
            "type": "string"
          },
          "public_url": {
            "description": "URL of the hostport served by this endpoint\n",
            "type": "string"
          },
          "browser_session": {
            "description": "browser session details of the application session\n",
            "$ref": "#/components/schemas/BrowserSession"
          },
          "application_user": {
            "description": "application user this session is associated with\n",
            "$ref": "#/components/schemas/Ref"
          },
          "created_at": {
            "description": "timestamp when the user was created in RFC 3339 format\n",
            "type": "string"
          },
          "last_active": {
            "description": "timestamp when the user was last active in RFC 3339 format\n",
            "type": "string"
          },
          "expires_at": {
            "description": "timestamp when session expires in RFC 3339 format\n",
            "type": "string"
          },
          "endpoint": {
            "description": "ephemeral endpoint this session is associated with\n",
            "$ref": "#/components/schemas/Ref"
          },
          "edge": {
            "description": "edge this session is associated with, null if the endpoint is agent-initiated\n",
            "$ref": "#/components/schemas/Ref"
          },
          "route": {
            "description": "route this session is associated with, null if the endpoint is agent-initiated\n",
            "$ref": "#/components/schemas/Ref"
          }
        }
      },
      "ApplicationSessionList": {
        "type": "object",
        "properties": {
          "application_sessions": {
            "description": "list of all application sessions on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationSession"
            }
          },
          "uri": {
            "description": "URI of the application session list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "BrowserSession": {
        "type": "object",
        "properties": {
          "user_agent": {
            "description": "HTTP User-Agent data\n",
            "$ref": "#/components/schemas/UserAgent"
          },
          "ip_address": {
            "description": "IP address\n",
            "type": "string"
          },
          "location": {
            "description": "IP geolocation data\n",
            "$ref": "#/components/schemas/Location"
          }
        }
      },
      "UserAgent": {
        "type": "object",
        "properties": {
          "raw": {
            "description": "raw User-Agent request header\n",
            "type": "string"
          },
          "browser_name": {
            "description": "browser name (e.g. Chrome)\n",
            "type": "string"
          },
          "browser_version": {
            "description": "browser version (e.g. 102)\n",
            "type": "string"
          },
          "device_type": {
            "description": "type of device (e.g. Desktop)\n",
            "type": "string"
          },
          "os_name": {
            "description": "operating system name (e.g. MacOS)\n",
            "type": "string"
          },
          "os_version": {
            "description": "operating system version (e.g. 10.15.7)\n",
            "type": "string"
          }
        }
      },
      "Location": {
        "type": "object",
        "properties": {
          "country_code": {
            "description": "ISO country code\n",
            "type": "string"
          },
          "latitude": {
            "description": "geographical latitude\n",
            "type": "number"
          },
          "longitude": {
            "description": "geographical longitude\n",
            "type": "number"
          },
          "lat_long_radius_km": {
            "description": "accuracy radius of the geographical coordinates\n",
            "type": "integer"
          }
        }
      },
      "ApplicationUser": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique application user resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the application user API resource\n",
            "type": "string"
          },
          "identity_provider": {
            "description": "identity provider that the user authenticated with\n",
            "$ref": "#/components/schemas/IdentityProvider"
          },
          "provider_user_id": {
            "description": "unique user identifier\n",
            "type": "string"
          },
          "username": {
            "description": "user username\n",
            "type": "string"
          },
          "email": {
            "description": "user email\n",
            "type": "string"
          },
          "name": {
            "description": "user common name\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the user was created in RFC 3339 format\n",
            "type": "string"
          },
          "last_active": {
            "description": "timestamp when the user was last active in RFC 3339 format\n",
            "type": "string"
          },
          "last_login": {
            "description": "timestamp when the user last signed-in in RFC 3339 format\n",
            "type": "string"
          }
        }
      },
      "ApplicationUserList": {
        "type": "object",
        "properties": {
          "application_users": {
            "description": "list of all application users on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUser"
            }
          },
          "uri": {
            "description": "URI of the application user list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "IdentityProvider": {
        "type": "object",
        "properties": {
          "name": {
            "description": "name of the identity provider (e.g. Google)\n",
            "type": "string"
          },
          "url": {
            "description": "URL of the identity provider (e.g. https://accounts.google.com)\n",
            "type": "string"
          }
        }
      },
      "TunnelSession": {
        "type": "object",
        "properties": {
          "agent_version": {
            "description": "version of the ngrok agent that started this ngrok tunnel session\n",
            "type": "string"
          },
          "credential": {
            "description": "reference to the tunnel credential or ssh credential used by the ngrok agent to start this tunnel session\n",
            "$ref": "#/components/schemas/Ref"
          },
          "id": {
            "description": "unique tunnel session resource identifier\n",
            "type": "string"
          },
          "ip": {
            "description": "source ip address of the tunnel session\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined data specified in the metadata property in the ngrok configuration file. See the metadata configuration option\n",
            "type": "string"
          },
          "os": {
            "description": "operating system of the host the ngrok agent is running on\n",
            "type": "string"
          },
          "region": {
            "description": "the ngrok region identifier in which this tunnel session was started\n",
            "type": "string"
          },
          "started_at": {
            "description": "time when the tunnel session first connected to the ngrok servers\n",
            "type": "string"
          },
          "transport": {
            "description": "the transport protocol used to start the tunnel session. Either `ngrok/v2` or `ssh`\n",
            "type": "string"
          },
          "uri": {
            "description": "URI to the API resource of the tunnel session\n",
            "type": "string"
          }
        }
      },
      "TunnelSessionList": {
        "type": "object",
        "properties": {
          "tunnel_sessions": {
            "description": "list of all tunnel sessions on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TunnelSession"
            }
          },
          "uri": {
            "description": "URI to the API resource of the tunnel session list\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TunnelSessionsUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          }
        }
      },
      "FailoverBackend": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this Failover backend\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the FailoverBackend API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the backend was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends in order\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "FailoverBackendCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends in order\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "FailoverBackendUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends in order\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "FailoverBackendList": {
        "type": "object",
        "properties": {
          "backends": {
            "description": "the list of all Failover backends on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FailoverBackend"
            }
          },
          "uri": {
            "description": "URI of the Failover backends list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "HTTPResponseBackend": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "uri": {
            "description": "URI of the HTTPResponseBackend API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the backend was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "body": {
            "description": "body to return as fixed content\n",
            "type": "string"
          },
          "headers": {
            "description": "headers to return\n",
            "type": "object"
          },
          "status_code": {
            "description": "status code to return\n",
            "type": "integer"
          }
        }
      },
      "HTTPResponseBackendCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "body": {
            "description": "body to return as fixed content\n",
            "type": "string"
          },
          "headers": {
            "description": "headers to return\n",
            "type": "object"
          },
          "status_code": {
            "description": "status code to return\n",
            "type": "integer"
          }
        }
      },
      "HTTPResponseBackendUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "body": {
            "description": "body to return as fixed content\n",
            "type": "string"
          },
          "headers": {
            "description": "headers to return\n",
            "type": "object"
          },
          "status_code": {
            "description": "status code to return\n",
            "type": "integer"
          }
        }
      },
      "HTTPResponseBackendList": {
        "type": "object",
        "properties": {
          "backends": {
            "description": "n/a",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HTTPResponseBackend"
            }
          },
          "uri": {
            "description": "n/a",
            "type": "string"
          },
          "next_page_uri": {
            "description": "n/a",
            "type": "string"
          }
        }
      },
      "StaticBackend": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this static backend\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the StaticBackend API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the backend was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "address": {
            "description": "the address to forward to\n",
            "type": "string"
          },
          "tls": {
            "description": "tls configuration to use\n",
            "$ref": "#/components/schemas/StaticBackendTLS"
          }
        }
      },
      "StaticBackendTLS": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "if TLS is checked\n",
            "type": "boolean"
          }
        }
      },
      "StaticBackendCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "address": {
            "description": "the address to forward to\n",
            "type": "string"
          },
          "tls": {
            "description": "tls configuration to use\n",
            "$ref": "#/components/schemas/StaticBackendTLS"
          }
        }
      },
      "StaticBackendUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "address": {
            "description": "the address to forward to\n",
            "type": "string"
          },
          "tls": {
            "description": "tls configuration to use\n",
            "$ref": "#/components/schemas/StaticBackendTLS"
          }
        }
      },
      "StaticBackendList": {
        "type": "object",
        "properties": {
          "backends": {
            "description": "the list of all static backends on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StaticBackend"
            }
          },
          "uri": {
            "description": "URI of the static backends list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TunnelGroupBackend": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this TunnelGroup backend\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the TunnelGroupBackend API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the backend was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "labels": {
            "description": "labels to watch for tunnels on, e.g. app->foo, dc->bar\n",
            "type": "object"
          },
          "tunnels": {
            "description": "tunnels matching this backend\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          }
        }
      },
      "TunnelGroupBackendCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "labels": {
            "description": "labels to watch for tunnels on, e.g. app->foo, dc->bar\n",
            "type": "object"
          }
        }
      },
      "TunnelGroupBackendUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "labels": {
            "description": "labels to watch for tunnels on, e.g. app->foo, dc->bar\n",
            "type": "object"
          }
        }
      },
      "TunnelGroupBackendList": {
        "type": "object",
        "properties": {
          "backends": {
            "description": "the list of all TunnelGroup backends on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TunnelGroupBackend"
            }
          },
          "uri": {
            "description": "URI of the TunnelGroup backends list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "WeightedBackend": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this Weighted backend\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the WeightedBackend API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the backend was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends to their weights [0-10000]\n",
            "type": "object"
          }
        }
      },
      "WeightedBackendCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends to their weights [0-10000]\n",
            "type": "object"
          }
        }
      },
      "WeightedBackendUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this backend. Optional\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this backend. Optional\n",
            "type": "string"
          },
          "backends": {
            "description": "the ids of the child backends to their weights [0-10000]\n",
            "type": "object"
          }
        }
      },
      "WeightedBackendList": {
        "type": "object",
        "properties": {
          "backends": {
            "description": "the list of all Weighted backends on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeightedBackend"
            }
          },
          "uri": {
            "description": "URI of the Weighted backends list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "BotUser": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique API key resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI to the API resource of this service user\n",
            "type": "string"
          },
          "name": {
            "description": "human-readable name used to identify the service user\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service user is active\n",
            "type": "boolean"
          },
          "created_at": {
            "description": "timestamp when the api key was created, RFC 3339 format\n",
            "type": "string"
          }
        }
      },
      "BotUserCreate": {
        "type": "object",
        "properties": {
          "name": {
            "description": "human-readable name used to identify the service user\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service user is active\n",
            "type": "boolean"
          }
        }
      },
      "BotUserUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "name": {
            "description": "human-readable name used to identify the service user\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service user is active\n",
            "type": "boolean"
          }
        }
      },
      "BotUserList": {
        "type": "object",
        "properties": {
          "bot_users": {
            "description": "the list of all service users on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BotUser"
            }
          },
          "uri": {
            "description": "URI of the service users list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "CertificateAuthorityCreate": {
        "type": "object",
        "required": [
          "ca_pem"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of this Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "ca_pem": {
            "description": "raw PEM of the Certificate Authority\n",
            "type": "string"
          }
        }
      },
      "CertificateAuthorityUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "CertificateAuthority": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this Certificate Authority\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the Certificate Authority API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the Certificate Authority was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "ca_pem": {
            "description": "raw PEM of the Certificate Authority\n",
            "type": "string"
          },
          "subject_common_name": {
            "description": "subject common name of the Certificate Authority\n",
            "type": "string"
          },
          "not_before": {
            "description": "timestamp when this Certificate Authority becomes valid, RFC 3339 format\n",
            "type": "string"
          },
          "not_after": {
            "description": "timestamp when this Certificate Authority becomes invalid, RFC 3339 format\n",
            "type": "string"
          },
          "key_usages": {
            "description": "set of actions the private key of this Certificate Authority can be used for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "extended_key_usages": {
            "description": "extended set of actions the private key of this Certificate Authority can be used for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CertificateAuthorityList": {
        "type": "object",
        "properties": {
          "certificate_authorities": {
            "description": "the list of all certificate authorities on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CertificateAuthority"
            }
          },
          "uri": {
            "description": "URI of the certificates authorities list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "CredentialCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of who or what will use the credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Service User. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Service User. Accepts one of: User ID, User email, or SCIM User ID.\n",
            "type": "string"
          }
        }
      },
      "CredentialUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of who or what will use the credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Credential": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique tunnel credential resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the tunnel credential API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the tunnel credential was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of who or what will use the credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "token": {
            "description": "the credential's authtoken that can be used to authenticate an ngrok agent. **This value is only available one time, on the API response from credential creation, otherwise it is null.**\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Service User. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Service User. Accepts one of: User ID, User email, or SCIM User ID.\n",
            "type": "string"
          }
        }
      },
      "CredentialList": {
        "type": "object",
        "properties": {
          "credentials": {
            "description": "the list of all tunnel credentials on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Credential"
            }
          },
          "uri": {
            "description": "URI of the tunnel credential list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "EndpointWebhookValidation": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "provider": {
            "description": "a string indicating which webhook provider will be sending webhooks to this endpoint. Value must be one of the supported providers defined at https://ngrok.com/docs/cloud-edge/modules/webhook-verification\n",
            "type": "string"
          },
          "secret": {
            "description": "a string secret used to validate requests from the given provider. All providers except AWS SNS require a secret\n",
            "type": "string"
          }
        }
      },
      "EndpointCompression": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          }
        }
      },
      "EndpointMutualTLS": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "certificate_authorities": {
            "description": "PEM-encoded CA certificates that will be used to validate. Multiple CAs may be provided by concatenating them together.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          }
        }
      },
      "EndpointMutualTLSMutate": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "certificate_authority_ids": {
            "description": "list of certificate authorities that will be used to validate the TLS client certificate presented by the initiator of the TLS connection\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointTLSTermination": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "terminate_at": {
            "description": "`edge` if the ngrok edge should terminate TLS traffic, `upstream` if TLS traffic should be passed through to the upstream ngrok agent / application server for termination. if `upstream` is chosen, most other modules will be disallowed because they rely on the ngrok edge being able to access the underlying traffic.\n",
            "type": "string"
          },
          "min_version": {
            "description": "The minimum TLS version used for termination and advertised to the client during the TLS handshake. if unspecified, ngrok will choose an industry-safe default. This value must be null if `terminate_at` is set to `upstream`.\n",
            "type": "string"
          }
        }
      },
      "EndpointTLSTerminationAtEdge": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "min_version": {
            "description": "The minimum TLS version used for termination and advertised to the client during the TLS handshake. if unspecified, ngrok will choose an industry-safe default. This value must be null if `terminate_at` is set to `upstream`.\n",
            "type": "string"
          }
        }
      },
      "EndpointRequestHeaders": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "add": {
            "description": "a map of header key to header value that will be injected into the HTTP Request before being sent to the upstream application server\n",
            "type": "object"
          },
          "remove": {
            "description": "a list of header names that will be removed from the HTTP Request before being sent to the upstream application server\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointResponseHeaders": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "add": {
            "description": "a map of header key to header value that will be injected into the HTTP Response returned to the HTTP client\n",
            "type": "object"
          },
          "remove": {
            "description": "a list of header names that will be removed from the HTTP Response returned to the HTTP client\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointIPPolicy": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "ip_policies": {
            "description": "list of all IP policies that will be used to check if a source IP is allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          }
        }
      },
      "EndpointIPPolicyMutate": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "ip_policy_ids": {
            "description": "list of all IP policies that will be used to check if a source IP is allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointCircuitBreaker": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "tripped_duration": {
            "description": "Integer number of seconds after which the circuit is tripped to wait before re-evaluating upstream health\n",
            "type": "integer"
          },
          "rolling_window": {
            "description": "Integer number of seconds in the statistical rolling window that metrics are retained for.\n",
            "type": "integer"
          },
          "num_buckets": {
            "description": "Integer number of buckets into which metrics are retained. Max 128.\n",
            "type": "integer"
          },
          "volume_threshold": {
            "description": "Integer number of requests in a rolling window that will trip the circuit. Helpful if traffic volume is low.\n",
            "type": "integer"
          },
          "error_threshold_percentage": {
            "description": "Error threshold percentage should be between 0 - 1.0, not 0-100.0\n",
            "type": "number"
          }
        }
      },
      "EndpointOAuth": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "provider": {
            "description": "an object which defines the identity provider to use for authentication and configuration for who may access the endpoint\n",
            "$ref": "#/components/schemas/EndpointOAuthProvider"
          },
          "options_passthrough": {
            "description": "Do not enforce authentication on HTTP OPTIONS requests. necessary if you are supporting CORS.\n",
            "type": "boolean"
          },
          "cookie_prefix": {
            "description": "the prefix of the session cookie that ngrok sets on the http client to cache authentication. default is 'ngrok.'\n",
            "type": "string"
          },
          "inactivity_timeout": {
            "description": "Integer number of seconds of inactivity after which if the user has not accessed the endpoint, their session will time out and they will be forced to reauthenticate.\n",
            "type": "integer"
          },
          "maximum_duration": {
            "description": "Integer number of seconds of the maximum duration of an authenticated session. After this period is exceeded, a user must reauthenticate.\n",
            "type": "integer"
          },
          "auth_check_interval": {
            "description": "Integer number of seconds after which ngrok guarantees it will refresh user state from the identity provider and recheck whether the user is still authorized to access the endpoint. This is the preferred tunable to use to enforce a minimum amount of time after which a revoked user will no longer be able to access the resource.\n",
            "type": "integer"
          }
        }
      },
      "EndpointOAuthProvider": {
        "type": "object",
        "properties": {
          "github": {
            "description": "configuration for using github as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthGitHub"
          },
          "facebook": {
            "description": "configuration for using facebook as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthFacebook"
          },
          "microsoft": {
            "description": "configuration for using microsoft as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthMicrosoft"
          },
          "google": {
            "description": "configuration for using google as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthGoogle"
          },
          "linkedin": {
            "description": "configuration for using linkedin as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthLinkedIn"
          },
          "gitlab": {
            "description": "configuration for using gitlab as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthGitLab"
          },
          "twitch": {
            "description": "configuration for using twitch as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthTwitch"
          },
          "amazon": {
            "description": "configuration for using amazon as the identity provider\n",
            "$ref": "#/components/schemas/EndpointOAuthAmazon"
          }
        }
      },
      "EndpointOAuthGitHub": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "the OAuth app client ID. retrieve it from the identity provider's dashboard where you created your own OAuth app. optional. if unspecified, ngrok will use its own managed oauth application which has additional restrictions. see the OAuth module docs for more details. if present, client_secret must be present as well.\n",
            "type": "string"
          },
          "client_secret": {
            "description": "the OAuth app client secret. retrieve if from the identity provider's dashboard where you created your own OAuth app. optional, see all of the caveats in the docs for `client_id`.\n",
            "type": "string"
          },
          "scopes": {
            "description": "a list of provider-specific OAuth scopes with the permissions your OAuth app would like to ask for. these may not be set if you are using the ngrok-managed oauth app (i.e. you must pass both `client_id` and `client_secret` to set scopes)\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "a list of email addresses of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "a list of email domains of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "teams": {
            "description": "a list of github teams identifiers. users will be allowed access to the endpoint if they are a member of any of these teams. identifiers should be in the 'slug' format qualified with the org name, e.g. `org-name/team-name`\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "organizations": {
            "description": "a list of github org identifiers. users who are members of any of the listed organizations will be allowed access. identifiers should be the organization's 'slug'\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthFacebook": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "the OAuth app client ID. retrieve it from the identity provider's dashboard where you created your own OAuth app. optional. if unspecified, ngrok will use its own managed oauth application which has additional restrictions. see the OAuth module docs for more details. if present, client_secret must be present as well.\n",
            "type": "string"
          },
          "client_secret": {
            "description": "the OAuth app client secret. retrieve if from the identity provider's dashboard where you created your own OAuth app. optional, see all of the caveats in the docs for `client_id`.\n",
            "type": "string"
          },
          "scopes": {
            "description": "a list of provider-specific OAuth scopes with the permissions your OAuth app would like to ask for. these may not be set if you are using the ngrok-managed oauth app (i.e. you must pass both `client_id` and `client_secret` to set scopes)\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "a list of email addresses of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "a list of email domains of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthMicrosoft": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "the OAuth app client ID. retrieve it from the identity provider's dashboard where you created your own OAuth app. optional. if unspecified, ngrok will use its own managed oauth application which has additional restrictions. see the OAuth module docs for more details. if present, client_secret must be present as well.\n",
            "type": "string"
          },
          "client_secret": {
            "description": "the OAuth app client secret. retrieve if from the identity provider's dashboard where you created your own OAuth app. optional, see all of the caveats in the docs for `client_id`.\n",
            "type": "string"
          },
          "scopes": {
            "description": "a list of provider-specific OAuth scopes with the permissions your OAuth app would like to ask for. these may not be set if you are using the ngrok-managed oauth app (i.e. you must pass both `client_id` and `client_secret` to set scopes)\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "a list of email addresses of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "a list of email domains of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthGoogle": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "the OAuth app client ID. retrieve it from the identity provider's dashboard where you created your own OAuth app. optional. if unspecified, ngrok will use its own managed oauth application which has additional restrictions. see the OAuth module docs for more details. if present, client_secret must be present as well.\n",
            "type": "string"
          },
          "client_secret": {
            "description": "the OAuth app client secret. retrieve if from the identity provider's dashboard where you created your own OAuth app. optional, see all of the caveats in the docs for `client_id`.\n",
            "type": "string"
          },
          "scopes": {
            "description": "a list of provider-specific OAuth scopes with the permissions your OAuth app would like to ask for. these may not be set if you are using the ngrok-managed oauth app (i.e. you must pass both `client_id` and `client_secret` to set scopes)\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "a list of email addresses of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "a list of email domains of users authenticated by identity provider who are allowed access to the endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthLinkedIn": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "n/a",
            "type": "string"
          },
          "client_secret": {
            "description": "n/a",
            "type": "string"
          },
          "scopes": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthGitLab": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "n/a",
            "type": "string"
          },
          "client_secret": {
            "description": "n/a",
            "type": "string"
          },
          "scopes": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthTwitch": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "n/a",
            "type": "string"
          },
          "client_secret": {
            "description": "n/a",
            "type": "string"
          },
          "scopes": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointOAuthAmazon": {
        "type": "object",
        "properties": {
          "client_id": {
            "description": "n/a",
            "type": "string"
          },
          "client_secret": {
            "description": "n/a",
            "type": "string"
          },
          "scopes": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_addresses": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email_domains": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointSAML": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "options_passthrough": {
            "description": "Do not enforce authentication on HTTP OPTIONS requests. necessary if you are supporting CORS.\n",
            "type": "boolean"
          },
          "cookie_prefix": {
            "description": "the prefix of the session cookie that ngrok sets on the http client to cache authentication. default is 'ngrok.'\n",
            "type": "string"
          },
          "inactivity_timeout": {
            "description": "Integer number of seconds of inactivity after which if the user has not accessed the endpoint, their session will time out and they will be forced to reauthenticate.\n",
            "type": "integer"
          },
          "maximum_duration": {
            "description": "Integer number of seconds of the maximum duration of an authenticated session. After this period is exceeded, a user must reauthenticate.\n",
            "type": "integer"
          },
          "idp_metadata": {
            "description": "The full XML IdP EntityDescriptor. Your IdP may provide this to you as a a file to download or as a URL.\n",
            "type": "string"
          },
          "force_authn": {
            "description": "If true, indicates that whenever we redirect a user to the IdP for authentication that the IdP must prompt the user for authentication credentials even if the user already has a valid session with the IdP.\n",
            "type": "boolean"
          },
          "allow_idp_initiated": {
            "description": "If true, the IdP may initiate a login directly (e.g. the user does not need to visit the endpoint first and then be redirected). The IdP should set the `RelayState` parameter to the target URL of the resource they want the user to be redirected to after the SAML login assertion has been processed.\n",
            "type": "boolean"
          },
          "authorized_groups": {
            "description": "If present, only users who are a member of one of the listed groups may access the target endpoint.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entity_id": {
            "description": "The SP Entity's unique ID. This always takes the form of a URL. In ngrok's implementation, this URL is the same as the metadata URL. This will need to be specified to the IdP as configuration.\n",
            "type": "string"
          },
          "assertion_consumer_service_url": {
            "description": "The public URL of the SP's Assertion Consumer Service. This is where the IdP will redirect to during an authentication flow. This will need to be specified to the IdP as configuration.\n",
            "type": "string"
          },
          "single_logout_url": {
            "description": "The public URL of the SP's Single Logout Service. This is where the IdP will redirect to during a single logout flow. This will optionally need to be specified to the IdP as configuration.\n",
            "type": "string"
          },
          "request_signing_certificate_pem": {
            "description": "PEM-encoded x.509 certificate of the key pair that is used to sign all SAML requests that the ngrok SP makes to the IdP. Many IdPs do not support request signing verification, but we highly recommend specifying this in the IdP's configuration if it is supported.\n",
            "type": "string"
          },
          "metadata_url": {
            "description": "A public URL where the SP's metadata is hosted. If an IdP supports dynamic configuration, this is the URL it can use to retrieve the SP metadata.\n",
            "type": "string"
          },
          "nameid_format": {
            "description": "Defines the name identifier format the SP expects the IdP to use in its assertions to identify subjects. If unspecified, a default value of `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` will be used. A subset of the allowed values enumerated by the SAML specification are supported.\n",
            "type": "string"
          }
        }
      },
      "EndpointSAMLMutate": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "options_passthrough": {
            "description": "Do not enforce authentication on HTTP OPTIONS requests. necessary if you are supporting CORS.\n",
            "type": "boolean"
          },
          "cookie_prefix": {
            "description": "the prefix of the session cookie that ngrok sets on the http client to cache authentication. default is 'ngrok.'\n",
            "type": "string"
          },
          "inactivity_timeout": {
            "description": "Integer number of seconds of inactivity after which if the user has not accessed the endpoint, their session will time out and they will be forced to reauthenticate.\n",
            "type": "integer"
          },
          "maximum_duration": {
            "description": "Integer number of seconds of the maximum duration of an authenticated session. After this period is exceeded, a user must reauthenticate.\n",
            "type": "integer"
          },
          "idp_metadata": {
            "description": "The full XML IdP EntityDescriptor. Your IdP may provide this to you as a a file to download or as a URL.\n",
            "type": "string"
          },
          "force_authn": {
            "description": "If true, indicates that whenever we redirect a user to the IdP for authentication that the IdP must prompt the user for authentication credentials even if the user already has a valid session with the IdP.\n",
            "type": "boolean"
          },
          "allow_idp_initiated": {
            "description": "If true, the IdP may initiate a login directly (e.g. the user does not need to visit the endpoint first and then be redirected). The IdP should set the `RelayState` parameter to the target URL of the resource they want the user to be redirected to after the SAML login assertion has been processed.\n",
            "type": "boolean"
          },
          "authorized_groups": {
            "description": "If present, only users who are a member of one of the listed groups may access the target endpoint.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nameid_format": {
            "description": "Defines the name identifier format the SP expects the IdP to use in its assertions to identify subjects. If unspecified, a default value of `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` will be used. A subset of the allowed values enumerated by the SAML specification are supported.\n",
            "type": "string"
          }
        }
      },
      "EndpointOIDC": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "options_passthrough": {
            "description": "Do not enforce authentication on HTTP OPTIONS requests. necessary if you are supporting CORS.\n",
            "type": "boolean"
          },
          "cookie_prefix": {
            "description": "the prefix of the session cookie that ngrok sets on the http client to cache authentication. default is 'ngrok.'\n",
            "type": "string"
          },
          "inactivity_timeout": {
            "description": "Integer number of seconds of inactivity after which if the user has not accessed the endpoint, their session will time out and they will be forced to reauthenticate.\n",
            "type": "integer"
          },
          "maximum_duration": {
            "description": "Integer number of seconds of the maximum duration of an authenticated session. After this period is exceeded, a user must reauthenticate.\n",
            "type": "integer"
          },
          "issuer": {
            "description": "URL of the OIDC \"OpenID provider\". This is the base URL used for discovery.\n",
            "type": "string"
          },
          "client_id": {
            "description": "The OIDC app's client ID and OIDC audience.\n",
            "type": "string"
          },
          "client_secret": {
            "description": "The OIDC app's client secret.\n",
            "type": "string"
          },
          "scopes": {
            "description": "The set of scopes to request from the OIDC identity provider.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointBackend": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "backend": {
            "description": "backend to be used to back this endpoint\n",
            "$ref": "#/components/schemas/Ref"
          }
        }
      },
      "EndpointBackendMutate": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "backend_id": {
            "description": "backend to be used to back this endpoint\n",
            "type": "string"
          }
        }
      },
      "EndpointWebsocketTCPConverter": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          }
        }
      },
      "EndpointUserAgentFilter": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "n/a",
            "type": "boolean"
          },
          "allow": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "deny": {
            "description": "n/a",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EndpointTrafficPolicy": {
        "type": "object",
        "properties": {
          "enabled": {
            "description": "`true` if the module will be applied to traffic, `false` to disable. default `true` if unspecified\n",
            "type": "boolean"
          },
          "value": {
            "description": "the traffic policy that should be applied to the traffic on your endpoint.\n",
            "type": "string"
          }
        }
      },
      "EdgeRouteItem": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "id": {
            "description": "unique identifier of this edge route\n",
            "type": "string"
          }
        }
      },
      "HTTPSEdgeRouteCreate": {
        "type": "object",
        "required": [
          "match_type",
          "match"
        ],
        "properties": {
          "edge_id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "match_type": {
            "description": "Type of match to use for this route. Valid values are \"exact_path\" and \"path_prefix\".\n",
            "type": "string"
          },
          "match": {
            "description": "Route selector: \"/blog\" or \"example.com\" or \"example.com/blog\"\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "backend": {
            "description": "backend module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "ip restriction module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "circuit_breaker": {
            "description": "circuit breaker module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCircuitBreaker"
          },
          "compression": {
            "description": "compression module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCompression"
          },
          "request_headers": {
            "description": "request headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointRequestHeaders"
          },
          "response_headers": {
            "description": "response headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointResponseHeaders"
          },
          "webhook_verification": {
            "description": "webhook verification module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebhookValidation"
          },
          "oauth": {
            "description": "oauth module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOAuth"
          },
          "saml": {
            "description": "saml module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointSAMLMutate"
          },
          "oidc": {
            "description": "oidc module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOIDC"
          },
          "websocket_tcp_converter": {
            "description": "websocket to tcp adapter configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
          },
          "user_agent_filter": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointUserAgentFilter"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "HTTPSEdgeRouteUpdate": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "id": {
            "description": "unique identifier of this edge route\n",
            "type": "string"
          },
          "match_type": {
            "description": "Type of match to use for this route. Valid values are \"exact_path\" and \"path_prefix\".\n",
            "type": "string"
          },
          "match": {
            "description": "Route selector: \"/blog\" or \"example.com\" or \"example.com/blog\"\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "backend": {
            "description": "backend module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "ip restriction module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "circuit_breaker": {
            "description": "circuit breaker module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCircuitBreaker"
          },
          "compression": {
            "description": "compression module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCompression"
          },
          "request_headers": {
            "description": "request headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointRequestHeaders"
          },
          "response_headers": {
            "description": "response headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointResponseHeaders"
          },
          "webhook_verification": {
            "description": "webhook verification module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebhookValidation"
          },
          "oauth": {
            "description": "oauth module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOAuth"
          },
          "saml": {
            "description": "saml module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointSAMLMutate"
          },
          "oidc": {
            "description": "oidc module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOIDC"
          },
          "websocket_tcp_converter": {
            "description": "websocket to tcp adapter configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
          },
          "user_agent_filter": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointUserAgentFilter"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "HTTPSEdgeRoute": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "id": {
            "description": "unique identifier of this edge route\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the edge configuration was created, RFC 3339 format\n",
            "type": "string"
          },
          "match_type": {
            "description": "Type of match to use for this route. Valid values are \"exact_path\" and \"path_prefix\".\n",
            "type": "string"
          },
          "match": {
            "description": "Route selector: \"/blog\" or \"example.com\" or \"example.com/blog\"\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the edge API resource\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "backend": {
            "description": "backend module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointBackend"
          },
          "ip_restriction": {
            "description": "ip restriction module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointIPPolicy"
          },
          "circuit_breaker": {
            "description": "circuit breaker module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCircuitBreaker"
          },
          "compression": {
            "description": "compression module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointCompression"
          },
          "request_headers": {
            "description": "request headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointRequestHeaders"
          },
          "response_headers": {
            "description": "response headers module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointResponseHeaders"
          },
          "webhook_verification": {
            "description": "webhook verification module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebhookValidation"
          },
          "oauth": {
            "description": "oauth module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOAuth"
          },
          "saml": {
            "description": "saml module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointSAML"
          },
          "oidc": {
            "description": "oidc module configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointOIDC"
          },
          "websocket_tcp_converter": {
            "description": "websocket to tcp adapter configuration or `null`\n",
            "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
          },
          "user_agent_filter": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointUserAgentFilter"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "HTTPSEdgeList": {
        "type": "object",
        "properties": {
          "https_edges": {
            "description": "the list of all HTTPS Edges on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HTTPSEdge"
            }
          },
          "uri": {
            "description": "URI of the HTTPS Edge list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "HTTPSEdgeCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge; optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mutual_tls": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointMutualTLSMutate"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTerminationAtEdge"
          }
        }
      },
      "HTTPSEdgeUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge; optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mutual_tls": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointMutualTLSMutate"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTerminationAtEdge"
          }
        }
      },
      "HTTPSEdge": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge; optional, max 4096 bytes.\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the edge configuration was created, RFC 3339 format\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the edge API resource\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mutual_tls": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointMutualTLS"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTermination"
          },
          "routes": {
            "description": "routes\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HTTPSEdgeRoute"
            }
          }
        }
      },
      "EdgeBackendReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          }
        }
      },
      "EdgeIPRestrictionReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          }
        }
      },
      "EdgeMutualTLSReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointMutualTLSMutate"
          }
        }
      },
      "EdgeTLSTerminationReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTermination"
          }
        }
      },
      "EdgeTLSTerminationAtEdgeReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTerminationAtEdge"
          }
        }
      },
      "EdgeTrafficPolicyReplace": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "EdgeRouteBackendReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          }
        }
      },
      "EdgeRouteIPRestrictionReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          }
        }
      },
      "EdgeRouteRequestHeadersReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointRequestHeaders"
          }
        }
      },
      "EdgeRouteResponseHeadersReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointResponseHeaders"
          }
        }
      },
      "EdgeRouteCompressionReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointCompression"
          }
        }
      },
      "EdgeRouteCircuitBreakerReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointCircuitBreaker"
          }
        }
      },
      "EdgeRouteWebhookVerificationReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointWebhookValidation"
          }
        }
      },
      "EdgeRouteOAuthReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointOAuth"
          }
        }
      },
      "EdgeRouteSAMLReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointSAMLMutate"
          }
        }
      },
      "EdgeRouteOIDCReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointOIDC"
          }
        }
      },
      "EdgeRouteWebsocketTCPConverterReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointWebsocketTCPConverter"
          }
        }
      },
      "EdgeRouteUserAgentFilterReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointUserAgentFilter"
          }
        }
      },
      "EdgeRouteTrafficPolicyReplace": {
        "type": "object",
        "properties": {
          "edge_id": {
            "description": "n/a",
            "type": "string"
          },
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "module": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TCPEdgeList": {
        "type": "object",
        "properties": {
          "tcp_edges": {
            "description": "the list of all TCP Edges on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TCPEdge"
            }
          },
          "uri": {
            "description": "URI of the TCP Edge list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TCPEdgeCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TCPEdgeUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TCPEdge": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the edge was created, RFC 3339 format\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the edge API resource\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackend"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicy"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TLSEdgeList": {
        "type": "object",
        "properties": {
          "tls_edges": {
            "description": "the list of all TLS Edges on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TLSEdge"
            }
          },
          "uri": {
            "description": "URI of the TLS Edge list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TLSEdgeCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "mutual_tls": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointMutualTLSMutate"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTermination"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TLSEdgeUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackendMutate"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicyMutate"
          },
          "mutual_tls": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointMutualTLSMutate"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTermination"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "TLSEdge": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier of this edge\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this edge will be used for; optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this edge. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the edge configuration was created, RFC 3339 format\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the edge API resource\n",
            "type": "string"
          },
          "hostports": {
            "description": "hostports served by this edge\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "backend": {
            "description": "edge modules\n",
            "$ref": "#/components/schemas/EndpointBackend"
          },
          "ip_restriction": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointIPPolicy"
          },
          "mutual_tls": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointMutualTLS"
          },
          "tls_termination": {
            "description": "n/a",
            "$ref": "#/components/schemas/EndpointTLSTermination"
          },
          "traffic_policy": {
            "description": "the traffic policy associated with this edge or null\n",
            "$ref": "#/components/schemas/EndpointTrafficPolicy"
          }
        }
      },
      "Endpoint": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique endpoint resource identifier\n",
            "type": "string"
          },
          "region": {
            "description": "identifier of the region this endpoint belongs to\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the endpoint was created in RFC 3339 format\n",
            "type": "string"
          },
          "updated_at": {
            "description": "timestamp when the endpoint was updated in RFC 3339 format\n",
            "type": "string"
          },
          "public_url": {
            "description": "deprecated [replaced by URL]: URL of the hostport served by this endpoint\n",
            "type": "string"
          },
          "proto": {
            "description": "protocol served by this endpoint. one of `http`, `https`, `tcp`, or `tls`\n",
            "type": "string"
          },
          "scheme": {
            "description": "n/a",
            "type": "string"
          },
          "hostport": {
            "description": "hostport served by this endpoint (hostname:port) -> soon to be deprecated\n",
            "type": "string"
          },
          "host": {
            "description": "n/a",
            "type": "string"
          },
          "port": {
            "description": "n/a",
            "type": "integer"
          },
          "type": {
            "description": "whether the endpoint is `ephemeral` (served directly by an agent-initiated tunnel) or `edge` (served by an edge) or `cloud (represents a cloud endpoint)`\n",
            "type": "string"
          },
          "metadata": {
            "description": "user-supplied metadata of the associated tunnel or edge object\n",
            "type": "string"
          },
          "description": {
            "description": "user-supplied description of the associated tunnel\n",
            "type": "string"
          },
          "domain": {
            "description": "the domain reserved for this endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "tcp_addr": {
            "description": "the address reserved for this endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "tunnel": {
            "description": "the tunnel serving requests to this endpoint, if this is an ephemeral endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "edge": {
            "description": "the edge serving requests to this endpoint, if this is an edge endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "upstream_url": {
            "description": "the local address the tunnel forwards to\n",
            "type": "string"
          },
          "upstream_protocol": {
            "description": "the protocol the agent uses to forward with\n",
            "type": "string"
          },
          "url": {
            "description": "the url of the endpoint\n",
            "type": "string"
          },
          "principal": {
            "description": "The ID of the owner (bot or user) that owns this endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "traffic_policy": {
            "description": "The traffic policy attached to this endpoint\n",
            "type": "string"
          },
          "bindings": {
            "description": "the bindings associated with this endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tunnel_session": {
            "description": "The tunnel session of the agent for this endpoint\n",
            "$ref": "#/components/schemas/Ref"
          },
          "uri": {
            "description": "URI of the Cloud Endpoint API resource\n",
            "type": "string"
          },
          "name": {
            "description": "user supplied name for the endpoint\n",
            "type": "string"
          },
          "pooling_enabled": {
            "description": "whether the endpoint allows pooling\n",
            "type": "boolean"
          }
        }
      },
      "EndpointList": {
        "type": "object",
        "properties": {
          "endpoints": {
            "description": "the list of all active endpoints on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Endpoint"
            }
          },
          "uri": {
            "description": "URI of the endpoints list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "EndpointCreate": {
        "type": "object",
        "required": [
          "url",
          "type",
          "traffic_policy"
        ],
        "properties": {
          "url": {
            "description": "the url of the endpoint\n",
            "type": "string"
          },
          "type": {
            "description": "Type of endpoint. Only 'cloud' is currently supported (represents a cloud endpoint). Defaults to 'cloud' if not specified.\n",
            "type": "string"
          },
          "traffic_policy": {
            "description": "The traffic policy attached to this endpoint\n",
            "type": "string"
          },
          "description": {
            "description": "user-supplied description of the associated tunnel\n",
            "type": "string"
          },
          "metadata": {
            "description": "user-supplied metadata of the associated tunnel or edge object\n",
            "type": "string"
          },
          "bindings": {
            "description": "the bindings associated with this endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pooling_enabled": {
            "description": "n/a",
            "type": "boolean"
          }
        }
      },
      "EndpointListArgs": {
        "type": "object",
        "properties": {
          "before_id": {
            "description": "Expects a resource ID as its input. Returns earlier entries in the result set, sorted by ID.\n",
            "type": "string"
          },
          "limit": {
            "description": "Constrains the number of results in the dataset. See the [API Overview](https://ngrok.com/docs/api/index#pagination) for details.\n",
            "type": "string"
          },
          "filter": {
            "description": "A CEL expression to filter the list results. Supports logical and comparison operators to match on fields such as `id`, `metadata`, `created_at`, and more. See ngrok API Filtering for syntax and field details: https://ngrok.com/docs/api/api-filtering.\n",
            "type": "string"
          }
        }
      },
      "EndpointUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique endpoint resource identifier\n",
            "type": "string"
          },
          "url": {
            "description": "the url of the endpoint\n",
            "type": "string"
          },
          "traffic_policy": {
            "description": "The traffic policy attached to this endpoint\n",
            "type": "string"
          },
          "description": {
            "description": "user-supplied description of the associated tunnel\n",
            "type": "string"
          },
          "metadata": {
            "description": "user-supplied metadata of the associated tunnel or edge object\n",
            "type": "string"
          },
          "bindings": {
            "description": "the bindings associated with this endpoint\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pooling_enabled": {
            "description": "n/a",
            "type": "boolean"
          }
        }
      },
      "EventDestinationCreate": {
        "type": "object",
        "properties": {
          "metadata": {
            "description": "Arbitrary user-defined machine-readable data of this Event Destination. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "description": {
            "description": "Human-readable description of the Event Destination. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "format": {
            "description": "The output format you would like to serialize events into when sending to their target. Currently the only accepted value is `JSON`.\n",
            "type": "string"
          },
          "target": {
            "description": "An object that encapsulates where and how to send your events. An event destination must contain exactly one of the following objects, leaving the rest null: `kinesis`, `firehose`, `cloudwatch_logs`, or `s3`.\n",
            "$ref": "#/components/schemas/EventTarget"
          }
        }
      },
      "EventDestinationUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique identifier for this Event Destination.\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined machine-readable data of this Event Destination. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "description": {
            "description": "Human-readable description of the Event Destination. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "format": {
            "description": "The output format you would like to serialize events into when sending to their target. Currently the only accepted value is `JSON`.\n",
            "type": "string"
          },
          "target": {
            "description": "An object that encapsulates where and how to send your events. An event destination must contain exactly one of the following objects, leaving the rest null: `kinesis`, `firehose`, `cloudwatch_logs`, or `s3`.\n",
            "$ref": "#/components/schemas/EventTarget"
          }
        }
      },
      "EventDestination": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique identifier for this Event Destination.\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined machine-readable data of this Event Destination. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "created_at": {
            "description": "Timestamp when the Event Destination was created, RFC 3339 format.\n",
            "type": "string"
          },
          "description": {
            "description": "Human-readable description of the Event Destination. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "format": {
            "description": "The output format you would like to serialize events into when sending to their target. Currently the only accepted value is `JSON`.\n",
            "type": "string"
          },
          "target": {
            "description": "An object that encapsulates where and how to send your events. An event destination must contain exactly one of the following objects, leaving the rest null: `kinesis`, `firehose`, `cloudwatch_logs`, or `s3`.\n",
            "$ref": "#/components/schemas/EventTarget"
          },
          "uri": {
            "description": "URI of the Event Destination API resource.\n",
            "type": "string"
          }
        }
      },
      "EventDestinationList": {
        "type": "object",
        "properties": {
          "event_destinations": {
            "description": "The list of all Event Destinations on this account.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventDestination"
            }
          },
          "uri": {
            "description": "URI of the Event Destinations list API resource.\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page.\n",
            "type": "string"
          }
        }
      },
      "EventTarget": {
        "type": "object",
        "properties": {
          "firehose": {
            "description": "Configuration used to send events to Amazon Kinesis Data Firehose.\n",
            "$ref": "#/components/schemas/EventTargetFirehose"
          },
          "kinesis": {
            "description": "Configuration used to send events to Amazon Kinesis.\n",
            "$ref": "#/components/schemas/EventTargetKinesis"
          },
          "cloudwatch_logs": {
            "description": "Configuration used to send events to Amazon CloudWatch Logs.\n",
            "$ref": "#/components/schemas/EventTargetCloudwatchLogs"
          },
          "datadog": {
            "description": "Configuration used to send events to Datadog.\n",
            "$ref": "#/components/schemas/EventTargetDatadog"
          },
          "azure_logs_ingestion": {
            "description": "n/a",
            "$ref": "#/components/schemas/EventTargetAzureLogsIngestion"
          }
        }
      },
      "EventTargetFirehose": {
        "type": "object",
        "properties": {
          "auth": {
            "description": "Configuration for how to authenticate into your AWS account. Exactly one of `role` or `creds` should be configured.\n",
            "$ref": "#/components/schemas/AWSAuth"
          },
          "delivery_stream_arn": {
            "description": "An Amazon Resource Name specifying the Firehose delivery stream to deposit events into.\n",
            "type": "string"
          }
        }
      },
      "EventTargetKinesis": {
        "type": "object",
        "properties": {
          "auth": {
            "description": "Configuration for how to authenticate into your AWS account. Exactly one of `role` or `creds` should be configured.\n",
            "$ref": "#/components/schemas/AWSAuth"
          },
          "stream_arn": {
            "description": "An Amazon Resource Name specifying the Kinesis stream to deposit events into.\n",
            "type": "string"
          }
        }
      },
      "EventTargetCloudwatchLogs": {
        "type": "object",
        "properties": {
          "auth": {
            "description": "Configuration for how to authenticate into your AWS account. Exactly one of `role` or `creds` should be configured.\n",
            "$ref": "#/components/schemas/AWSAuth"
          },
          "log_group_arn": {
            "description": "An Amazon Resource Name specifying the CloudWatch Logs group to deposit events into.\n",
            "type": "string"
          }
        }
      },
      "EventTargetDatadog": {
        "type": "object",
        "properties": {
          "api_key": {
            "description": "Datadog API key to use.\n",
            "type": "string"
          },
          "ddtags": {
            "description": "Tags to send with the event.\n",
            "type": "string"
          },
          "service": {
            "description": "Service name to send with the event.\n",
            "type": "string"
          },
          "ddsite": {
            "description": "Datadog site to send event to.\n",
            "type": "string"
          }
        }
      },
      "EventTargetAzureLogsIngestion": {
        "type": "object",
        "required": [
          "tenant_id",
          "client_id",
          "client_secret",
          "logs_ingestion_uri",
          "data_collection_rule_id",
          "data_collection_stream_name"
        ],
        "properties": {
          "tenant_id": {
            "description": "Tenant ID for the Azure account\n",
            "type": "string"
          },
          "client_id": {
            "description": "Client ID for the application client\n",
            "type": "string"
          },
          "client_secret": {
            "description": "Client Secret for the application client\n",
            "type": "string"
          },
          "logs_ingestion_uri": {
            "description": "Data collection endpoint logs ingestion URI\n",
            "type": "string"
          },
          "data_collection_rule_id": {
            "description": "Data collection rule immutable ID\n",
            "type": "string"
          },
          "data_collection_stream_name": {
            "description": "Data collection stream name to use as destination, located inside the DCR\n",
            "type": "string"
          }
        }
      },
      "AWSAuth": {
        "type": "object",
        "properties": {
          "role": {
            "description": "A role for ngrok to assume on your behalf to deposit events into your AWS account.\n",
            "$ref": "#/components/schemas/AWSRole"
          },
          "creds": {
            "description": "Credentials to your AWS account if you prefer ngrok to sign in with long-term access keys.\n",
            "$ref": "#/components/schemas/AWSCredentials"
          }
        }
      },
      "AWSRole": {
        "type": "object",
        "required": [
          "role_arn"
        ],
        "properties": {
          "role_arn": {
            "description": "An ARN that specifies the role that ngrok should use to deliver to the configured target.\n",
            "type": "string"
          }
        }
      },
      "AWSCredentials": {
        "type": "object",
        "required": [
          "aws_access_key_id",
          "aws_secret_access_key"
        ],
        "properties": {
          "aws_access_key_id": {
            "description": "The ID portion of an AWS access key.\n",
            "type": "string"
          },
          "aws_secret_access_key": {
            "description": "The secret portion of an AWS access key.\n",
            "type": "string"
          }
        }
      },
      "EventSubscriptionCreate": {
        "type": "object",
        "properties": {
          "metadata": {
            "description": "Arbitrary customer supplied information intended to be machine readable. Optional, max 4096 chars.\n",
            "type": "string"
          },
          "description": {
            "description": "Arbitrary customer supplied information intended to be human readable. Optional, max 255 chars.\n",
            "type": "string"
          },
          "sources": {
            "description": "Sources containing the types for which this event subscription will trigger\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSourceReplace"
            }
          },
          "destination_ids": {
            "description": "A list of Event Destination IDs which should be used for this Event Subscription.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EventSubscriptionUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique identifier for this Event Subscription.\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary customer supplied information intended to be machine readable. Optional, max 4096 chars.\n",
            "type": "string"
          },
          "description": {
            "description": "Arbitrary customer supplied information intended to be human readable. Optional, max 255 chars.\n",
            "type": "string"
          },
          "sources": {
            "description": "Sources containing the types for which this event subscription will trigger\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSourceReplace"
            }
          },
          "destination_ids": {
            "description": "A list of Event Destination IDs which should be used for this Event Subscription.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EventSubscriptionList": {
        "type": "object",
        "properties": {
          "event_subscriptions": {
            "description": "The list of all Event Subscriptions on this account.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscription"
            }
          },
          "uri": {
            "description": "URI of the Event Subscriptions list API resource.\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of next page, or null if there is no next page.\n",
            "type": "string"
          }
        }
      },
      "EventSubscription": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique identifier for this Event Subscription.\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the Event Subscription API resource.\n",
            "type": "string"
          },
          "created_at": {
            "description": "When the Event Subscription was created (RFC 3339 format).\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary customer supplied information intended to be machine readable. Optional, max 4096 chars.\n",
            "type": "string"
          },
          "description": {
            "description": "Arbitrary customer supplied information intended to be human readable. Optional, max 255 chars.\n",
            "type": "string"
          },
          "sources": {
            "description": "Sources containing the types for which this event subscription will trigger\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSource"
            }
          },
          "destinations": {
            "description": "Destinations to which these events will be sent\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          }
        }
      },
      "EventSourceReplace": {
        "type": "object",
        "properties": {
          "type": {
            "description": "Type of event for which an event subscription will trigger\n",
            "type": "string"
          }
        }
      },
      "EventSource": {
        "type": "object",
        "properties": {
          "type": {
            "description": "Type of event for which an event subscription will trigger\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the Event Source API resource.\n",
            "type": "string"
          }
        }
      },
      "EventSourceList": {
        "type": "object",
        "properties": {
          "sources": {
            "description": "The list of all Event Sources for an Event Subscription\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSource"
            }
          },
          "uri": {
            "description": "URI of the next page, or null if there is no next page.\n",
            "type": "string"
          }
        }
      },
      "EventSourceCreate": {
        "type": "object",
        "properties": {
          "subscription_id": {
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "type": "string"
          },
          "type": {
            "description": "Type of event for which an event subscription will trigger\n",
            "type": "string"
          }
        }
      },
      "EventSourceUpdate": {
        "type": "object",
        "properties": {
          "subscription_id": {
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "type": "string"
          },
          "type": {
            "description": "Type of event for which an event subscription will trigger\n",
            "type": "string"
          }
        }
      },
      "EventSourceItem": {
        "type": "object",
        "description": "This is needed instead of Item because the parameters are different.\n",
        "properties": {
          "subscription_id": {
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "type": "string"
          },
          "type": {
            "description": "Type of event for which an event subscription will trigger\n",
            "type": "string"
          }
        }
      },
      "EventSourcePaging": {
        "type": "object",
        "description": "This is needed instead of Paging because the parameters are different. We also don't need the typical pagination params because pagination of this isn't necessary or supported.\n",
        "properties": {
          "subscription_id": {
            "description": "The unique identifier for the Event Subscription that this Event Source is attached to.\n",
            "type": "string"
          }
        }
      },
      "IPPolicyCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of the source IPs of this IP policy. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "IPPolicyUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the source IPs of this IP policy. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "IPPolicy": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this IP policy\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the IP Policy API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the IP policy was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the source IPs of this IP policy. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "IPPolicyList": {
        "type": "object",
        "properties": {
          "ip_policies": {
            "description": "the list of all IP policies on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IPPolicy"
            }
          },
          "uri": {
            "description": "URI of the IP policy list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "IPPolicyRuleCreate": {
        "type": "object",
        "required": [
          "cidr",
          "ip_policy_id",
          "action"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of the source IPs of this IP rule. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy rule. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "cidr": {
            "description": "an IP or IP range specified in CIDR notation. IPv4 and IPv6 are both supported.\n",
            "type": "string"
          },
          "ip_policy_id": {
            "description": "ID of the IP policy this IP policy rule will be attached to\n",
            "type": "string"
          },
          "action": {
            "description": "the action to apply to the policy rule, either `allow` or `deny`\n",
            "type": "string"
          }
        }
      },
      "IPPolicyRuleUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the source IPs of this IP rule. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy rule. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "cidr": {
            "description": "an IP or IP range specified in CIDR notation. IPv4 and IPv6 are both supported.\n",
            "type": "string"
          }
        }
      },
      "IPPolicyRule": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this IP policy rule\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the IP policy rule API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the IP policy rule was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of the source IPs of this IP rule. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP policy rule. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "cidr": {
            "description": "an IP or IP range specified in CIDR notation. IPv4 and IPv6 are both supported.\n",
            "type": "string"
          },
          "ip_policy": {
            "description": "object describing the IP policy this IP Policy Rule belongs to\n",
            "$ref": "#/components/schemas/Ref"
          },
          "action": {
            "description": "the action to apply to the policy rule, either `allow` or `deny`\n",
            "type": "string"
          }
        }
      },
      "IPPolicyRuleList": {
        "type": "object",
        "properties": {
          "ip_policy_rules": {
            "description": "the list of all IP policy rules on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IPPolicyRule"
            }
          },
          "uri": {
            "description": "URI of the IP policy rule list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "IPRestrictionCreate": {
        "type": "object",
        "required": [
          "type",
          "ip_policy_ids"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of this IP restriction. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP restriction. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "enforced": {
            "description": "true if the IP restriction will be enforced. if false, only warnings will be issued\n",
            "type": "boolean"
          },
          "type": {
            "description": "the type of IP restriction. this defines what traffic will be restricted with the attached policies. four values are currently supported: `dashboard`, `api`, `agent`, and `endpoints`\n",
            "type": "string"
          },
          "ip_policy_ids": {
            "description": "the set of IP policy identifiers that are used to enforce the restriction\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "IPRestrictionUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this IP restriction. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP restriction. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "enforced": {
            "description": "true if the IP restriction will be enforced. if false, only warnings will be issued\n",
            "type": "boolean"
          },
          "ip_policy_ids": {
            "description": "the set of IP policy identifiers that are used to enforce the restriction\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "IPRestriction": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this IP restriction\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the IP restriction API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the IP restriction was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this IP restriction. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this IP restriction. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "enforced": {
            "description": "true if the IP restriction will be enforced. if false, only warnings will be issued\n",
            "type": "boolean"
          },
          "type": {
            "description": "the type of IP restriction. this defines what traffic will be restricted with the attached policies. four values are currently supported: `dashboard`, `api`, `agent`, and `endpoints`\n",
            "type": "string"
          },
          "ip_policies": {
            "description": "the set of IP policies that are used to enforce the restriction\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          }
        }
      },
      "IPRestrictionList": {
        "type": "object",
        "properties": {
          "ip_restrictions": {
            "description": "the list of all IP restrictions on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IPRestriction"
            }
          },
          "uri": {
            "description": "URI of the IP restrictions list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "ReservedAddrCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of what this reserved address will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved address. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "region": {
            "description": "reserve the address in this geographic ngrok datacenter. Optional, default is us. (au, eu, ap, us, jp, in, sa)\n",
            "type": "string"
          }
        }
      },
      "ReservedAddrUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this reserved address will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved address. Optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "ReservedAddr": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique reserved address resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the reserved address API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the reserved address was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this reserved address will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved address. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "addr": {
            "description": "hostname:port of the reserved address that was assigned at creation time\n",
            "type": "string"
          },
          "region": {
            "description": "reserve the address in this geographic ngrok datacenter. Optional, default is us. (au, eu, ap, us, jp, in, sa)\n",
            "type": "string"
          }
        }
      },
      "ReservedAddrList": {
        "type": "object",
        "properties": {
          "reserved_addrs": {
            "description": "the list of all reserved addresses on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservedAddr"
            }
          },
          "uri": {
            "description": "URI of the reserved address list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "ReservedDomainCreate": {
        "type": "object",
        "properties": {
          "domain": {
            "description": "hostname of the reserved domain\n",
            "type": "string"
          },
          "region": {
            "description": "deprecated: With the launch of the ngrok Global Network domains traffic is now handled globally. This field applied only to endpoints. Note that agents may still connect to specific regions. Optional, null by default. (au, eu, ap, us, jp, in, sa)\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this reserved domain will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved domain. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "certificate_id": {
            "description": "ID of a user-uploaded TLS certificate to use for connections to targeting this domain. Optional, mutually exclusive with `certificate_management_policy`.\n",
            "type": "string"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled. Optional, mutually exclusive with `certificate_id`.\n",
            "$ref": "#/components/schemas/ReservedDomainCertPolicy"
          },
          "resolves_to": {
            "description": "Region and IP resolution targets configured for the Domain.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservedDomainResolvesToEntry"
            }
          }
        }
      },
      "ReservedDomainUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this reserved domain will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved domain. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "certificate_id": {
            "description": "ID of a user-uploaded TLS certificate to use for connections to targeting this domain. Optional, mutually exclusive with `certificate_management_policy`.\n",
            "type": "string"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled. Optional, mutually exclusive with `certificate_id`.\n",
            "$ref": "#/components/schemas/ReservedDomainCertPolicy"
          },
          "resolves_to": {
            "description": "Region and IP resolution targets configured for the Domain.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservedDomainResolvesToEntry"
            }
          }
        }
      },
      "ReservedDomain": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique reserved domain resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the reserved domain API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the reserved domain was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of what this reserved domain will be used for\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this reserved domain. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "domain": {
            "description": "hostname of the reserved domain\n",
            "type": "string"
          },
          "region": {
            "description": "deprecated: With the launch of the ngrok Global Network domains traffic is now handled globally. This field applied only to endpoints. Note that agents may still connect to specific regions. Optional, null by default. (au, eu, ap, us, jp, in, sa)\n",
            "type": "string"
          },
          "cname_target": {
            "description": "DNS CNAME target for a custom hostname, or null if the reserved domain is a subdomain of an ngrok owned domain (e.g. *.ngrok.app)\n",
            "type": "string"
          },
          "certificate": {
            "description": "object referencing the TLS certificate used for connections to this domain. This can be either a user-uploaded certificate, the most recently issued automatic one, or null otherwise.\n",
            "$ref": "#/components/schemas/Ref"
          },
          "certificate_management_policy": {
            "description": "configuration for automatic management of TLS certificates for this domain, or null if automatic management is disabled\n",
            "$ref": "#/components/schemas/ReservedDomainCertPolicy"
          },
          "certificate_management_status": {
            "description": "status of the automatic certificate management for this domain, or null if automatic management is disabled\n",
            "$ref": "#/components/schemas/ReservedDomainCertStatus"
          },
          "acme_challenge_cname_target": {
            "description": "DNS CNAME target for the host _acme-challenge.example.com, where example.com is your reserved domain name. This is required to issue certificates for wildcard, non-ngrok reserved domains. Must be null for non-wildcard domains and ngrok subdomains.\n",
            "type": "string"
          },
          "resolves_to": {
            "description": "Region and IP resolution targets configured for the Domain.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservedDomainResolvesToEntry"
            }
          }
        }
      },
      "ReservedDomainList": {
        "type": "object",
        "properties": {
          "reserved_domains": {
            "description": "the list of all reserved domains on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservedDomain"
            }
          },
          "uri": {
            "description": "URI of the reserved domain list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "ReservedDomainCertPolicy": {
        "type": "object",
        "properties": {
          "authority": {
            "description": "certificate authority to request certificates from. The only supported value is letsencrypt.\n",
            "type": "string"
          },
          "private_key_type": {
            "description": "type of private key to use when requesting certificates. Defaults to ecdsa, can be either rsa or ecdsa.\n",
            "type": "string"
          }
        }
      },
      "ReservedDomainCertStatus": {
        "type": "object",
        "properties": {
          "renews_at": {
            "description": "timestamp when the next renewal will be requested, RFC 3339 format\n",
            "type": "string"
          },
          "provisioning_job": {
            "description": "status of the certificate provisioning job, or null if the certificiate isn't being provisioned or renewed\n",
            "$ref": "#/components/schemas/ReservedDomainCertJob"
          }
        }
      },
      "ReservedDomainCertJob": {
        "type": "object",
        "properties": {
          "error_code": {
            "description": "if present, an error code indicating why provisioning is failing. It may be either a temporary condition (INTERNAL_ERROR), or a permanent one the user must correct (DNS_ERROR).\n",
            "type": "string"
          },
          "msg": {
            "description": "a message describing the current status or error\n",
            "type": "string"
          },
          "started_at": {
            "description": "timestamp when the provisioning job started, RFC 3339 format\n",
            "type": "string"
          },
          "retries_at": {
            "description": "timestamp when the provisioning job will be retried\n",
            "type": "string"
          }
        }
      },
      "ReservedDomainResolvesToEntry": {
        "type": "object",
        "properties": {
          "value": {
            "description": "accepts an ngrok point-of-presence shortcode, or \"global\"\n",
            "type": "string"
          }
        }
      },
      "SecretCreate": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Name of secret\n",
            "type": "string"
          },
          "value": {
            "description": "Value of secret\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Secret\n",
            "type": "string"
          },
          "description": {
            "description": "description of Secret\n",
            "type": "string"
          },
          "vault_id": {
            "description": "unique identifier of the referenced vault\n",
            "type": "string"
          },
          "vault_name": {
            "description": "name of the referenced vault\n",
            "type": "string"
          }
        }
      },
      "SecretUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "identifier for Secret\n",
            "type": "string"
          },
          "name": {
            "description": "Name of secret\n",
            "type": "string"
          },
          "value": {
            "description": "Value of secret\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Secret\n",
            "type": "string"
          },
          "description": {
            "description": "description of Secret\n",
            "type": "string"
          }
        }
      },
      "Secret": {
        "type": "object",
        "properties": {
          "id": {
            "description": "identifier for Secret\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of this Secret API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "Timestamp when the Secret was created (RFC 3339 format)\n",
            "type": "string"
          },
          "updated_at": {
            "description": "Timestamp when the Secret was last updated (RFC 3339 format)\n",
            "type": "string"
          },
          "name": {
            "description": "Name of secret\n",
            "type": "string"
          },
          "description": {
            "description": "description of Secret\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Secret\n",
            "type": "string"
          },
          "created_by": {
            "description": "Reference to who created this Secret\n",
            "$ref": "#/components/schemas/Ref"
          },
          "last_updated_by": {
            "description": "Reference to who created this Secret\n",
            "$ref": "#/components/schemas/Ref"
          },
          "vault": {
            "description": "Reference to the vault the secret is stored in\n",
            "$ref": "#/components/schemas/Ref"
          },
          "vault_name": {
            "description": "Name of the vault the secret is stored in\n",
            "type": "string"
          }
        }
      },
      "SecretList": {
        "type": "object",
        "properties": {
          "secrets": {
            "description": "The list of Secrets for this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Secret"
            }
          },
          "uri": {
            "description": "n/a",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page of results, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "ServiceUser": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique API key resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI to the API resource of this service user\n",
            "type": "string"
          },
          "name": {
            "description": "human-readable name used to identify the service\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service is active\n",
            "type": "boolean"
          },
          "created_at": {
            "description": "timestamp when the api key was created, RFC 3339 format\n",
            "type": "string"
          }
        }
      },
      "ServiceUserCreate": {
        "type": "object",
        "properties": {
          "name": {
            "description": "human-readable name used to identify the service\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service is active\n",
            "type": "boolean"
          }
        }
      },
      "ServiceUserUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "name": {
            "description": "human-readable name used to identify the service\n",
            "type": "string"
          },
          "active": {
            "description": "whether or not the service is active\n",
            "type": "boolean"
          }
        }
      },
      "ServiceUserList": {
        "type": "object",
        "properties": {
          "service_users": {
            "description": "the list of all service users on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceUser"
            }
          },
          "uri": {
            "description": "URI of the service users list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "SSHCertificateAuthorityCreate": {
        "type": "object",
        "properties": {
          "description": {
            "description": "human-readable description of this SSH Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "private_key_type": {
            "description": "the type of private key to generate. one of `rsa`, `ecdsa`, `ed25519`\n",
            "type": "string"
          },
          "elliptic_curve": {
            "description": "the type of elliptic curve to use when creating an ECDSA key\n",
            "type": "string"
          },
          "key_size": {
            "description": "the key size to use when creating an RSA key. one of `2048` or `4096`\n",
            "type": "integer"
          }
        }
      },
      "SSHCertificateAuthorityUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "SSHCertificateAuthority": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this SSH Certificate Authority\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the SSH Certificate Authority API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the SSH Certificate Authority API resource was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH Certificate Authority. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Certificate Authority. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "public_key": {
            "description": "raw public key for this SSH Certificate Authority\n",
            "type": "string"
          },
          "key_type": {
            "description": "the type of private key for this SSH Certificate Authority\n",
            "type": "string"
          }
        }
      },
      "SSHCertificateAuthorityList": {
        "type": "object",
        "properties": {
          "ssh_certificate_authorities": {
            "description": "the list of all certificate authorities on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SSHCertificateAuthority"
            }
          },
          "uri": {
            "description": "URI of the certificates authorities list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "SSHCredentialCreate": {
        "type": "object",
        "required": [
          "public_key"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of who or what will use the ssh credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this ssh credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "public_key": {
            "description": "the PEM-encoded public key of the SSH keypair that will be used to authenticate\n",
            "type": "string"
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Bot. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Bot.\n",
            "type": "string"
          }
        }
      },
      "SSHCredentialUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of who or what will use the ssh credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this ssh credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SSHCredential": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique ssh credential resource identifier\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the ssh credential API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the ssh credential was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of who or what will use the ssh credential to authenticate. Optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this ssh credential. Optional, max 4096 bytes.\n",
            "type": "string"
          },
          "public_key": {
            "description": "the PEM-encoded public key of the SSH keypair that will be used to authenticate\n",
            "type": "string"
          },
          "acl": {
            "description": "optional list of ACL rules. If unspecified, the credential will have no restrictions. The only allowed ACL rule at this time is the `bind` rule. The `bind` rule allows the caller to restrict what domains, addresses, and labels the token is allowed to bind. For example, to allow the token to open a tunnel on example.ngrok.io your ACL would include the rule `bind:example.ngrok.io`. Bind rules for domains may specify a leading wildcard to match multiple domains with a common suffix. For example, you may specify a rule of `bind:*.example.com` which will allow `x.example.com`, `y.example.com`, `*.example.com`, etc. Bind rules for labels may specify a wildcard key and/or value to match multiple labels. For example, you may specify a rule of `bind:*=example` which will allow `x=example`, `y=example`, etc. A rule of `'*'` is equivalent to no acl at all and will explicitly permit all actions.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "owner_id": {
            "description": "If supplied at credential creation, ownership will be assigned to the specified User or Bot. Only admins may specify an owner other than themselves. Defaults to the authenticated User or Bot.\n",
            "type": "string"
          }
        }
      },
      "SSHCredentialList": {
        "type": "object",
        "properties": {
          "ssh_credentials": {
            "description": "the list of all ssh credentials on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SSHCredential"
            }
          },
          "uri": {
            "description": "URI of the ssh credential list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "SSHHostCertificateCreate": {
        "type": "object",
        "required": [
          "ssh_certificate_authority_id",
          "public_key"
        ],
        "properties": {
          "ssh_certificate_authority_id": {
            "description": "the ssh certificate authority that is used to sign this ssh host certificate\n",
            "type": "string"
          },
          "public_key": {
            "description": "a public key in OpenSSH Authorized Keys format that this certificate signs\n",
            "type": "string"
          },
          "principals": {
            "description": "the list of principals included in the ssh host certificate. This is the list of hostnames and/or IP addresses that are authorized to serve SSH traffic with this certificate. Dangerously, if no principals are specified, this certificate is considered valid for all hosts.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "valid_after": {
            "description": "The time when the host certificate becomes valid, in RFC 3339 format. Defaults to the current time if unspecified.\n",
            "type": "string"
          },
          "valid_until": {
            "description": "The time when this host certificate becomes invalid, in RFC 3339 format. If unspecified, a default value of one year in the future will be used. The OpenSSH certificates RFC calls this `valid_before`.\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH Host Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Host Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "SSHHostCertificateUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH Host Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Host Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "SSHHostCertificate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this SSH Host Certificate\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the SSH Host Certificate API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the SSH Host Certificate API resource was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH Host Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH Host Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "public_key": {
            "description": "a public key in OpenSSH Authorized Keys format that this certificate signs\n",
            "type": "string"
          },
          "key_type": {
            "description": "the key type of the `public_key`, one of `rsa`, `ecdsa` or `ed25519`\n",
            "type": "string"
          },
          "ssh_certificate_authority_id": {
            "description": "the ssh certificate authority that is used to sign this ssh host certificate\n",
            "type": "string"
          },
          "principals": {
            "description": "the list of principals included in the ssh host certificate. This is the list of hostnames and/or IP addresses that are authorized to serve SSH traffic with this certificate. Dangerously, if no principals are specified, this certificate is considered valid for all hosts.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "valid_after": {
            "description": "the time when the ssh host certificate becomes valid, in RFC 3339 format.\n",
            "type": "string"
          },
          "valid_until": {
            "description": "the time after which the ssh host certificate becomes invalid, in RFC 3339 format. the OpenSSH certificates RFC calls this `valid_before`.\n",
            "type": "string"
          },
          "certificate": {
            "description": "the signed SSH certificate in OpenSSH Authorized Keys format. this value should be placed in a `-cert.pub` certificate file on disk that should be referenced in your `sshd_config` configuration file with a `HostCertificate` directive\n",
            "type": "string"
          }
        }
      },
      "SSHHostCertificateList": {
        "type": "object",
        "properties": {
          "ssh_host_certificates": {
            "description": "the list of all ssh host certificates on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SSHHostCertificate"
            }
          },
          "uri": {
            "description": "URI of the ssh host certificates list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "SSHUserCertificateCreate": {
        "type": "object",
        "required": [
          "ssh_certificate_authority_id",
          "public_key"
        ],
        "properties": {
          "ssh_certificate_authority_id": {
            "description": "the ssh certificate authority that is used to sign this ssh user certificate\n",
            "type": "string"
          },
          "public_key": {
            "description": "a public key in OpenSSH Authorized Keys format that this certificate signs\n",
            "type": "string"
          },
          "principals": {
            "description": "the list of principals included in the ssh user certificate. This is the list of usernames that the certificate holder may sign in as on a machine authorizing the signing certificate authority. Dangerously, if no principals are specified, this certificate may be used to log in as any user.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "critical_options": {
            "description": "A map of critical options included in the certificate. Only two critical options are currently defined by OpenSSH: `force-command` and `source-address`. See [the OpenSSH certificate protocol spec](https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys) for additional details.\n",
            "type": "object"
          },
          "extensions": {
            "description": "A map of extensions included in the certificate. Extensions are additional metadata that can be interpreted by the SSH server for any purpose. These can be used to permit or deny the ability to open a terminal, do port forwarding, x11 forwarding, and more. If unspecified, the certificate will include limited permissions with the following extension map: `{\"permit-pty\": \"\", \"permit-user-rc\": \"\"}` OpenSSH understands a number of predefined extensions. See [the OpenSSH certificate protocol spec](https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys) for additional details.\n",
            "type": "object"
          },
          "valid_after": {
            "description": "The time when the user certificate becomes valid, in RFC 3339 format. Defaults to the current time if unspecified.\n",
            "type": "string"
          },
          "valid_until": {
            "description": "The time when this host certificate becomes invalid, in RFC 3339 format. If unspecified, a default value of 24 hours will be used. The OpenSSH certificates RFC calls this `valid_before`.\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH User Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH User Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "SSHUserCertificateUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH User Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH User Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "SSHUserCertificate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this SSH User Certificate\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the SSH User Certificate API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the SSH User Certificate API resource was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this SSH User Certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this SSH User Certificate. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "public_key": {
            "description": "a public key in OpenSSH Authorized Keys format that this certificate signs\n",
            "type": "string"
          },
          "key_type": {
            "description": "the key type of the `public_key`, one of `rsa`, `ecdsa` or `ed25519`\n",
            "type": "string"
          },
          "ssh_certificate_authority_id": {
            "description": "the ssh certificate authority that is used to sign this ssh user certificate\n",
            "type": "string"
          },
          "principals": {
            "description": "the list of principals included in the ssh user certificate. This is the list of usernames that the certificate holder may sign in as on a machine authorizing the signing certificate authority. Dangerously, if no principals are specified, this certificate may be used to log in as any user.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "critical_options": {
            "description": "A map of critical options included in the certificate. Only two critical options are currently defined by OpenSSH: `force-command` and `source-address`. See [the OpenSSH certificate protocol spec](https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys) for additional details.\n",
            "type": "object"
          },
          "extensions": {
            "description": "A map of extensions included in the certificate. Extensions are additional metadata that can be interpreted by the SSH server for any purpose. These can be used to permit or deny the ability to open a terminal, do port forwarding, x11 forwarding, and more. If unspecified, the certificate will include limited permissions with the following extension map: `{\"permit-pty\": \"\", \"permit-user-rc\": \"\"}` OpenSSH understands a number of predefined extensions. See [the OpenSSH certificate protocol spec](https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys) for additional details.\n",
            "type": "object"
          },
          "valid_after": {
            "description": "the time when the ssh host certificate becomes valid, in RFC 3339 format.\n",
            "type": "string"
          },
          "valid_until": {
            "description": "the time after which the ssh host certificate becomes invalid, in RFC 3339 format. the OpenSSH certificates RFC calls this `valid_before`.\n",
            "type": "string"
          },
          "certificate": {
            "description": "the signed SSH certificate in OpenSSH Authorized Keys Format. this value should be placed in a `-cert.pub` certificate file on disk that should be referenced in your `sshd_config` configuration file with a `HostCertificate` directive\n",
            "type": "string"
          }
        }
      },
      "SSHUserCertificateList": {
        "type": "object",
        "properties": {
          "ssh_user_certificates": {
            "description": "the list of all ssh user certificates on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SSHUserCertificate"
            }
          },
          "uri": {
            "description": "URI of the ssh user certificates list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TLSCertificateCreate": {
        "type": "object",
        "required": [
          "certificate_pem",
          "private_key_pem"
        ],
        "properties": {
          "description": {
            "description": "human-readable description of this TLS certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this TLS certificate. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "certificate_pem": {
            "description": "chain of PEM-encoded certificates, leaf first. See [Certificate Bundles](https://ngrok.com/docs/cloud-edge/endpoints#certificate-chains).\n",
            "type": "string"
          },
          "private_key_pem": {
            "description": "private key for the TLS certificate, PEM-encoded. See [Private Keys](https://ngrok.com/docs/cloud-edge/endpoints#private-keys).\n",
            "type": "string"
          }
        }
      },
      "TLSCertificateUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "n/a",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this TLS certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this TLS certificate. optional, max 4096 bytes.\n",
            "type": "string"
          }
        }
      },
      "TLSCertificate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique identifier for this TLS certificate\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of the TLS certificate API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "timestamp when the TLS certificate was created, RFC 3339 format\n",
            "type": "string"
          },
          "description": {
            "description": "human-readable description of this TLS certificate. optional, max 255 bytes.\n",
            "type": "string"
          },
          "metadata": {
            "description": "arbitrary user-defined machine-readable data of this TLS certificate. optional, max 4096 bytes.\n",
            "type": "string"
          },
          "certificate_pem": {
            "description": "chain of PEM-encoded certificates, leaf first. See [Certificate Bundles](https://ngrok.com/docs/cloud-edge/endpoints#certificate-chains).\n",
            "type": "string"
          },
          "subject_common_name": {
            "description": "subject common name from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_alternative_names": {
            "description": "subject alternative names (SANs) from the leaf of this TLS certificate\n",
            "$ref": "#/components/schemas/TLSCertificateSANs"
          },
          "issued_at": {
            "description": "timestamp (in RFC 3339 format) when this TLS certificate was issued automatically, or null if this certificate was user-uploaded\n",
            "type": "string"
          },
          "not_before": {
            "description": "timestamp when this TLS certificate becomes valid, RFC 3339 format\n",
            "type": "string"
          },
          "not_after": {
            "description": "timestamp when this TLS certificate becomes invalid, RFC 3339 format\n",
            "type": "string"
          },
          "key_usages": {
            "description": "set of actions the private key of this TLS certificate can be used for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "extended_key_usages": {
            "description": "extended set of actions the private key of this TLS certificate can be used for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "private_key_type": {
            "description": "type of the private key of this TLS certificate. One of rsa, ecdsa, or ed25519.\n",
            "type": "string"
          },
          "issuer_common_name": {
            "description": "issuer common name from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "serial_number": {
            "description": "serial number of the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_organization": {
            "description": "subject organization from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_organizational_unit": {
            "description": "subject organizational unit from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_locality": {
            "description": "subject locality from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_province": {
            "description": "subject province from the leaf of this TLS certificate\n",
            "type": "string"
          },
          "subject_country": {
            "description": "subject country from the leaf of this TLS certificate\n",
            "type": "string"
          }
        }
      },
      "TLSCertificateList": {
        "type": "object",
        "properties": {
          "tls_certificates": {
            "description": "the list of all TLS certificates on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TLSCertificate"
            }
          },
          "uri": {
            "description": "URI of the TLS certificates list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "TLSCertificateSANs": {
        "type": "object",
        "properties": {
          "dns_names": {
            "description": "set of additional domains (including wildcards) this TLS certificate is valid for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ips": {
            "description": "set of IP addresses this TLS certificate is also valid for\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Tunnel": {
        "type": "object",
        "properties": {
          "id": {
            "description": "unique tunnel resource identifier\n",
            "type": "string"
          },
          "public_url": {
            "description": "URL of the ephemeral tunnel's public endpoint\n",
            "type": "string"
          },
          "started_at": {
            "description": "timestamp when the tunnel was initiated in RFC 3339 format\n",
            "type": "string"
          },
          "metadata": {
            "description": "user-supplied metadata for the tunnel defined in the ngrok configuration file. See the tunnel [metadata configuration option](https://ngrok.com/docs/secure-tunnels/ngrok-agent/reference/config#common-tunnel-configuration-properties) In API version 0, this value was instead pulled from the top-level [metadata configuration option](https://ngrok.com/docs/secure-tunnels/ngrok-agent/reference/config#metadata).\n",
            "type": "string"
          },
          "proto": {
            "description": "tunnel protocol for ephemeral tunnels. one of `http`, `https`, `tcp` or `tls`\n",
            "type": "string"
          },
          "region": {
            "description": "identifier of tune region where the tunnel is running\n",
            "type": "string"
          },
          "tunnel_session": {
            "description": "reference object pointing to the tunnel session on which this tunnel was started\n",
            "$ref": "#/components/schemas/Ref"
          },
          "endpoint": {
            "description": "the ephemeral endpoint this tunnel is associated with, if this is an agent-initiated tunnel\n",
            "$ref": "#/components/schemas/Ref"
          },
          "labels": {
            "description": "the labels the tunnel group backends will match against, if this is a backend tunnel\n",
            "type": "object"
          },
          "backends": {
            "description": "tunnel group backends served by this backend tunnel\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ref"
            }
          },
          "forwards_to": {
            "description": "upstream address the ngrok agent forwards traffic over this tunnel to. this may be expressed as a URL or a network address.\n",
            "type": "string"
          }
        }
      },
      "TunnelList": {
        "type": "object",
        "properties": {
          "tunnels": {
            "description": "the list of all online tunnels on this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tunnel"
            }
          },
          "uri": {
            "description": "URI of the tunnels list API resource\n",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page, or null if there is no next page\n",
            "type": "string"
          }
        }
      },
      "VaultCreate": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Name of vault\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Vault\n",
            "type": "string"
          },
          "description": {
            "description": "description of Vault\n",
            "type": "string"
          }
        }
      },
      "VaultUpdate": {
        "type": "object",
        "properties": {
          "id": {
            "description": "identifier for Vault\n",
            "type": "string"
          },
          "name": {
            "description": "Name of vault\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Vault\n",
            "type": "string"
          },
          "description": {
            "description": "description of Vault\n",
            "type": "string"
          }
        }
      },
      "Vault": {
        "type": "object",
        "properties": {
          "id": {
            "description": "identifier for Vault\n",
            "type": "string"
          },
          "uri": {
            "description": "URI of this Vault API resource\n",
            "type": "string"
          },
          "created_at": {
            "description": "Timestamp when the Vault was created (RFC 3339 format)\n",
            "type": "string"
          },
          "updated_at": {
            "description": "Timestamp when the Vault was last updated (RFC 3339 format)\n",
            "type": "string"
          },
          "name": {
            "description": "Name of vault\n",
            "type": "string"
          },
          "description": {
            "description": "description of Vault\n",
            "type": "string"
          },
          "metadata": {
            "description": "Arbitrary user-defined metadata for this Vault\n",
            "type": "string"
          },
          "created_by": {
            "description": "Reference to who created this Vault\n",
            "type": "string"
          },
          "last_updated_by": {
            "description": "Reference to who created this Vault\n",
            "type": "string"
          }
        }
      },
      "VaultList": {
        "type": "object",
        "properties": {
          "vaults": {
            "description": "The list of Vaults for this account\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Vault"
            }
          },
          "uri": {
            "description": "n/a",
            "type": "string"
          },
          "next_page_uri": {
            "description": "URI of the next page of results, or null if there is no next page\n",
            "type": "string"
          }
        }
      }
    }
  }
}
