{
  "openapi": "3.0.1",
  "info": {
    "title": "BYOK AI Visibility Tracker: ChatGPT, Perplexity, Gemini",
    "description": "Bring your own OpenAI, Perplexity or Gemini API key. Ask AI your buyers' questions through official APIs and track share of voice vs competitors, rank, citations and the pages AI cites instead of you. White-label HTML report and score card.",
    "version": "1.1",
    "x-build-id": "TtY0DiARbrdc6XtJE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rationalistic_canoe~ai-visibility-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rationalistic_canoe-ai-visibility-audit",
        "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/rationalistic_canoe~ai-visibility-audit/runs": {
      "post": {
        "operationId": "runs-sync-rationalistic_canoe-ai-visibility-audit",
        "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/rationalistic_canoe~ai-visibility-audit/run-sync": {
      "post": {
        "operationId": "run-sync-rationalistic_canoe-ai-visibility-audit",
        "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",
        "properties": {
          "brandName": {
            "title": "Brand name",
            "type": "string",
            "description": "The brand to audit, as people write it (e.g. \"Notion\")."
          },
          "brandDomain": {
            "title": "Brand website",
            "type": "string",
            "description": "Your domain (e.g. notion.so). Used to detect when AI cites your own pages and for the free AI-readiness check of your site."
          },
          "brandAliases": {
            "title": "Other names for your brand",
            "type": "array",
            "description": "Spellings, product names or old names that should count as your brand.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "One per line as \"Name | domain.com\" (domain optional). Up to 10.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "prompts": {
            "title": "Buyer questions (prompts)",
            "type": "array",
            "description": "The questions your buyers ask AI, e.g. \"best CRM for small agencies\". Leave empty and fill Category to auto-generate them. Do not name your brand if you want an unbiased answer.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category (auto-generates questions)",
            "type": "string",
            "description": "What you sell, e.g. \"GST invoicing software\". Used to generate buyer-intent questions when you give fewer than the maximum."
          },
          "audience": {
            "title": "Audience (optional)",
            "type": "string",
            "description": "Who buys it, e.g. \"freelancers\"."
          },
          "market": {
            "title": "Market (optional)",
            "type": "string",
            "description": "Where, e.g. \"India\" or \"London\"."
          },
          "maxPrompts": {
            "title": "Maximum questions",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Each question is asked once per engine (times the runs per question).",
            "default": 10
          },
          "includeCompetitorPrompts": {
            "title": "Add \"alternatives to <competitor>\" questions",
            "type": "boolean",
            "description": "Captures buyers who are about to switch.",
            "default": true
          },
          "openaiApiKey": {
            "title": "OpenAI API key (ChatGPT)",
            "type": "string",
            "description": "Your own OpenAI API key (bring your own key). Used only for the Responses API with web search; OpenAI bills you directly. Stored encrypted by Apify; never written to the dataset, report or logs."
          },
          "perplexityApiKey": {
            "title": "Perplexity API key",
            "type": "string",
            "description": "Your own Perplexity API key (bring your own key), for the Agent API with web search. Perplexity bills you directly."
          },
          "geminiApiKey": {
            "title": "Google Gemini API key",
            "type": "string",
            "description": "Your own Google AI Studio key (bring your own key), Google bills you directly; for Gemini with Grounding with Google Search (needs a paid-tier key; 5,000 grounded requests a month are free on paid tier per Google's pricing page)."
          },
          "includeGoogleAiOverviews": {
            "title": "Include Google AI Overviews",
            "type": "boolean",
            "description": "Optional. Runs Apify's own Google AI Overviews Scraper (apify/google-ai-overviews-scraper) with the Apify API token you paste below, so that run is billed to your own Apify account at its Store price. Off unless you add the token.",
            "default": false
          },
          "apifyTokenForAio": {
            "title": "Your Apify API token (for AI Overviews only)",
            "type": "string",
            "description": "Only needed for Google AI Overviews. Copy it from Apify Console → Settings → API & Integrations. Used only to start apify/google-ai-overviews-scraper on your account; stored encrypted and never written to the dataset, report or logs."
          },
          "aioMaxChargeUsd": {
            "title": "Max spend on the AI Overviews actor (USD)",
            "minimum": 0.01,
            "type": "number",
            "description": "Hard cap passed to Apify for that actor's run.",
            "default": 0.25
          },
          "engines": {
            "title": "Engines",
            "type": "array",
            "description": "Leave empty to use every engine you gave a key for.",
            "items": {
              "type": "string",
              "enum": [
                "chatgpt",
                "perplexity",
                "gemini",
                "google-aio"
              ],
              "enumTitles": [
                "ChatGPT (OpenAI)",
                "Perplexity",
                "Gemini",
                "Google AI Overviews"
              ]
            },
            "default": []
          },
          "maxApiSpendUsd": {
            "title": "Max API spend on your keys (USD)",
            "minimum": 0.01,
            "type": "number",
            "description": "Estimated spend cap across OpenAI, Perplexity and Gemini for this run. The audit stops asking new questions before it would pass this.",
            "default": 1
          },
          "samplesPerPrompt": {
            "title": "Runs per question",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "AI answers vary between runs. 2–3 runs per question show how consistent each engine is (k of n).",
            "default": 1
          },
          "country": {
            "title": "Country (ISO code)",
            "type": "string",
            "description": "Approximate searcher location, e.g. IN, US, GB. Passed to engines that support it."
          },
          "trackingName": {
            "title": "Tracking name (week-over-week)",
            "type": "string",
            "description": "Give the same name on every run (e.g. \"acme-weekly\") to show the change since the previous run. Schedule it weekly."
          },
          "runSiteCheck": {
            "title": "Check my site's AI readiness",
            "type": "boolean",
            "description": "Free check of robots.txt for AI search crawlers, homepage structured data, meta description, sitemap and llms.txt.",
            "default": true
          },
          "agencyName": {
            "title": "Agency / company name on the report",
            "type": "string",
            "description": "White-label: your name replaces ours in the report header and score card."
          },
          "logoUrl": {
            "title": "Logo URL (https)",
            "type": "string",
            "description": "Shown in the report header."
          },
          "accentColor": {
            "title": "Accent colour",
            "type": "string",
            "description": "Hex, e.g. #2563eb.",
            "default": "#60a5fa"
          },
          "reportTheme": {
            "title": "Report theme",
            "enum": [
              "dark",
              "light"
            ],
            "type": "string",
            "description": "Dark matches the score card; light prints well.",
            "default": "dark"
          },
          "hideOarsmanBranding": {
            "title": "Hide \"Built with\" footer",
            "type": "boolean",
            "description": "Only applies when an agency name is set.",
            "default": false
          },
          "demoMode": {
            "title": "Demo mode (no keys, fictional data, free)",
            "type": "boolean",
            "description": "Builds a sample report from bundled answers for fictional brands, so you can see the output before adding keys. Nothing is charged.",
            "default": false
          },
          "openaiModel": {
            "title": "OpenAI model",
            "type": "string",
            "description": "Any Responses API model that supports the web_search tool.",
            "default": "gpt-6-luna"
          },
          "geminiModel": {
            "title": "Gemini model",
            "type": "string",
            "description": "Any Gemini model that supports the google_search tool.",
            "default": "gemini-3.8-flash"
          },
          "perplexityEffort": {
            "title": "Perplexity effort level",
            "enum": [
              "fast",
              "low",
              "medium"
            ],
            "type": "string",
            "description": "Perplexity's preset; fast is closest to a normal Perplexity answer and cheapest.",
            "default": "fast"
          },
          "perplexityModel": {
            "title": "Perplexity model (optional)",
            "type": "string",
            "description": "Overrides the effort preset with a specific Agent API model."
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many engine requests run at the same time.",
            "default": 3
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries on rate limits, timeouts and server errors, with backoff.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Timeout per request (s)",
            "minimum": 20,
            "maximum": 300,
            "type": "integer",
            "description": "Timeout per request (s).",
            "default": 120
          },
          "apiPricing": {
            "title": "API price overrides",
            "type": "object",
            "description": "Optional, for the spend estimate: {\"chatgpt\":{\"inputPerM\":0.1,\"outputPerM\":0.5,\"perSearch\":0.01}}.",
            "default": {}
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}