Skip to content

Use code FUN10 for 10% bonus credits

DocsGeeTest

GeeTest API Reference

Solve GeeTest v4 and v3 challenges and submit the result for site-owner verification.

Read Markdown (English)

The Captcha.fun GeeTest API accepts kind, url, siteKey and returns GeeTest v4 or v3 validate values. Send the API_KEY header, create a solve with POST /v1/request, then poll GET /v2/response/{id} until ready is true.

What you’ll need

  • Your API key
  • The URL of the page where the challenge appears
  • The site key from the page
  • Optional: geetestChallenge, geetestApiServer, geetestProduct, geetestLang, geetestNewCaptcha, geetestRiskType, geetestUserInfo
  • A proxy, if the result must come from your own IP (geetest_proxy)
Use kind

Good to Know

v4 (default): siteKey is the captchaId. Returns four fields for GeeTest’s validate endpoint.

v3: siteKey is the gt, and geetestChallenge is the challenge from your own register call. Returns geetest_challenge, geetest_validate, and geetest_seccode.

Optional: geetestApiServer for self-hosted v3, geetestRiskType for gated v4, and geetestUserInfo when v4 is bound to the site’s session.

Send the Challenge

Send the page details with your API key. You get a solve id back right away.

POSThttps://api.captcha.fun/v1/request
curl -X POST https://api.captcha.fun/v1/request \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "kind": "geetest",
  "url": "https://your-domain.example/login",
  "siteKey": "YOUR_GEETEST_CAPTCHA_ID"
}'

Response

Returns the solve id. Use it to get the result.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "message": "Started Solving"
}
Request fields12 body fields · 3 required

Headers

NameTypeRequiredDescription
API_KEYstringYesYour API key
Content-TypestringYesapplication/json
APP_IDstringNoOptional app ID for request tracking

Body

NameTypeRequiredDescription
kindstringYesOne of geetest, geetest_proxy
urlstringYesPage URL where the challenge appears
siteKeystringYesSite key of the challenge
geetestChallengestringNoRequired for v3. Challenge from your own register call; setting it switches the solve to v3. Challenges are single-use and short-lived — mint one fresh challenge per solve attempt and never retry a failed attempt with the same challenge
geetestApiServerstringNov3 only. Self-hosted API host. Omit for GeeTest’s servers
geetestProductstringNoWidget mode: bind (default), popup, or float
geetestLangstringNoWidget language. Defaults to eng / en
geetestNewCaptchastringNov3 only. true or 1 sends new_captcha on init
geetestRiskTypestringNoGated v4 sites only. Site-issued risk token; without it /load fails with illegal risk_type
geetestUserInfostringNov4 only. Site-issued userInfo JSON, e.g. {"session_id":"..."}, passed through as-is
proxystringNoFor _proxy kinds: host:port or host:port:username:password
platformstringNoRequested platform label: windows (default) or mac

Wait for the Result

Use the solve id to fetch the result.

GEThttps://api.captcha.fun/v2/response/{id}

Poll every second until ready is true.

Example

curl -X GET https://api.captcha.fun/v2/response/550e8400-e29b-41d4-a716-446655440000 \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Accept: application/json"

Response

{
  "ready": true,
  "status": "SUCCESS",
  "success": true,
  "userAgent": "RETURNED_USER_AGENT",
  "secUa": "RETURNED_SEC_CH_UA",
  "token": "",
  "geetest": {
    "lot_number": "0241c2ef9dc0f0e5a3d0e1f5f2ad5c8d",
    "captcha_output": "5KAmMKVkldquKZ8DP5ehcG8LDv1brhRYgCbj9...",
    "pass_token": "8e035d781cd7f7c1d6c2f45ae2b0b8c8fb...",
    "gen_time": "1735689600"
  }
}
Request and response fields13 response fields

Request

NameTypeRequiredDescription
idstring (UUID)YesPath parameter. The id from Create Solve
API_KEYstringYesHeader. Your API key

Response Fields

NameTypeRequiredDescription
readyboolean—true when the solve is finished (v2 only)
statusstring—PENDING while solving, then SUCCESS or FAILURE
successboolean—Whether the solve succeeded
userAgentstring—Value to send as User-Agent when using the result. Preserve it exactly
secUastring—Value to send as Sec-CH-UA when using the result
geetest.lot_numberstring—v4 lot number
geetest.captcha_outputstring—v4 captcha output
geetest.pass_tokenstring—v4 pass token
geetest.gen_timestring—v4 generation time
geetest.geetest_challengestring—v3 challenge
geetest.geetest_validatestring—v3 validate value
geetest.geetest_seccodestring—v3 seccode
messagestring—Failure reason. Omitted on success

Submit the Token

  • v4: the site owner verifies lot_number, captcha_output, pass_token, and gen_time through GeeTest’s validate endpoint, using the HMAC-SHA256 sign_token.
  • v3: submit geetest_challenge, geetest_validate, and geetest_seccode to the site’s validate endpoint. The result is single-use, so use it right away.

When using a successful result, preserve the returned userAgent as User-Agent and secUa as Sec-CH-UA.

Wrong or rejected result? Report the failed solve.