__cf_chl_tk Explained: The Cloudflare Challenge Token

What the __cf_chl_tk parameter is, why it grants nothing on its own, and how it fits the Cloudflare challenge flow that ends in a cf_clearance cookie.

You're watching the network tab while a Cloudflare-protected page loads, and a request goes out to something like /cdn-cgi/challenge-platform/h/g/orchestrate/chl_page/v1?ray=...&__cf_chl_tk=abc123.... The __cf_chl_tk parameter is sitting right there in the query string, and it's not documented anywhere official. So what is it?

Short version: __cf_chl_tk is the Cloudflare challenge token. It's a short-lived handle that ties your browser to a specific in-progress challenge. It is not the thing that lets you through, and that distinction trips up almost everyone who finds it.

Where it comes from

When Cloudflare decides a request needs a challenge, it doesn't serve your page. It serves an interstitial, the "Just a moment..." screen, with a challenge script. That script has to talk back to Cloudflare to run the challenge and report the result. The __cf_chl_tk token is how Cloudflare keeps track of which challenge this browser is working on.

Think of it as a claim ticket. When the interstitial loads, Cloudflare issues a token. Every follow-up request the challenge script makes, fetching the orchestration logic, submitting the proof, carries that token so the edge knows these calls all belong to the same session. The ray ID in the same URL is the human-readable log reference; the __cf_chl_tk is the machine-readable session binding.

What it is not

It is not your pass. People find __cf_chl_tk, assume it's the magic value that unlocks the site, copy it, replay it, and get nowhere. The token is useless on its own and it dies in seconds. It only has meaning inside the exact challenge flow that minted it.

The thing that actually grants access is the cf_clearance cookie, which Cloudflare sets after you complete the challenge successfully. That's the credential your subsequent requests ride on. The __cf_chl_tk is the plumbing that gets you from "here's a challenge" to "here's your clearance cookie," and then it's done.

So the mental model is a short chain:

  • Request hits a protected page and gets scored as suspicious.
  • Cloudflare returns the interstitial and issues a __cf_chl_tk.
  • The challenge script uses that token to run and submit the challenge.
  • On success, Cloudflare sets cf_clearance.
  • The token is spent. Your cookie is what matters from here.

How this relates to Turnstile

This is where people conflate two things that look similar. Turnstile, the widget you embed on your own forms, produces a cf-turnstile-response token that your backend verifies. The __cf_chl_tk you see on the "Just a moment..." screen belongs to Cloudflare's own bot-management challenge (what used to be called the 5-second challenge), which protects a whole site rather than a single form.

Different systems, overlapping vocabulary. If you want the clean separation, we laid it out in the cf-turnstile-response token explainer and the 5-second challenge piece. The one-line version: Turnstile is a CAPTCHA you add to a form, the managed challenge is a gate Cloudflare puts in front of the whole site, and __cf_chl_tk is internal to the latter.

Why it matters if you're automating

If you're scraping or automating against a site behind Cloudflare's managed challenge, understanding this chain saves you from a dead end. You cannot shortcut it by grabbing the token. You have to actually run the challenge, in something that looks enough like a real browser to pass the fingerprinting, and come out the other side with a valid cf_clearance cookie. Then you reuse that cookie until it expires.

Running that challenge headless is the hard part, and it's hard on purpose. The challenge script inspects the JavaScript runtime, the TLS handshake, timing, and the usual automation artifacts. Pass those and you get the cookie; fail and you loop back to another __cf_chl_tk and another interstitial.

This is the work a solving API takes off your plate. You hand over the target, something keeps a current browser fingerprint and a clean IP pool, the challenge runs, and you get back the clearance you need. We process on the order of 8,000 of these a minute, and the pattern that holds is simple: the token is never the problem, the fingerprint and the exit IP are. If you'd rather not maintain that yourself, Peak's Cloudflare solving handles both the Turnstile widget and the managed challenge. The docs show the request shape.

In one sentence

__cf_chl_tk is a disposable session token that links your browser to one Cloudflare challenge; it expires in seconds, grants nothing by itself, and the real prize is the cf_clearance cookie you earn by completing the challenge it belongs to.