{
  "swagger": "2.0",
  "info": {
    "title": "LLMPulse API",
    "description": "API for monitoring brand visibility and sentiment across AI-powered search engines and LLMs (ChatGPT, Perplexity, Gemini, Claude).",
    "version": "1.0.0",
    "contact": {
      "name": "LLMPulse Support",
      "url": "https://llmpulse.ai",
      "email": "support@llmpulse.ai"
    }
  },
  "host": "api.llmpulse.ai",
  "basePath": "/api/v1",
  "schemes": ["https"],
  "consumes": ["application/json"],
  "produces": ["application/json"],
  "securityDefinitions": {
    "Bearer": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header",
      "description": "Bearer token authentication. Format: Bearer YOUR_API_KEY"
    }
  },
  "security": [
    {
      "Bearer": []
    }
  ],
  "tags": [
    {"name": "Health", "description": "API health check"},
    {"name": "Dimensions", "description": "Retrieve dimension data"},
    {"name": "Metrics", "description": "Retrieve time-series metrics"},
    {"name": "Answers", "description": "Access raw AI responses"},
    {"name": "Sentiments", "description": "Detailed sentiment analysis"},
    {"name": "MCP", "description": "Model Context Protocol"}
  ],
  "paths": {
    "/ping": {
      "get": {
        "tags": ["Health"],
        "summary": "Health check",
        "operationId": "ping",
        "responses": {
          "200": {
            "description": "API is healthy",
            "schema": {
              "type": "object",
              "properties": {
                "status": {"type": "string"},
                "timestamp": {"type": "string", "format": "date-time"}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/projects": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List all projects",
        "operationId": "listProjects",
        "responses": {
          "200": {
            "description": "List of projects",
            "schema": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "array",
                  "items": {"$ref": "#/definitions/Project"}
                }
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/projects/{id}": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "Get project details",
        "operationId": "getProjectDetails",
        "parameters": [
          {"name": "id", "in": "path", "required": true, "type": "integer"}
        ],
        "responses": {
          "200": {
            "description": "Project details",
            "schema": {"$ref": "#/definitions/ProjectDetails"}
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Not Found", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/competitors": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List competitors",
        "operationId": "listCompetitors",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"}
        ],
        "responses": {
          "200": {
            "description": "List of competitors",
            "schema": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "array",
                  "items": {"$ref": "#/definitions/Competitor"}
                }
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/competitors/{id}": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "Get competitor details",
        "operationId": "getCompetitorDetails",
        "parameters": [
          {"name": "id", "in": "path", "required": true, "type": "integer"}
        ],
        "responses": {
          "200": {
            "description": "Competitor details",
            "schema": {"$ref": "#/definitions/CompetitorDetails"}
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Not Found", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/collections": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List collections (tags)",
        "operationId": "listCollections",
        "parameters": [{"$ref": "#/parameters/ProjectId"}],
        "responses": {
          "200": {
            "description": "List of collections",
            "schema": {
              "type": "object",
              "properties": {
                "data": {"type": "array", "items": {"$ref": "#/definitions/Collection"}}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/tags": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List tags (alias for collections)",
        "operationId": "listTags",
        "parameters": [{"$ref": "#/parameters/ProjectId"}],
        "responses": {
          "200": {
            "description": "List of tags",
            "schema": {
              "type": "object",
              "properties": {
                "data": {"type": "array", "items": {"$ref": "#/definitions/Collection"}}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/models": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List AI models",
        "operationId": "listModels",
        "parameters": [{"$ref": "#/parameters/ProjectId"}],
        "responses": {
          "200": {
            "description": "List of AI models",
            "schema": {
              "type": "object",
              "properties": {
                "data": {"type": "array", "items": {"$ref": "#/definitions/Model"}}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/locales": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List locales",
        "operationId": "listLocales",
        "parameters": [{"$ref": "#/parameters/ProjectId"}],
        "responses": {
          "200": {
            "description": "List of locales",
            "schema": {
              "type": "object",
              "properties": {
                "data": {"type": "array", "items": {"$ref": "#/definitions/Locale"}}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/sentiments": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List sentiment buckets",
        "operationId": "listSentimentBuckets",
        "parameters": [{"$ref": "#/parameters/ProjectId"}],
        "responses": {
          "200": {
            "description": "List of sentiment buckets",
            "schema": {
              "type": "object",
              "properties": {
                "data": {"type": "array", "items": {"$ref": "#/definitions/SentimentBucket"}}
              }
            }
          },
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/prompts": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List prompts",
        "operationId": "listPrompts",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"}
        ],
        "responses": {
          "200": {"description": "Paginated list of prompts"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/prompt_executions": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List prompt executions",
        "operationId": "listPromptExecutions",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of prompt executions"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/sources": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List citation sources",
        "operationId": "listSources",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of sources"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/mentions": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List brand mentions",
        "operationId": "listMentions",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of mentions"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/citations": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List citations",
        "operationId": "listCitations",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of citations"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/competitor_mentions": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List competitor mentions",
        "operationId": "listCompetitorMentions",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Competitors"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of competitor mentions"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/dimensions/competitor_citations": {
      "get": {
        "tags": ["Dimensions"],
        "summary": "List competitor citations",
        "operationId": "listCompetitorCitations",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Competitors"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of competitor citations"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/metrics/timeseries": {
      "get": {
        "tags": ["Metrics"],
        "summary": "Get time-series metrics",
        "operationId": "getTimeseries",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"name": "metrics", "in": "query", "required": true, "type": "string", "description": "Comma-separated metrics: mentions, citations, responses, visibility, citation_rate, ai_visibility_score, avg_position, sentiment_*, net_sentiment"},
          {"name": "granularity", "in": "query", "required": true, "type": "string", "enum": ["day", "week", "month"]},
          {"name": "range", "in": "query", "type": "integer", "description": "Days to look back"},
          {"name": "from", "in": "query", "type": "string", "format": "date"},
          {"name": "to", "in": "query", "type": "string", "format": "date"},
          {"$ref": "#/parameters/Competitors"},
          {"name": "model", "in": "query", "type": "string"},
          {"name": "locale", "in": "query", "type": "string"},
          {"name": "collection", "in": "query", "type": "string"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"},
          {"name": "include_project", "in": "query", "type": "boolean", "default": true}
        ],
        "responses": {
          "200": {"description": "Time-series data"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/metrics/summary": {
      "get": {
        "tags": ["Metrics"],
        "summary": "Get metrics summary",
        "operationId": "getSummary",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"name": "metrics", "in": "query", "required": true, "type": "string"},
          {"name": "granularity", "in": "query", "required": true, "type": "string", "enum": ["day", "week", "month"]},
          {"name": "range", "in": "query", "type": "integer"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Summary metrics"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/metrics/sov": {
      "get": {
        "tags": ["Metrics"],
        "summary": "Get Share of Voice",
        "operationId": "getShareOfVoice",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"name": "range", "in": "query", "type": "integer", "default": 30},
          {"$ref": "#/parameters/Competitors"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Share of Voice data"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/metrics/top_sources": {
      "get": {
        "tags": ["Metrics"],
        "summary": "Get top citation sources",
        "operationId": "getTopSources",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"name": "range", "in": "query", "type": "integer", "default": 30},
          {"name": "sort", "in": "query", "type": "string", "enum": ["total_responses", "avg_visibility"], "default": "total_responses"},
          {"name": "query", "in": "query", "type": "string"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"}
        ],
        "responses": {
          "200": {"description": "Top sources data"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/answers": {
      "get": {
        "tags": ["Answers"],
        "summary": "List AI answers",
        "operationId": "listAnswers",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"},
          {"name": "prompt", "in": "query", "type": "integer", "description": "Filter by prompt ID"}
        ],
        "responses": {
          "200": {"description": "Paginated list of answers"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/answers/{id}": {
      "get": {
        "tags": ["Answers"],
        "summary": "Get answer details",
        "operationId": "getAnswer",
        "parameters": [
          {"name": "id", "in": "path", "required": true, "type": "integer"}
        ],
        "responses": {
          "200": {"description": "Answer details"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Not Found", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/sentiments": {
      "get": {
        "tags": ["Sentiments"],
        "summary": "List detailed sentiments",
        "operationId": "listDetailedSentiments",
        "parameters": [
          {"$ref": "#/parameters/ProjectId"},
          {"$ref": "#/parameters/Page"},
          {"$ref": "#/parameters/PerPage"}
        ],
        "responses": {
          "200": {"description": "Paginated list of sentiment records"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}},
          "404": {"description": "Project Not Found", "schema": {"$ref": "#/definitions/Error"}},
          "422": {"description": "Unprocessable Entity", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    },
    "/mcp": {
      "post": {
        "tags": ["MCP"],
        "summary": "Model Context Protocol endpoint",
        "operationId": "handleMcp",
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {"$ref": "#/definitions/McpRequest"}
          }
        ],
        "responses": {
          "200": {"description": "MCP response"},
          "401": {"description": "Unauthorized", "schema": {"$ref": "#/definitions/Error"}},
          "403": {"description": "Forbidden", "schema": {"$ref": "#/definitions/Error"}}
        }
      }
    }
  },
  "parameters": {
    "ProjectId": {
      "name": "project_id",
      "in": "query",
      "required": true,
      "type": "integer",
      "description": "Your project ID"
    },
    "Competitors": {
      "name": "competitors",
      "in": "query",
      "type": "string",
      "description": "Comma-separated competitor IDs"
    },
    "Page": {
      "name": "page",
      "in": "query",
      "type": "integer",
      "default": 1
    },
    "PerPage": {
      "name": "per_page",
      "in": "query",
      "type": "integer",
      "default": 20,
      "maximum": 100
    }
  },
  "definitions": {
    "Error": {
      "type": "object",
      "properties": {
        "error": {"type": "string", "description": "Error code (e.g., ERR_MISSING_AUTH, ERR_INVALID_API_KEY, ERR_REVOKED_API_KEY, ERR_PROJECT_NOT_FOUND, ERR_INVALID_PARAM)"},
        "message": {"type": "string", "description": "Human-readable error message"}
      },
      "example": {
        "error": "ERR_INVALID_PARAM",
        "message": "Unknown metric: invalid_metric"
      }
    },
    "Project": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "domain": {"type": "string"}
      }
    },
    "ProjectDetails": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "domain": {"type": "string"},
        "keywords": {"type": "array", "items": {"type": "string"}},
        "competitors_count": {"type": "integer"},
        "prompts_count": {"type": "integer"}
      }
    },
    "Competitor": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "domain": {"type": "string"}
      }
    },
    "CompetitorDetails": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "domain": {"type": "string"},
        "keywords": {"type": "array", "items": {"type": "string"}}
      }
    },
    "Collection": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "prompts_count": {"type": "integer"}
      }
    },
    "Model": {
      "type": "object",
      "properties": {
        "id": {"type": "string"},
        "name": {"type": "string"},
        "provider": {"type": "string"}
      }
    },
    "Locale": {
      "type": "object",
      "properties": {
        "id": {"type": "string"},
        "name": {"type": "string"}
      }
    },
    "SentimentBucket": {
      "type": "object",
      "properties": {
        "key": {"type": "string"},
        "label": {"type": "string"},
        "color": {"type": "string"}
      }
    },
    "McpRequest": {
      "type": "object",
      "properties": {
        "jsonrpc": {"type": "string"},
        "id": {"type": "string"},
        "method": {"type": "string"},
        "params": {"type": "object"}
      }
    }
  }
}
