What a challenge does to a purchase
Bot protection answers a request it distrusts with a challenge in place of your response: usually a403 carrying an HTML page (Vercel’s Security Checkpoint, Cloudflare’s “Just a moment” interstitial) that a browser passes by running JavaScript. ZeroClick does not solve challenges. It returns your upstream’s status and body to the buyer unchanged, so the agent receives an HTML checkpoint where it expected a 402 or your JSON, and reports the purchase as failed. Nothing on your side records an error, because the request never reached your handler.
Signs that this is happening:
- An agent reports a security checkpoint, a bot check, or a
403from your pay URL on a route that answers JSON. - The failures are intermittent. One probe passes, the next is challenged.
- Your own logs show no request for the failed call.
What to key the exemption on
Match on the presence of
zc-signature, and scope the rule to the paths ZeroClick calls: the endpoint paths in your catalog, which are the paths agents request on your pay URL and which ZeroClick forwards to the origin of your upstream base URL, plus /zeroclick/access and everything under it if you sell accounts and API keys. The rest of your site keeps its protection.
One fetch carries no signature: the OpenAPI document ZeroClick downloads from your store’s OpenAPI URL when it imports your catalog. If that document sits behind the same challenge, exempt its path on its own. It is public by design.
Why the exemption is safe
Anyone can put azc-signature header on a request, so the rule lets unverified traffic past the bot check on the exempted paths. That traffic then meets your guard, which recomputes the HMAC with your signing secret and answers 401 {"error":"invalid_zeroclick_signature"} before your handler runs. A forged header trades a challenge page for a 401 and nothing more. The guard was always the gate. The exemption stops a second gate from refusing the traffic the first one was built to check. See verify requests.
Rate limits are a different control. One sized for real buyer volume can stay in place. A challenge action cannot, because no forward can pass it.
Platform recipes
- Vercel
- Cloudflare
- Other layers
Vercel’s Bot Protection managed ruleset challenges non-browser traffic, and Vercel notes that direct API calls cannot pass the challenge. Its documented exemption for trusted automation is a WAF custom rule with the Bypass action.
- In the project, open Firewall, then Configure, then Add New and Rule.
- Add the condition Header
zc-signatureExists. Add a second condition with AND: Request Path Starts with the path ZeroClick calls, for example/api/. - Set the action to Bypass, save the rule, and publish the change. If you have Challenge rules of your own, place this rule above them. Custom rules run in order, and the managed rulesets run after them.
Confirm the rule
From outside your network, send a request with a made-up signature to a guarded route:401 {"error":"invalid_zeroclick_signature"}: the request passed the firewall and verification refused it. A 403 or an HTML body means the challenge still applies. Then send an unpaid request to the same route on your pay URL. A 402 with a payment challenge confirms the probe reached your guard.