{
  "openapi": "3.1.1",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "Rybbit API",
    "version": "2.8.0-beta",
    "description": "REST API for Rybbit web and product analytics. The API is in beta and may introduce breaking changes.",
    "termsOfService": "https://rybbit.com/terms-and-conditions",
    "contact": {
      "name": "Rybbit",
      "url": "https://rybbit.com/contact"
    },
    "license": {
      "name": "GNU Affero General Public License v3.0",
      "identifier": "AGPL-3.0-only"
    }
  },
  "servers": [
    {
      "url": "https://app.rybbit.io",
      "description": "Rybbit Cloud API"
    }
  ],
  "tags": [
    {
      "name": "Annotations",
      "description": "Annotations API operations."
    },
    {
      "name": "Api Keys",
      "description": "Api Keys API operations."
    },
    {
      "name": "Bots",
      "description": "Bots API operations."
    },
    {
      "name": "Errors",
      "description": "Errors API operations."
    },
    {
      "name": "Events",
      "description": "Events API operations."
    },
    {
      "name": "Funnels",
      "description": "Funnels API operations."
    },
    {
      "name": "General",
      "description": "General API operations."
    },
    {
      "name": "Goals",
      "description": "Goals API operations."
    },
    {
      "name": "Imports",
      "description": "Imports API operations."
    },
    {
      "name": "Insights",
      "description": "Insights API operations."
    },
    {
      "name": "Organizations",
      "description": "Organizations API operations."
    },
    {
      "name": "Overview",
      "description": "Overview API operations."
    },
    {
      "name": "Performance",
      "description": "Performance API operations."
    },
    {
      "name": "Segments",
      "description": "Segments API operations."
    },
    {
      "name": "Session Replay",
      "description": "Session Replay API operations."
    },
    {
      "name": "Sessions",
      "description": "Sessions API operations."
    },
    {
      "name": "Sites",
      "description": "Sites API operations."
    },
    {
      "name": "Teams",
      "description": "Teams API operations."
    },
    {
      "name": "User Traits",
      "description": "User Traits API operations."
    },
    {
      "name": "Users",
      "description": "Users API operations."
    }
  ],
  "paths": {
    "/api/sites/{site}/annotations": {
      "post": {
        "summary": "Create Annotation",
        "description": "Pins a note to a date or date range on the site's traffic chart.",
        "operationId": "postApiSitesSiteAnnotations",
        "tags": [
          "Annotations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/annotations/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Annotations",
        "description": "Returns the timeline annotations that apply to a site, including organization-wide ones.",
        "operationId": "getApiSitesSiteAnnotations",
        "tags": [
          "Annotations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/annotations/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/annotations/{annotationId}": {
      "delete": {
        "summary": "Delete Annotation",
        "description": "Permanently deletes an annotation.",
        "operationId": "deleteApiSitesSiteAnnotationsAnnotationId",
        "tags": [
          "Annotations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/annotations/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "annotationId identifier.",
            "in": "path",
            "name": "annotationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "put": {
        "summary": "Update Annotation",
        "description": "Updates an annotation's fields.",
        "operationId": "putApiSitesSiteAnnotationsAnnotationId",
        "tags": [
          "Annotations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/annotations/update"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "annotationId identifier.",
            "in": "path",
            "name": "annotationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/organizations/{organizationId}/api-keys": {
      "post": {
        "summary": "Create Organization API Key",
        "description": "Programmatically create an API key owned by an organization.",
        "operationId": "postApiOrganizationsOrganizationIdApiKeys",
        "tags": [
          "Api Keys"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/api-keys/create-org"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/user/api-keys": {
      "post": {
        "summary": "Create API Key",
        "description": "Programmatically create a new API key for your account.",
        "operationId": "postApiUserApiKeys",
        "tags": [
          "Api Keys"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/api-keys/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/auth/api-key/delete": {
      "post": {
        "summary": "Delete API Key",
        "description": "Revoke an API key by its id.",
        "operationId": "postApiAuthApiKeyDelete",
        "tags": [
          "Api Keys"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/api-keys/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/auth/api-key/list": {
      "get": {
        "summary": "List API Keys",
        "description": "List the API keys for your account or organization.",
        "operationId": "getApiAuthApiKeyList",
        "tags": [
          "Api Keys"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/api-keys/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/api-key/update": {
      "post": {
        "summary": "Update API Key",
        "description": "Update an existing API key's name, enabled state, or expiry.",
        "operationId": "postApiAuthApiKeyUpdate",
        "tags": [
          "Api Keys"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/api-keys/update"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/bots/ai-summary": {
      "get": {
        "summary": "Get AI Summary",
        "description": "Returns crawls and referrals per AI operator, side by side.",
        "operationId": "getApiSitesSiteBotsAiSummary",
        "tags": [
          "Bots"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/bots/ai-summary"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/bots/by-dimension": {
      "get": {
        "summary": "Get Bots by Dimension",
        "description": "Returns bot requests broken down by a dimension.",
        "operationId": "getApiSitesSiteBotsByDimension",
        "tags": [
          "Bots"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/bots/by-dimension"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/bots/overview": {
      "get": {
        "summary": "Get Bot Overview",
        "description": "Returns aggregate bot-traffic metrics with a breakdown by detection layer.",
        "operationId": "getApiSitesSiteBotsOverview",
        "tags": [
          "Bots"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/bots/overview"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/bots/time-series": {
      "get": {
        "summary": "Get Bot Time Series",
        "description": "Returns bot request counts over time.",
        "operationId": "getApiSitesSiteBotsTimeSeries",
        "tags": [
          "Bots"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/bots/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/errors/events": {
      "get": {
        "summary": "Get Error Events",
        "description": "Returns individual error occurrences for a specific error message, with full context including stack traces.",
        "operationId": "getApiSitesSiteErrorsEvents",
        "tags": [
          "Errors"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/errors/events"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/errors/names": {
      "get": {
        "summary": "Get Error Names",
        "description": "Returns a list of unique error messages with occurrence counts and affected session counts.",
        "operationId": "getApiSitesSiteErrorsNames",
        "tags": [
          "Errors"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/errors/names"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/errors/time-series": {
      "get": {
        "summary": "Get Error Time Series",
        "description": "Returns error occurrence counts over time for a specific error message. Useful for tracking error trends and identifying when issues started.",
        "operationId": "getApiSitesSiteErrorsTimeSeries",
        "tags": [
          "Errors"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/errors/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events/count": {
      "get": {
        "summary": "Get Event Counts",
        "description": "Returns time-bucketed event counts grouped by event type.",
        "operationId": "getApiSitesSiteEventsCount",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/count"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events": {
      "get": {
        "summary": "Get Events",
        "description": "Returns a paginated list of events (pageviews, custom events, and outbound clicks).",
        "operationId": "getApiSitesSiteEvents",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events/names": {
      "get": {
        "summary": "Get Event Names",
        "description": "Returns a list of unique custom event names with their occurrence counts.",
        "operationId": "getApiSitesSiteEventsNames",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/names"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events/outbound": {
      "get": {
        "summary": "Get Outbound Links",
        "description": "Returns a list of outbound link clicks with their occurrence counts.",
        "operationId": "getApiSitesSiteEventsOutbound",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/outbound"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events/properties": {
      "get": {
        "summary": "Get Event Properties",
        "description": "Returns property key-value pairs for a specific event name with their occurrence counts.",
        "operationId": "getApiSitesSiteEventsProperties",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/properties"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/events/time-series": {
      "get": {
        "summary": "Get Event Time Series",
        "description": "Returns time-bucketed counts for the top custom events.",
        "operationId": "getApiSitesSiteEventsTimeSeries",
        "tags": [
          "Events"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/events/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/funnels/analyze": {
      "post": {
        "summary": "Analyze Funnel",
        "description": "Analyzes a funnel and returns step-by-step conversion data. Sessions must complete steps in order (step 2 must occur after step 1, etc.).",
        "operationId": "postApiSitesSiteFunnelsAnalyze",
        "tags": [
          "Funnels"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/funnels/analyze"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/funnels": {
      "post": {
        "summary": "Create Funnel",
        "description": "Creates or updates a saved funnel. If `reportId` is provided, updates the existing funnel.",
        "operationId": "postApiSitesSiteFunnels",
        "tags": [
          "Funnels"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/funnels/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Funnels",
        "description": "Returns all saved funnels for a site.",
        "operationId": "getApiSitesSiteFunnels",
        "tags": [
          "Funnels"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/funnels/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/funnels/{funnelId}": {
      "delete": {
        "summary": "Delete Funnel",
        "description": "Deletes a saved funnel. This action cannot be undone.",
        "operationId": "deleteApiSitesSiteFunnelsFunnelId",
        "tags": [
          "Funnels"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/funnels/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "funnelId identifier.",
            "in": "path",
            "name": "funnelId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/sites/{site}/funnels/{stepNumber}/sessions": {
      "post": {
        "summary": "Get Funnel Step Sessions",
        "description": "Returns sessions that either reached or dropped off at a specific funnel step. Useful for analyzing user behavior at each stage.",
        "operationId": "postApiSitesSiteFunnelsStepNumberSessions",
        "tags": [
          "Funnels"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/funnels/step-sessions"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "stepNumber identifier.",
            "in": "path",
            "name": "stepNumber",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/goals": {
      "post": {
        "summary": "Create Goal",
        "description": "Creates a new goal for tracking conversions.",
        "operationId": "postApiSitesSiteGoals",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Goals",
        "description": "Returns a paginated list of goals with their conversion metrics.",
        "operationId": "getApiSitesSiteGoals",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/goals/{goalId}": {
      "delete": {
        "summary": "Delete Goal",
        "description": "Deletes a goal. This action cannot be undone.",
        "operationId": "deleteApiSitesSiteGoalsGoalId",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "goalId identifier.",
            "in": "path",
            "name": "goalId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "put": {
        "summary": "Update Goal",
        "description": "Updates an existing goal.",
        "operationId": "putApiSitesSiteGoalsGoalId",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/update"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "goalId identifier.",
            "in": "path",
            "name": "goalId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/goals/{goalId}/sessions": {
      "get": {
        "summary": "Get Goal Sessions",
        "description": "Returns sessions that completed a specific goal. Useful for analyzing the behavior of converting users.",
        "operationId": "getApiSitesSiteGoalsGoalIdSessions",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/sessions"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "goalId identifier.",
            "in": "path",
            "name": "goalId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/goals/time-series": {
      "get": {
        "summary": "Get Goal Time Series",
        "description": "Returns goal conversions and conversion rate over time.",
        "operationId": "getApiSitesSiteGoalsTimeSeries",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/goals/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/imports": {
      "post": {
        "summary": "Create Import",
        "description": "Starts a new data import from a supported platform.",
        "operationId": "postApiSitesSiteImports",
        "tags": [
          "Imports"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/imports/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "List Imports",
        "description": "Returns all data imports for a site with their progress counts.",
        "operationId": "getApiSitesSiteImports",
        "tags": [
          "Imports"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/imports/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/imports/{importId}": {
      "delete": {
        "summary": "Delete Import",
        "description": "Deletes an import and all events it added. The import must be finished.",
        "operationId": "deleteApiSitesSiteImportsImportId",
        "tags": [
          "Imports"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/imports/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "importId identifier.",
            "in": "path",
            "name": "importId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/sites/{site}/imports/{importId}/events": {
      "post": {
        "summary": "Upload Import Events",
        "description": "Uploads a batch of raw events to an in-progress import.",
        "operationId": "postApiSitesSiteImportsImportIdEvents",
        "tags": [
          "Imports"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/imports/events"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "importId identifier.",
            "in": "path",
            "name": "importId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/journeys": {
      "get": {
        "summary": "Get Journeys",
        "description": "Returns the most common page navigation paths (user journeys) within sessions. Useful for understanding how users navigate through your site.",
        "operationId": "getApiSitesSiteJourneys",
        "tags": [
          "Insights"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/insights/journeys"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/retention": {
      "get": {
        "summary": "Get Retention",
        "description": "Returns cohort-based retention analysis data. Users are grouped into cohorts based on their first visit, and retention is tracked over subsequent time periods.",
        "operationId": "getApiSitesSiteRetention",
        "tags": [
          "Insights"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/insights/retention"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/organizations/{organizationId}/members": {
      "post": {
        "summary": "Add Organization Member",
        "description": "Adds a user to an organization with a specified role. The user must already exist in the system. Requires admin or owner role in the organization. You cannot assign a role above your own.",
        "operationId": "postApiOrganizationsOrganizationIdMembers",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/add-member"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Organization Members",
        "description": "Returns all members of an organization with their user details and roles. Requires membership in the organization.",
        "operationId": "getApiOrganizationsOrganizationIdMembers",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/members"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/organizations/{organizationId}/sites": {
      "post": {
        "summary": "Create Site",
        "description": "Creates a new site within an organization. Requires admin or owner role in the organization.",
        "operationId": "postApiOrganizationsOrganizationIdSites",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/create-site"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Organization Sites",
        "description": "Returns all sites in an organization the caller can access, with usage and subscription info.",
        "operationId": "getApiOrganizationsOrganizationIdSites",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/sites"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/org-event-count/{organizationId}": {
      "get": {
        "summary": "Get Organization Event Count",
        "description": "Returns daily event usage counts across an organization's sites.",
        "operationId": "getApiOrgEventCountOrganizationId",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/event-count"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/auth/organization/invite-member": {
      "post": {
        "summary": "Invite Member",
        "description": "Send an organization invitation to a user by email.",
        "operationId": "postApiAuthOrganizationInviteMember",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/invite-member"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/organizations": {
      "get": {
        "summary": "Get My Organizations",
        "description": "Returns all organizations the authenticated user is a member of, including all members for each organization. Excludes subscription and billing information. Supports both session cookies and API key (Bearer token) authentication.",
        "operationId": "getApiOrganizations",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/organization/remove-member": {
      "post": {
        "summary": "Remove Member",
        "description": "Remove a member from an organization.",
        "operationId": "postApiAuthOrganizationRemoveMember",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/remove-member"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/auth/organization/update-member-role": {
      "post": {
        "summary": "Update Member Role",
        "description": "Change an organization member's role.",
        "operationId": "postApiAuthOrganizationUpdateMemberRole",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/organizations/update-member-role"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/live-user-count": {
      "get": {
        "summary": "Get Live Visitors",
        "description": "Returns the count of unique active visitors within the specified time window. Useful for displaying real-time visitor counts.",
        "operationId": "getApiSitesSiteLiveUserCount",
        "tags": [
          "Overview"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/overview/live-visitors"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/metric": {
      "get": {
        "summary": "Get Metric",
        "description": "Returns dimensional analytics data broken down by a specific parameter. Supports pagination.",
        "operationId": "getApiSitesSiteMetric",
        "tags": [
          "Overview"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/overview/metric"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/overview": {
      "get": {
        "summary": "Get Overview",
        "description": "Returns high-level analytics metrics for a site.",
        "operationId": "getApiSitesSiteOverview",
        "tags": [
          "Overview"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/overview/overview"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/page-titles": {
      "get": {
        "summary": "Get Page Titles",
        "description": "Returns page-view metrics aggregated by HTML page title.",
        "operationId": "getApiSitesSitePageTitles",
        "tags": [
          "Overview"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/overview/page-titles"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/overview/time-series": {
      "get": {
        "summary": "Get Overview (Time Series)",
        "description": "Returns time-series analytics data broken down by configurable time buckets. Useful for charting trends over time.",
        "operationId": "getApiSitesSiteOverviewTimeSeries",
        "tags": [
          "Overview"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/overview/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/performance/by-dimension": {
      "get": {
        "summary": "Get Performance by Dimension",
        "description": "Returns performance metrics broken down by a specific dimension (page, country, browser, etc.). Useful for identifying performance issues on specific pages or for specific user segments.",
        "operationId": "getApiSitesSitePerformanceByDimension",
        "tags": [
          "Performance"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/performance/by-dimension"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/performance/overview": {
      "get": {
        "summary": "Get Performance Overview",
        "description": "Returns aggregate performance metrics with percentile breakdowns for all Core Web Vitals.",
        "operationId": "getApiSitesSitePerformanceOverview",
        "tags": [
          "Performance"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/performance/overview"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/performance/time-series": {
      "get": {
        "summary": "Get Performance Time Series",
        "description": "Returns performance metrics over time, broken down by configurable time buckets. Useful for charting performance trends.",
        "operationId": "getApiSitesSitePerformanceTimeSeries",
        "tags": [
          "Performance"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/performance/time-series"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/segments": {
      "post": {
        "summary": "Create Segment",
        "description": "Creates a saved segment. Members create site segments they own; editors, admins and owners can also create organization-wide segments.",
        "operationId": "postApiSitesSiteSegments",
        "tags": [
          "Segments"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/segments/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Segments",
        "description": "Returns the saved segments available on a site: its own plus organization-wide ones. Callers without site access only see segments shown on the public dashboard.",
        "operationId": "getApiSitesSiteSegments",
        "tags": [
          "Segments"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/segments/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/segments/{segmentId}": {
      "delete": {
        "summary": "Delete Segment",
        "description": "Deletes a saved segment. Admins and owners can delete any segment; members can delete segments they created. Links that already expanded the segment's filters keep working.",
        "operationId": "deleteApiSitesSiteSegmentsSegmentId",
        "tags": [
          "Segments"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/segments/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "segmentId identifier.",
            "in": "path",
            "name": "segmentId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "get": {
        "summary": "Get Segment",
        "description": "Returns one saved segment.",
        "operationId": "getApiSitesSiteSegmentsSegmentId",
        "tags": [
          "Segments"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/segments/get"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "segmentId identifier.",
            "in": "path",
            "name": "segmentId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "put": {
        "summary": "Update Segment",
        "description": "Updates a saved segment. Editors, admins and owners can edit any segment; members can edit segments they created. Only the fields you send change.",
        "operationId": "putApiSitesSiteSegmentsSegmentId",
        "tags": [
          "Segments"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/segments/update"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "segmentId identifier.",
            "in": "path",
            "name": "segmentId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/track": {
      "post": {
        "summary": "Sending Events",
        "description": "Track pageviews, custom events, performance, and errors from any platform using the HTTP API.",
        "operationId": "postApiTrack",
        "tags": [
          "General"
        ],
        "security": [
          {},
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sending-events"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/session-replay/{sessionId}": {
      "delete": {
        "summary": "Delete Session Replay",
        "description": "Permanently deletes a session replay recording. Requires the editor role or above on the site.",
        "operationId": "deleteApiSitesSiteSessionReplaySessionId",
        "tags": [
          "Session Replay"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/session-replay/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "sessionId identifier.",
            "in": "path",
            "name": "sessionId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "get": {
        "summary": "Get Session Replay Events",
        "description": "Returns the rrweb events and metadata needed to reconstruct a session replay.",
        "operationId": "getApiSitesSiteSessionReplaySessionId",
        "tags": [
          "Session Replay"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/session-replay/events"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "sessionId identifier.",
            "in": "path",
            "name": "sessionId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/sites/{site}/session-replay/list": {
      "get": {
        "summary": "Get Session Replays",
        "description": "Returns recorded session replays with metadata, newest first.",
        "operationId": "getApiSitesSiteSessionReplayList",
        "tags": [
          "Session Replay"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/session-replay/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/sessions/{sessionId}": {
      "get": {
        "summary": "Get Session",
        "description": "Returns detailed information about a specific session including all events and pageviews.",
        "operationId": "getApiSitesSiteSessionsSessionId",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sessions/get"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "sessionId identifier.",
            "in": "path",
            "name": "sessionId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/sites/{site}/sessions": {
      "get": {
        "summary": "Get Sessions",
        "description": "Returns a paginated list of sessions with their analytics data.",
        "operationId": "getApiSitesSiteSessions",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sessions/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/sessions/locations": {
      "get": {
        "summary": "Get Session Locations",
        "description": "Returns aggregated session locations with coordinates for map visualization.",
        "operationId": "getApiSitesSiteSessionsLocations",
        "tags": [
          "Sessions"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sessions/locations"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}": {
      "delete": {
        "summary": "Delete Site",
        "description": "Permanently deletes a site and all its associated data. This action cannot be undone. Requires admin or owner role.",
        "operationId": "deleteApiSitesSite",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      },
      "get": {
        "summary": "Get Site",
        "description": "Returns detailed information about a specific site including its configuration.",
        "operationId": "getApiSitesSite",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/get"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/excluded-countries": {
      "get": {
        "summary": "Get Excluded Countries",
        "description": "Returns the list of country codes that are excluded from tracking.",
        "operationId": "getApiSitesSiteExcludedCountries",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/excluded-countries"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/excluded-hostnames": {
      "get": {
        "summary": "Get Excluded Hostnames",
        "description": "Returns the list of hostnames excluded from analytics.",
        "operationId": "getApiSitesSiteExcludedHostnames",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/excluded-hostnames"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/excluded-ips": {
      "get": {
        "summary": "Get Excluded IPs",
        "description": "Returns the list of IP addresses and CIDR ranges that are excluded from tracking.",
        "operationId": "getApiSitesSiteExcludedIps",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/excluded-ips"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/excluded-paths": {
      "get": {
        "summary": "Get Excluded Paths",
        "description": "Returns the list of URL paths excluded from analytics.",
        "operationId": "getApiSitesSiteExcludedPaths",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/excluded-paths"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/excluded-user-agents": {
      "get": {
        "summary": "Get Excluded User Agents",
        "description": "Returns the list of user-agent patterns excluded from analytics.",
        "operationId": "getApiSitesSiteExcludedUserAgents",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/excluded-user-agents"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/export/pdf": {
      "get": {
        "summary": "Export PDF Report",
        "description": "Generates a downloadable PDF analytics report for a date range.",
        "operationId": "getApiSitesSiteExportPdf",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/export-pdf"
        },
        "responses": {
          "200": {
            "description": "PDF report.",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "contentEncoding": "base64"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/private-link-config": {
      "get": {
        "summary": "Get Private Link Config",
        "description": "Returns the private link key configuration. Private links allow sharing analytics with a secret key without requiring authentication.",
        "operationId": "getApiSitesSitePrivateLinkConfig",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/get-private-link"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      },
      "post": {
        "summary": "Update Private Link Config",
        "description": "Generates or revokes a private link key for sharing analytics without authentication. Requires the editor role or above on the site.",
        "operationId": "postApiSitesSitePrivateLinkConfig",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/update-private-link"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/has-data": {
      "get": {
        "summary": "Get Site Has Data",
        "description": "Returns whether the site has received any analytics events.",
        "operationId": "getApiSitesSiteHasData",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/has-data"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/is-public": {
      "get": {
        "summary": "Get Site Public Status",
        "description": "Returns whether the site's analytics are publicly accessible.",
        "operationId": "getApiSitesSiteIsPublic",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/is-public"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/config": {
      "put": {
        "summary": "Update Site Config",
        "description": "Updates site configuration settings. All fields are optional - only include the fields you want to update. Requires the editor role or above on the site.",
        "operationId": "putApiSitesSiteConfig",
        "tags": [
          "Sites"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/sites/update-config"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/organizations/{organizationId}/teams": {
      "post": {
        "summary": "Create Team",
        "description": "Creates a team in an organization. Requires admin/owner role.",
        "operationId": "postApiOrganizationsOrganizationIdTeams",
        "tags": [
          "Teams"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/teams/create"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Teams",
        "description": "Returns the teams in an organization, with their members and accessible sites.",
        "operationId": "getApiOrganizationsOrganizationIdTeams",
        "tags": [
          "Teams"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/teams/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/organizations/{organizationId}/teams/{teamId}": {
      "delete": {
        "summary": "Delete Team",
        "description": "Deletes a team. Requires admin/owner role.",
        "operationId": "deleteApiOrganizationsOrganizationIdTeamsTeamId",
        "tags": [
          "Teams"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/teams/delete"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "description": "teamId identifier.",
            "in": "path",
            "name": "teamId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "put": {
        "summary": "Update Team",
        "description": "Updates a team's name, members, or site access. Requires admin/owner role.",
        "operationId": "putApiOrganizationsOrganizationIdTeamsTeamId",
        "tags": [
          "Teams"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/teams/update"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "organizationId identifier.",
            "in": "path",
            "name": "organizationId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "description": "teamId identifier.",
            "in": "path",
            "name": "teamId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/api/sites/{site}/user-traits/keys": {
      "get": {
        "summary": "Get User Trait Keys",
        "description": "Returns the known user trait keys with the number of users that have each.",
        "operationId": "getApiSitesSiteUserTraitsKeys",
        "tags": [
          "User Traits"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/user-traits/keys"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/user-traits/users": {
      "get": {
        "summary": "Get Users by Trait",
        "description": "Returns users matching a specific trait key and value, with location and session metadata.",
        "operationId": "getApiSitesSiteUserTraitsUsers",
        "tags": [
          "User Traits"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/user-traits/users"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/user-traits/values": {
      "get": {
        "summary": "Get User Trait Values",
        "description": "Returns the distinct values for a given trait key, with user counts.",
        "operationId": "getApiSitesSiteUserTraitsValues",
        "tags": [
          "User Traits"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/user-traits/values"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    },
    "/api/sites/{site}/users/{userId}": {
      "get": {
        "summary": "Get User Info",
        "description": "Returns detailed information about a specific user, including their profile traits and linked devices.",
        "operationId": "getApiSitesSiteUsersUserId",
        "tags": [
          "Users"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/users/info"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "description": "userId identifier.",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      }
    },
    "/api/sites/{site}/users": {
      "get": {
        "summary": "Get Users",
        "description": "Returns a paginated list of users with their analytics data. Supports filtering by identified users only.",
        "operationId": "getApiSitesSiteUsers",
        "tags": [
          "Users"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/users/list"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "$ref": "#/components/parameters/TimeZone"
          },
          {
            "$ref": "#/components/parameters/StartDatetime"
          },
          {
            "$ref": "#/components/parameters/EndDatetime"
          },
          {
            "$ref": "#/components/parameters/PastMinutesStart"
          },
          {
            "$ref": "#/components/parameters/PastMinutesEnd"
          },
          {
            "$ref": "#/components/parameters/Filters"
          },
          {
            "$ref": "#/components/parameters/SegmentId"
          }
        ]
      }
    },
    "/api/sites/{site}/users/session-count": {
      "get": {
        "summary": "Get User Session Count",
        "description": "Returns the number of sessions per day for a specific user. Useful for visualizing user engagement over time.",
        "operationId": "getApiSitesSiteUsersSessionCount",
        "tags": [
          "Users"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "QueryApiKey": []
          },
          {
            "CookieSession": []
          }
        ],
        "externalDocs": {
          "url": "https://rybbit.com/docs/api/users/session-count"
        },
        "responses": {
          "200": {
            "description": "Successful response. Refer to the linked endpoint documentation for the response fields.",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "description": "Numeric Rybbit Site ID or string identifier.",
            "in": "path",
            "name": "site",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "minLength": 1
                }
              ]
            }
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Personal or organization API key sent as an Authorization Bearer token."
      },
      "QueryApiKey": {
        "type": "apiKey",
        "in": "query",
        "name": "api_key",
        "description": "Testing-only fallback. Bearer authentication is recommended."
      },
      "CookieSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "better-auth.session_token",
        "description": "Authenticated dashboard session cookie. Secure deployments may prefix the cookie name with __Secure-."
      }
    },
    "parameters": {
      "StartDate": {
        "name": "start_date",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date"
        }
      },
      "EndDate": {
        "name": "end_date",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date"
        }
      },
      "TimeZone": {
        "name": "time_zone",
        "in": "query",
        "schema": {
          "type": "string",
          "example": "America/Los_Angeles"
        }
      },
      "StartDatetime": {
        "name": "start_datetime",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "EndDatetime": {
        "name": "end_datetime",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "PastMinutesStart": {
        "name": "past_minutes_start",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 1
        }
      },
      "PastMinutesEnd": {
        "name": "past_minutes_end",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "Filters": {
        "name": "filters",
        "in": "query",
        "description": "JSON-encoded array of analytics filters.",
        "schema": {
          "type": "string"
        }
      },
      "SegmentId": {
        "name": "segment_id",
        "in": "query",
        "description": "ID of a saved segment whose filters are applied server-side, ANDed with any `filters` also passed.",
        "schema": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "schemas": {
      "ApiError": {
        "type": "object",
        "additionalProperties": true,
        "required": [
          "error",
          "code",
          "message",
          "resolution"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Backward-compatible human-readable error."
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code."
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation."
          },
          "resolution": {
            "type": "string",
            "description": "Action the caller can take to recover."
          },
          "details": {
            "description": "Optional structured context for this error."
          }
        }
      }
    }
  },
  "externalDocs": {
    "description": "Rybbit API documentation",
    "url": "https://rybbit.com/docs/api/getting-started"
  }
}
