{
  "openapi": "3.1.0",
  "info": {
    "title": "Siteline Reporting API",
    "version": "1",
    "description": "Read-only access to Siteline product analytics, prompt performance, citations, and agent traffic."
  },
  "servers": [
    {
      "url": "https://api.siteline.ai",
      "description": "Production"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Siteline public API key. Create one under **Team settings > Public API Key**."
      }
    },
    "parameters": {
      "productId": {
        "name": "productId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer",
          "example": 42
        },
        "description": "Product ID returned by `GET /v1/products`."
      },
      "domain": {
        "name": "domain",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "example": "example.com"
        },
        "description": "Product domain to report metrics for, such as `example.com`."
      },
      "dateFrom": {
        "name": "dateFrom",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "format": "date-time",
          "example": "2026-05-01T00:00:00Z"
        },
        "description": "Inclusive start timestamp in RFC3339 format."
      },
      "dateTo": {
        "name": "dateTo",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "format": "date-time",
          "example": "2026-05-31T23:59:59Z"
        },
        "description": "Inclusive end timestamp in RFC3339 format."
      },
      "platforms": {
        "name": "platforms[]",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "description": "Platform filters. Common values: `openai`, `gemini`, `google`, `perplexity`, `google_ai_overviews`, `claude`.",
        "style": "form",
        "explode": true
      },
      "labelIds": {
        "name": "labelIds[]",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "description": "Prompt label IDs to filter on. Invalid IDs return `400`.",
        "style": "form",
        "explode": true
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "API key or product authorization failed.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "message": "Unauthorized."
            }
          }
        }
      },
      "BadRequest": {
        "description": "Required query parameters are missing or malformed.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "message": "Invalid request parameters."
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Unexpected server-side or upstream dependency failure.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "message": "Internal server error."
            }
          }
        }
      }
    },
    "schemas": {
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": ["message"]
      },
      "PartnerWebsite": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "websiteId": {
            "type": "string",
            "example": "site_123"
          }
        },
        "required": ["domain", "websiteId"]
      },
      "Product": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "example": 42
          },
          "name": {
            "type": "string",
            "example": "Example"
          },
          "website": {
            "type": "string",
            "format": "uri",
            "example": "https://example.com"
          },
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "partnerWebsites": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerWebsite"
            }
          }
        },
        "required": ["id", "name", "website", "domain", "partnerWebsites"]
      },
      "Website": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "websiteId": {
            "type": "string",
            "example": "site_123"
          }
        },
        "required": ["domain", "websiteId"]
      },
      "PromptLabel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "example": 7
          },
          "name": {
            "type": "string",
            "example": "Commercial"
          }
        },
        "required": ["id", "name"]
      },
      "PromptMetric": {
        "type": "object",
        "properties": {
          "promptText": {
            "type": "string",
            "example": "best observability platforms"
          },
          "platform": {
            "type": "string",
            "example": "openai"
          },
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "position": {
            "type": ["number", "null"],
            "example": 2.5,
            "description": "Average position of the product within AI response text for this prompt. For example, a position of 1 means the product was mentioned first. `null` when no data is available."
          },
          "visibility": {
            "type": ["number", "null"],
            "example": 0.42,
            "description": "Percentage of AI responses in which the product appears for this prompt, expressed as a decimal (e.g. `0.42` = 42%). `null` when no data is available."
          },
          "rank": {
            "type": ["integer", "null"],
            "example": 3,
            "description": "Product's ranking by visibility compared to all products appearing in this prompt's results. A rank of 1 means highest visibility. `null` when no data is available."
          },
          "runCount": {
            "type": ["integer", "null"],
            "example": 120,
            "description": "Total number of prompt runs recorded in the period. `null` when no data is available."
          },
          "labels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PromptLabel"
            }
          }
        },
        "required": [
          "promptText",
          "platform",
          "domain",
          "position",
          "visibility",
          "rank",
          "runCount",
          "labels"
        ]
      },
      "PromptSummary": {
        "type": "object",
        "properties": {
          "position": {
            "type": ["number", "null"],
            "example": 2.5,
            "description": "Average position of the product within AI response text across all matching prompts. `null` when no data is available."
          },
          "visibility": {
            "type": ["number", "null"],
            "example": 0.42,
            "description": "Aggregate percentage of AI responses in which the product appears across all matching prompts, expressed as a decimal. `null` when no data is available."
          },
          "rank": {
            "type": ["integer", "null"],
            "example": 3,
            "description": "Product's ranking by visibility compared to all competing products across matching prompts. `null` when no data is available."
          },
          "totalCompetitors": {
            "type": "integer",
            "example": 12,
            "description": "Total number of distinct competitor products appearing across matching prompt results."
          }
        },
        "required": ["position", "visibility", "rank", "totalCompetitors"]
      },
      "DailyPromptMetric": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time",
            "example": "2026-05-01T00:00:00Z"
          },
          "platform": {
            "type": "string",
            "example": "openai"
          },
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "visibility": {
            "type": ["number", "null"],
            "example": 0.42,
            "description": "Percentage of AI responses in which the product appears on this day, expressed as a decimal. `null` when no data is available."
          },
          "position": {
            "type": ["number", "null"],
            "example": 2.5,
            "description": "Average position of the product within AI response text on this day. `null` when no data is available."
          },
          "rank": {
            "type": ["integer", "null"],
            "example": 3,
            "description": "Product's ranking by visibility compared to all competing products on this day. `null` when no data is available."
          }
        },
        "required": ["date", "platform", "domain", "visibility", "position", "rank"]
      },
      "AnalyticsTimeseriesItem": {
        "type": "object",
        "description": "One time bucket row. Only the requested metrics and groupBy dimensions are present in each row.",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "example": "2026-05-04T00:00:00Z"
          },
          "platform": {
            "type": "string",
            "example": "openai",
            "description": "Present when `platform` is included in `groupBy[]`."
          },
          "botType": {
            "type": "string",
            "example": "chatgpt-user",
            "description": "Present when `botType` is included in `groupBy[]`."
          },
          "urlPath": {
            "type": "string",
            "example": "/blog/ai-trends",
            "description": "Present when `urlPath` is included in `groupBy[]`."
          },
          "normalizedUrlPath": {
            "type": "string",
            "description": "Present when `normalizedUrlPath` is included in `groupBy[]`."
          },
          "urlPathDirectory": {
            "type": "string",
            "description": "Present when `urlPathDirectory` is included in `groupBy[]`."
          },
          "botVisits": {
            "type": "integer",
            "example": 128,
            "description": "Present when `bot_visits` is in `metrics[]`."
          },
          "humanVisits": {
            "type": "integer",
            "description": "Present when `human_visits` is in `metrics[]`."
          },
          "referredHumanVisits": {
            "type": "integer",
            "description": "Present when `referred_human_visits` is in `metrics[]`."
          },
          "aiReferredHumanVisits": {
            "type": "integer",
            "example": 16,
            "description": "Present when `ai_referred_human_visits` is in `metrics[]`."
          },
          "uniqueHumanVisitors": {
            "type": "integer",
            "description": "Present when `unique_human_visitors` is in `metrics[]`."
          },
          "uniquePages": {
            "type": "integer",
            "description": "Present when `unique_pages` is in `metrics[]`."
          },
          "uniqueHumanPages": {
            "type": "integer",
            "description": "Present when `unique_human_pages` is in `metrics[]`."
          },
          "uniqueHumanPlatforms": {
            "type": "integer",
            "description": "Present when `unique_human_platforms` is in `metrics[]`."
          },
          "botUserAgents": {
            "type": "integer",
            "description": "Present when `bot_user_agents` is in `metrics[]`."
          }
        }
      },
      "AnalyticsTimeseriesResponse": {
        "type": "object",
        "properties": {
          "previousPage": {
            "type": ["integer", "null"],
            "example": null
          },
          "currentPage": {
            "type": "integer",
            "example": 1
          },
          "nextPage": {
            "type": ["integer", "null"],
            "example": null
          },
          "totalPages": {
            "type": "integer",
            "example": 1
          },
          "totalItems": {
            "type": "integer",
            "example": 1
          },
          "perPage": {
            "type": "integer",
            "example": 50
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnalyticsTimeseriesItem"
            }
          }
        },
        "required": [
          "previousPage",
          "currentPage",
          "nextPage",
          "totalPages",
          "totalItems",
          "perPage",
          "items"
        ]
      },
      "CitationProduct": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Example"
          },
          "domain": {
            "type": "string",
            "example": "example.com"
          }
        },
        "required": ["name", "domain"]
      },
      "CitationByProperty": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CitationProduct"
            }
          },
          "count": {
            "type": "integer",
            "example": 12
          },
          "isMentioned": {
            "type": "boolean",
            "example": true
          }
        },
        "required": ["domain", "products", "count", "isMentioned"]
      },
      "CitationByPage": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "example": "https://example.com/guide"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CitationProduct"
            }
          },
          "count": {
            "type": "integer",
            "example": 8
          },
          "isMentioned": {
            "type": "boolean",
            "example": true
          }
        },
        "required": ["domain", "url", "products", "count", "isMentioned"]
      },
      "CitationByProduct": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Example"
          },
          "domain": {
            "type": "string",
            "example": "example.com"
          },
          "count": {
            "type": "integer",
            "example": 12
          },
          "isMentioned": {
            "type": "boolean",
            "example": true
          }
        },
        "required": ["name", "domain", "count", "isMentioned"]
      },
      "CitationResponse": {
        "type": "object",
        "description": "Citation metrics grouped by the selected dimension. When `groupBy` targets a single dimension, only that top-level field is present.",
        "properties": {
          "byProperty": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CitationByProperty"
            }
          },
          "byPage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CitationByPage"
            }
          },
          "byProduct": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CitationByProduct"
            }
          }
        }
      }
    }
  },
  "paths": {
    "/v1/products": {
      "get": {
        "operationId": "listProducts",
        "summary": "List products",
        "description": "Lists primary products authorized for the API key's team. Start here when you need product IDs for downstream calls. Competitor products linked through comparison data are excluded.",
        "tags": ["Products"],
        "responses": {
          "200": {
            "description": "Array of authorized products.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Product"
                  }
                },
                "example": [
                  {
                    "id": 42,
                    "name": "Example",
                    "website": "https://example.com",
                    "domain": "example.com",
                    "partnerWebsites": [
                      {
                        "domain": "example.com",
                        "websiteId": "site_123"
                      }
                    ]
                  }
                ]
              }
            }
          },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/websites": {
      "get": {
        "operationId": "listProductWebsites",
        "summary": "List tracked websites",
        "description": "Lists website domains and IDs actively tracked in Agent Analytics for a product.",
        "tags": ["Products"],
        "parameters": [{ "$ref": "#/components/parameters/productId" }],
        "responses": {
          "200": {
            "description": "Array of active websites.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Website"
                  }
                },
                "example": [
                  {
                    "domain": "example.com",
                    "websiteId": "site_123"
                  }
                ]
              }
            }
          },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/prompts": {
      "get": {
        "operationId": "listPromptMetrics",
        "summary": "AI visibility by prompt",
        "description": "Returns one row with AI visibility metrics per tracked prompt, platform, and domain for the selected filters.\n\n`position`, `visibility`, `rank`, and `runCount` can be `null` when no value is available for that prompt row.",
        "tags": ["Prompts"],
        "parameters": [
          { "$ref": "#/components/parameters/productId" },
          { "$ref": "#/components/parameters/domain" },
          { "$ref": "#/components/parameters/dateFrom" },
          { "$ref": "#/components/parameters/dateTo" },
          { "$ref": "#/components/parameters/platforms" },
          { "$ref": "#/components/parameters/labelIds" }
        ],
        "responses": {
          "200": {
            "description": "Array of prompt metrics.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PromptMetric"
                  }
                },
                "example": [
                  {
                    "promptText": "best observability platforms",
                    "platform": "openai",
                    "domain": "example.com",
                    "position": 2.5,
                    "visibility": 0.42,
                    "rank": 3,
                    "runCount": 120,
                    "labels": [{ "id": 7, "name": "Commercial" }]
                  }
                ]
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/prompts/summary": {
      "get": {
        "operationId": "getPromptSummary",
        "summary": "AI visibility by product",
        "description": "Returns aggregate AI visibility by product across all prompts for the selected filters.",
        "tags": ["Prompts"],
        "parameters": [
          { "$ref": "#/components/parameters/productId" },
          { "$ref": "#/components/parameters/domain" },
          { "$ref": "#/components/parameters/dateFrom" },
          { "$ref": "#/components/parameters/dateTo" },
          { "$ref": "#/components/parameters/platforms" },
          { "$ref": "#/components/parameters/labelIds" }
        ],
        "responses": {
          "200": {
            "description": "Aggregate prompt performance.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PromptSummary"
                },
                "example": {
                  "position": 2.5,
                  "visibility": 0.42,
                  "rank": 3,
                  "totalCompetitors": 12
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/prompts/dates": {
      "get": {
        "operationId": "listDailyPromptMetrics",
        "summary": "AI visibility timeseries",
        "description": "Returns daily trend rows for prompt visibility, position, and rank for a product. Use this endpoint for timeseries charts and trends monitoring.",
        "tags": ["Prompts"],
        "parameters": [
          { "$ref": "#/components/parameters/productId" },
          { "$ref": "#/components/parameters/domain" },
          { "$ref": "#/components/parameters/dateFrom" },
          { "$ref": "#/components/parameters/dateTo" },
          { "$ref": "#/components/parameters/platforms" },
          { "$ref": "#/components/parameters/labelIds" }
        ],
        "responses": {
          "200": {
            "description": "Array of daily prompt trend rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DailyPromptMetric"
                  }
                },
                "example": [
                  {
                    "date": "2026-05-01T00:00:00Z",
                    "platform": "openai",
                    "domain": "example.com",
                    "visibility": 0.42,
                    "position": 2.5,
                    "rank": 3
                  }
                ]
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/citations": {
      "get": {
        "operationId": "listCitationMetrics",
        "summary": "Citations",
        "description": "Returns citations from AI answers for a selected product by property, page or associated products.\n\nWhen `groupBy` targets a single dimension (`property`, `page`, or `product`), the response includes only that top-level field. The aliases `byProperty`, `byPage`, and `byProduct` also work.",
        "tags": ["Citations"],
        "parameters": [
          { "$ref": "#/components/parameters/productId" },
          { "$ref": "#/components/parameters/domain" },
          { "$ref": "#/components/parameters/dateFrom" },
          { "$ref": "#/components/parameters/dateTo" },
          { "$ref": "#/components/parameters/platforms" },
          { "$ref": "#/components/parameters/labelIds" },
          {
            "name": "groupBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": ["all", "property", "page", "product"],
              "default": "all"
            },
            "description": "Group citations by dimension. `all` returns all three grouped arrays."
          }
        ],
        "responses": {
          "200": {
            "description": "Citation metrics grouped by the selected dimension.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CitationResponse"
                },
                "example": {
                  "byProperty": [
                    {
                      "domain": "example.com",
                      "products": [{ "name": "Example", "domain": "example.com" }],
                      "count": 12,
                      "isMentioned": true
                    }
                  ],
                  "byPage": [
                    {
                      "domain": "example.com",
                      "url": "https://example.com/guide",
                      "products": [{ "name": "Example", "domain": "example.com" }],
                      "count": 8,
                      "isMentioned": true
                    }
                  ],
                  "byProduct": [
                    {
                      "name": "Example",
                      "domain": "example.com",
                      "count": 12,
                      "isMentioned": true
                    }
                  ]
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    },
    "/v1/products/{productId}/analytics/timeseries": {
      "get": {
        "operationId": "getAnalyticsTimeseries",
        "summary": "Agent Analytics timeseries",
        "description": "Returns paginated AI agent / bot and referred human traffic timeseries. Use this endpoint for operational analytics, agent traffic dashboards, and data warehouse syncs.\n\nResponse rows include only the requested metrics and dimensions.",
        "tags": ["Agent Analytics"],
        "parameters": [
          { "$ref": "#/components/parameters/productId" },
          {
            "name": "dateFrom",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time",
              "example": "2026-05-01T00:00:00Z"
            },
            "description": "Inclusive start timestamp in RFC3339 format."
          },
          {
            "name": "dateTo",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time",
              "example": "2026-05-31T23:59:59Z"
            },
            "description": "Inclusive end timestamp in RFC3339 format."
          },
          {
            "name": "websiteId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "site_123"
            },
            "description": "Filter analytics to one website ID returned by `GET /v1/products/{productId}/websites`. If omitted, all active websites for the product are included."
          },
          {
            "name": "interval",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": ["day", "week"],
              "default": "day"
            },
            "description": "Time bucket size. Defaults to `day`."
          },
          {
            "name": "metrics[]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "bot_visits",
                  "human_visits",
                  "referred_human_visits",
                  "ai_referred_human_visits",
                  "unique_human_visitors",
                  "unique_pages",
                  "unique_human_pages",
                  "unique_human_platforms",
                  "bot_user_agents"
                ]
              },
              "default": ["bot_visits"]
            },
            "description": "Metrics to include in each row. Defaults to `bot_visits`.",
            "style": "form",
            "explode": true
          },
          {
            "name": "groupBy[]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": ["platform", "botType", "urlPath", "normalizedUrlPath", "urlPathDirectory"]
              }
            },
            "description": "Dimensions to group rows by.",
            "style": "form",
            "explode": true
          },
          {
            "name": "platforms[]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": { "type": "string" }
            },
            "description": "Filter by agent platform, such as `openai`.",
            "style": "form",
            "explode": true
          },
          {
            "name": "botTypes[]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": { "type": "string" }
            },
            "description": "Filter by bot type, such as `chatgpt-user`.",
            "style": "form",
            "explode": true
          },
          {
            "name": "urlPath",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Filter by normalized URL path."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "description": "Page number. Defaults to `1`."
          },
          {
            "name": "perPage",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 20
            },
            "description": "Rows per page. Defaults to `20`."
          },
          {
            "name": "topLimit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Return top-N rows per time bucket, ordered by the first requested metric."
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated timeseries rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsTimeseriesResponse"
                },
                "example": {
                  "previousPage": null,
                  "currentPage": 1,
                  "nextPage": null,
                  "totalPages": 1,
                  "totalItems": 1,
                  "perPage": 50,
                  "items": [
                    {
                      "platform": "openai",
                      "timestamp": "2026-05-04T00:00:00Z",
                      "botVisits": 128,
                      "aiReferredHumanVisits": 16
                    }
                  ]
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalServerError" }
        }
      }
    }
  }
}
