{
  "openapi": "3.0.0",
  "info": {
    "title": "The Zuplo Developer API, powered by Zuplo",
    "termsOfService": "https://zuplo.com/legal/terms",
    "contact": {
      "name": "Zuplo",
      "url": "https://zuplo.com/",
      "email": "support@zuplo.com"
    },
    "description": "Welcome to ZAPI - the Zuplo API where you can manage API keys, tunnels and more. To get your API key for this service login to [portal.zuplo.com](https://portal.zuplo.com) and navigate to your project **Settings > Zuplo API Keys.** \n\n\n ![API Keys](https://cdn.zuplo.com/uploads/zuplo-api-keys.png)",
    "version": "0.0.0"
  },
  "tags": [
    {
      "name": "mTLS"
    },
    {
      "name": "Projects"
    },
    {
      "name": "Audit Logs"
    },
    {
      "name": "Build Logs"
    },
    {
      "name": "Runtime Logs"
    },
    {
      "name": "Metering V2 - Subscription Usage"
    },
    {
      "name": "Metering V2 - Consumers"
    },
    {
      "name": "Metering V2 - Consumer Usage"
    },
    {
      "name": "Metering V3 - Stripe Setup"
    },
    {
      "name": "Metering V3 - Plan Invites"
    },
    {
      "name": "Metering V3 - Monetization Configuration"
    },
    {
      "name": "Metering V3 - Payment Checkout"
    },
    {
      "name": "Metering V3 - Subscriptions"
    },
    {
      "name": "Metering V3 - Plans"
    },
    {
      "name": "Metering V3 - Customer Member Invites"
    },
    {
      "name": "Metering V3 - Customer Members"
    },
    {
      "name": "Metering V3 - API Keys"
    },
    {
      "name": "Metering V3 - Users"
    },
    {
      "name": "MCP Servers",
      "description": "MCP server endpoints for AI-powered tools"
    },
    {
      "name": "Managed Dedicated - Fleet Configurations",
      "description": "Manage proxy configurations for managed-dedicated fleets"
    },
    {
      "name": "Managed Dedicated - Fleets",
      "description": "List and retrieve fleet information"
    },
    {
      "name": "Metering V2 - Tenants",
      "description": "API Metering tenant management"
    },
    {
      "name": "Key Auth V2 - Api Keys",
      "description": "API key authentication management"
    },
    {
      "name": "Metering V2 - Plans",
      "description": "API Metering plan management"
    },
    {
      "name": "Metering V2 - Users",
      "description": "API Metering user managmenet"
    },
    {
      "name": "Metering V2 - Subscriptions",
      "description": "API Metering bucket management"
    },
    {
      "name": "Client Auth - OAuth",
      "description": "Client authentication endpoints"
    },
    {
      "name": "Metering - Quotas",
      "description": "API Metering quotas"
    },
    {
      "name": "Metering - Subscriptions",
      "description": "API Metering subscriptions"
    },
    {
      "name": "Metering - Plans",
      "description": "API Metering plan management"
    },
    {
      "name": "Metering - Buckets",
      "description": "API Metering bucket management"
    },
    {
      "name": "Client mTLS CA Certificates",
      "description": "Manage account-level client mTLS CA certificates"
    },
    {
      "name": "Custom Domains",
      "description": "Manage account custom domains and their deployment mappings"
    },
    {
      "name": "Environments",
      "description": "Zuplo environments"
    },
    {
      "name": "Analytics",
      "description": "Analytics and usage data"
    },
    {
      "name": "Tunnel Services",
      "description": "List of endpoints available to manage services for a given tunnel."
    },
    {
      "name": "Tunnels",
      "description": "List of endpoints available to perform operations on Tunnels."
    },
    {
      "name": "Deployments",
      "description": "Set of operations available to handle deployments. You can learn more about deployments [here](https://zuplo.com/docs/articles/environments)."
    },
    {
      "name": "Variables",
      "description": "Set of operations available to create and update environment variables. You can learn more about environment variables [here](https://zuplo.com/docs/articles/environment-variables)."
    },
    {
      "name": "API Keys - Keys",
      "description": "This is an object representing an API key. This section includes a list of endpoints to perform CRUD operations on an API key. You can learn more about API keys [here](https://zuplo.com/docs/articles/api-key-management#api-keys)."
    },
    {
      "name": "API Keys - Managers",
      "description": "A Manager is an object representing a group of managers in a given consumer. This section includes a group of endpoints available to perform operations on a manager. You can learn more about consumer managers [here](https://zuplo.com/docs/articles/api-key-management#consumers)."
    },
    {
      "name": "API Keys - Consumers",
      "description": "A Consumer is an object representing a group of API keys in a given bucket. This section includes a group of endpoints available to perform CRUD operations on a consumer. You can learn more about consumers [here](https://zuplo.com/docs/articles/api-key-management#consumers)."
    },
    {
      "name": "API Keys - Buckets",
      "description": "A Bucket is an object representing a group of API key consumers for a given account. This section includes a group of endpoints available to perform CRUD operations on a bucket. You can learn more about buckets [here](https://zuplo.com/docs/articles/api-key-buckets)."
    }
  ],
  "paths": {
    "/mcp": {
      "post": {
        "operationId": "developerApiMcpServer",
        "summary": "API MCP Server",
        "description": "Exposes the public Zuplo Developer API operations as MCP tools.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "tags": [
          "MCP Servers"
        ],
        "x-mcp-server": {
          "name": "zuplo-developer-api",
          "version": "1.0.0"
        }
      }
    },
    "/mcp/docs": {
      "post": {
        "operationId": "MCPService_post",
        "summary": "Docs MCP Server",
        "description": "The Zuplo Documentation MCP server",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "tags": [
          "MCP Servers"
        ],
        "x-mcp-server": {
          "name": "zuplo-docs",
          "version": "1.0.0",
          "tools": [
            {
              "name": "search-zuplo-docs",
              "description": "Use this tool to do a semantic search for reference content related to Zuplo. The results provided will be extracts from documentation sites and other public sources like GitHub. The content may not fully answer your question -- be circumspect when reviewing and interpreting these extracts before using them in your response."
            },
            {
              "name": "ask-question-about-zuplo",
              "description": "Use this tool to ask a question about Zuplo to an AI Support Agent that is knowledgeable about Zuplo. Use this tool to ask specific troubleshooting, feature capability, or conceptual questions. Be specific and provide the minimum context needed to address your question in full"
            }
          ]
        }
      }
    },
    "/openapi": {
      "get": {
        "operationId": "openApi",
        "summary": "OpenAPI Specification",
        "description": "Returns the OpenAPI V3 spec for Zuplo's Developer API",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded."
          }
        }
      }
    },
    "/v1/accounts": {
      "get": {
        "operationId": "AccountService_list",
        "summary": "Lists accounts",
        "description": "Lists the accounts for the user or api key.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Accounts.AccountsList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/audit-logs": {
      "get": {
        "operationId": "AuditLogsService_list",
        "summary": "Query audit logs",
        "description": "Retrieves audit logs with optional filtering and pagination.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.limit"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.offset"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.action"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.startDate"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.endDate"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.actor"
          },
          {
            "$ref": "#/components/parameters/Zuplo.AuditLogs.AuditLogsQuery.success"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.AuditLogs.AuditLogsResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Audit Logs"
        ]
      }
    },
    "/v1/accounts/{accountName}/client-mtls-ca-certificates": {
      "post": {
        "operationId": "ClientMtlsCaCertificatesService_create",
        "summary": "Create Client mTLS CA Certificate",
        "description": "Creates a client mTLS CA certificate for an account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "201": {
            "description": "The request has succeeded and a new resource has been created as a result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificate"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Client mTLS CA Certificates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateCreateBody"
              }
            }
          }
        }
      },
      "get": {
        "operationId": "ClientMtlsCaCertificatesService_list",
        "summary": "List Client mTLS CA Certificates",
        "description": "Lists client mTLS CA certificates for an account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateListResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Client mTLS CA Certificates"
        ]
      }
    },
    "/v1/accounts/{accountName}/client-mtls-ca-certificates/{id}": {
      "patch": {
        "operationId": "ClientMtlsCaCertificatesService_update",
        "summary": "Update Client mTLS CA Certificate",
        "description": "Updates a client mTLS CA certificate.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificate"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Client mTLS CA Certificates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateUpdateBody"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "ClientMtlsCaCertificatesService_delete",
        "summary": "Delete Client mTLS CA Certificate",
        "description": "Deletes a client mTLS CA certificate.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateParams"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Client mTLS CA Certificates"
        ]
      }
    },
    "/v1/accounts/{accountName}/custom-domains": {
      "get": {
        "operationId": "CustomDomainsService_list",
        "summary": "Get Custom Domains",
        "description": "Gets the account custom domains",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainsList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Custom Domains"
        ]
      },
      "post": {
        "operationId": "CustomDomainsService_create",
        "summary": "Create Custom Domain",
        "description": "Creates a custom domain",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainMutationResult"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Custom Domains"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainCreateBody"
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "CustomDomainsService_update",
        "summary": "Update a Custom Domain",
        "description": "Updates a custom domain",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainMutationResult"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Custom Domains"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainUpdateBody"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "CustomDomainsService_delete",
        "summary": "Delete a Custom Domain",
        "description": "Delete a custom domain",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.CustomDomains.CustomDomainDeleteQuery.hostname"
          },
          {
            "$ref": "#/components/parameters/Zuplo.CustomDomains.CustomDomainDeleteQuery.deploymentName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Custom Domains"
        ]
      }
    },
    "/v1/accounts/{accountName}/key-buckets": {
      "get": {
        "operationId": "ApiKeyBucketsService_list",
        "summary": "Lists buckets",
        "description": "Lists all buckets belonging to this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Buckets"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Buckets"
        ]
      },
      "post": {
        "operationId": "ApiKeyBucketsService_create",
        "summary": "Creates a bucket",
        "description": "Creates a new bucket for this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Bucket"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Buckets"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.BucketCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}": {
      "get": {
        "operationId": "ApiKeyBucketsService_read",
        "summary": "Gets a bucket",
        "description": "Returns the details for a bucket, including the token used to connect to the bucket.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Bucket"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Buckets"
        ]
      },
      "patch": {
        "operationId": "ApiKeyBucketsService_update",
        "summary": "Updates a bucket",
        "description": "Updates a bucket, and returns the updated value.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Bucket"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Buckets"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.BucketUpdateBody"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "ApiKeyBucketsService_delete",
        "summary": "Deletes a bucket",
        "description": "Deletes a bucket and any related resources",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Buckets"
        ]
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers": {
      "get": {
        "operationId": "ApiKeyConsumersService_list",
        "summary": "Lists consumers",
        "description": "Lists all consumers belonging to this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "The maximum number of entries to return. If the value exceeds the maximum, then the maximum value will be used. Default: 1000",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "explode": false
          },
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "description": "The offset of the first item returned in the collection. Default: 0",
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "explode": false
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeApiKeyParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeManagerInvitesParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeManagerParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.KeyFormatQueryParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ManagerEmailQueryParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Consumers"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ]
      },
      "post": {
        "operationId": "ApiKeyConsumersService_create",
        "summary": "Creates a consumer",
        "description": "Creates a new consumer for this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.WithApiKeyQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Consumer"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.ConsumerCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}": {
      "get": {
        "operationId": "ApiKeyConsumersService_read",
        "summary": "Gets a consumer",
        "description": "Gets a consumer given a bucket name and consumer name.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeApiKeyParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.KeyFormatQueryParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeManagerParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.IncludeManagerInvitesParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Consumer"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ]
      },
      "patch": {
        "operationId": "ApiKeyConsumersService_update",
        "summary": "Updates a consumer",
        "description": "Update the consumer with the matching consumer name.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Consumer"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.ConsumerUpdateBody"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "ApiKeyConsumersService_delete",
        "summary": "Deletes a consumer",
        "description": "Deletes a consumer and any related resources",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ]
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/keys": {
      "get": {
        "operationId": "ApiKeyKeysService_list",
        "summary": "Lists keys",
        "description": "Lists all keys for this consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "The maximum number of entries to return. If the value exceeds the maximum, then the maximum value will be used. Default: 1000",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "explode": false
          },
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "description": "The offset of the first item returned in the collection. Default: 0",
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "explode": false
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.KeyFormatQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKeys"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ]
      },
      "post": {
        "operationId": "ApiKeyKeysService_create",
        "summary": "Creates an API key",
        "description": "Creates a new API key for this consumer. New API keys will automatically have [API Key Leak Detection](https://zuplo.com/docs/articles/api-key-leak-detection) enabled.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKeyCreateOrUpdateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/keys/$bulk": {
      "post": {
        "operationId": "ApiKeyKeysService_bulkCreate",
        "summary": "Creates multiple API keys",
        "description": "Creates multiple new API keys for this consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKeys"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiKeyBulkCreateOrUpdateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/keys/{keyId}": {
      "get": {
        "operationId": "ApiKeyKeysService_get",
        "summary": "Gets an API key",
        "description": "Retrieves an API key for this consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ApiKeyParams.keyId"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.KeyFormatQueryParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ]
      },
      "patch": {
        "operationId": "ApiKeyKeysService_update",
        "summary": "Updates an API key",
        "description": "Updates an API key for this consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ApiKeyParams.keyId"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKeyCreateOrUpdateBody"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "ApiKeyKeysService_delete",
        "summary": "Deletes an API key",
        "description": "Deletes an API key for this consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ApiKeyParams.keyId"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Keys"
        ]
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/managers": {
      "get": {
        "operationId": "ApiKeyConsumerManagers_list",
        "summary": "Lists managers",
        "description": "Lists all managers belonging to a consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "The maximum number of entries to return. If the value exceeds the maximum, then the maximum value will be used. Default: 1000",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "explode": false
          },
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "description": "The offset of the first item returned in the collection. Default: 0",
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Managers"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Managers"
        ]
      },
      "post": {
        "operationId": "ApiKeyConsumerManagers_create",
        "summary": "Creates a manager",
        "description": "Creates a new manager for a consumer.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Manager"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Managers"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.ApiKeys.ManagerCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/managers/{managerId}": {
      "delete": {
        "operationId": "ApiKeyConsumerManagers_delete",
        "summary": "Deletes a manager",
        "description": "Deletes a manager record",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ManagerParams.managerId"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Managers"
        ]
      }
    },
    "/v1/accounts/{accountName}/key-buckets/{bucketName}/consumers/{consumerName}/roll-key": {
      "post": {
        "operationId": "ApiKeyConsumersService_rollKey",
        "summary": "Roll consumer keys",
        "description": "Set expiration for keys with no expiration date and creates a new key.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.BucketParams.bucketName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.ConsumerParams.consumerName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.ApiKeys.TagQueryParam"
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "API Keys - Consumers"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Common.ExpiresOnField"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/projects/{projectName}/branches/{branchName}/variables": {
      "post": {
        "operationId": "VariablesService_create",
        "summary": "Creates a variable",
        "description": "Creates a new environment variable in a branch for a given project.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountProjectParams.projectName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.BranchParams"
          }
        ],
        "responses": {
          "201": {
            "description": "The request has succeeded and a new resource has been created as a result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Variables.Variable"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Variables"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Variables.VariableCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/projects/{projectName}/branches/{branchName}/variables/{variableName}": {
      "patch": {
        "operationId": "VariablesService_update",
        "summary": "Updates a variable",
        "description": "Update the value of a variable in a branch for a given project.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountProjectParams.projectName"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.BranchParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.VariableParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Variables.Variable"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Variables"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Variables.VariableUpdateBody"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/projects/{projectName}/deployment-status/{statusId}": {
      "get": {
        "operationId": "V1_deploymentStatus",
        "summary": "Gets a deployment status",
        "description": "Gets the deployment status of your upload. Use the UUID of the uploaded sources as the `statusId`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountProjectParams.projectName"
          },
          {
            "name": "statusId",
            "in": "path",
            "required": true,
            "description": "The UUID of the uploaded sources.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.DeploymentStatus.DeploymentStatus"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/accounts/{accountName}/projects/{projectName}/deployments": {
      "get": {
        "operationId": "DeploymentsService_list",
        "summary": "Lists deployments",
        "description": "Lists the deployments for the specified account and project.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountProjectParams.projectName"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Deployments.DeploymentsList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/accounts/{accountName}/tunnels": {
      "get": {
        "operationId": "TunnelService_list",
        "summary": "Lists tunnels",
        "description": "Lists all tunnels belonging to this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunnelList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ]
      },
      "post": {
        "operationId": "TunnelService_create",
        "summary": "Creates a tunnel",
        "description": "Creates a new tunnel for this account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          }
        ],
        "responses": {
          "201": {
            "description": "The request has succeeded and a new resource has been created as a result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.Tunnel"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Tunnels.Tunnel"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/tunnels/{tunnelId}": {
      "get": {
        "operationId": "TunnelService_read",
        "summary": "Gets a tunnel",
        "description": "Returns the details for a tunnel, including the token used to connect to the tunnel.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.Tunnel"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ]
      },
      "delete": {
        "operationId": "TunnelService_delete",
        "summary": "Deletes a tunnel",
        "description": "Deletes a tunnel and any services that it has.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunnelTeardownOperation"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ]
      }
    },
    "/v1/accounts/{accountName}/tunnels/{tunnelId}/$rotate-token": {
      "post": {
        "operationId": "TunnelService_update",
        "summary": "Rotates the token",
        "description": "Rotates the token used to connect to the tunnel.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.Tunnel"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ]
      }
    },
    "/v1/accounts/{accountName}/tunnels/{tunnelId}/provisioning-operations/{operationId}": {
      "get": {
        "operationId": "TunneledServicesService_getProvisioningStatus",
        "summary": "Gets a provisioning status",
        "description": "This endpoint returns the status of the services that the tunnel is currently configured for. Provisioning the services is an asynchronous process so this endpoint allows you to poll the status.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunneledServiceProvisioningStatusParams.operationId"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunneledServicesProvisioningOperation"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnel Services"
        ]
      }
    },
    "/v1/accounts/{accountName}/tunnels/{tunnelId}/services-configuration": {
      "get": {
        "operationId": "TunneledServicesService_getServiceConfiguration",
        "summary": "Gets a service configuration",
        "description": "This endpoint returns a snapshot of the services that the tunnel is currently configured for.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunneledServicesConfiguration"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnel Services"
        ]
      },
      "put": {
        "operationId": "TunneledServicesService_putServiceConfiguration",
        "summary": "Configures tunnel services",
        "description": "This endpoint reads the request body and creates/updates/delete the services that the tunnel connects to.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunneledServicesProvisioningOperation"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnel Services"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Tunnels.TunneledServicesConfiguration"
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{accountName}/tunnels/{tunnelId}/teardown-operations/{operationId}": {
      "get": {
        "operationId": "TunnelService_getProvisioningStatus",
        "summary": "Gets a teardown status",
        "description": "This endpoint returns the status of the deletion of the tunnel. Tearing down the tunnel is an asynchronous process so this endpoint allows you to poll the status.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.AccountParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelIdParam"
          },
          {
            "$ref": "#/components/parameters/Zuplo.Tunnels.TunnelTeardownStatusParams.operationId"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Tunnels.TunnelTeardownOperation"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Tunnels"
        ]
      }
    },
    "/v1/deployments/sources": {
      "post": {
        "operationId": "DeployService_sources",
        "summary": "Upload deployment source",
        "description": "Creates a URL for uploading sources.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Sources.Source"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Deploys.SourceCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/deployments/{deploymentName}": {
      "get": {
        "operationId": "DeploymentsService_read",
        "summary": "Get a deployment",
        "description": "Gets the specified deployment.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Deployments.Deployment"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ]
      },
      "delete": {
        "operationId": "DeploymentsService_delete",
        "summary": "Deletes a deployment",
        "description": "Deletes the specified deployment.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded."
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/build-logs/{buildId}": {
      "get": {
        "operationId": "BuildLogsService_get",
        "summary": "Get build logs",
        "description": "Retrieves the build logs for a deployment build, grouped by stage (API and Dev Portal) and by build step. Optionally filterable by `stage` and `step`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          },
          {
            "name": "buildId",
            "in": "path",
            "required": true,
            "description": "The unique identifier of the build (UUID).",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Zuplo.BuildLogs.BuildLogsQuery.stage"
          },
          {
            "$ref": "#/components/parameters/Zuplo.BuildLogs.BuildLogsQuery.step"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogsResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Build Logs"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/deploy": {
      "post": {
        "operationId": "DeployService_redeploy",
        "summary": "Re-deploy a deployment",
        "description": "Re-deploys the specified deployment so that it can pick up new environment variables or other configuration changes.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Deploys.DeploymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/logs/requests": {
      "get": {
        "operationId": "RuntimeLogsService_listRequests",
        "summary": "List request logs",
        "description": "Lists request-log summaries for a deployment within the given time window, ordered most recent first. Supports cursor pagination and optional filtering by HTTP method, status class, route path, log severity, and free-text search.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.startTime"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.endTime"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.cursor"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.limit"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.httpMethod"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.httpStatus"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.routePath"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.search"
          },
          {
            "$ref": "#/components/parameters/Zuplo.RuntimeLogs.RequestLogsListQuery.severity"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogsListResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Runtime Logs"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/logs/requests/{requestId}": {
      "get": {
        "operationId": "RuntimeLogsService_getRequest",
        "summary": "Get request log detail",
        "description": "Retrieves the full request detail and all log entries for a single request on a deployment.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.DeployParams"
          },
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "description": "The unique identifier of the request (correlation ID stamped by the gateway).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogDetailResponse"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "404": {
            "description": "The server cannot find the requested resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.NotFoundProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Runtime Logs"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/recent-calls": {
      "get": {
        "operationId": "V1_recentCalls",
        "summary": "Get recent requests for a given deployment in the last 24 hours",
        "parameters": [
          {
            "name": "deploymentName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of recent calls to return. Defaults to 20 when omitted.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "explode": false
          },
          {
            "name": "consumers",
            "in": "query",
            "required": true,
            "description": "List of consumers to fetch analytics for.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.RecentCallsData"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Analytics"
        ]
      }
    },
    "/v1/deployments/{deploymentName}/stats-by-status-code": {
      "get": {
        "operationId": "V1_statsByStatusCode",
        "summary": "Get statistics on requests by status code for a given deployment",
        "parameters": [
          {
            "name": "deploymentName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "description": "The time window to filter the results by.",
            "schema": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.StatsByStatusCode.TimeWindowFilter"
            },
            "explode": false
          },
          {
            "name": "consumers",
            "in": "query",
            "required": true,
            "description": "List of consumers to fetch analytics for.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.ReponseStatsByStatusCodeData"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Analytics"
        ]
      }
    },
    "/v1/environments": {
      "get": {
        "operationId": "EnvironmentsService_list",
        "summary": "Query environments",
        "description": "Query the environments by project and account. Also returns managed dedicated environments the user owns.",
        "parameters": [
          {
            "name": "accountName",
            "in": "query",
            "required": true,
            "description": "The name of the account. You can find this in your Zuplo Portal under Settings > Project Information.",
            "schema": {
              "type": "string"
            },
            "explode": false
          },
          {
            "name": "projectName",
            "in": "query",
            "required": true,
            "description": "The name of the project. You can find this in your Zuplo Portal under Settings > Project Information.",
            "schema": {
              "type": "string"
            },
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Environments.EnvironmentsList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Environments"
        ]
      }
    },
    "/v1/environments/{environmentName}": {
      "get": {
        "operationId": "EnvironmentsService_read",
        "summary": "Get an environment",
        "description": "Gets the specified environment.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Zuplo.Common.EnvironmentParams"
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Environments.Environment"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Environments"
        ]
      }
    },
    "/v1/projects": {
      "get": {
        "operationId": "ProjectsService_list",
        "summary": "Lists projects",
        "description": "Lists the projects by account.",
        "parameters": [
          {
            "name": "accountName",
            "in": "query",
            "required": false,
            "description": "The name of the account. You can find this in your Zuplo Portal under Settings > Project Information.",
            "schema": {
              "type": "string"
            },
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Projects.ProjectsList"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "ProjectsService_create",
        "summary": "Create project",
        "description": "Creates a new project for the account.",
        "parameters": [
          {
            "name": "accountName",
            "in": "query",
            "required": false,
            "description": "The name of the account. You can find this in your Zuplo Portal under Settings > Project Information.",
            "schema": {
              "type": "string"
            },
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.Projects.Project"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuplo.Projects.ProjectCreateBody"
              }
            }
          }
        }
      }
    },
    "/v1/who-am-i": {
      "get": {
        "operationId": "V1_whoAmI",
        "summary": "Who Am I",
        "description": "Returns basic information about the caller. Supports both API key and JWT authentication. The response always includes the subject identifier (`sub`). The `account` field is included when called with an API key, and `email` is included when called with a JWT that carries the email claim.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The request has succeeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.WhoAmI.WhoAmI"
                }
              }
            }
          },
          "400": {
            "description": "The server could not understand the request due to invalid syntax.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.BadRequestProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access is unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.UnauthorizedProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "Zuplo.ApiKeys.ApiKeyParams.keyId": {
        "name": "keyId",
        "in": "path",
        "required": true,
        "description": "The key id.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.ApiKeys.BucketParams.bucketName": {
        "name": "bucketName",
        "in": "path",
        "required": true,
        "description": "The name of the bucket. Zuplo automatically creates a bucket for your project. You can find it in youe Zuplo Portal under Settings > Project Information.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.ApiKeys.ConsumerParams.consumerName": {
        "name": "consumerName",
        "in": "path",
        "required": true,
        "description": "The name of the consumer.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.ApiKeys.IncludeApiKeyParam": {
        "name": "include-api-keys",
        "in": "query",
        "required": false,
        "description": "Include the api key data in the response.",
        "schema": {
          "type": "boolean",
          "x-example": true
        },
        "x-example": true,
        "explode": false
      },
      "Zuplo.ApiKeys.IncludeManagerInvitesParam": {
        "name": "include-manager-invites",
        "in": "query",
        "required": false,
        "description": "Include the manager invites data in the response.",
        "schema": {
          "type": "boolean",
          "x-example": true
        },
        "x-example": true,
        "explode": false
      },
      "Zuplo.ApiKeys.IncludeManagerParam": {
        "name": "include-managers",
        "in": "query",
        "required": false,
        "description": "Include the manager's data in the response.",
        "schema": {
          "type": "boolean",
          "x-example": true
        },
        "x-example": true,
        "explode": false
      },
      "Zuplo.ApiKeys.KeyFormatQueryParam": {
        "name": "key-format",
        "in": "query",
        "required": false,
        "description": "The format of the key to return.\n`none`: Key is completely hidden.\n`visible`: Key is completely visible.\n`masked`: Part of key suffix is visible.",
        "schema": {
          "$ref": "#/components/schemas/Zuplo.ApiKeys.KeyFormat",
          "x-example": "masked"
        },
        "x-example": "masked",
        "explode": false
      },
      "Zuplo.ApiKeys.ManagerEmailQueryParam": {
        "name": "manager-email",
        "in": "query",
        "required": false,
        "description": "Filter by email address of key manager.",
        "schema": {
          "type": "string",
          "x-example": "bob@example.com"
        },
        "x-example": "bob@example.com",
        "explode": false
      },
      "Zuplo.ApiKeys.ManagerParams.managerId": {
        "name": "managerId",
        "in": "path",
        "required": true,
        "description": "The manager id",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.ApiKeys.TagQueryParam": {
        "name": "tag",
        "in": "query",
        "required": false,
        "description": "Query by tag. Example usage is `tag.account=foo`, where `account` is the name of the tag property and `foo` is the value.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.ApiKeys.WithApiKeyQueryParam": {
        "name": "with-api-key",
        "in": "query",
        "required": false,
        "description": "If an API key should be created with the consumer.",
        "schema": {
          "type": "boolean",
          "x-example": true
        },
        "x-example": true,
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.action": {
        "name": "action",
        "in": "query",
        "required": false,
        "description": "Filter by specific action (e.g., 'account.create')",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.actor": {
        "name": "actor",
        "in": "query",
        "required": false,
        "description": "Filter by actor email address or subject identifier",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.endDate": {
        "name": "endDate",
        "in": "query",
        "required": false,
        "description": "Filter events before this date (ISO 8601 format)",
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Maximum number of results to return (1-100)",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.offset": {
        "name": "offset",
        "in": "query",
        "required": false,
        "description": "Number of results to skip for pagination",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 0,
          "default": 0
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.startDate": {
        "name": "startDate",
        "in": "query",
        "required": false,
        "description": "Filter events after this date (ISO 8601 format)",
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "explode": false
      },
      "Zuplo.AuditLogs.AuditLogsQuery.success": {
        "name": "success",
        "in": "query",
        "required": false,
        "description": "Filter by success status (true for successful, false for failed)",
        "schema": {
          "type": "boolean"
        },
        "explode": false
      },
      "Zuplo.BuildLogs.BuildLogsQuery.stage": {
        "name": "stage",
        "in": "query",
        "required": false,
        "description": "Filter build logs to a specific stage. Required when `step` is set.",
        "schema": {
          "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogStage"
        },
        "explode": false
      },
      "Zuplo.BuildLogs.BuildLogsQuery.step": {
        "name": "step",
        "in": "query",
        "required": false,
        "description": "Filter build logs to a specific build step within the stage. Requires `stage` to also be set.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.ClientAuth.BucketParams": {
        "name": "bucketId",
        "in": "path",
        "required": true,
        "description": "The id of the bucket. Zuplo automatically creates buckets for your project. You can find it in your Zuplo Portal under the Settings tab for your project.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateParams": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "The ID of the client mTLS CA certificate.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.AccountParams": {
        "name": "accountName",
        "in": "path",
        "required": true,
        "description": "The name of the account. You can find this in your Zuplo Portal under Settings > Project Information.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.AccountProjectParams.projectName": {
        "name": "projectName",
        "in": "path",
        "required": true,
        "description": "The name of the project. You can find this in your Zuplo Portal under Settings > Project Information.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.BranchParams": {
        "name": "branchName",
        "in": "path",
        "required": true,
        "description": "The name of the branch in your source control provider.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.DeployParams": {
        "name": "deploymentName",
        "in": "path",
        "required": true,
        "description": "The name of the deployment. You can find this in the Zuplo Portal under Settings > Environments.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.EnvironmentParams": {
        "name": "environmentName",
        "in": "path",
        "required": true,
        "description": "The name of the environment.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Common.VariableParams": {
        "name": "variableName",
        "in": "path",
        "required": true,
        "description": "The name of the environment variable.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.CustomDomains.CustomDomainDeleteQuery.deploymentName": {
        "name": "deploymentName",
        "in": "query",
        "required": false,
        "description": "The deployment associated with the hostname, when deleting a deployment-specific mapping.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.CustomDomains.CustomDomainDeleteQuery.hostname": {
        "name": "hostname",
        "in": "query",
        "required": true,
        "description": "The hostname of the custom domain to delete.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.KeyAuthV2.BucketParams": {
        "name": "bucketId",
        "in": "path",
        "required": true,
        "description": "The id of the bucket. Zuplo automatically creates buckets for your project. You can find it in your Zuplo Portal under the Settings tab for your project.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.KeyAuthV2.ConsumerParams.consumerId": {
        "name": "consumerId",
        "in": "path",
        "required": true,
        "description": "The id of the consumer.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Metering.BucketParams": {
        "name": "bucketId",
        "in": "path",
        "required": true,
        "description": "The id of the bucket. Zuplo automatically creates buckets for your project. You can find it in your Zuplo Portal under the Settings tab for your project.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Metering.PlanParams.planId": {
        "name": "planId",
        "in": "path",
        "required": true,
        "description": "The id of the plan.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Metering.SubscriptionParams.subscriptionId": {
        "name": "subscriptionId",
        "in": "path",
        "required": true,
        "description": "The id of the subscription.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.BucketParams": {
        "name": "bucketId",
        "in": "path",
        "required": true,
        "description": "The id of the bucket. Zuplo automatically creates buckets for your project. You can find it in your Zuplo Portal under the Settings tab for your project.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.ConsumerParams.consumerId": {
        "name": "consumerId",
        "in": "path",
        "required": true,
        "description": "The id of the consumer.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.PlansParams.planId": {
        "name": "planId",
        "in": "path",
        "required": true,
        "description": "The id of the plan.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.SubscriptionsParams.subscriptionId": {
        "name": "subscriptionId",
        "in": "path",
        "required": true,
        "description": "The id of the subscription.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.TenantsParams.tenantId": {
        "name": "tenantId",
        "in": "path",
        "required": true,
        "description": "The id of the tenant.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV2.UsersParams.userId": {
        "name": "userId",
        "in": "path",
        "required": true,
        "description": "The id of the user.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.ApiKeyParams.apiKeyId": {
        "name": "apiKeyId",
        "in": "path",
        "required": true,
        "description": "The API key ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.BucketParams": {
        "name": "bucketId",
        "in": "path",
        "required": true,
        "description": "The id of the bucket. Zuplo automatically creates buckets for your project. You can find it in your Zuplo Portal under the Settings tab for your project.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.ConsumerParams.consumerId": {
        "name": "consumerId",
        "in": "path",
        "required": true,
        "description": "The consumer ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.CustomerMemberInviteParams.memberInviteId": {
        "name": "memberInviteId",
        "in": "path",
        "required": true,
        "description": "Member invite record ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.CustomerMemberParams.memberId": {
        "name": "memberId",
        "in": "path",
        "required": true,
        "description": "Member record ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.CustomerSubscriptionsParams.customerId": {
        "name": "customerId",
        "in": "path",
        "required": true,
        "description": "The Zuplo metering customer ID or key",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.PlanInviteParams.planInviteId": {
        "name": "planInviteId",
        "in": "path",
        "required": true,
        "description": "The id of the plan invite.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.PlanPurchaseDetailsParams.customerId": {
        "name": "customerId",
        "in": "path",
        "required": true,
        "description": "The Zuplo metering customer ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.PlanPurchaseDetailsParams.planId": {
        "name": "planId",
        "in": "path",
        "required": true,
        "description": "The plan ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.SubscriptionParams.subscriptionId": {
        "name": "subscriptionId",
        "in": "path",
        "required": true,
        "description": "The subscription ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MeteringV3.UserParams.userId": {
        "name": "userId",
        "in": "path",
        "required": true,
        "description": "User record ID",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.MtlsCertificates.MtlsCertificateParams": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "The ID of the mTLS certificate.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.cursor": {
        "name": "cursor",
        "in": "query",
        "required": false,
        "description": "Opaque cursor returned in `pagination.cursor` on a previous page. Pass to fetch the next page.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.endTime": {
        "name": "endTime",
        "in": "query",
        "required": true,
        "description": "Inclusive ISO 8601 upper bound on request timestamp.",
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.httpMethod": {
        "name": "httpMethod",
        "in": "query",
        "required": false,
        "description": "Filter to requests with this HTTP method.",
        "schema": {
          "type": "string",
          "enum": [
            "GET",
            "POST",
            "PUT",
            "PATCH",
            "DELETE",
            "HEAD",
            "OPTIONS",
            "TRACE",
            "CONNECT"
          ]
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.httpStatus": {
        "name": "httpStatus",
        "in": "query",
        "required": false,
        "description": "Filter to requests with this HTTP status class (`2xx`, `3xx`, `4xx`, `5xx`).",
        "schema": {
          "type": "string",
          "enum": [
            "2xx",
            "3xx",
            "4xx",
            "5xx"
          ]
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Maximum number of results to return (1-200).",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 200,
          "default": 50
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.routePath": {
        "name": "routePath",
        "in": "query",
        "required": false,
        "description": "Filter to requests that matched this route path.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.search": {
        "name": "search",
        "in": "query",
        "required": false,
        "description": "Case-insensitive free-text search across log message bodies for the request window.",
        "schema": {
          "type": "string"
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.severity": {
        "name": "severity",
        "in": "query",
        "required": false,
        "description": "Filter to requests whose maximum log severity equals this value.",
        "schema": {
          "type": "string",
          "enum": [
            "debug",
            "info",
            "warn",
            "error"
          ]
        },
        "explode": false
      },
      "Zuplo.RuntimeLogs.RequestLogsListQuery.startTime": {
        "name": "startTime",
        "in": "query",
        "required": true,
        "description": "Inclusive ISO 8601 lower bound on request timestamp.",
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "explode": false
      },
      "Zuplo.Tunnels.TunnelIdParam": {
        "name": "tunnelId",
        "in": "path",
        "required": true,
        "description": "The ID of the tunnel.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Tunnels.TunnelTeardownStatusParams.operationId": {
        "name": "operationId",
        "in": "path",
        "required": true,
        "description": "The ID of the deletion operation.",
        "schema": {
          "type": "string"
        }
      },
      "Zuplo.Tunnels.TunneledServiceProvisioningStatusParams.operationId": {
        "name": "operationId",
        "in": "path",
        "required": true,
        "description": "The ID of the operation.",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "ApiKeyBulkCreateOrUpdateBody": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKeyCreateOrUpdateBody"
        },
        "example": [
          {
            "description": "My secret api key",
            "expiresOn": "2023-04-20T05:54:34.408Z",
            "key": "zpka_66b21c8591354c0997db232cc2f79c9e_69253f24"
          },
          {
            "description": "My secret api key2",
            "expiresOn": "2023-05-20T05:54:34.408Z",
            "key": "zpka_77b21c8591354c0997db232cc2f79c9e_69253f99"
          }
        ]
      },
      "Zuplo.Accounts.Account": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the account",
            "example": "103f832d-5331-42db-9d38-bbac05a68305"
          },
          "name": {
            "type": "string",
            "description": "The name of the account",
            "example": "my-account"
          },
          "label": {
            "type": "string",
            "description": "The label of the account",
            "example": "My Account"
          }
        },
        "description": "A Zuplo account",
        "example": {
          "id": "103f832d-5331-42db-9d38-bbac05a68305",
          "name": "my-account",
          "label": "My Account"
        }
      },
      "Zuplo.Accounts.AccountsList": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Accounts.Account"
            }
          }
        },
        "example": {
          "data": [
            {
              "id": "103f832d-5331-42db-9d38-bbac05a68305",
              "name": "my-account",
              "label": "My Account"
            },
            {
              "id": "b006949f-c71a-43d8-8533-92d8dedc5d1c",
              "name": "orange-fox"
            }
          ]
        }
      },
      "Zuplo.ApiKeys.ApiKey": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "readOnly": true
          },
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the key expires.",
            "x-example": "2023-04-18T05:54:34.408Z"
          },
          "description": {
            "type": "string",
            "description": "The description of the api key."
          },
          "key": {
            "type": "string",
            "description": "The API key's value. You can use this parameter to override Zuplo's default key format, but this is not recommended as you will lose our [API Key Leak Detection](https://zuplo.com/docs/articles/api-key-leak-detection)"
          }
        },
        "description": "A Consumer can have any number of API keys associated with it. Each API Key shares the same identity (i.e. Consumer) when authenticating with this service. Keys can have their own description to note the use of the key and can have an expiration date. Expired keys will not be permitted to authenticate after their expiration.",
        "example": {
          "createdOn": "2023-04-20T05:54:34.408Z",
          "updatedOn": "2023-04-20T05:54:34.408Z",
          "id": "key_m1m4ol223R0kGHGZY7tPQMQl",
          "description": "My secret api key",
          "expiresOn": "2023-04-20T05:54:34.408Z",
          "key": "zpka_66b21c8591354c0997db232cc2f79c9e_69253f24"
        }
      },
      "Zuplo.ApiKeys.ApiKeyCreateOrUpdateBody": {
        "type": "object",
        "properties": {
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the key expires.",
            "x-example": "2023-04-18T05:54:34.408Z"
          },
          "description": {
            "type": "string",
            "description": "The description of the api key."
          },
          "key": {
            "type": "string",
            "description": "The API key's value. You can use this parameter to override Zuplo's default key format, but this is not recommended as you will lose our [API Key Leak Detection](https://zuplo.com/docs/articles/api-key-leak-detection)"
          }
        },
        "example": {
          "description": "My secret api key",
          "expiresOn": "2023-04-20T05:54:34.408Z",
          "key": "zpka_66b21c8591354c0997db232cc2f79c9e_69253f24"
        }
      },
      "Zuplo.ApiKeys.ApiKeys": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "createdOn": "2023-04-20T05:54:34.408Z",
              "updatedOn": "2023-04-20T05:54:34.408Z",
              "id": "key_m1m4ol223R0kGHGZY7tPQMQl",
              "description": "My secret api key",
              "expiresOn": "2023-04-20T05:54:34.408Z",
              "key": "zpka_66b21c8591354c0997db232cc2f79c9e_69253f24"
            }
          ],
          "limit": 1000,
          "offset": 0
        }
      },
      "Zuplo.ApiKeys.Bucket": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id",
          "name"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "x-example": "bckt_pCcNMjERFSoh5xIQir7o99Z6KDoLp36e",
            "readOnly": true
          },
          "isRetrievable": {
            "type": "boolean",
            "description": "Whether the API keys stored in the bucket are retrievable",
            "x-example": true
          },
          "name": {
            "type": "string",
            "pattern": "^[a-z0-9-]{5,128}$",
            "description": "A friendly name for the bucket.",
            "x-example": "my-bucket"
          },
          "description": {
            "type": "string",
            "description": "A description of the bucket.",
            "x-example": "Bucket for zuplo consumers"
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the bucket.",
            "x-example": {
              "foo": "baz"
            }
          }
        },
        "description": "Top level group for API key mangement. A bucket could be used with a single Zuplo environment or shared among multiple environments or projects. By default a Zuplo API Gateway project will be created with several buckets that map to production, preview, and working copy environments.",
        "example": {
          "id": "bckt_pCcNMjERFSoh5xIQir7o99Z6KDoLp36e",
          "name": "my-bucket",
          "createdOn": "2023-07-24T19:26:36.000Z",
          "updatedOn": "2023-07-24T19:26:36.000Z",
          "description": "Bucket for zuplo consumers",
          "isRetrievable": true,
          "tags": {
            "foo": "bar"
          }
        }
      },
      "Zuplo.ApiKeys.BucketCreateBody": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[a-z0-9-]{5,128}$",
            "description": "A friendly name for the bucket.",
            "x-example": "my-bucket"
          },
          "description": {
            "type": "string",
            "description": "A description of the bucket.",
            "x-example": "Bucket for zuplo consumers"
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the bucket.",
            "x-example": {
              "foo": "baz"
            }
          }
        },
        "example": {
          "name": "my-bucket",
          "description": "Bucket for zuplo consumers",
          "tags": {
            "foo": "bar"
          }
        }
      },
      "Zuplo.ApiKeys.BucketUpdateBody": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "A description of the bucket.",
            "x-example": "Bucket for zuplo consumers"
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the bucket.",
            "x-example": {
              "foo": "baz"
            }
          }
        },
        "example": {
          "description": "Bucket for zuplo consumers",
          "tags": {
            "foo": "bar"
          }
        }
      },
      "Zuplo.ApiKeys.Buckets": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.Bucket"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "bckt_pCcNMjERFSoh5xIQir7o99Z6KDoLp36e",
              "name": "my-bucket",
              "createdOn": "2023-07-24T19:26:36.000Z",
              "updatedOn": "2023-07-24T19:26:36.000Z",
              "description": "Bucket for zuplo consumers",
              "isRetrievable": true,
              "tags": {
                "foo": "bar"
              }
            }
          ]
        }
      },
      "Zuplo.ApiKeys.Consumer": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id",
          "name"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "pattern": "^[a-z0-9-]{1,128}$",
            "description": "A friendly name for the consumer. This name is used as the default user.sub property in the API Key Authentication policy."
          },
          "apiKeys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
            }
          },
          "description": {
            "type": "string",
            "description": "A description of the consumer."
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the consumer."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Generic metadata associated with the consumer."
          }
        },
        "description": "Consumers are the core of the API Key service. The consumer is the 'identity' of any API Keys that are created. ",
        "example": {
          "id": "csmr_brw0leTAVw478VFKD4F6OqVI",
          "name": "zup-inc",
          "createdOn": "2023-04-20T05:54:34.408Z",
          "updatedOn": "2023-04-20T05:54:34.408Z",
          "description": "Consumer for zup inc",
          "tags": {
            "foo": "bar"
          },
          "metadata": {
            "id": "zup-id-343"
          },
          "managers": [
            {
              "id": "eusr_MeefoYod5eQN33MEjC4PeRFH",
              "createdOn": "2023-06-19T17:32:11.990Z",
              "email": "mgr@zuploinc.com",
              "sub": "sub-oauth2|113533232396018044159"
            }
          ],
          "apiKeys": [
            {
              "id": "key_AM7eAiR0BiaXTam951XmC9kK",
              "description": "api key for zup inc",
              "createdOn": "2023-06-19T17:32:17.737Z",
              "updatedOn": "2023-06-19T17:32:17.737Z",
              "expiresOn": "2035-06-19T17:32:17.737Z",
              "key": "****69ff2f90"
            }
          ]
        }
      },
      "Zuplo.ApiKeys.ConsumerCreateBody": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[a-z0-9-]{1,128}$",
            "description": "A friendly name for the consumer. This name is used as the default user.sub property in the API Key Authentication policy."
          },
          "managers": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Zuplo.ApiKeys.Manager"
                }
              }
            ],
            "description": "Email addresses of the managers to invite or a list of managers (with subs) to add to the consumer."
          },
          "apiKeys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.ApiKey"
            }
          },
          "description": {
            "type": "string",
            "description": "A description of the consumer."
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the consumer."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Generic metadata associated with the consumer."
          }
        },
        "example": {
          "name": "zup-inc",
          "description": "Consumer for zup inc",
          "tags": {
            "foo": "bar"
          },
          "metadata": {
            "id": "zup-id-343"
          },
          "managers": [
            {
              "id": "123",
              "email": "user@example.com",
              "sub": "oauth2|113533232396018044159",
              "createdOn": "2023-06-19T17:32:11.990Z"
            }
          ]
        }
      },
      "Zuplo.ApiKeys.ConsumerUpdateBody": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "A description of the consumer."
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key value pairs to associate with the consumer."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Generic metadata associated with the consumer."
          }
        },
        "example": {
          "description": "Consumer for zup inc",
          "tags": {
            "foo": "bar"
          },
          "metadata": {
            "id": "zup-id-343"
          }
        }
      },
      "Zuplo.ApiKeys.Consumers": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.Consumer"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "csmr_brw0leTAVw478VFKD4F6OqVI",
              "name": "zup-inc",
              "createdOn": "2023-04-20T05:54:34.408Z",
              "updatedOn": "2023-04-20T05:54:34.408Z",
              "description": "Consumer for zup inc",
              "tags": {
                "foo": "bar"
              },
              "metadata": {
                "id": "zup-id-343"
              },
              "managers": [
                {
                  "id": "eusr_MeefoYod5eQN33MEjC4PeRFH",
                  "createdOn": "2023-06-19T17:32:11.990Z",
                  "email": "mgr@zuploinc.com",
                  "sub": "sub-oauth2|113533232396018044159"
                }
              ],
              "apiKeys": [
                {
                  "id": "key_AM7eAiR0BiaXTam951XmC9kK",
                  "description": "api key for zup inc",
                  "createdOn": "2023-06-19T17:32:17.737Z",
                  "updatedOn": "2023-06-19T17:32:17.737Z",
                  "expiresOn": "2035-06-19T17:32:17.737Z",
                  "key": "****69ff2f90"
                }
              ]
            }
          ],
          "offset": 0,
          "limit": 1000
        }
      },
      "Zuplo.ApiKeys.KeyFormat": {
        "type": "string",
        "enum": [
          "none",
          "visible",
          "masked"
        ]
      },
      "Zuplo.ApiKeys.Manager": {
        "type": "object",
        "required": [
          "createdOn",
          "id",
          "email",
          "sub"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "The email address of the manager"
          },
          "sub": {
            "type": "string",
            "description": "The sub of the manager in the identity provider"
          }
        },
        "description": "Managers are users that have access to a consumer. Managers can be added directly to a consumer (using email and sub) or invited (using only email) to a consumer.",
        "example": {
          "createdOn": "2023-04-20T05:54:34.408Z",
          "id": "managerId",
          "email": "bob@example.com",
          "sub": "sub-oauth2|113533232396018044159"
        }
      },
      "Zuplo.ApiKeys.ManagerCreateBody": {
        "type": "object",
        "required": [
          "email",
          "sub"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "The email address of the manager",
            "x-example": "bob@example.com"
          },
          "sub": {
            "type": "string",
            "description": "The sub of the manager in the identity provider",
            "x-example": "sub-oauth2|113533232396018044159"
          }
        },
        "example": {
          "email": "bob@example.com",
          "sub": "sub-oauth2|113533232396018044159"
        }
      },
      "Zuplo.ApiKeys.Managers": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ApiKeys.Manager"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "createdOn": "2023-04-20T05:54:34.408Z",
              "id": "managerId",
              "email": "bob@example.com",
              "sub": "sub-oauth2|113533232396018044159"
            }
          ],
          "limit": 1000,
          "offset": 0
        }
      },
      "Zuplo.AuditLogs.ActingAs": {
        "type": "object",
        "required": [
          "sub",
          "email"
        ],
        "properties": {
          "sub": {
            "type": "string",
            "description": "The subject identifier of the user being impersonated"
          },
          "email": {
            "type": "string",
            "nullable": true,
            "description": "The email address of the impersonated user (if available)"
          }
        },
        "description": "Details about the user being impersonated, if applicable"
      },
      "Zuplo.AuditLogs.Actor": {
        "type": "object",
        "required": [
          "sub",
          "email",
          "type",
          "connection",
          "actingAs",
          "metadata"
        ],
        "properties": {
          "sub": {
            "type": "string",
            "description": "The subject identifier of the actor (user ID, API key, etc.)"
          },
          "email": {
            "type": "string",
            "nullable": true,
            "description": "The email address of the actor (only for user actors)"
          },
          "type": {
            "type": "string",
            "description": "The type of actor (e.g., 'user', 'consumer', 'service', 'anonymous')"
          },
          "connection": {
            "type": "string",
            "nullable": true,
            "description": "The authentication connection used (e.g., 'auth0', 'google')"
          },
          "actingAs": {
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.AuditLogs.ActingAs"
              }
            ],
            "nullable": true,
            "description": "Information about the user being impersonated, if any"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "Additional metadata about the actor"
          }
        },
        "description": "Details about the actor who performed the action"
      },
      "Zuplo.AuditLogs.AuditLog": {
        "type": "object",
        "required": [
          "action",
          "metadata",
          "actor",
          "resources",
          "context",
          "route",
          "timestamp",
          "requestId",
          "success",
          "error"
        ],
        "properties": {
          "action": {
            "type": "string",
            "description": "The action that was performed (e.g., 'account.create', 'project.delete')"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "Additional metadata about the action"
          },
          "actor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.AuditLogs.Actor"
              }
            ],
            "description": "Details about the actor who performed the action"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.AuditLogs.Resource"
            },
            "nullable": true,
            "description": "List of resources affected by this action"
          },
          "context": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.AuditLogs.Context"
              }
            ],
            "description": "Contextual information about where and how the action was performed"
          },
          "route": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.AuditLogs.Route"
              }
            ],
            "description": "Information about the API route that triggered this audit event"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "The timestamp when the action occurred"
          },
          "requestId": {
            "type": "string",
            "description": "The unique request ID for correlation"
          },
          "success": {
            "type": "boolean",
            "nullable": true,
            "description": "Whether the action was successful"
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "Error message if the action failed"
          }
        },
        "description": "An audit log entry representing an action performed in the system"
      },
      "Zuplo.AuditLogs.AuditLogsPagination": {
        "type": "object",
        "required": [
          "limit",
          "offset",
          "total",
          "hasMore"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of results returned"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "description": "Number of results skipped"
          },
          "total": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of results available"
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether there are more results available"
          }
        },
        "description": "Pagination information for audit logs"
      },
      "Zuplo.AuditLogs.AuditLogsResponse": {
        "type": "object",
        "required": [
          "data",
          "pagination"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.AuditLogs.AuditLog"
            },
            "description": "Array of audit log entries"
          },
          "pagination": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.AuditLogs.AuditLogsPagination"
              }
            ],
            "description": "Pagination information"
          }
        },
        "description": "Response containing a list of audit logs with pagination"
      },
      "Zuplo.AuditLogs.Context": {
        "type": "object",
        "required": [
          "ipAddress",
          "userAgent",
          "country",
          "region",
          "city",
          "postalCode",
          "metroCode",
          "asOrg"
        ],
        "properties": {
          "ipAddress": {
            "type": "string",
            "nullable": true,
            "description": "The IP address of the request"
          },
          "userAgent": {
            "type": "string",
            "nullable": true,
            "description": "The user agent string of the request"
          },
          "country": {
            "type": "string",
            "nullable": true,
            "description": "The ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB')"
          },
          "region": {
            "type": "string",
            "nullable": true,
            "description": "The region/state code (e.g., 'CA' for California)"
          },
          "city": {
            "type": "string",
            "nullable": true,
            "description": "The city name from which the request originated"
          },
          "postalCode": {
            "type": "string",
            "nullable": true,
            "description": "The postal/ZIP code"
          },
          "metroCode": {
            "type": "string",
            "nullable": true,
            "description": "The metro code (DMA code in the US)"
          },
          "asOrg": {
            "type": "string",
            "nullable": true,
            "description": "The Autonomous System organization (ISP name)"
          }
        },
        "description": "Contextual information about where and how the action was performed"
      },
      "Zuplo.AuditLogs.Resource": {
        "type": "object",
        "required": [
          "type",
          "id",
          "metadata"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of resource (e.g., 'account', 'project', 'deployment')"
          },
          "id": {
            "type": "string",
            "description": "The unique identifier of the resource"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "nullable": true,
            "description": "Additional metadata about the resource"
          }
        },
        "description": "A resource affected by the action"
      },
      "Zuplo.AuditLogs.Route": {
        "type": "object",
        "required": [
          "source",
          "url",
          "method"
        ],
        "properties": {
          "source": {
            "type": "string",
            "nullable": true,
            "description": "The source system or API that handled the request (e.g., 'api', 'gateway')"
          },
          "url": {
            "type": "string",
            "nullable": true,
            "description": "The full URL path of the request"
          },
          "method": {
            "type": "string",
            "nullable": true,
            "description": "The HTTP method used for the request"
          }
        },
        "description": "Information about the API route that triggered this audit event"
      },
      "Zuplo.BuildLogs.BuildLogRow": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "minItems": 3,
        "maxItems": 3,
        "description": "A single build-log row, returned as a fixed 3-tuple of [timestamp (ISO 8601), severity, message].",
        "example": [
          "2024-01-01T00:00:00.000Z",
          "INFO",
          "Build started"
        ]
      },
      "Zuplo.BuildLogs.BuildLogStage": {
        "type": "string",
        "enum": [
          "api",
          "dev-portal"
        ],
        "description": "The build stage that produced a set of build logs. Wire values are kebab-case (`api`, `dev-portal`); the response groups logs under camelCase keys (`api`, `devPortal`). Mirrors tenant-api's `DeploymentStageNameSchema` — keep in sync when new stages are added upstream."
      },
      "Zuplo.BuildLogs.BuildLogStepGroup": {
        "type": "object",
        "additionalProperties": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogRow"
          }
        },
        "description": "Build logs for a stage, grouped by build step. Keys are step names (e.g. \"build\"); values are ordered arrays of build-log rows."
      },
      "Zuplo.BuildLogs.BuildLogsData": {
        "type": "object",
        "required": [
          "api",
          "devPortal"
        ],
        "properties": {
          "api": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogStepGroup"
              }
            ],
            "description": "Build logs for the API/gateway build stage, grouped by step."
          },
          "devPortal": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogStepGroup"
              }
            ],
            "description": "Build logs for the Dev Portal build stage, grouped by step."
          }
        },
        "description": "Build logs grouped by stage (API vs Dev Portal) and then by build step."
      },
      "Zuplo.BuildLogs.BuildLogsResponse": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.BuildLogs.BuildLogsData"
              }
            ],
            "description": "Build logs grouped by stage and step."
          }
        },
        "description": "Response containing the build logs for a deployment build.",
        "example": {
          "data": {
            "api": {
              "build": [
                [
                  "2024-01-01T00:00:00.000Z",
                  "INFO",
                  "Build started"
                ]
              ]
            },
            "devPortal": {}
          }
        }
      },
      "Zuplo.ClientAuth.JwksResponse": {
        "type": "object",
        "required": [
          "keys"
        ],
        "properties": {
          "keys": {
            "type": "object",
            "additionalProperties": {}
          }
        }
      },
      "Zuplo.ClientAuth.OAuthAccessTokenResponse": {
        "type": "object",
        "required": [
          "access_token",
          "token_type",
          "expires_in"
        ],
        "properties": {
          "access_token": {
            "type": "string",
            "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJz..."
          },
          "token_type": {
            "type": "string",
            "enum": [
              "Bearer"
            ],
            "example": "Bearer"
          },
          "expires_in": {
            "type": "integer",
            "example": 3600
          },
          "scope": {
            "type": "string",
            "example": "account project deployment"
          }
        }
      },
      "Zuplo.ClientAuth.OAuthErrorResponse": {
        "type": "object",
        "required": [
          "error",
          "error_description"
        ],
        "properties": {
          "error": {
            "type": "string",
            "example": "invalid_client"
          },
          "error_description": {
            "type": "string",
            "example": "Client authentication failed"
          }
        }
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificate": {
        "type": "object",
        "required": [
          "id",
          "name",
          "certificateInfo",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier for the client mTLS CA certificate.",
            "example": "cert_abc123",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The name of the client mTLS CA certificate.",
            "example": "my_client_ca"
          },
          "certificateInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateInfo"
              }
            ],
            "description": "Certificate information."
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          }
        },
        "description": "A client mTLS CA certificate configured for an account."
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateCreateBody": {
        "type": "object",
        "required": [
          "name",
          "certificate"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The name of the client mTLS CA certificate.",
            "example": "my_client_ca"
          },
          "certificate": {
            "type": "string",
            "minLength": 1,
            "description": "The PEM-encoded CA certificate."
          }
        }
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateInfo": {
        "type": "object",
        "required": [
          "subject",
          "issuer",
          "validFrom",
          "validTo",
          "serialNumber"
        ],
        "properties": {
          "subject": {
            "type": "string",
            "description": "Certificate subject.",
            "example": "CN=Example Client CA"
          },
          "issuer": {
            "type": "string",
            "description": "Certificate issuer.",
            "example": "CN=Example Root CA"
          },
          "validFrom": {
            "type": "string",
            "description": "Certificate valid from date.",
            "example": "2024-01-01T00:00:00Z"
          },
          "validTo": {
            "type": "string",
            "description": "Certificate valid to date.",
            "example": "2025-01-01T00:00:00Z"
          },
          "serialNumber": {
            "type": "string",
            "description": "Certificate serial number.",
            "example": "12345"
          }
        },
        "description": "Details parsed from a client mTLS CA certificate."
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateListResponse": {
        "type": "object",
        "required": [
          "data",
          "offset",
          "limit"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificate"
            },
            "description": "List of client mTLS CA certificates."
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "description": "Offset for pagination."
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "description": "Limit for pagination."
          }
        }
      },
      "Zuplo.ClientMtlsCaCertificates.ClientMtlsCaCertificateUpdateBody": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The name of the client mTLS CA certificate.",
            "example": "my_client_ca"
          }
        }
      },
      "Zuplo.Common.ExpiresOnField": {
        "type": "object",
        "required": [
          "expiresOn"
        ],
        "properties": {
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item will expire.",
            "example": "2050-04-18T05:54:34.408Z"
          }
        },
        "example": {
          "expiresOn": "2050-04-18T05:54:34.408Z"
        }
      },
      "Zuplo.Configurations.Configuration": {
        "type": "object",
        "required": [
          "accountName",
          "projectName",
          "environmentType",
          "systemConfigurations"
        ],
        "properties": {
          "accountName": {
            "type": "string",
            "example": "chocolate_great_buzzard"
          },
          "projectName": {
            "type": "string",
            "example": "lime-fox"
          },
          "environmentType": {
            "type": "string",
            "enum": [
              "production",
              "preview",
              "development"
            ],
            "example": "production"
          },
          "systemConfigurations": {
            "type": "string",
            "example": "72ih3avJtXRUz6jqHtLEBFVmJDYr1GZtMTKFS8Q71SbyiHgzbL9fPscMURcuEPnryrMv3ABU1fB4qgopG5CkmdgD2..."
          }
        },
        "example": {
          "accountName": "chocolate_great_buzzard",
          "projectName": "lime-fox",
          "environmentType": "production",
          "systemConfigurations": "72ih3avJtXRUz6jqHtLEBFVmJDYr1GZtMTKFS8Q71SbyiHgzbL9fPscMURcuEPnryrMv3ABU1fB4qgopG5CkmdgD2..."
        }
      },
      "Zuplo.ConsumerAnalytics.CallsByStatusCodeData": {
        "type": "object"
      },
      "Zuplo.ConsumerAnalytics.CallsDetailData": {
        "type": "object",
        "required": [
          "consumer",
          "timeStamp",
          "totalCalls",
          "callsByStatusCode"
        ],
        "properties": {
          "consumer": {
            "type": "string",
            "readOnly": true
          },
          "timeStamp": {
            "type": "string",
            "readOnly": true
          },
          "totalCalls": {
            "type": "integer",
            "readOnly": true
          },
          "callsByStatusCode": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.CallsByStatusCodeData"
            },
            "readOnly": true
          }
        }
      },
      "Zuplo.ConsumerAnalytics.RecentCallsData": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.RequestData"
            },
            "readOnly": true
          }
        }
      },
      "Zuplo.ConsumerAnalytics.ReponseStatsByStatusCodeData": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.StatsByStatusCodeData"
              }
            ],
            "readOnly": true
          }
        }
      },
      "Zuplo.ConsumerAnalytics.RequestData": {
        "type": "object",
        "required": [
          "consumer",
          "method",
          "routePath",
          "statusCode",
          "timeStamp",
          "city",
          "country"
        ],
        "properties": {
          "consumer": {
            "type": "string",
            "readOnly": true
          },
          "method": {
            "type": "string",
            "readOnly": true
          },
          "routePath": {
            "type": "string",
            "readOnly": true
          },
          "statusCode": {
            "type": "string",
            "readOnly": true
          },
          "timeStamp": {
            "type": "string",
            "readOnly": true
          },
          "city": {
            "type": "string",
            "readOnly": true
          },
          "country": {
            "type": "string",
            "readOnly": true
          }
        }
      },
      "Zuplo.ConsumerAnalytics.StatsByStatusCode.TimeWindowFilter": {
        "type": "string",
        "enum": [
          "last-hour",
          "last-24-hours",
          "last-7-days",
          "last-30-days",
          "last-3-months"
        ]
      },
      "Zuplo.ConsumerAnalytics.StatsByStatusCodeData": {
        "type": "object",
        "properties": {
          "stats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.StatsData"
            },
            "readOnly": true
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.CallsDetailData"
            },
            "readOnly": true
          }
        }
      },
      "Zuplo.ConsumerAnalytics.StatsData": {
        "type": "object",
        "required": [
          "totalCalls",
          "consumer",
          "callsByStatusCode"
        ],
        "properties": {
          "totalCalls": {
            "type": "integer",
            "readOnly": true
          },
          "consumer": {
            "type": "string",
            "readOnly": true
          },
          "callsByStatusCode": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ConsumerAnalytics.CallsByStatusCodeData"
            },
            "readOnly": true
          }
        }
      },
      "Zuplo.CustomDomains.CustomDomain": {
        "type": "object",
        "required": [
          "id",
          "accountName",
          "projectName",
          "deployments",
          "hostname",
          "provider"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier for the custom domain.",
            "example": "cdm_01HZX8D7A1M9S0K4Y2N6P3Q8R5"
          },
          "accountName": {
            "type": "string",
            "description": "The account that owns the custom domain.",
            "example": "chocolate_great_buzzard"
          },
          "projectName": {
            "type": "string",
            "description": "The project associated with the custom domain.",
            "example": "todo-list-api"
          },
          "deployments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainDeployment"
            },
            "description": "The deployments currently mapped to this hostname."
          },
          "hostname": {
            "type": "string",
            "description": "The hostname assigned to the custom domain.",
            "example": "api.example.com"
          },
          "provider": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainProvider"
              }
            ],
            "description": "The provider backing the custom domain.",
            "example": "cloudflare"
          }
        },
        "description": "A custom domain configured for an account.",
        "example": {
          "id": "cdm_01HZX8D7A1M9S0K4Y2N6P3Q8R5",
          "accountName": "chocolate_great_buzzard",
          "projectName": "todo-list-api",
          "deployments": [
            {
              "deploymentName": "todo-list-api-main-59eec11",
              "branch": "main",
              "environmentType": "PRODUCTION",
              "isDefault": true,
              "stage": "api",
              "cname": "todo-list-api-main-59eec11.zuplo.app"
            }
          ],
          "hostname": "api.example.com",
          "provider": "cloudflare"
        }
      },
      "Zuplo.CustomDomains.CustomDomainCreateBody": {
        "type": "object",
        "required": [
          "hostname"
        ],
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname to configure as a custom domain.",
            "example": "api.example.com"
          },
          "deploymentName": {
            "type": "string",
            "description": "The deployment to associate with the hostname.",
            "example": "todo-list-api-main-59eec11"
          },
          "stage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainStage"
              }
            ],
            "description": "The stage to expose on the hostname.",
            "example": "api"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Whether this domain should be the default domain for the deployment.",
            "example": true
          },
          "isAlias": {
            "type": "boolean",
            "description": "Whether the domain should be configured as an alias.",
            "example": false
          }
        },
        "description": "Request body for creating a custom domain.",
        "example": {
          "hostname": "api.example.com",
          "deploymentName": "todo-list-api-main-59eec11",
          "stage": "api",
          "isDefault": true,
          "isAlias": false
        }
      },
      "Zuplo.CustomDomains.CustomDomainDeployment": {
        "type": "object",
        "required": [
          "deploymentName",
          "branch",
          "environmentType",
          "isDefault",
          "stage",
          "cname"
        ],
        "properties": {
          "deploymentName": {
            "type": "string",
            "nullable": true,
            "description": "The deployment name associated with the custom domain.",
            "example": "todo-list-api-main-59eec11"
          },
          "branch": {
            "type": "string",
            "nullable": true,
            "description": "The branch associated with the deployment.",
            "example": "main"
          },
          "environmentType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainEnvironmentType"
              }
            ],
            "nullable": true,
            "description": "The environment type associated with the deployment.",
            "example": "PRODUCTION"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Whether this deployment is the default for the hostname.",
            "example": true
          },
          "stage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainStage"
              }
            ],
            "nullable": true,
            "description": "The stage exposed by this custom domain mapping.",
            "example": "api"
          },
          "cname": {
            "type": "string",
            "nullable": true,
            "description": "The CNAME target for this deployment.",
            "example": "todo-list-api-main-59eec11.zuplo.app"
          }
        },
        "description": "A deployment bound to a custom domain.",
        "example": {
          "deploymentName": "todo-list-api-main-59eec11",
          "branch": "main",
          "environmentType": "PRODUCTION",
          "isDefault": true,
          "stage": "api",
          "cname": "todo-list-api-main-59eec11.zuplo.app"
        }
      },
      "Zuplo.CustomDomains.CustomDomainEnvironmentType": {
        "type": "string",
        "enum": [
          "PRODUCTION",
          "PREVIEW",
          "WORKING_COPY"
        ],
        "description": "The environment type targeted by a custom domain deployment."
      },
      "Zuplo.CustomDomains.CustomDomainMutationResult": {
        "type": "object",
        "required": [
          "deploymentName",
          "hostname",
          "stage",
          "ownershipVerification",
          "cname"
        ],
        "properties": {
          "deploymentName": {
            "type": "string",
            "nullable": true,
            "description": "The deployment associated with the hostname.",
            "example": "todo-list-api-main-59eec11"
          },
          "hostname": {
            "type": "string",
            "description": "The hostname that was created or updated.",
            "example": "api.example.com"
          },
          "stage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomainStage"
              }
            ],
            "nullable": true,
            "description": "The stage exposed by the hostname.",
            "example": "api"
          },
          "ownershipVerification": {
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.CustomDomains.OwnershipVerification"
              }
            ],
            "nullable": true,
            "description": "The DNS record required to verify domain ownership, if any."
          },
          "cname": {
            "type": "string",
            "nullable": true,
            "description": "The CNAME target for the custom domain, if any.",
            "example": "todo-list-api-main-59eec11.zuplo.app"
          }
        },
        "description": "The result of creating or updating a custom domain.",
        "example": {
          "deploymentName": "todo-list-api-main-59eec11",
          "hostname": "api.example.com",
          "stage": "api",
          "ownershipVerification": {
            "name": "_zuplo.api.example.com",
            "type": "TXT",
            "value": "zuplo-verification-token"
          },
          "cname": "todo-list-api-main-59eec11.zuplo.app"
        }
      },
      "Zuplo.CustomDomains.CustomDomainProvider": {
        "type": "string",
        "enum": [
          "cloudflare",
          "amazon",
          "custom",
          "alias"
        ],
        "description": "The provider backing a custom domain."
      },
      "Zuplo.CustomDomains.CustomDomainStage": {
        "type": "string",
        "enum": [
          "api",
          "dev-portal"
        ],
        "description": "The stage exposed by a custom domain."
      },
      "Zuplo.CustomDomains.CustomDomainUpdateBody": {
        "type": "object",
        "required": [
          "hostname"
        ],
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname to update.",
            "example": "api.example.com"
          },
          "deploymentName": {
            "type": "string",
            "description": "The deployment to associate with the hostname.",
            "example": "todo-list-api-main-59eec11"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Whether this domain should be the default domain for the deployment.",
            "example": true
          }
        },
        "description": "Request body for updating a custom domain.",
        "example": {
          "hostname": "api.example.com",
          "deploymentName": "todo-list-api-main-59eec11",
          "isDefault": true
        }
      },
      "Zuplo.CustomDomains.CustomDomainsList": {
        "type": "object",
        "required": [
          "data",
          "offset",
          "limit"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.CustomDomains.CustomDomain"
            },
            "description": "The custom domains returned for the account."
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "description": "The number of records skipped.",
            "example": 0
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "description": "The maximum number of records returned.",
            "example": 100
          }
        },
        "description": "Response containing a paginated list of custom domains.",
        "example": {
          "data": [
            {
              "id": "cdm_01HZX8D7A1M9S0K4Y2N6P3Q8R5",
              "accountName": "chocolate_great_buzzard",
              "projectName": "todo-list-api",
              "deployments": [
                {
                  "deploymentName": "todo-list-api-main-59eec11",
                  "branch": "main",
                  "environmentType": "PRODUCTION",
                  "isDefault": true,
                  "stage": "api",
                  "cname": "todo-list-api-main-59eec11.zuplo.app"
                }
              ],
              "hostname": "api.example.com",
              "provider": "cloudflare"
            }
          ],
          "offset": 0,
          "limit": 100
        }
      },
      "Zuplo.CustomDomains.OwnershipVerification": {
        "type": "object",
        "required": [
          "name",
          "type",
          "value"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The DNS record name to create.",
            "example": "_zuplo.api.example.com"
          },
          "type": {
            "type": "string",
            "description": "The DNS record type to create.",
            "example": "TXT"
          },
          "value": {
            "type": "string",
            "description": "The DNS record value to create.",
            "example": "zuplo-verification-token"
          }
        },
        "description": "DNS record details used to verify domain ownership.",
        "example": {
          "name": "_zuplo.api.example.com",
          "type": "TXT",
          "value": "zuplo-verification-token"
        }
      },
      "Zuplo.DeploymentStatus.DeploymentStatus": {
        "type": "object",
        "required": [
          "status",
          "url",
          "steps",
          "buildResult"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "SUCCESS",
              "ERROR",
              "IN_PROGRESS"
            ],
            "example": "SUCCESS"
          },
          "url": {
            "type": "string",
            "example": "https://api.zuplo.com/v1/deployments/lime-fox-main-bbe7540"
          },
          "steps": {
            "type": "object",
            "additionalProperties": {}
          },
          "buildResult": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "description": "Status of a Zuplo project deployment, including the status, build results, and a URL to view more details.",
        "example": {
          "status": "SUCCESS",
          "url": "https://api.zuplo.com/v1/deployments/lime-fox-main-bbe7540",
          "steps": {},
          "buildResult": {}
        }
      },
      "Zuplo.Deployments.Deployment": {
        "type": "object",
        "required": [
          "name",
          "url",
          "label",
          "urlParameter",
          "createdOn",
          "updatedOn",
          "loggingId",
          "accountName",
          "projectName",
          "state",
          "message",
          "branchName",
          "environmentType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the deployment. You can find this in the Zuplo Portal under Settings > Environments.",
            "example": "lime-fox-main-bbe7540"
          },
          "url": {
            "type": "string",
            "example": "https://api.zuplo.com/deployments/lime-fox-main-bbe7540"
          },
          "label": {
            "type": "string",
            "example": "main"
          },
          "urlParameter": {
            "type": "string",
            "example": "main"
          },
          "createdOn": {
            "type": "string",
            "example": "2023-07-25T23:41:41.468Z"
          },
          "updatedOn": {
            "type": "string",
            "example": "2023-07-25T23:41:41.468Z"
          },
          "loggingId": {
            "type": "string",
            "example": "chocolate_great_buzzard::lime-fox::main::main::bbe7540"
          },
          "accountName": {
            "type": "string",
            "example": "chocolate_great_buzzard"
          },
          "projectName": {
            "type": "string",
            "example": "lime-fox"
          },
          "state": {
            "type": "string",
            "example": "STARTED"
          },
          "message": {
            "type": "string",
            "enum": [
              ""
            ],
            "example": ""
          },
          "branchName": {
            "type": "string",
            "example": "main"
          },
          "environmentType": {
            "type": "string",
            "example": "PRODUCTION"
          }
        },
        "description": "A single deployment of a Zup.",
        "example": {
          "name": "lime-fox-main-bbe7540",
          "label": "main",
          "urlParameter": "main",
          "createdOn": "2023-07-25T23:41:41.468Z",
          "updatedOn": "2023-07-25T23:41:41.468Z",
          "loggingId": "chocolate_great_buzzard::lime-fox::main::main::bbe7540",
          "accountName": "chocolate_great_buzzard",
          "projectName": "lime-fox",
          "state": "STARTED",
          "message": "",
          "branchName": "main",
          "url": "https://lime-fox-main-bbe7540.zuplo.app",
          "environmentType": "PRODUCTION"
        }
      },
      "Zuplo.Deployments.DeploymentsList": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Deployments.Deployment"
            }
          }
        },
        "example": {
          "data": [
            {
              "name": "lime-fox-main-bbe7540",
              "label": "main",
              "urlParameter": "main",
              "createdOn": "2023-07-25T23:41:41.468Z",
              "updatedOn": "2023-07-25T23:41:41.468Z",
              "loggingId": "chocolate_great_buzzard::lime-fox::main::main::bbe7540",
              "accountName": "chocolate_great_buzzard",
              "projectName": "lime-fox",
              "state": "STARTED",
              "message": "",
              "branchName": "main",
              "url": "https://lime-fox-main-bbe7540.zuplo.app",
              "environmentType": "PRODUCTION"
            }
          ]
        }
      },
      "Zuplo.Deploys.DeploymentResponse": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string"
          }
        },
        "example": {
          "status": "request enqueued"
        }
      },
      "Zuplo.Deploys.SourceCreateBody": {
        "type": "object",
        "required": [
          "accountName",
          "projectName",
          "branchName"
        ],
        "properties": {
          "accountName": {
            "type": "string",
            "description": "The name of the account",
            "example": "my-account"
          },
          "projectName": {
            "type": "string",
            "description": "The name of the project",
            "example": "my-project"
          },
          "branchName": {
            "type": "string",
            "description": "The name of the branch for deployment",
            "example": "main"
          }
        }
      },
      "Zuplo.Deploys.SourceUrlCreateBody": {
        "type": "object",
        "required": [
          "accountName",
          "projectName",
          "branchName"
        ],
        "properties": {
          "accountName": {
            "type": "string",
            "description": "The name of the account",
            "example": "my-account"
          },
          "projectName": {
            "type": "string",
            "description": "The name of the project",
            "example": "my-project"
          },
          "branchName": {
            "type": "string",
            "description": "The name of the branch for deployment",
            "example": "main"
          },
          "repositoryUrl": {
            "type": "string",
            "description": "The git repository url of the source code",
            "example": "https://github.com/my-account/my-project"
          },
          "branch": {
            "type": "string",
            "description": "The git branch",
            "example": "main"
          },
          "sha": {
            "type": "string",
            "description": "The git sha of the commit",
            "example": "9fb5c38a83013be1625c9b5cb2d1bdf458ff827e"
          }
        }
      },
      "Zuplo.Environments.Environment": {
        "type": "object",
        "required": [
          "name",
          "createdOn",
          "accountName",
          "projectName",
          "branchName",
          "environmentType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the environment.",
            "example": "lime-fox-main-bbe7540"
          },
          "createdOn": {
            "type": "string",
            "example": "2023-07-25T23:41:41.468Z"
          },
          "accountName": {
            "type": "string",
            "example": "chocolate_great_buzzard"
          },
          "projectName": {
            "type": "string",
            "example": "lime-fox"
          },
          "branchName": {
            "type": "string",
            "example": "main"
          },
          "environmentType": {
            "type": "string",
            "enum": [
              "production",
              "preview",
              "development"
            ],
            "example": "production"
          }
        },
        "description": "The environment representing a Zup. This is mainly used in self-hosting deployments.",
        "example": {
          "name": "lime-fox-main-bbe7540",
          "accountName": "chocolate_great_buzzard",
          "projectName": "lime-fox",
          "createdOn": "2023-07-25T23:41:41.468Z",
          "branchName": "main",
          "environmentType": "production"
        }
      },
      "Zuplo.Environments.EnvironmentCreateBody": {
        "type": "object",
        "required": [
          "accountName",
          "projectName",
          "environmentType",
          "branchName"
        ],
        "properties": {
          "accountName": {
            "type": "string",
            "description": "The name of the account",
            "example": "my-account"
          },
          "projectName": {
            "type": "string",
            "description": "The name of the project",
            "example": "my-project"
          },
          "environmentType": {
            "type": "string",
            "enum": [
              "production",
              "preview"
            ],
            "description": "The name of the branch for deployment",
            "example": "preview"
          },
          "branchName": {
            "type": "string",
            "description": "The name of the branch for deployment",
            "example": "main"
          }
        }
      },
      "Zuplo.Environments.EnvironmentsList": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Environments.Environment"
            }
          }
        },
        "example": {
          "data": [
            {
              "name": "lime-fox-main-bbe7540",
              "accountName": "chocolate_great_buzzard",
              "projectName": "lime-fox",
              "createdOn": "2023-07-25T23:41:41.468Z",
              "branchName": "main",
              "environmentType": "production"
            }
          ]
        }
      },
      "Zuplo.HttpProblemDetails.BadRequestProblemResponse": {
        "type": "object",
        "required": [
          "type",
          "title"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "https://httpproblems.com/http-status/400"
            ]
          },
          "title": {
            "type": "string",
            "enum": [
              "Bad Request"
            ]
          }
        },
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "title"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              },
              "instance": {
                "type": "string"
              }
            }
          }
        ],
        "example": {
          "type": "https://httpproblems.com/http-status/400",
          "title": "Bad Request",
          "status": 400
        }
      },
      "Zuplo.HttpProblemDetails.InternalServerErrorProblemResponse": {
        "type": "object",
        "required": [
          "type",
          "title"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "https://httpproblems.com/http-status/500"
            ]
          },
          "title": {
            "type": "string",
            "enum": [
              "Internal Server Error"
            ]
          }
        },
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "title"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              },
              "instance": {
                "type": "string"
              }
            }
          }
        ],
        "example": {
          "type": "https://httpproblems.com/http-status/500",
          "title": "Internal Server Error",
          "status": 500
        }
      },
      "Zuplo.HttpProblemDetails.NotFoundProblemResponse": {
        "type": "object",
        "required": [
          "type",
          "title"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "https://httpproblems.com/http-status/404"
            ]
          },
          "title": {
            "type": "string",
            "enum": [
              "Not Found"
            ]
          }
        },
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "title"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              },
              "instance": {
                "type": "string"
              }
            }
          }
        ],
        "example": {
          "type": "https://httpproblems.com/http-status/404",
          "title": "Not Found",
          "status": 404
        }
      },
      "Zuplo.HttpProblemDetails.UnauthorizedProblemResponse": {
        "type": "object",
        "required": [
          "type",
          "title"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "https://httpproblems.com/http-status/401"
            ]
          },
          "title": {
            "type": "string",
            "enum": [
              "Unauthorized"
            ]
          }
        },
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "title"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              },
              "instance": {
                "type": "string"
              }
            }
          }
        ],
        "example": {
          "type": "https://httpproblems.com/http-status/401",
          "title": "Unauthorized",
          "status": 401
        }
      },
      "Zuplo.ManagedDedicated.Fleet": {
        "type": "object",
        "required": [
          "id",
          "name",
          "vendor",
          "controlPlaneUrl",
          "isAccountDefault",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Fleet ID"
          },
          "name": {
            "type": "string",
            "description": "Fleet name"
          },
          "vendor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.ManagedDedicated.FleetVendor"
              }
            ],
            "description": "Fleet vendor"
          },
          "controlPlaneUrl": {
            "type": "string",
            "description": "Control plane URL"
          },
          "isAccountDefault": {
            "type": "boolean",
            "description": "Whether this is the default fleet for the account"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "Creation timestamp"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "Last update timestamp"
          }
        },
        "description": "Fleet information"
      },
      "Zuplo.ManagedDedicated.FleetConfigurationRequest": {
        "type": "object",
        "additionalProperties": {},
        "description": "Fleet configuration request"
      },
      "Zuplo.ManagedDedicated.FleetConfigurationResponse": {
        "type": "object",
        "additionalProperties": {},
        "description": "Fleet configuration response"
      },
      "Zuplo.ManagedDedicated.FleetListResponse": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.ManagedDedicated.Fleet"
            },
            "description": "List of fleets"
          }
        },
        "description": "Fleet list response"
      },
      "Zuplo.ManagedDedicated.FleetVendor": {
        "type": "string",
        "enum": [
          "akamai",
          "amazon",
          "google",
          "microsoft"
        ],
        "description": "Fleet vendor"
      },
      "Zuplo.Metering.Bucket": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id",
          "accountName"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "example": "mtr_STYBm01FabkgZOP3KtkYdJuO",
            "readOnly": true
          },
          "accountName": {
            "type": "string",
            "example": "my-account",
            "readOnly": true
          }
        },
        "example": {
          "id": "mtr_STYBm01FabkgZOP3KtkYdJuO",
          "accountName": "my-account",
          "createdOn": "2023-07-24T19:26:36.000Z",
          "updatedOn": "2023-07-24T19:26:36.000Z"
        }
      },
      "Zuplo.Metering.Buckets": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Metering.Bucket"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "mtr_STYBm01FabkgZOP3KtkYdJuO",
              "accountName": "my-account",
              "createdOn": "2023-07-24T19:26:36.000Z",
              "updatedOn": "2023-07-24T19:26:36.000Z"
            }
          ]
        }
      },
      "Zuplo.Metering.Plan": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id",
          "hasSubscriptions",
          "label",
          "planExternalId",
          "meters"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "example": "plan_40dRwJecUOu9xDj2OeXDcYA5",
            "readOnly": true
          },
          "hasSubscriptions": {
            "type": "boolean",
            "example": true,
            "readOnly": true
          },
          "label": {
            "type": "string",
            "example": "Basic Subscription Plan"
          },
          "planExternalId": {
            "type": "string",
            "example": "prod_Pbyd5ARBWtFxkg"
          },
          "meters": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "example": "Requests"
                },
                "max": {
                  "type": "integer",
                  "example": 10
                },
                "available": {
                  "type": "integer"
                }
              },
              "required": [
                "max"
              ]
            },
            "example": {
              "requests": {
                "label": "Requests",
                "max": 10
              }
            }
          },
          "trialDays": {
            "type": "integer",
            "example": 10
          },
          "trialEndStatus": {
            "type": "string",
            "enum": [
              "paused",
              "canceled"
            ],
            "example": "paused"
          },
          "isTrialCollectPayment": {
            "type": "boolean"
          }
        },
        "example": {
          "id": "plan_GUmJS9zKX5mkY46Cf6fAUejZ",
          "createdOn": "2024-01-23T21:31:47Z",
          "updatedOn": "2024-01-23T21:31:47Z",
          "label": "someLabel",
          "planExternalId": "somePlanExternalId",
          "meters": {
            "computeUnits": {
              "label": "Compute Units",
              "max": 30
            },
            "requests": {
              "label": "Requests",
              "max": 10
            }
          },
          "hasSubscriptions": true
        }
      },
      "Zuplo.Metering.PlanCreateBody": {
        "type": "object",
        "required": [
          "label",
          "planExternalId",
          "meters"
        ],
        "properties": {
          "label": {
            "type": "string",
            "example": "Basic Subscription Plan"
          },
          "planExternalId": {
            "type": "string",
            "example": "prod_Pbyd5ARBWtFxkg"
          },
          "meters": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "example": "Requests"
                },
                "max": {
                  "type": "integer",
                  "example": 10
                },
                "available": {
                  "type": "integer"
                }
              },
              "required": [
                "max"
              ]
            },
            "example": {
              "requests": {
                "label": "Requests",
                "max": 10
              }
            }
          },
          "trialDays": {
            "type": "integer",
            "example": 10
          },
          "trialEndStatus": {
            "type": "string",
            "enum": [
              "paused",
              "canceled"
            ],
            "example": "paused"
          },
          "isTrialCollectPayment": {
            "type": "boolean"
          }
        }
      },
      "Zuplo.Metering.PlanUpdateBody": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "example": "Basic Subscription Plan"
          },
          "planExternalId": {
            "type": "string",
            "example": "prod_Pbyd5ARBWtFxkg"
          },
          "meters": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "example": "Requests"
                },
                "max": {
                  "type": "integer",
                  "example": 10
                },
                "available": {
                  "type": "integer"
                }
              }
            },
            "example": {
              "requests": {
                "label": "Requests",
                "max": 10
              }
            }
          },
          "trialDays": {
            "type": "integer",
            "example": 10
          },
          "trialEndStatus": {
            "type": "string",
            "enum": [
              "paused",
              "canceled"
            ],
            "example": "paused"
          },
          "isTrialCollectPayment": {
            "type": "boolean"
          }
        }
      },
      "Zuplo.Metering.Plans": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Metering.Plan"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "plan_GUmJS9zKX5mkY46Cf6fAUejZ",
              "createdOn": "2024-01-23T21:31:47Z",
              "updatedOn": "2024-01-23T21:31:47Z",
              "label": "someLabel",
              "planExternalId": "somePlanExternalId",
              "meters": {
                "computeUnits": {
                  "label": "Compute Units",
                  "max": 30
                },
                "requests": {
                  "label": "Requests",
                  "max": 10
                }
              },
              "hasSubscriptions": true
            }
          ]
        }
      },
      "Zuplo.Metering.Quota": {
        "type": "object",
        "additionalProperties": {
          "type": "integer"
        },
        "example": {
          "requests": 10
        }
      },
      "Zuplo.Metering.Subscription": {
        "type": "object",
        "required": [
          "createdOn",
          "updatedOn",
          "id",
          "planIds",
          "planExternalIds",
          "status",
          "type",
          "renewalStrategy",
          "region",
          "customerKey",
          "subscriptionExternalId",
          "customerExternalId"
        ],
        "properties": {
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "example": "sbsc_BnCcCqQHM5H4z60sTR0FfCKg",
            "readOnly": true
          },
          "planIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "plan_ZLbXn7SCZt6KJnD6SU8Ljv8w"
            ]
          },
          "planExternalIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "prod_Pbyd5ARBWtFxkg"
            ]
          },
          "quotaResetAnchor": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "incomplete",
              "incomplete-expired",
              "trialing",
              "past-due",
              "canceled",
              "unpaid",
              "paused"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "periodic"
            ]
          },
          "renewalStrategy": {
            "type": "string",
            "enum": [
              "monthly",
              "yearly"
            ]
          },
          "region": {
            "type": "string",
            "enum": [
              "us-central1",
              "us-east1",
              "europe-west4"
            ]
          },
          "customerKey": {
            "type": "string",
            "example": "d8984b34-defd-458c-bf34-7fb1b69ce714"
          },
          "subscriptionExternalId": {
            "type": "string",
            "example": "sub_1OmlUlLQav6G4UBHsPy2BY7J"
          },
          "customerExternalId": {
            "type": "string",
            "example": "cus_PbzTcoZtPtelYg"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          },
          "trialEndStatus": {
            "type": "string",
            "example": "paused"
          },
          "trialEndDate": {
            "type": "string",
            "format": "date-time"
          },
          "trialStartDate": {
            "type": "string",
            "format": "date-time"
          },
          "nextBillingCycle": {
            "type": "string",
            "format": "date-time"
          },
          "productKey": {
            "type": "string"
          }
        },
        "example": {
          "id": "sbsc_2te8204SbBQ9Zf0D9Ec9SKQC",
          "planIds": [
            "plan_ZLbXn7SCZt6KJnD6SU8Ljv8w"
          ],
          "planExternalIds": [
            "prod_Pbyd5ARBWtFxkg"
          ],
          "createdOn": "2024-02-22T23:16:06Z",
          "updatedOn": "2024-02-22T23:16:06Z",
          "quotaResetAnchor": "2024-02-22T23:16:06Z",
          "status": "active",
          "type": "periodic",
          "renewalStrategy": "monthly",
          "region": "us-central1",
          "customerKey": "d8984b34-defd-458c-bf34-7fb1b69ce714",
          "subscriptionExternalId": "sub_1OmlUlLQav6G4UBHsPy2BY7J",
          "customerExternalId": "cus_PbzTcoZtPtelYg",
          "nextBillingCycle": "2024-06-22T00:00:00Z"
        }
      },
      "Zuplo.Metering.SubscriptionCreateBody": {
        "type": "object",
        "required": [
          "planIds",
          "planExternalIds",
          "status",
          "type",
          "renewalStrategy",
          "region",
          "customerKey",
          "subscriptionExternalId",
          "customerExternalId"
        ],
        "properties": {
          "planIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "plan_ZLbXn7SCZt6KJnD6SU8Ljv8w"
            ]
          },
          "planExternalIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "prod_Pbyd5ARBWtFxkg"
            ]
          },
          "quotaResetAnchor": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "incomplete",
              "incomplete-expired",
              "trialing",
              "past-due",
              "canceled",
              "unpaid",
              "paused"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "periodic"
            ]
          },
          "renewalStrategy": {
            "type": "string",
            "enum": [
              "monthly",
              "yearly"
            ]
          },
          "region": {
            "type": "string",
            "enum": [
              "us-central1",
              "us-east1",
              "europe-west4"
            ]
          },
          "customerKey": {
            "type": "string",
            "example": "d8984b34-defd-458c-bf34-7fb1b69ce714"
          },
          "subscriptionExternalId": {
            "type": "string",
            "example": "sub_1OmlUlLQav6G4UBHsPy2BY7J"
          },
          "customerExternalId": {
            "type": "string",
            "example": "cus_PbzTcoZtPtelYg"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          },
          "trialEndStatus": {
            "type": "string",
            "example": "paused"
          },
          "trialEndDate": {
            "type": "string",
            "format": "date-time"
          },
          "trialStartDate": {
            "type": "string",
            "format": "date-time"
          },
          "nextBillingCycle": {
            "type": "string",
            "format": "date-time"
          },
          "productKey": {
            "type": "string"
          }
        }
      },
      "Zuplo.Metering.SubscriptionUpdateBody": {
        "type": "object",
        "properties": {
          "planExternalIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "prod_Pbyd5ARBWtFxkg"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "incomplete",
              "incomplete-expired",
              "trialing",
              "past-due",
              "canceled",
              "unpaid",
              "paused"
            ]
          },
          "prorate": {
            "type": "number",
            "example": 0.75
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          },
          "trialEndDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Zuplo.Metering.Subscriptions": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Metering.Subscription"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "sbsc_vP3r5TxhjMBLZr6JsNGAWkgB",
              "planIds": [
                "plan_5jqkZ9K6VzCn2YSeQ0l7WoRl"
              ],
              "planExternalIds": [
                "prod_PQIwOzwlFOd0ky"
              ],
              "createdOn": "2024-02-06T23:34:10Z",
              "updatedOn": "2024-02-06T23:34:10Z",
              "quotaResetAnchor": "2024-02-06T23:34:10Z",
              "status": "active",
              "type": "periodic",
              "renewalStrategy": "monthly",
              "region": "us-central1",
              "customerKey": "5b8d3cc0-5cd7-4910-a502-d904181815c2",
              "productKey": "routes.oas.json",
              "subscriptionExternalId": "sub_1Ogy6hEgfsfDxksqxt4Ffiv8",
              "customerExternalId": "cus_PW0625dV3Cz0sr",
              "nextBillingCycle": "2024-03-06T00:00:00Z"
            }
          ]
        }
      },
      "Zuplo.MeteringV3.CalculateTaxResponse": {
        "type": "object",
        "required": [
          "currency",
          "items",
          "subtotal",
          "taxAmount",
          "taxInclusive",
          "taxes",
          "total"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.TaxCalculationItemResult"
            },
            "nullable": true
          },
          "subtotal": {
            "type": "integer",
            "format": "int64"
          },
          "taxAmount": {
            "type": "integer",
            "format": "int64"
          },
          "taxInclusive": {
            "type": "boolean"
          },
          "taxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.TaxItem"
            },
            "nullable": true
          },
          "total": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.CancelSubscriptionRequestBody": {
        "type": "object",
        "required": [
          "timing"
        ],
        "properties": {
          "timing": {
            "type": "string",
            "description": "The timing for canceling the subscription. Supported values: immediate, next_billing_cycle"
          }
        }
      },
      "Zuplo.MeteringV3.ChangePlanSubscriptionRequestBody": {
        "type": "object",
        "required": [
          "planId"
        ],
        "properties": {
          "planId": {
            "type": "string",
            "description": "The plan ID"
          },
          "customerEmail": {
            "type": "string",
            "description": "The customer email address (required for private plans)"
          }
        }
      },
      "Zuplo.MeteringV3.CreateMntMemberInviteRequestBody": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "Invitee email address"
          },
          "invitedBy": {
            "type": "string",
            "description": "Identifier of the inviting member (optional)"
          }
        }
      },
      "Zuplo.MeteringV3.CreateMntMemberRequestBody": {
        "type": "object",
        "required": [
          "userId"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "description": "User record ID"
          }
        }
      },
      "Zuplo.MeteringV3.CreateOmPlanInviteResponseBody": {
        "type": "object",
        "required": [
          "bucketId",
          "createdOn",
          "email",
          "id",
          "planId",
          "updatedOn"
        ],
        "properties": {
          "bucketId": {
            "type": "string"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "planId": {
            "type": "string"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Zuplo.MeteringV3.CreatePaymentCheckoutSessionRequestBody": {
        "type": "object",
        "required": [
          "customerKey",
          "billingEmail",
          "planId",
          "successUrl",
          "cancelUrl"
        ],
        "properties": {
          "customerKey": {
            "type": "string",
            "description": "The customer key"
          },
          "billingEmail": {
            "type": "string",
            "description": "The billing email address"
          },
          "planId": {
            "type": "string",
            "description": "The plan ID"
          },
          "successUrl": {
            "type": "string",
            "description": "The URL to which the payment provider should send the customer when payment or setup is complete."
          },
          "cancelUrl": {
            "type": "string",
            "description": "If set, the payment provider displays a back button and the customer is directed to this URL if they decide to cancel payment."
          }
        }
      },
      "Zuplo.MeteringV3.CreatePaymentCheckoutSessionResponseBody": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "The URL to redirect the customer to. Points to Stripe checkout for new customers, or directly to the success URL for customers with existing Stripe billing."
          }
        }
      },
      "Zuplo.MeteringV3.CreatePaymentPortalSessionRequestBody": {
        "type": "object",
        "required": [
          "customerKey",
          "billingEmail"
        ],
        "properties": {
          "customerKey": {
            "type": "string",
            "description": "The customer key"
          },
          "billingEmail": {
            "type": "string",
            "description": "The billing email address"
          },
          "locale": {
            "type": "string",
            "description": "The IETF language tag of the locale the customer portal is displayed in (e.g., en, de, es)"
          },
          "returnUrl": {
            "type": "string",
            "description": "The URL to redirect the customer to after they complete their actions in the portal"
          }
        }
      },
      "Zuplo.MeteringV3.CreatePaymentPortalSessionResponseBody": {
        "type": "object",
        "required": [
          "type",
          "url"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of session URL returned: 'portal' for existing Stripe customers, 'checkout' for new customers who need to set up billing."
          },
          "url": {
            "type": "string",
            "description": "The URL to the Stripe session."
          }
        }
      },
      "Zuplo.MeteringV3.CreateSubscriptionRequestBody": {
        "type": "object",
        "required": [
          "customerId",
          "customerEmail",
          "planId"
        ],
        "properties": {
          "customerId": {
            "type": "string",
            "description": "The Zuplo metering customer ID or key"
          },
          "customerEmail": {
            "type": "string",
            "description": "The customer email address"
          },
          "planId": {
            "type": "string",
            "description": "The plan ID"
          }
        }
      },
      "Zuplo.MeteringV3.CreateUserRequestBody": {
        "type": "object",
        "required": [
          "sub",
          "email"
        ],
        "properties": {
          "sub": {
            "type": "string",
            "description": "Auth subject (JWT sub)"
          },
          "email": {
            "type": "string",
            "description": "User email address"
          },
          "emailVerified": {
            "type": "boolean",
            "description": "Whether the email is verified; defaults to false when omitted"
          },
          "externalId": {
            "type": "string",
            "description": "External identifier unique within the bucket"
          },
          "firstName": {
            "type": "string",
            "description": "User first name"
          },
          "lastName": {
            "type": "string",
            "description": "User last name"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "description": "User metadata"
          }
        }
      },
      "Zuplo.MeteringV3.CustomInvoicingTaxConfig": {
        "type": "object",
        "required": [
          "code"
        ],
        "properties": {
          "code": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.DefaultTaxConfigBehavior": {
        "type": "object",
        "properties": {
          "behavior": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.DiscountPercentage": {
        "type": "object",
        "required": [
          "percentage"
        ],
        "properties": {
          "percentage": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.DiscountUsage": {
        "type": "object",
        "required": [
          "quantity"
        ],
        "properties": {
          "quantity": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.Discounts": {
        "type": "object",
        "properties": {
          "percentage": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.DiscountPercentage"
          },
          "usage": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.DiscountUsage"
          }
        }
      },
      "Zuplo.MeteringV3.Entitlement": {
        "type": "object"
      },
      "Zuplo.MeteringV3.EntitlementValue": {
        "type": "object",
        "required": [
          "hasAccess"
        ],
        "properties": {
          "balance": {
            "type": "number",
            "format": "double"
          },
          "config": {
            "type": "string"
          },
          "hasAccess": {
            "type": "boolean"
          },
          "overage": {
            "type": "number",
            "format": "double"
          },
          "usage": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "Zuplo.MeteringV3.Feature": {
        "type": "object",
        "required": [
          "createdAt",
          "id",
          "key",
          "name",
          "updatedAt"
        ],
        "properties": {
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "advancedMeterGroupByFilters": {
            "type": "object",
            "additionalProperties": {}
          },
          "archivedAt": {
            "type": "string",
            "format": "date-time"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "meterGroupByFilters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "meterSlug": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.GetPlanPurchaseDetailsResponseBody": {
        "type": "object",
        "required": [
          "billingCadence",
          "createdAt",
          "currency",
          "id",
          "key",
          "metadata",
          "monthlyPrice",
          "name",
          "paymentMethodRequired",
          "phases",
          "status",
          "updatedAt",
          "validationErrors",
          "version",
          "yearlyPrice"
        ],
        "properties": {
          "alignment": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanAlignment"
          },
          "billingCadence": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "effectiveFrom": {
            "type": "string",
            "format": "date-time"
          },
          "effectiveTo": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "monthlyPrice": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string"
          },
          "paymentMethodRequired": {
            "type": "boolean"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanPurchasePhase"
            },
            "nullable": true
          },
          "proRatingConfig": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.ProRatingConfig"
          },
          "status": {
            "type": "string"
          },
          "tax": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.CalculateTaxResponse"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "validationErrors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanPurchaseValidationError"
            },
            "nullable": true
          },
          "version": {
            "type": "integer",
            "format": "int64"
          },
          "yearlyPrice": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Zuplo.MeteringV3.GetSubscriptionUsageResponseBody": {
        "type": "object",
        "required": [
          "customerId",
          "entitlements",
          "subscriptionId"
        ],
        "properties": {
          "customerId": {
            "type": "string"
          },
          "entitlements": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.EntitlementValue"
            }
          },
          "paymentStatus": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionPaymentStatus"
          },
          "planKey": {
            "type": "string"
          },
          "subscriptionId": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.ListMntMemberInvitesResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberInviteResponseBody"
            },
            "nullable": true,
            "description": "Invites on this page"
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.ListMntMembersResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberResponseBody"
            },
            "nullable": true,
            "description": "Members on this page"
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.ListOmPlanInvitesResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.CreateOmPlanInviteResponseBody"
            },
            "nullable": true,
            "description": "The items on the page"
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.ListSubscriptionWithAPIKeysItem": {
        "type": "object",
        "properties": {
          "plan": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanWithPricing"
          }
        },
        "allOf": [
          {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionWithAPIKeysResponse"
          }
        ]
      },
      "Zuplo.MeteringV3.ListSubscriptionsResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.ListSubscriptionWithAPIKeysItem"
            },
            "nullable": true
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.ListUserMembershipsResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMembershipResponseBody"
            },
            "nullable": true,
            "description": "Memberships on this page"
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.ListUsersResponseBody": {
        "type": "object",
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.UserResponseBody"
            },
            "nullable": true,
            "description": "Users on this page"
          },
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.MntMemberInviteResponseBody": {
        "type": "object",
        "required": [
          "bucketId",
          "code",
          "createdOn",
          "customerId",
          "email",
          "expiresOn",
          "id",
          "status",
          "updatedOn"
        ],
        "properties": {
          "bucketId": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "customerId": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "expiresOn": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          },
          "acceptedOn": {
            "type": "string",
            "format": "date-time"
          },
          "invitedBy": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.MntMemberInviteStatusFilter": {
        "type": "string",
        "enum": [
          "pending",
          "accepted",
          "revoked",
          "rejected"
        ]
      },
      "Zuplo.MeteringV3.MntMemberInviteStatusTransition": {
        "type": "string",
        "enum": [
          "accepted",
          "rejected",
          "revoked",
          "pending"
        ]
      },
      "Zuplo.MeteringV3.MntMemberResponseBody": {
        "type": "object",
        "required": [
          "id",
          "bucketId",
          "customerId",
          "userId",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "bucketId": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberUserResponseBody"
          }
        }
      },
      "Zuplo.MeteringV3.MntMemberUserResponseBody": {
        "type": "object",
        "required": [
          "id",
          "emailVerified",
          "sub",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "sub": {
            "type": "string"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.MntMembershipResponseBody": {
        "type": "object",
        "required": [
          "id",
          "bucketId",
          "customerId",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "bucketId": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Zuplo.MeteringV3.Period": {
        "type": "object",
        "required": [
          "from",
          "to"
        ],
        "properties": {
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Zuplo.MeteringV3.PlanAlignment": {
        "type": "object",
        "properties": {
          "billablesMustAlign": {
            "type": "boolean"
          }
        }
      },
      "Zuplo.MeteringV3.PlanPurchasePhase": {
        "type": "object",
        "required": [
          "duration",
          "key",
          "metadata",
          "name",
          "rateCards"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "duration": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "rateCards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanPurchaseRateCard"
            },
            "nullable": true
          }
        }
      },
      "Zuplo.MeteringV3.PlanPurchaseRateCard": {
        "type": "object"
      },
      "Zuplo.MeteringV3.PlanPurchaseValidationError": {
        "type": "object",
        "required": [
          "code",
          "field",
          "message"
        ],
        "properties": {
          "attributes": {
            "type": "object",
            "additionalProperties": {}
          },
          "code": {
            "type": "string"
          },
          "field": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.PlanReference": {
        "type": "object",
        "required": [
          "id",
          "key",
          "version"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.PlanWithPricing": {
        "type": "object",
        "required": [
          "billingCadence",
          "createdAt",
          "currency",
          "id",
          "key",
          "metadata",
          "monthlyPrice",
          "name",
          "paymentMethodRequired",
          "phases",
          "status",
          "updatedAt",
          "validationErrors",
          "version",
          "yearlyPrice"
        ],
        "properties": {
          "alignment": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanAlignment"
          },
          "billingCadence": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string"
          },
          "defaultTaxConfig": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.DefaultTaxConfigBehavior"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "effectiveFrom": {
            "type": "string",
            "format": "date-time"
          },
          "effectiveTo": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "monthlyPrice": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string"
          },
          "paymentMethodRequired": {
            "type": "boolean"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanPurchasePhase"
            },
            "nullable": true
          },
          "proRatingConfig": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.ProRatingConfig"
          },
          "status": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "validationErrors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanPurchaseValidationError"
            },
            "nullable": true
          },
          "version": {
            "type": "integer",
            "format": "int64"
          },
          "yearlyPrice": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Zuplo.MeteringV3.ProRatingConfig": {
        "type": "object",
        "required": [
          "enabled",
          "mode"
        ],
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "mode": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.RateCardUsageBasedPrice": {
        "type": "object"
      },
      "Zuplo.MeteringV3.RollAPIKeyRequestBody": {
        "type": "object",
        "properties": {
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "The expiration date for the key being rolled (optional)"
          }
        }
      },
      "Zuplo.MeteringV3.StripeTaxConfig": {
        "type": "object",
        "required": [
          "code"
        ],
        "properties": {
          "code": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionAlignment": {
        "type": "object",
        "properties": {
          "billablesMustAlign": {
            "type": "boolean"
          },
          "currentAlignedBillingPeriod": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.Period"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionApiKey": {
        "type": "object",
        "required": [
          "id",
          "key",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the API key"
          },
          "key": {
            "type": "string",
            "description": "The API key"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "The creation date of the API key"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "The last update date of the API key"
          },
          "description": {
            "type": "string",
            "description": "The description of the API key"
          },
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "The expiration date of the API key"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionConsumerResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "createdOn",
          "updatedOn",
          "tags",
          "metadata",
          "apiKeys",
          "managers"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The consumer id"
          },
          "name": {
            "type": "string",
            "description": "The consumer name"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "Date in which the record was created"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "Date in which the record was updated"
          },
          "description": {
            "type": "string",
            "description": "The consumer description"
          },
          "tags": {
            "type": "object",
            "additionalProperties": {},
            "description": "The consumer tags"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "description": "The consumer metadata"
          },
          "apiKeys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionApiKey"
            },
            "nullable": true
          },
          "managers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionManager"
            },
            "nullable": true
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionItem": {
        "type": "object",
        "required": [
          "activeFrom",
          "billingCadence",
          "createdAt",
          "id",
          "key",
          "metadata",
          "name",
          "price",
          "updatedAt"
        ],
        "properties": {
          "activeFrom": {
            "type": "string",
            "format": "date-time"
          },
          "billingCadence": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "price": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.RateCardUsageBasedPrice"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "activeTo": {
            "type": "string",
            "format": "date-time"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "discounts": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.Discounts"
          },
          "featureKey": {
            "type": "string"
          },
          "included": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionItemIncluded"
          },
          "taxConfig": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.TaxConfig"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionItemIncluded": {
        "type": "object",
        "required": [
          "feature"
        ],
        "properties": {
          "feature": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.Feature"
          },
          "entitlement": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.Entitlement"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionManager": {
        "type": "object",
        "required": [
          "id",
          "email",
          "sub",
          "createdOn"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Manager record id"
          },
          "email": {
            "type": "string",
            "description": "Manager email address"
          },
          "sub": {
            "type": "string",
            "description": "Manager sub"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "Date in which the record was created"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionPaymentStatus": {
        "type": "object",
        "required": [
          "isFirstPayment",
          "status"
        ],
        "properties": {
          "isFirstPayment": {
            "type": "boolean"
          },
          "lastPaymentFailedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastPaymentSucceededAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionPhaseExpanded": {
        "type": "object",
        "required": [
          "activeFrom",
          "createdAt",
          "id",
          "key",
          "metadata",
          "name",
          "updatedAt",
          "itemTimelines",
          "items"
        ],
        "properties": {
          "activeFrom": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "itemTimelines": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionItem"
              },
              "nullable": true
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionItem"
            },
            "nullable": true
          },
          "activeTo": {
            "type": "string",
            "format": "date-time"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "discounts": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.Discounts"
          }
        }
      },
      "Zuplo.MeteringV3.SubscriptionWithAPIKeysResponse": {
        "type": "object",
        "required": [
          "activeFrom",
          "billingAnchor",
          "billingCadence",
          "consumer",
          "createdAt",
          "currency",
          "customerId",
          "id",
          "metadata",
          "name",
          "phases",
          "status",
          "updatedAt"
        ],
        "properties": {
          "activeFrom": {
            "type": "string",
            "format": "date-time"
          },
          "billingAnchor": {
            "type": "string",
            "format": "date-time"
          },
          "billingCadence": {
            "type": "string"
          },
          "consumer": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionConsumerResponse"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionPhaseExpanded"
            },
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "activeTo": {
            "type": "string",
            "format": "date-time"
          },
          "alignment": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.SubscriptionAlignment"
          },
          "annotations": {
            "type": "object",
            "additionalProperties": {}
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "plan": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.PlanReference"
          },
          "proRatingConfig": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.ProRatingConfig"
          }
        }
      },
      "Zuplo.MeteringV3.TaxCalculationItemResult": {
        "type": "object",
        "required": [
          "amount",
          "taxAmount"
        ],
        "properties": {
          "amount": {
            "type": "integer",
            "format": "int64"
          },
          "taxAmount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Zuplo.MeteringV3.TaxConfig": {
        "type": "object",
        "properties": {
          "behavior": {
            "type": "string"
          },
          "customInvoicing": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.CustomInvoicingTaxConfig"
          },
          "stripe": {
            "$ref": "#/components/schemas/Zuplo.MeteringV3.StripeTaxConfig"
          }
        }
      },
      "Zuplo.MeteringV3.TaxItem": {
        "type": "object",
        "required": [
          "amount",
          "jurisdiction",
          "rate",
          "taxType"
        ],
        "properties": {
          "amount": {
            "type": "integer",
            "format": "int64"
          },
          "jurisdiction": {
            "type": "string"
          },
          "rate": {
            "type": "string"
          },
          "taxType": {
            "type": "string"
          }
        }
      },
      "Zuplo.MeteringV3.UpdateMntMemberInviteRequestBody": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Invitee email address (patch a pending invite, or set member email when accepting)"
          },
          "emailVerified": {
            "type": "boolean",
            "description": "Member emailVerified when accepting; defaults to false when omitted"
          },
          "expiresOn": {
            "type": "string",
            "format": "date-time",
            "description": "Invite expiration time (patch a pending invite)"
          },
          "firstName": {
            "type": "string",
            "description": "Member first name when accepting"
          },
          "invitedBy": {
            "type": "string",
            "description": "Identifier of the inviting member (patch a pending invite)"
          },
          "lastName": {
            "type": "string",
            "description": "Member last name when accepting"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberInviteStatusTransition"
              }
            ],
            "description": "Invite status transition: accepted or rejected (invitee), or revoked or pending (admin)"
          },
          "sub": {
            "type": "string",
            "description": "Auth subject (JWT sub); required when accepting or rejecting"
          }
        }
      },
      "Zuplo.MeteringV3.UpdateMntMemberInviteResponseBody": {
        "type": "object",
        "properties": {
          "invite": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberInviteResponseBody"
              }
            ],
            "description": "Present when status is revoked or rejected"
          },
          "member": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.MeteringV3.MntMemberResponseBody"
              }
            ],
            "description": "Present when status is accepted"
          }
        }
      },
      "Zuplo.MeteringV3.UserResponseBody": {
        "type": "object",
        "required": [
          "id",
          "bucketId",
          "sub",
          "emailVerified",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "bucketId": {
            "type": "string"
          },
          "sub": {
            "type": "string"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": "string"
          },
          "externalId": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        }
      },
      "Zuplo.MtlsCertificates.CertificateInfo": {
        "type": "object",
        "required": [
          "subject",
          "issuer",
          "validFrom",
          "validTo",
          "serialNumber"
        ],
        "properties": {
          "subject": {
            "type": "string",
            "description": "Certificate subject",
            "example": "CN=example.com"
          },
          "issuer": {
            "type": "string",
            "description": "Certificate issuer",
            "example": "CN=Example CA"
          },
          "validFrom": {
            "type": "string",
            "description": "Certificate valid from date",
            "example": "2024-01-01T00:00:00Z"
          },
          "validTo": {
            "type": "string",
            "description": "Certificate valid to date",
            "example": "2025-01-01T00:00:00Z"
          },
          "serialNumber": {
            "type": "string",
            "description": "Certificate serial number",
            "example": "12345"
          }
        }
      },
      "Zuplo.MtlsCertificates.Environments": {
        "type": "object",
        "required": [
          "development",
          "preview",
          "production"
        ],
        "properties": {
          "development": {
            "type": "boolean",
            "description": "Whether the certificate is enabled for the development environment"
          },
          "preview": {
            "type": "boolean",
            "description": "Whether the certificate is enabled for the preview environment"
          },
          "production": {
            "type": "boolean",
            "description": "Whether the certificate is enabled for the production environment"
          }
        }
      },
      "Zuplo.MtlsCertificates.MtlsCertificate": {
        "type": "object",
        "required": [
          "id",
          "name",
          "certificateInfo",
          "environments",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier for the certificate",
            "example": "cert_abc123",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The name of the certificate. Must be alphanumeric with underscores.",
            "example": "my_client_cert"
          },
          "certificateInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.MtlsCertificates.CertificateInfo"
              }
            ],
            "description": "Certificate information"
          },
          "environments": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.MtlsCertificates.Environments"
              }
            ],
            "description": "Environments where the certificate is enabled"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          }
        }
      },
      "Zuplo.MtlsCertificates.MtlsCertificateCreateBody": {
        "type": "object",
        "required": [
          "name",
          "certificate",
          "key",
          "environments"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The name of the certificate. Must be alphanumeric with underscores.",
            "example": "my_client_cert"
          },
          "certificate": {
            "type": "string",
            "minLength": 1,
            "description": "The PEM-encoded certificate"
          },
          "key": {
            "type": "string",
            "minLength": 1,
            "description": "The PEM-encoded private key"
          },
          "environments": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "development",
                "preview",
                "production"
              ]
            },
            "minItems": 1,
            "description": "List of environments where the certificate should be enabled"
          }
        }
      },
      "Zuplo.MtlsCertificates.MtlsCertificateListResponse": {
        "type": "object",
        "required": [
          "data",
          "offset",
          "limit"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.MtlsCertificates.MtlsCertificate"
            },
            "description": "List of mTLS certificates"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "description": "Offset for pagination"
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "description": "Limit for pagination"
          }
        }
      },
      "Zuplo.MtlsCertificates.MtlsCertificateUpdateBody": {
        "type": "object",
        "properties": {
          "environments": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "development",
                "preview",
                "production"
              ]
            },
            "minItems": 1,
            "description": "List of environments where the certificate should be enabled"
          }
        }
      },
      "Zuplo.Projects.Project": {
        "type": "object",
        "required": [
          "name",
          "accountName"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project",
            "example": "lime-fox"
          },
          "accountName": {
            "type": "string",
            "description": "The name of the account this project belongs to",
            "example": "lime-fox"
          }
        },
        "description": "A single project.",
        "example": {
          "name": "lime-fox",
          "accountName": "chocolate_great_buzzard"
        }
      },
      "Zuplo.Projects.ProjectCreateBody": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project",
            "example": "lime-fox"
          }
        },
        "description": "The body of the project creation request.",
        "example": {
          "name": "lime-fox"
        }
      },
      "Zuplo.Projects.ProjectsList": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Projects.Project"
            }
          }
        },
        "example": {
          "data": [
            {
              "name": "lime-fox",
              "accountName": "chocolate_great_buzzard"
            },
            {
              "name": "orange-fox",
              "accountName": "chocolate_great_buzzard"
            }
          ]
        }
      },
      "Zuplo.RuntimeLogs.RequestLogDetail": {
        "type": "object",
        "required": [
          "requestId",
          "timestamp",
          "httpMethod",
          "httpStatus",
          "routePath",
          "durationMs",
          "colo",
          "country",
          "city",
          "continent",
          "clientIp",
          "asOrganization",
          "userSub",
          "systemRouteName",
          "zuploUserAgent"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for the request."
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp when the request was received."
          },
          "httpMethod": {
            "type": "string",
            "description": "HTTP method of the request."
          },
          "httpStatus": {
            "type": "integer",
            "format": "int32",
            "description": "HTTP status code of the response."
          },
          "routePath": {
            "type": "string",
            "description": "Matched route path on the deployment."
          },
          "durationMs": {
            "type": "integer",
            "format": "int32",
            "description": "End-to-end duration of the request in milliseconds."
          },
          "colo": {
            "type": "string",
            "description": "Edge colo (point of presence) that served the request."
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code of the client."
          },
          "city": {
            "type": "string",
            "description": "City the request was made from, when derivable from the client IP."
          },
          "continent": {
            "type": "string",
            "description": "Continent code (e.g. `NA`, `EU`) of the client."
          },
          "clientIp": {
            "type": "string",
            "description": "IP address of the client."
          },
          "asOrganization": {
            "type": "string",
            "description": "AS organization (ISP name) for the client IP."
          },
          "userSub": {
            "type": "string",
            "description": "Authenticated user/consumer subject for the request, or `(anonymous)` if unauthenticated."
          },
          "systemRouteName": {
            "type": "string",
            "description": "Internal system route name (Zuplo-defined), if applicable."
          },
          "zuploUserAgent": {
            "type": "string",
            "description": "User-Agent header captured by the Zuplo runtime."
          }
        },
        "description": "Detailed information about a single request, returned in the detail response."
      },
      "Zuplo.RuntimeLogs.RequestLogDetailResponse": {
        "type": "object",
        "required": [
          "request",
          "logs"
        ],
        "properties": {
          "request": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogDetail"
              }
            ],
            "description": "The request summary and contextual fields."
          },
          "logs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogEntry"
            },
            "description": "All log entries emitted during the request, ordered by emit time."
          }
        },
        "description": "Response containing the request detail and all log entries for a single request."
      },
      "Zuplo.RuntimeLogs.RequestLogEntry": {
        "type": "object",
        "required": [
          "logId",
          "timestamp",
          "severity",
          "messages",
          "attributes",
          "source",
          "requestId",
          "atomicCounter"
        ],
        "properties": {
          "logId": {
            "type": "string",
            "description": "Unique identifier for the log entry."
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp when the log entry was emitted."
          },
          "severity": {
            "type": "string",
            "description": "Severity of the log entry (`debug`, `info`, `warn`, `error`)."
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ordered array of message strings for the entry."
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Structured attributes attached to the entry."
          },
          "source": {
            "type": "string",
            "description": "Source that emitted the log (e.g. policy or handler name)."
          },
          "requestId": {
            "type": "string",
            "description": "Request ID this log entry belongs to."
          },
          "atomicCounter": {
            "type": "integer",
            "format": "int32",
            "description": "Monotonically increasing counter used to preserve emit order within a single request."
          }
        },
        "description": "A single log entry emitted during a request."
      },
      "Zuplo.RuntimeLogs.RequestLogSummary": {
        "type": "object",
        "required": [
          "requestId",
          "timestamp",
          "httpMethod",
          "httpStatus",
          "routePath",
          "durationMs",
          "colo",
          "country",
          "maxSeverity",
          "logCount"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for the request (correlation ID stamped by the gateway).",
            "example": "c21fefe0-8938-4f17-8fb8-c844d68042f3"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp when the request was received.",
            "example": "2026-05-14T12:00:00.000Z"
          },
          "httpMethod": {
            "type": "string",
            "description": "HTTP method of the request.",
            "example": "GET"
          },
          "httpStatus": {
            "type": "integer",
            "format": "int32",
            "description": "HTTP status code of the response.",
            "example": 200
          },
          "routePath": {
            "type": "string",
            "description": "Matched route path on the deployment.",
            "example": "/v1/items/:id"
          },
          "durationMs": {
            "type": "integer",
            "format": "int32",
            "description": "End-to-end duration of the request in milliseconds.",
            "example": 42
          },
          "colo": {
            "type": "string",
            "description": "Edge colo (point of presence) that served the request.",
            "example": "SFO"
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code of the client.",
            "example": "US"
          },
          "maxSeverity": {
            "type": "string",
            "nullable": true,
            "description": "Maximum log severity recorded during this request, or null if no logs were emitted.",
            "example": "info"
          },
          "logCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of log entries recorded for this request.",
            "example": 3
          }
        },
        "description": "Summary information for a single request, returned in the list response. Mirrors the per-row shape returned by tenant-api's request-list query."
      },
      "Zuplo.RuntimeLogs.RequestLogsListResponse": {
        "type": "object",
        "required": [
          "data",
          "pagination"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogSummary"
            },
            "description": "Array of request-log summaries, ordered most recent first."
          },
          "pagination": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Zuplo.RuntimeLogs.RequestLogsPagination"
              }
            ],
            "description": "Pagination state for the result set."
          }
        },
        "description": "Response listing request-log summaries for a deployment.",
        "example": {
          "data": [
            {
              "requestId": "c21fefe0-8938-4f17-8fb8-c844d68042f3",
              "timestamp": "2026-05-14T12:00:00.000Z",
              "httpMethod": "GET",
              "httpStatus": 200,
              "routePath": "/v1/items/:id",
              "durationMs": 42,
              "colo": "SFO",
              "country": "US",
              "maxSeverity": "info",
              "logCount": 3
            }
          ],
          "pagination": {
            "cursor": null,
            "hasMore": false
          }
        }
      },
      "Zuplo.RuntimeLogs.RequestLogsPagination": {
        "type": "object",
        "required": [
          "cursor",
          "hasMore"
        ],
        "properties": {
          "cursor": {
            "type": "string",
            "nullable": true,
            "description": "Opaque cursor to pass as `cursor` on the next request to fetch the next page. Treat as a string the client does not introspect — the encoding is owned by tenant-api and can change. `null` when there is no further page."
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether more results are available beyond this page."
          }
        },
        "description": "Pagination information for a request-log list page."
      },
      "Zuplo.Sources.Source": {
        "type": "object",
        "required": [
          "uploadUrl"
        ],
        "properties": {
          "uploadUrl": {
            "type": "string",
            "example": "https://storage.googleapis.com/[..]1fac8da132b9"
          }
        },
        "example": {
          "uploadUrl": "https://storage.googleapis.com/[..]1fac8da132b9"
        }
      },
      "Zuplo.Tunnels.Tunnel": {
        "type": "object",
        "required": [
          "tunnelId",
          "name",
          "token"
        ],
        "properties": {
          "tunnelId": {
            "type": "string",
            "example": "tnl_JcHFzTcJ9y4GU69lKBOaxFYU",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9-]{3,24}$",
            "description": "A friendly name for the tunnel.",
            "example": "api-service-tunnel"
          },
          "token": {
            "type": "string",
            "description": "Set your TUNNEL_TOKEN to this value to connect to the tunnel.",
            "example": "eyJhIjoiODJh[..]m89In0=",
            "readOnly": true
          }
        },
        "description": "Tunnels allow you to expose services running on bare metal, on-premises, or other non-cloud providers to the Zuplo platform. [Further reading](https://zuplo.com/docs/articles/secure-tunnel).",
        "example": {
          "tunnelId": "tnl_JcHFzTcJ9y4GU69lKBOaxFYU",
          "name": "api-service-tunnel",
          "token": "eyJhIjoiODJhNGM0ZTBlYWY3ZmU3YjQyMWRlZHU1ODhlNjg1ZGMiLCJ0IjoiNjY3ZWZhODktYzIyNS00NTIyLWI0M2EtYTgwYzY0OTgxMGY1IiwicyI6IkY5RGdVNnNNOTJWT245OUlUSWxMazVwY3lHV0ZLVG1jcHg2d0I5TkR4Vm89In0="
        }
      },
      "Zuplo.Tunnels.TunnelList": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Tunnels.TunnelListItem"
            }
          },
          "limit": {
            "type": "integer",
            "format": "uint32",
            "example": 1000
          },
          "offset": {
            "type": "integer",
            "format": "uint32",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "uint32"
          }
        },
        "example": {
          "data": [
            {
              "id": "tnl_JcHFzTcJ9y4GU69lKBOaxFYU",
              "name": "api-service-tunnel"
            }
          ]
        }
      },
      "Zuplo.Tunnels.TunnelListItem": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "tnl_JcHFzTcJ9y4GU69lKBOaxFYU",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9-]{3,24}$",
            "description": "A friendly name for the tunnel.",
            "example": "api-service-tunnel"
          }
        }
      },
      "Zuplo.Tunnels.TunnelTeardownOperation": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "tst_1vmvAjaCun9Mfeosn3Og4ddD",
            "readOnly": true
          },
          "status": {
            "type": "string",
            "enum": [
              "in-progress",
              "success",
              "error"
            ],
            "example": "success"
          },
          "message": {
            "type": "string",
            "example": "Successfully torn down tunnel."
          },
          "details": {
            "type": "string"
          }
        }
      },
      "Zuplo.Tunnels.TunneledServiceConfiguration": {
        "type": "object",
        "required": [
          "name",
          "endpoint",
          "configurations"
        ],
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9-]{3,24}$",
            "description": "A friendly name for the service. This name needs to be unique across all your tunneled services. Changing this will invalidate existing services with the name.",
            "example": "authservice"
          },
          "endpoint": {
            "type": "string",
            "description": "The URL of the service that the tunnel will forward to, e.g, http://localhost:3000",
            "example": "https://localhost:3000"
          },
          "configurations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "project": {
                  "type": "string",
                  "description": "The name the project.",
                  "example": "alpha-beta-gamma"
                },
                "accessibleBy": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "working-copy",
                      "preview",
                      "production"
                    ]
                  },
                  "description": "The environments of the project that should have acess to this tunneled service.",
                  "example": [
                    "preview",
                    "production"
                  ]
                }
              },
              "required": [
                "project",
                "accessibleBy"
              ]
            },
            "description": "A list of projects that should have access to this tunneled service under the service://name URL scheme."
          }
        },
        "description": "Tunnel service configuration."
      },
      "Zuplo.Tunnels.TunneledServicesConfiguration": {
        "type": "object",
        "required": [
          "version",
          "services"
        ],
        "properties": {
          "version": {
            "type": "integer",
            "format": "uint8",
            "description": "The version of this configuration format.",
            "example": 1
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Zuplo.Tunnels.TunneledServiceConfiguration"
            },
            "description": "A list of services that the tunnel will connect to."
          }
        }
      },
      "Zuplo.Tunnels.TunneledServicesProvisioningOperation": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "pst_ezMUOh0xFqRWg84DPH5jVwgO",
            "readOnly": true
          },
          "status": {
            "type": "string",
            "enum": [
              "in-progress",
              "success",
              "error"
            ],
            "example": "success"
          },
          "message": {
            "type": "string",
            "example": "Successfully provisioned services."
          },
          "details": {
            "type": "string"
          }
        }
      },
      "Zuplo.Variables.Variable": {
        "type": "object",
        "required": [
          "branch",
          "createdOn",
          "updatedOn",
          "name",
          "isSecret",
          "value"
        ],
        "properties": {
          "branch": {
            "type": "string",
            "example": "preview",
            "readOnly": true
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was created.",
            "example": "2023-04-18T05:54:34.408Z",
            "readOnly": true
          },
          "updatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "When the item was last updated.",
            "example": "2023-04-20T05:54:34.408Z",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "description": "The name of the variable. Must be named in SCREAMING_SNAKE_CASE.",
            "example": "APP_ENVIRONMENT_KEY"
          },
          "isSecret": {
            "type": "boolean",
            "description": "Whether the variable is a secret.",
            "example": true
          },
          "value": {
            "type": "string",
            "description": "The value of the variable."
          }
        },
        "example": {
          "name": "PORTAL_ID",
          "isSecret": false,
          "value": "89333",
          "branch": "main",
          "createdOn": "2023-04-18T05:54:34.408Z",
          "updatedOn": "2023-04-20T05:54:34.408Z"
        }
      },
      "Zuplo.Variables.VariableCreateBody": {
        "type": "object",
        "required": [
          "name",
          "isSecret",
          "value"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the variable. Must be named in SCREAMING_SNAKE_CASE.",
            "example": "APP_ENVIRONMENT_KEY"
          },
          "isSecret": {
            "type": "boolean",
            "description": "Whether the variable is a secret.",
            "example": true
          },
          "value": {
            "type": "string",
            "description": "The value of the variable."
          }
        },
        "example": {
          "name": "PORTAL_ID",
          "isSecret": false,
          "value": "89333"
        }
      },
      "Zuplo.Variables.VariableUpdateBody": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The value of the variable."
          }
        },
        "example": {
          "value": "89333"
        }
      },
      "Zuplo.WhoAmI.WhoAmI": {
        "type": "object",
        "required": [
          "sub"
        ],
        "properties": {
          "account": {
            "type": "string",
            "example": "chocolate_blizzard_treat"
          },
          "email": {
            "type": "string",
            "example": "user@example.com"
          },
          "sub": {
            "type": "string",
            "example": "auth0|abc123"
          }
        }
      }
    },
    "responses": {
      "RateLimitNoRetryAfter": {
        "description": "Rate Limiting Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "type",
                "title",
                "status"
              ],
              "examples": [
                {
                  "type": "https://httpproblems.com/http-status/429",
                  "title": "Too Many Requests",
                  "status": 429,
                  "instance": "/foo/bar"
                }
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "example": "https://httpproblems.com/http-status/429",
                  "description": "A URI reference that identifies the problem."
                },
                "title": {
                  "type": "string",
                  "example": "Too Many Requests",
                  "description": "A short, human-readable summary of the problem."
                },
                "status": {
                  "type": "number",
                  "example": 429,
                  "description": "The HTTP status code."
                },
                "instance": {
                  "type": "string",
                  "example": "/foo/bar"
                }
              }
            }
          }
        }
      },
      "RateLimitWithRetryAfter": {
        "description": "Rate Limiting Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "type",
                "title",
                "status"
              ],
              "examples": [
                {
                  "type": "https://httpproblems.com/http-status/429",
                  "title": "Too Many Requests",
                  "status": 429,
                  "instance": "/foo/bar"
                }
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "example": "https://httpproblems.com/http-status/429",
                  "description": "A URI reference that identifies the problem."
                },
                "title": {
                  "type": "string",
                  "example": "Too Many Requests",
                  "description": "A short, human-readable summary of the problem."
                },
                "status": {
                  "type": "number",
                  "example": 429,
                  "description": "The HTTP status code."
                },
                "instance": {
                  "type": "string",
                  "example": "/foo/bar"
                }
              }
            }
          }
        },
        "headers": {
          "retry-after": {
            "description": "The number of seconds to wait before making a new request.",
            "schema": {
              "type": "integer",
              "example": 60
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://developer-api-main-8600723.self.zuplo.com"
    }
  ]
}