User-Agent, excludes Profound’s own loop-protected fetches, and rewrites matching requests to Profound with your API key and public host attached as request headers.
Nothing in your application changes. Vercel’s edge network evaluates the rule before your functions run, and requests from anything other than a supported assistant never match it.
Requests are rewritten to https://concierge.tryprofound.com/v1/concierge/vercel/{path}. Profound reconstructs the original path and query from the rewritten URL, so there is no x-concierge-url header to maintain. Which paths are rendered is decided by your policy in Profound, not by the rule: an assistant request for a path you have not opted in is passed straight through to your deployment.
Prerequisites
- A Vercel project you can deploy
- Your Dynamic Bot Rendering API key, a registered domain, a policy that opts your public pages in, and a known published test page. See Before you start.
- Confirm that deployment protection, firewall rules, and bot challenges permit assistant traffic and Profound’s origin fetches without weakening access controls.
Setup
1
Add the API key to your project environment
In the Vercel dashboard, open Project → Settings → Environment Variables and add:
Keep the key in the environment, never in the rule file. The rule file is committed to your repository.
2
Add the routing rule
Add the following route to your project configuration, replacing
www.example.com with your registered public host. Use whichever file your project already has.3
Deploy and verify
Deploy the project, then:Check the HTTP status, a valid
x-concierge-request-id, and the expected x-concierge-bot-kind. On your known published page, also require x-concierge-cache: HIT and the expected rendered body. Verify that browser requests and search crawlers keep their existing behavior, and that a request carrying x-concierge-request: 1 reaches your deployment directly.Send a GET request. Profound’s contract covers GET only, so use curl -sD - -o /dev/null rather than curl -I. Full checks are in Verify and troubleshoot.What each part of the rule does
Non-
GET requests from a matching User-Agent are also rewritten and receive 405 from Profound. Supported assistants fetch pages with GET, so this does not affect normal traffic. Add "methods": ["GET"] to the route if you want other methods to stay on your deployment.
Multiple domains
Thex-concierge-host transform is a fixed string, so one rule serves one public host. If a single Vercel project serves several registered domains, add one route per host and narrow each with a has condition on the host header:
Preview deployments
The rule above fires on every hostname the project serves, including preview deployments. Becausex-concierge-host is fixed, a preview request would be identified to Profound as production. Scoping PROFOUND_CONCIERGE_KEY to Production only, as in step 1, means preview requests carry an unexpanded literal key and Profound rejects them with 401, so they can never serve or render production content.
If you want assistant requests on preview hosts to reach your preview deployment normally instead, add the host condition from Multiple domains so the rule only matches your production hostname. See environment variables in routes for how unset variables are handled.
Cache and content checks
Confirm deployed rewrite cache behavior before enabling traffic. Vercel honors upstream cache headers by default for projects created on or after April 6, 2026. Older projects can opt in through project settings orx-vercel-enable-rewrite-caching; that header set to 0 opts out. Check project age, the current setting, and route overrides rather than assuming a default. Do not assume a rendered response has Cache-Control: no-store: the Vercel adapter does not guarantee it. If your cache rules make these responses cacheable, verify separation between assistant and human responses and between host, path, and query variants. If caching is enabled, verify expiration and invalidation after publishing a replacement, unpublishing, or pausing serving: a CDN entry can outlive the change in Profound.
Profound does not forward viewer cookies or authorization to your origin, and stored pages are not personalized by session, language, or geography. Review same-URL locale and header variants before opting a page in.
Security notes
- The loop marker is client-spoofable by design. Anyone sending
x-concierge-request: 1skips the rewrite and gets your live origin page, the same content a non-assistantUser-Agentreceives. It skips rendering and telemetry for that request. Never use this marker to bypass authentication or firewall checks. - The key stays out of the repository. It’s referenced from the project environment, never written into the rule file.
- Profound re-derives the assistant itself. It never trusts a caller-supplied identity header, only the forwarded
User-Agent. - Credentials never reach your origin through Profound. The rule forwards whatever headers the assistant sent, but Profound drops cookies and authorization headers when it fetches your origin, and only opted-in public pages are rendered.