How to protect your AI endpoints with Vercel BotID Vercel launched BotID, a tool that verifies requests to AI endpoints come from real browsers before inference runs, using an invisible CAPTCHA and server-side classification to block automated clients. The tool allows developers to set detection levels per route, with Deep Analysis using machine learning to catch sophisticated bot networks in real time, as demonstrated when it traced a 500% traffic spike to a new bot network and blocked it within 10 minutes without manual intervention. Vercel BotID https://vercel.com/botid lets you verify that each request to your AI endpoints comes from a real browser before any inference runs. Working as an invisible CAPTCHA, it attaches a client-side challenge to requests on the routes you protect, and a server-side checkBotId call classifies each one, so automated clients are turned away before they reach your model. Running it on every request instead of once per session means an attacker can't bypass it once and reuse that access across thousands of stolen calls. This guide walks you through installing BotID, declaring an AI route on the client, and gating that route with checkBotId on the server so inference runs only for verified requests. You'll also set detection levels per route, enabling Deep Analysis on your highest-value endpoints and basic checks elsewhere, and learn how to let legitimate automation through with a Vercel WAF https://vercel.com/security/web-application-firewall bypass rule. Before you begin: - A JavaScript project deployed on Vercel https://vercel.com/docs/projects/managing-projects creating-a-project - An AI endpoint that accepts frontend requests, such as a route built with AI SDK https://ai-sdk.dev - A Pro or Enterprise plan to use Deep Analysis https://vercel.com/docs/botid deep-analysis Basic is available on all plans Add BotID to your project: Wrap your Next.js config with withBotId . This sets up proxy rewrites so that ad-blockers and third-party scripts can't weaken BotID's protection: For Nuxt, SvelteKit, and other frameworks, the setup follows a similar pattern. See the BotID getting started guide https://vercel.com/docs/botid/get-started for the per-framework versions. Call initBotId during client initialization and list the AI routes you want to protect. BotID uses this list to attach challenge headers to matching requests. If a route isn't declared here, its requests arrive without those headers, so checkBotId has nothing to verify and treats them as bots. For Next.js 15.3 and later, use instrumentation-client.ts : On earlier versions of Next.js, mount the