{
  "base": "https://captcha.csdrama.com",
  "endpoints": [
    {
      "slug": "turnstile",
      "title": "Cloudflare Turnstile",
      "page": "https://captcha.csdrama.com/turnstile",
      "submit": "https://captcha.csdrama.com/turnstile/submit",
      "method": "POST",
      "tokenFields": [
        "cf-turnstile-response"
      ],
      "sitekey": "0x4AAAAAAE41iDLtucdyAF3f",
      "get_token_js": null,
      "accepts": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
      ],
      "curl": "# Cloudflare Turnstile — verify a solver token via curl\ncurl -X POST https://captcha.csdrama.com/turnstile/submit \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"cf-turnstile-response\": \"TOKEN_FROM_SOLVER\"}'\n\n# form-encoded alternative:\ncurl -X POST https://captcha.csdrama.com/turnstile/submit \\\n  -d \"cf-turnstile-response=TOKEN_FROM_SOLVER\"",
      "verified_via": "cloudflare",
      "notes": "Real verification against challenges.cloudflare.com/siteverify. Requires TURNSTILE_SECRET, otherwise mock-accepts."
    },
    {
      "slug": "recaptcha-v2",
      "title": "reCAPTCHA v2 — \"I'm not a robot\" checkbox",
      "page": "https://captcha.csdrama.com/recaptcha-v2",
      "submit": "https://captcha.csdrama.com/recaptcha-v2/submit",
      "method": "POST",
      "tokenFields": [
        "g-recaptcha-response"
      ],
      "sitekey": "6LcCosEtAAAAAN3u8UVQTRE_xbaHA43fGtwuHCON",
      "get_token_js": null,
      "accepts": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
      ],
      "curl": "# reCAPTCHA v2 — \"I'm not a robot\" checkbox — verify a solver token via curl\ncurl -X POST https://captcha.csdrama.com/recaptcha-v2/submit \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"g-recaptcha-response\": \"TOKEN_FROM_SOLVER\"}'\n\n# form-encoded alternative:\ncurl -X POST https://captcha.csdrama.com/recaptcha-v2/submit \\\n  -d \"g-recaptcha-response=TOKEN_FROM_SOLVER\"",
      "verified_via": "google",
      "notes": "Checkbox widget. Verified via google.com/recaptcha/api/siteverify."
    },
    {
      "slug": "recaptcha-v2-invisible",
      "title": "reCAPTCHA v2 Invisible (badge)",
      "page": "https://captcha.csdrama.com/recaptcha-v2-invisible",
      "submit": "https://captcha.csdrama.com/recaptcha-v2-invisible/submit",
      "method": "POST",
      "tokenFields": [
        "g-recaptcha-response"
      ],
      "sitekey": "6LdAo8EtAAAAAMGVeOQ_c5O2Dcdpv080t_eXd4mG",
      "get_token_js": "<!-- reCAPTCHA v2 Invisible — render, execute, get the token, verify it -->\n<script src=\"https://www.google.com/recaptcha/api.js?onload=onInvisibleLoad&render=explicit\" async defer></script>\n<div id=\"rc-invisible\"></div>\n<script>\n  var rcInvWidget = null;\n  function onInvisibleLoad() {\n    rcInvWidget = grecaptcha.render('rc-invisible', {\n      sitekey: '6LdAo8EtAAAAAMGVeOQ_c5O2Dcdpv080t_eXd4mG',\n      size: 'invisible',\n      callback: onInvisibleToken, // <-- token arrives here\n      'expired-callback': function () { console.warn('token expired — execute again'); }\n    });\n  }\n  function onInvisibleToken(token) {\n    console.log('TOKEN:', token);\n    // Verify it (same as the curl docs):\n    fetch('https://captcha.csdrama.com/recaptcha-v2-invisible/submit', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ 'g-recaptcha-response': token })\n    }).then((r) => r.json()).then(console.log);\n  }\n  // Run the invisible check, e.g. on your form's submit:\n  function runCheck() { grecaptcha.execute(rcInvWidget); }\n</script>\n<!-- Solver-service params (e.g. 2captcha recaptchaV2Invisible):\n     sitekey = 6LdAo8EtAAAAAMGVeOQ_c5O2Dcdpv080t_eXd4mG\n     pageurl = https://captcha.csdrama.com/recaptcha-v2-invisible -->",
      "accepts": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
      ],
      "curl": "# reCAPTCHA v2 Invisible (badge) — verify a solver token via curl\ncurl -X POST https://captcha.csdrama.com/recaptcha-v2-invisible/submit \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"g-recaptcha-response\": \"TOKEN_FROM_SOLVER\"}'\n\n# form-encoded alternative:\ncurl -X POST https://captcha.csdrama.com/recaptcha-v2-invisible/submit \\\n  -d \"g-recaptcha-response=TOKEN_FROM_SOLVER\"",
      "verified_via": "google",
      "notes": "Invisible badge (explicit render, bottom-right). Submit runs grecaptcha.execute(); the callback fills g-recaptcha-response and auto-submits. Same siteverify endpoint as v2."
    },
    {
      "slug": "recaptcha-v3",
      "title": "reCAPTCHA v3 — score based",
      "page": "https://captcha.csdrama.com/recaptcha-v3",
      "submit": "https://captcha.csdrama.com/recaptcha-v3/submit",
      "method": "POST",
      "tokenFields": [
        "g-recaptcha-response"
      ],
      "sitekey": "6LcNpMEtAAAAAP1FIJfKq6qzsY_oilXbnOnc0nbZ",
      "get_token_js": null,
      "accepts": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
      ],
      "curl": "# reCAPTCHA v3 — score based — verify a solver token via curl\ncurl -X POST https://captcha.csdrama.com/recaptcha-v3/submit \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"g-recaptcha-response\": \"TOKEN_FROM_SOLVER\"}'\n\n# form-encoded alternative:\ncurl -X POST https://captcha.csdrama.com/recaptcha-v3/submit \\\n  -d \"g-recaptcha-response=TOKEN_FROM_SOLVER\"",
      "verified_via": "google",
      "notes": "Score-based (0.0–1.0). Token from grecaptcha.execute(sitekey, {action:'submit'}). Response includes score + action."
    },
    {
      "slug": "mtcaptcha",
      "title": "MTCaptcha",
      "page": "https://captcha.csdrama.com/mtcaptcha",
      "submit": "https://captcha.csdrama.com/mtcaptcha/submit",
      "method": "POST",
      "tokenFields": [
        "mtcaptcha-verifiedtoken"
      ],
      "sitekey": "MTPublic-YAK7ynQ6H",
      "get_token_js": null,
      "accepts": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
      ],
      "curl": "# MTCaptcha — verify a solver token via curl\ncurl -X POST https://captcha.csdrama.com/mtcaptcha/submit \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mtcaptcha-verifiedtoken\": \"TOKEN_FROM_SOLVER\"}'\n\n# form-encoded alternative:\ncurl -X POST https://captcha.csdrama.com/mtcaptcha/submit \\\n  -d \"mtcaptcha-verifiedtoken=TOKEN_FROM_SOLVER\"",
      "verified_via": "mtcaptcha",
      "notes": "Verified via service.mtcaptcha.com checktoken API with the private key."
    }
  ]
}