{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Exposure Scanner: Public Secrets, Files & AI-Crawler Policy",
    "description": "Passive, scored scan of your own domains and public GitHub repos: masked leaked secrets, exposed .env, .git and backup files, which AI crawlers may train on your site, security headers and SPF/DMARC, each with a fix. Authorization required. From $0.039 per domain, $0.0039 per repo.",
    "version": "1.0",
    "x-build-id": "AzbzMeGDc2kYX710k"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fairquery~ai-exposure-scanner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fairquery-ai-exposure-scanner",
        "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/fairquery~ai-exposure-scanner/runs": {
      "post": {
        "operationId": "runs-sync-fairquery-ai-exposure-scanner",
        "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/fairquery~ai-exposure-scanner/run-sync": {
      "post": {
        "operationId": "run-sync-fairquery-ai-exposure-scanner",
        "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": [
          "authorizedToScan"
        ],
        "properties": {
          "authorizedToScan": {
            "title": "I own or am authorized to scan these targets",
            "type": "boolean",
            "description": "Required to scan. Tick this only if you own the domains and GitHub orgs below, or have explicit permission to scan them. Without it the run stops before sending any request to the targets and nothing is charged. The scan is passive (GET requests and DNS lookups only), but you are responsible for having authorization.",
            "default": false
          },
          "domains": {
            "title": "Domains to scan",
            "type": "array",
            "description": "Your own domains, e.g. example.com. The scanner fetches the homepage, robots.txt/ai.txt/llms.txt/security.txt, a short fixed list of well-known sensitive paths (each once), and SPF/DMARC DNS records.",
            "items": {
              "type": "string"
            }
          },
          "githubOrgs": {
            "title": "GitHub orgs or users to scan",
            "type": "array",
            "description": "Your own GitHub organization or user names. The scanner reads only public repositories via the public GitHub API and scans candidate files for committed secrets.",
            "items": {
              "type": "string"
            }
          },
          "githubToken": {
            "title": "GitHub token (optional)",
            "type": "string",
            "description": "A GitHub token (classic or fine-grained, read-only/public access is enough) raises the API rate limit from 60 to 5,000 requests/hour. Stored as a secret. Only sent to api.github.com."
          },
          "checks": {
            "title": "Checks to run",
            "type": "array",
            "description": "Which categories to run. Default: all.",
            "items": {
              "type": "string",
              "enum": [
                "secrets",
                "exposed_files",
                "ai_policy",
                "data_exposure",
                "headers",
                "email_auth"
              ],
              "enumTitles": [
                "GitHub secrets",
                "Exposed files",
                "AI-crawler policy",
                "Data-exposure hints",
                "Security headers",
                "Email auth (SPF/DMARC)"
              ]
            },
            "default": [
              "secrets",
              "exposed_files",
              "ai_policy",
              "data_exposure",
              "headers",
              "email_auth"
            ]
          },
          "maxRepos": {
            "title": "Max repos per org",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Public repositories scanned per org (newest-pushed first).",
            "default": 50
          },
          "includeForks": {
            "title": "Include forks",
            "type": "boolean",
            "description": "Also scan forked repositories (off by default; forks usually mirror upstream code).",
            "default": false
          },
          "includeArchived": {
            "title": "Include archived repos",
            "type": "boolean",
            "description": "Also scan archived repositories (off by default).",
            "default": false
          },
          "minSeverity": {
            "title": "Minimum severity to report",
            "enum": [
              "info",
              "low",
              "medium",
              "high",
              "critical"
            ],
            "type": "string",
            "description": "Findings below this are not written to the dataset or charged (they still affect the score).",
            "default": "info"
          },
          "requestDelaySecs": {
            "title": "Delay between requests to a host (seconds)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Minimum gap between requests to the same host. A larger robots.txt Crawl-delay wins.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}