{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Answer Visibility Monitor - GEO Brand Tracking API",
    "description": "Is your brand named when AI assistants answer questions? No subscription, no prompt caps, pay per check. Live Google Search grounding, a mention RATE across runs, competitors named, sources cited, plus next steps. The affordable Profound and Otterly alternative. Agent-ready MCP.",
    "version": "0.1",
    "x-build-id": "s3WDXvYt8HbH6VLM8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/veska~ai-answer-visibility-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-veska-ai-answer-visibility-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/veska~ai-answer-visibility-monitor/runs": {
      "post": {
        "operationId": "runs-sync-veska-ai-answer-visibility-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/veska~ai-answer-visibility-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-veska-ai-answer-visibility-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "brand",
          "queries"
        ],
        "properties": {
          "brand": {
            "title": "Brand or product name",
            "type": "string",
            "description": "The brand, product, or company name to track. Example: Tesla"
          },
          "queries": {
            "title": "Questions to check",
            "type": "array",
            "description": "The questions your target customers would ask an AI assistant. One result row per question per engine. Example: 'What is the best electric car in 2026?'",
            "items": {
              "type": "string"
            }
          },
          "engines": {
            "title": "AI engines to check",
            "type": "array",
            "description": "Which AI assistants to query. Select one or more. Gemini needs a free Gemini key. OpenAI and Perplexity both run through OpenRouter (one paid key powers both, get it at openrouter.ai). Engines without a key are skipped. Beta note: OpenAI and Perplexity are coded but not yet verified with a live key - marked beta until tested.",
            "items": {
              "type": "string",
              "enum": [
                "gemini",
                "openai",
                "perplexity"
              ],
              "enumTitles": [
                "Google Gemini (free key from aistudio.google.com)",
                "OpenAI GPT-4o with web search (beta, needs OpenRouter key)",
                "Perplexity Sonar web-grounded (beta, needs OpenRouter key)"
              ]
            },
            "default": [
              "gemini"
            ]
          },
          "geminiApiKey": {
            "title": "Gemini API key (free)",
            "type": "string",
            "description": "Your Google Gemini API key. Get one free at aistudio.google.com (no credit card). Leave blank to run a demo with sample output."
          },
          "openrouterApiKey": {
            "title": "OpenRouter API key (for OpenAI and Perplexity)",
            "type": "string",
            "description": "Your OpenRouter API key. One key powers both OpenAI and Perplexity engines. Get it at openrouter.ai (paid, ~$5 top-up = thousands of checks). Only needed if you selected OpenAI or Perplexity above."
          },
          "useGrounding": {
            "title": "Use live Google Search grounding (Gemini only, recommended)",
            "type": "boolean",
            "description": "Gemini only. ON (recommended): the AI searches the live web before answering, so results match what real users see. This is real GEO data. Turn OFF only to save quota (then it answers from the model's memory, which is less accurate). OpenAI and Perplexity are always web-grounded.",
            "default": true
          },
          "runsPerQuery": {
            "title": "Runs per query (for a reliable mention rate)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "AI answers vary between runs. We check each query several times and report a mention RATE (%), not a misleading single yes/no. You pay per AI check, so 3 runs of one query on one engine = 3 checks. Set 1 for the cheapest quick check, higher for a more reliable rate.",
            "default": 3
          },
          "geminiModel": {
            "title": "Gemini model (advanced)",
            "type": "string",
            "description": "Advanced: which Gemini model to use. Default gemini-2.5-flash is fast and supports grounding. Change only if Google updates model names. Does not affect OpenAI or Perplexity.",
            "default": "gemini-2.5-flash"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}