{
 "openapi": "3.1.0",
 "info": {
  "title": "Agent Access Check",
  "version": "1.0.0",
  "description": "One call tells your AI agent whether a website will block it (bot challenges, CAPTCHAs, robots.txt rules for GPTBot, ClaudeBot and others) and where the site's agent door is: llms.txt, MCP, or OpenAPI. Free 50/day; Pro $9/month: https://pay.instaloops.com/b/6oU28r7dC4AD8L5gt983C3t"
 },
 "servers": [
  {
   "url": "https://accesscheck.botrecipe.com"
  }
 ],
 "components": {
  "securitySchemes": {
   "bearer": {
    "type": "http",
    "scheme": "bearer"
   }
  }
 },
 "paths": {
  "/api/run/check_agent_access": {
   "post": {
    "operationId": "check_agent_access",
    "summary": "Before an agent browses or fetches a site, check if it will get in",
    "description": "Before an agent browses or fetches a site, check if it will get in. Fetches the URL as an AI agent and as a browser, detects bot challenges (Cloudflare, CAPTCHA, DataDome, PerimeterX), reads robots.txt rules for GPTBot/ChatGPT-User/ClaudeBot/Claude-User/PerplexityBot and others, and looks for agent doors (llms.txt, MCP, OpenAPI). Returns verdict: open | challenged | blocked | robots_disallowed | unreachable, plus advice. Read-only. Use it before an automated web task, not for pages you already fetched successfully.",
    "security": [
     {},
     {
      "bearer": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "url": {
          "type": "string",
          "description": "Page or domain, e.g. https://example.com/pricing"
         }
        },
        "required": [
         "url"
        ]
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Result with job, understood, outcome, usage",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "bad_agent_key"
     },
     "429": {
      "description": "free_limit_reached (includes upgrade link)"
     }
    }
   }
  },
  "/api/run/find_agent_alternative": {
   "post": {
    "operationId": "find_agent_alternative",
    "summary": "Find a machine-friendly way into a site instead of scraping its HTML: llms.txt, /.well-known/mcp.json, agents.json, openapi.json, ai-plugin.json, and MCP URLs listed in llms.txt",
    "description": "Find a machine-friendly way into a site instead of scraping its HTML: llms.txt, /.well-known/mcp.json, agents.json, openapi.json, ai-plugin.json, and MCP URLs listed in llms.txt. Read-only.",
    "security": [
     {},
     {
      "bearer": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "url": {
          "type": "string"
         }
        },
        "required": [
         "url"
        ]
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Result with job, understood, outcome, usage",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "bad_agent_key"
     },
     "429": {
      "description": "free_limit_reached (includes upgrade link)"
     }
    }
   }
  },
  "/api/run/check_many": {
   "post": {
    "operationId": "check_many",
    "summary": "Run check_agent_access on up to 10 URLs at once (counts as 1 call)",
    "description": "Run check_agent_access on up to 10 URLs at once (counts as 1 call). Use it to pick which sources an agent can actually use.",
    "security": [
     {},
     {
      "bearer": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "urls": {
          "type": "array",
          "items": {
           "type": "string"
          },
          "maxItems": 10
         }
        },
        "required": [
         "urls"
        ]
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Result with job, understood, outcome, usage",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "bad_agent_key"
     },
     "429": {
      "description": "free_limit_reached (includes upgrade link)"
     }
    }
   }
  },
  "/api/key": {
   "post": {
    "operationId": "get_free_key",
    "summary": "Get a free API key",
    "responses": {
     "200": {
      "description": "api_key"
     }
    }
   }
  }
 }
}