{"id":22260,"date":"2026-02-28T15:20:17","date_gmt":"2026-02-28T15:20:17","guid":{"rendered":"http:\/\/localhost\/capskip\/?page_id=22260"},"modified":"2026-09-24T16:55:23","modified_gmt":"2026-09-24T16:55:23","slug":"api-docs","status":"publish","type":"page","link":"https:\/\/capskip.com\/zh\/api-docs\/","title":{"rendered":"API \u6587\u6863"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"22260\" class=\"elementor elementor-22260\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9b928b2 e-flex e-con-boxed e-con e-parent\" data-id=\"9b928b2\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-b6297bb e-con-full e-flex e-con e-child\" data-id=\"b6297bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e2a2ed9 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"e2a2ed9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;css&quot;,&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\"><h1 class=\"ekit-heading--title elementskit-section-title \">API Documentation<\/h1>\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>Reference for available endpoints, request formats, parameters, and example responses for integrating the API into your applications.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f14bae0 e-flex e-con-boxed e-con e-parent\" data-id=\"f14bae0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;none&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-260b664 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"260b664\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-cb72303 e-con-full ekit-sticky--top e-flex e-con e-child\" data-id=\"cb72303\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_sticky&quot;:&quot;top&quot;,&quot;ekit_sticky_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;ekit_sticky_until&quot;:&quot;last&quot;,&quot;ekit_sticky_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_on_desktop&quot;:&quot;desktop&quot;,&quot;ekit_sticky_effect_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;ekit_sticky_effect_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_effect_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ec9d1e0 sticky-navigation animated-fast elementor-hidden-tablet elementor-hidden-mobile elementor-invisible elementor-widget elementor-widget-elementskit-stylish-list\" data-id=\"ec9d1e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-stylish-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\">\t\t<ul class=\"ekit-stylish-list \" >\n\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-dbd1c0d\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#image-captcha\" aria-label=\"Image CAPTCHA\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csi csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 5h13a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-13a3 3 0 0 1-3-3v-8a3 3 0 0 1 3-3z\"\/><path class=\"a\" d=\"M6.5 14.5c1.1-2.9 2-4.4 2.9-4.4 1.2 0 1.1 3.9 2.6 3.9s1.6-4 3-4c.8 0 1.5 1 2.5 2.7\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Image CAPTCHA<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-54f38d1\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#recaptcha-v2\" aria-label=\"reCAPTCHA V2\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><g transform=\"scale(.375)\"><path fill=\"#1c3aa9\" d=\"M64 31.955l-.033-1.37V4.687l-7.16 7.16C50.948 4.674 42.033.093 32.05.093c-10.4 0-19.622 4.96-25.458 12.64l11.736 11.86a15.55 15.55 0 0 1 4.754-5.334c2.05-1.6 4.952-2.906 8.968-2.906.485 0 .86.057 1.135.163 4.976.393 9.288 3.14 11.828 7.124l-8.307 8.307c10.522-.042 22.41-.068 27.295.004\"\/><path fill=\"#4285f4\" d=\"M31.862 0l-1.37.033H4.594l7.16 7.16C4.58 13.052 0 21.967 0 31.95c0 10.4 4.96 19.622 12.64 25.458L24.5 45.672a15.55 15.55 0 0 1-5.334-4.754c-1.6-2.05-2.906-4.952-2.906-8.968 0-.485.057-.86.163-1.135.393-4.976 3.14-9.288 7.124-11.828l8.307 8.307c-.042-10.522-.068-22.41.004-27.295\"\/><path fill=\"#ababab\" d=\"M.001 31.955l.033 1.37v25.9l7.16-7.16c5.86 7.173 14.774 11.754 24.76 11.754 10.4 0 19.622-4.96 25.458-12.64l-11.736-11.86a15.55 15.55 0 0 1-4.754 5.334c-2.05 1.6-4.952 2.906-8.968 2.906-.485 0-.86-.057-1.135-.163-4.976-.393-9.288-3.14-11.828-7.124l8.307-8.307c-10.522.042-22.41.068-27.295-.004\"\/><\/g><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">reCAPTCHA V2<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-54477fc\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#recaptcha-v2-callback\" aria-label=\"reCAPTCHA V2 Callback\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><g transform=\"scale(.375)\"><path fill=\"#1c3aa9\" d=\"M64 31.955l-.033-1.37V4.687l-7.16 7.16C50.948 4.674 42.033.093 32.05.093c-10.4 0-19.622 4.96-25.458 12.64l11.736 11.86a15.55 15.55 0 0 1 4.754-5.334c2.05-1.6 4.952-2.906 8.968-2.906.485 0 .86.057 1.135.163 4.976.393 9.288 3.14 11.828 7.124l-8.307 8.307c10.522-.042 22.41-.068 27.295.004\"\/><path fill=\"#4285f4\" d=\"M31.862 0l-1.37.033H4.594l7.16 7.16C4.58 13.052 0 21.967 0 31.95c0 10.4 4.96 19.622 12.64 25.458L24.5 45.672a15.55 15.55 0 0 1-5.334-4.754c-1.6-2.05-2.906-4.952-2.906-8.968 0-.485.057-.86.163-1.135.393-4.976 3.14-9.288 7.124-11.828l8.307 8.307c-.042-10.522-.068-22.41.004-27.295\"\/><path fill=\"#ababab\" d=\"M.001 31.955l.033 1.37v25.9l7.16-7.16c5.86 7.173 14.774 11.754 24.76 11.754 10.4 0 19.622-4.96 25.458-12.64l-11.736-11.86a15.55 15.55 0 0 1-4.754 5.334c-2.05 1.6-4.952 2.906-8.968 2.906-.485 0-.86-.057-1.135-.163-4.976-.393-9.288-3.14-11.828-7.124l8.307-8.307c-10.522.042-22.41.068-27.295-.004\"\/><\/g><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">reCAPTCHA V2 Callback<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-dcf51fe\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#recaptcha-v2-invisible\" aria-label=\"reCAPTCHA V2 Invisible\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><g transform=\"scale(.375)\"><path fill=\"#1c3aa9\" d=\"M64 31.955l-.033-1.37V4.687l-7.16 7.16C50.948 4.674 42.033.093 32.05.093c-10.4 0-19.622 4.96-25.458 12.64l11.736 11.86a15.55 15.55 0 0 1 4.754-5.334c2.05-1.6 4.952-2.906 8.968-2.906.485 0 .86.057 1.135.163 4.976.393 9.288 3.14 11.828 7.124l-8.307 8.307c10.522-.042 22.41-.068 27.295.004\"\/><path fill=\"#4285f4\" d=\"M31.862 0l-1.37.033H4.594l7.16 7.16C4.58 13.052 0 21.967 0 31.95c0 10.4 4.96 19.622 12.64 25.458L24.5 45.672a15.55 15.55 0 0 1-5.334-4.754c-1.6-2.05-2.906-4.952-2.906-8.968 0-.485.057-.86.163-1.135.393-4.976 3.14-9.288 7.124-11.828l8.307 8.307c-.042-10.522-.068-22.41.004-27.295\"\/><path fill=\"#ababab\" d=\"M.001 31.955l.033 1.37v25.9l7.16-7.16c5.86 7.173 14.774 11.754 24.76 11.754 10.4 0 19.622-4.96 25.458-12.64l-11.736-11.86a15.55 15.55 0 0 1-4.754 5.334c-2.05 1.6-4.952 2.906-8.968 2.906-.485 0-.86-.057-1.135-.163-4.976-.393-9.288-3.14-11.828-7.124l8.307-8.307c-10.522.042-22.41.068-27.295-.004\"\/><\/g><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">reCAPTCHA V2 Invisible<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-e55ac41\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#recaptcha-v3\" aria-label=\"reCAPTCHA V3\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><g transform=\"scale(.375)\"><path fill=\"#1c3aa9\" d=\"M64 31.955l-.033-1.37V4.687l-7.16 7.16C50.948 4.674 42.033.093 32.05.093c-10.4 0-19.622 4.96-25.458 12.64l11.736 11.86a15.55 15.55 0 0 1 4.754-5.334c2.05-1.6 4.952-2.906 8.968-2.906.485 0 .86.057 1.135.163 4.976.393 9.288 3.14 11.828 7.124l-8.307 8.307c10.522-.042 22.41-.068 27.295.004\"\/><path fill=\"#4285f4\" d=\"M31.862 0l-1.37.033H4.594l7.16 7.16C4.58 13.052 0 21.967 0 31.95c0 10.4 4.96 19.622 12.64 25.458L24.5 45.672a15.55 15.55 0 0 1-5.334-4.754c-1.6-2.05-2.906-4.952-2.906-8.968 0-.485.057-.86.163-1.135.393-4.976 3.14-9.288 7.124-11.828l8.307 8.307c-.042-10.522-.068-22.41.004-27.295\"\/><path fill=\"#ababab\" d=\"M.001 31.955l.033 1.37v25.9l7.16-7.16c5.86 7.173 14.774 11.754 24.76 11.754 10.4 0 19.622-4.96 25.458-12.64l-11.736-11.86a15.55 15.55 0 0 1-4.754 5.334c-2.05 1.6-4.952 2.906-8.968 2.906-.485 0-.86-.057-1.135-.163-4.976-.393-9.288-3.14-11.828-7.124l8.307-8.307c-10.522.042-22.41.068-27.295-.004\"\/><\/g><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">reCAPTCHA V3<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-92657ff\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#recaptcha-enterprise\" aria-label=\"reCAPTCHA Enterprise\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><g transform=\"scale(.375)\"><path fill=\"#1c3aa9\" d=\"M64 31.955l-.033-1.37V4.687l-7.16 7.16C50.948 4.674 42.033.093 32.05.093c-10.4 0-19.622 4.96-25.458 12.64l11.736 11.86a15.55 15.55 0 0 1 4.754-5.334c2.05-1.6 4.952-2.906 8.968-2.906.485 0 .86.057 1.135.163 4.976.393 9.288 3.14 11.828 7.124l-8.307 8.307c10.522-.042 22.41-.068 27.295.004\"\/><path fill=\"#4285f4\" d=\"M31.862 0l-1.37.033H4.594l7.16 7.16C4.58 13.052 0 21.967 0 31.95c0 10.4 4.96 19.622 12.64 25.458L24.5 45.672a15.55 15.55 0 0 1-5.334-4.754c-1.6-2.05-2.906-4.952-2.906-8.968 0-.485.057-.86.163-1.135.393-4.976 3.14-9.288 7.124-11.828l8.307 8.307c-.042-10.522-.068-22.41.004-27.295\"\/><path fill=\"#ababab\" d=\"M.001 31.955l.033 1.37v25.9l7.16-7.16c5.86 7.173 14.774 11.754 24.76 11.754 10.4 0 19.622-4.96 25.458-12.64l-11.736-11.86a15.55 15.55 0 0 1-4.754 5.334c-2.05 1.6-4.952 2.906-8.968 2.906-.485 0-.86-.057-1.135-.163-4.976-.393-9.288-3.14-11.828-7.124l8.307-8.307c-10.522.042-22.41.068-27.295-.004\"\/><\/g><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">reCAPTCHA Enterprise<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-bdf4cf9\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#cloudflare-turnstile\" aria-label=\"Cloudflare Turnstile\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#f6821f\" d=\"M20.91 18.86H4.78C2.16 18.86 0 16.85 0 14.36c0-2.34 1.88-4.31 4.31-4.5A7.45 7.45 0 0 1 17.81 9.06a4.59 4.59 0 0 1 1.5-.23c2.44 0 4.45 1.88 4.64 4.22.05.19.05.42.05.61 0 2.86-2.44 5.2-3.09 5.2z\"\/><path fill=\"#fbad41\" d=\"M4.31 9.86A7.45 7.45 0 0 1 17.81 9.06c-2.25-.47-4.59.19-6.28 1.83-.94.94-1.55 2.11-1.78 3.38H0c0-2.34 1.88-4.31 4.31-4.41z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Cloudflare Turnstile<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-e2d8c59\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#geetest-v3\" aria-label=\"Geetest V3\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#3a67f2\" d=\"M18.98 13.17c-.72 0-1.45.01-2.17-.01-.29-.01-.42.1-.52.37-1.1 2.84-4.41 3.87-6.9 2.17-1.58-1.08-2.31-3.16-1.76-4.98.6-1.95 2.31-3.26 4.29-3.27 2-.01 3.62 1.08 4.34 2.94.12.31.28.41.61.41 2.17-.01 4.34-.01 6.51-.01.59 0 .58.01.61.61.1 2.44-.46 4.71-1.73 6.79-1.51 2.48-3.660 4.2-6.41 5.13-2.44.83-4.94.92-7.39.09C3.83 21.850 1 18.64.18 13.8c-.59-3.5.33-6.68 2.58-9.42C4.79 1.91 7.43.47 10.61.09c2.48-.3 4.82.16 7.03 1.32.24.12.42.14.66.01a3.66 3.66 0 0 1 5.32 2.87c.17 1.55-.46 2.77-1.790 3.55-1.4.82-2.82.72-4.1-.26-1.21-.93-1.65-2.22-1.32-3.72.07-.33 0-.47-.29-.6-3.35-1.44-6.58-1.23-9.59.82-2.45 1.67-3.83 4.05-4.1 7.03-.29 3.18.8 5.85 3.12 8.01 1.54 1.44 3.4 2.25 5.52 2.44 3.15.29 5.81-.75 7.99-3.01 1.33-1.38 2.13-3.05 2.47-4.94.06-.34-.02-.45-.37-.44-.72.02-1.45 0-2.17 0ZM14.21 12A2.2 2.2 0 0 0 11.6 9.82a2.2 2.2 0 0 0-1.74 1.71 2.2 2.2 0 0 0 2.13 2.65A2.19 2.19 0 0 0 14.21 12h0Zm7.09-7.31a1.3 1.3 0 0 0-1.29-1.33c-.72-.01-1.36.6-1.36 1.32 0 .71.62 1.33 1.35 1.33a1.3 1.3 0 0 0 1.3-1.32V4.69Z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Geetest V3<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-30bfca1\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#altcha\" aria-label=\"ALTCHA\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#1d1dc9\" d=\"M0 12A12 12 0 1 0 24 12 12 12 0 1 0 0 12Z\"\/><path fill=\"#fff\" d=\"M1.86 12A10.14 10.14 0 1 0 22.14 12 10.14 10.14 0 1 0 1.86 12Z\"\/><path fill=\"#1d1dc9\" d=\"M3.9 12A8.1 8.1 0 1 0 20.1 12 8.1 8.1 0 1 0 3.9 12ZM19.59 10.12 22.39 11.19A10.42 10.42 0 0 1 22.34 13.31 8.4 8.4 0 0 0 19.81 12.41 7.82 7.82 0 0 0 19.59 10.12Z\"\/><path fill=\"#fff\" d=\"M15.94 8.72 18.45 6.64A8.38 8.38 0 0 1 20.22 10.36ZM6.93 12A5.07 5.07 0 0 0 17.07 12L15.04 12A3.05 3.05 0 0 1 8.96 12Z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">ALTCHA<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-6314987\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#captchafox\" aria-label=\"CaptchaFox\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#ff9b21\" d=\"M0 12a12 11.95 0 1 0 24 0 12 11.95 0 1 0-24 0z\"\/><path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M3.79 13.32l2.31.81 6.11 5.64 5.02-5.1 2.99-1.48-1.36-2.01.81-6.04-4.34 4.83H8.8L4.88 5.14l.32 5.89L3.79 13.32z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">CaptchaFox<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-c8ecdd7\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#capy\" aria-label=\"Capy Puzzle\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#0da0d7\" d=\"M0 12a12 12 0 1 0 24 0 12 12 0 1 0-24 0z\"\/><path fill=\"#fff\" d=\"M14.93 4.7V7.45C14.43 7.26 13.75 6.86 13.19 6.95 10.67 7.37 10.78 13.5 11.44 15.28 11.730 16.04 12.26 16.81 13.08 17.04 13.66 17.2 14.4 16.77 14.93 16.58V19.33C13.41 19.76 11.88 20.17 10.43 19.24 9.57 18.68 9 17.76 8.66 16.8 7.59 13.78 7.4 6.08 10.88 4.52 12.24 3.92 13.6 4.27 14.93 4.7Z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Capy Puzzle<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-858fa0f\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#friendlycaptcha\" aria-label=\"Friendly Captcha\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon csi-own\"><svg class=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"none\" stroke=\"#ffab00\" stroke-width=\"3.6\" d=\"M20.71 4.79A10.2 10.2 0 1 0 20.71 19.21\"\/><path fill=\"none\" stroke=\"#ffc400\" stroke-width=\"3.6\" d=\"M6.28 19.21A10.2 10.2 0 0 0 20.71 19.21\"\/><path fill=\"#ffab00\" d=\"M8.1 12a1.8 1.8 0 1 0 3.6 0 1.8 1.8 0 1 0-3.6 0zM15.3 12a1.8 1.8 0 1 0 3.6 0 1.8 1.8 0 1 0-3.6 0z\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Friendly Captcha<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-96d5ddb\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#proxy\" aria-label=\"Using Proxies\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon\">\n\t\t\t\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 3.5h13a2 2 0 0 1 2 2v3.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2v-3.5a2 2 0 0 1 2-2zM5.5 13h13a2 2 0 0 1 2 2v3.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2v-3.5a2 2 0 0 1 2-2zM11 7.25h5.5M11 16.75h5.5\"\/><path class=\"a\" d=\"M7.17 7.25a.32.32 0 1 0 .65 0 .32.32 0 1 0-.65 0M7.17 16.75a.32.32 0 1 0 .65 0 .32.32 0 1 0-.65 0\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Using Proxies<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"ekit-stylish-list-content-wrapper elementor-repeater-item-f5bdfe0\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#error-codes\" aria-label=\"Error Codes\"><\/a>\n\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-icon\">\n\t\t\t\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M3 12a9 9 0 1 0 18 0 9 9 0 1 0-18 0M12 11v5.5M11.72 7.9a.27.27 0 1 0 .55 0 .27.27 0 1 0-.55 0\"\/><\/svg>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-content-text\">\n\t\t\t\t\t\t\t<span class=\"ekit-stylish-list-content-title\">Error Codes<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<div class=\"ekit-stylish-list-divider\"><\/div>\n\t\t\t\t\t\t\t\t\t<\/ul>\n\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9060030 elementor-widget elementor-widget-html\" data-id=\"9060030\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n\/* ================================================================\r\n   CapSkip \u00b7 API Docs page only (page-id-22260)\r\n   1. EnlighterJS code boxes  2. Tables  3. Required pills\r\n   ================================================================ *\/\r\n\r\n\/* ---------- 1. CODE BOXES ---------- *\/\r\n.page-id-22260 .enlighter-default{\r\n  --cs-code-bg:#0d1020; --cs-code-bar:#171a2e; --cs-code-line:#262a45; --cs-code-fg:#e6e8f2;\r\n  --cs-c:#7c86a8; --cs-s:#7ee0a9; --cs-k:#9db4ff; --cs-fn:#7ad0ff; --cs-n:#f4b86a;\r\n  background:var(--cs-code-bg) !important;\r\n  border:1px solid var(--cs-code-line) !important;\r\n  border-radius:12px !important;\r\n  padding:0 !important;\r\n  overflow:hidden !important;\r\n  box-shadow:0 18px 40px -30px rgba(13,16,32,.9) !important;\r\n}\r\n\r\n\/* top bar *\/\r\n.page-id-22260 .enlighter-default .enlighter-toolbar{\r\n  display:flex !important; position:static !important; float:none !important;\r\n  align-items:center; gap:10px;\r\n  width:100% !important; box-sizing:border-box;\r\n  height:44px; margin:0 !important; padding:0 12px !important;\r\n  background:var(--cs-code-bar) !important;\r\n  border-bottom:1px solid var(--cs-code-line);\r\n  opacity:1 !important; visibility:visible !important;\r\n}\r\n.page-id-22260 .enlighter-default .enlighter-toolbar-bottom{display:none !important;}\r\n\r\n\/* traffic-light dots *\/\r\n.page-id-22260 .enlighter-default .enlighter-toolbar::before{\r\n  content:\"\"; order:-2; flex:none;\r\n  width:11px; height:11px; border-radius:50%;\r\n  background:#ff5f57; box-shadow:17px 0 0 #febc2e, 34px 0 0 #28c840;\r\n  margin-right:34px;\r\n}\r\n\r\n\/* language label *\/\r\n.page-id-22260 .enlighter-default .enlighter-toolbar::after{\r\n  content:\"code\"; order:-1; flex:none;\r\n  font-family:ui-monospace,Menlo,Consolas,monospace;\r\n  font-size:12.5px; color:#aeb4d0; white-space:nowrap;\r\n}\r\n.page-id-22260 .enlighter-default.enlighter-l-shell      .enlighter-toolbar::after{content:\"Terminal\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-xml        .enlighter-toolbar::after{content:\"HTML\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-javascript .enlighter-toolbar::after{content:\"JavaScript\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-python     .enlighter-toolbar::after{content:\"Python\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-php        .enlighter-toolbar::after{content:\"PHP\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-csharp     .enlighter-toolbar::after{content:\"C#\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-json       .enlighter-toolbar::after{content:\"JSON\";}\r\n.page-id-22260 .enlighter-default.enlighter-l-css        .enlighter-toolbar::after{content:\"CSS\";}\r\n\r\n\/* copy button (reuses Enlighter's own, so it keeps working) *\/\r\n.page-id-22260 .enlighter-default .enlighter-btn-raw,\r\n.page-id-22260 .enlighter-default .enlighter-btn-window,\r\n.page-id-22260 .enlighter-default .enlighter-btn-website,\r\n.page-id-22260 .enlighter-default .enlighter-tooltip{display:none !important;}\r\n.page-id-22260 .enlighter-default .enlighter-btn-copy{\r\n  order:0; margin-left:auto !important;\r\n  display:inline-flex !important; align-items:center;\r\n  width:auto !important; height:30px !important; padding:0 12px !important;\r\n  background:transparent !important;\r\n  border:1px solid var(--cs-code-line) !important;\r\n  border-radius:8px !important; color:#c3c8e2 !important;\r\n  font-family:\"Plus Jakarta Sans\",system-ui,-apple-system,sans-serif;\r\n  font-size:12.5px; font-weight:600; cursor:pointer;\r\n  transition:background .18s,color .18s,border-color .18s;\r\n}\r\n.page-id-22260 .enlighter-default .enlighter-btn-copy:hover{\r\n  background:rgba(255,255,255,.06) !important; color:#fff !important;\r\n}\r\n\/* copy feedback *\/\r\n.page-id-22260 .enlighter-default .enlighter-btn-copy.cs-copied{\r\n  color:#30e87a !important;\r\n  border-color:rgba(48,232,122,.4) !important;\r\n}\r\n.page-id-22260 .enlighter-default .enlighter-btn-copy.cs-copied::after{\r\n  content:\"Copied!\" !important;\r\n}\r\n\/* code area *\/\r\n.page-id-22260 .enlighter-default .enlighter-code{\r\n  padding:16px 18px !important;\r\n  background:var(--cs-code-bg) !important;\r\n  overflow-x:auto; scrollbar-width:thin; scrollbar-color:#2f3454 transparent;\r\n}\r\n.page-id-22260 .enlighter-default .enlighter-code::-webkit-scrollbar{height:8px;}\r\n.page-id-22260 .enlighter-default .enlighter-code::-webkit-scrollbar-track{background:transparent;}\r\n.page-id-22260 .enlighter-default .enlighter-code::-webkit-scrollbar-thumb{background:#2f3454;border-radius:4px;}\r\n.page-id-22260 .enlighter-default .enlighter{\r\n  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,\"Liberation Mono\",monospace !important;\r\n  font-size:13.5px !important; line-height:1.7 !important;\r\n  color:var(--cs-code-fg) !important; background:transparent !important;\r\n}\r\n.page-id-22260 .enlighter-default .enlighter > div{background:transparent !important;}\r\n.page-id-22260 .enlighter-default .enlighter > div::before{display:none !important;}\r\n\r\n\/* syntax colours *\/\r\n.page-id-22260 .enlighter-default .enlighter-c0,\r\n.page-id-22260 .enlighter-default .enlighter-c1,\r\n.page-id-22260 .enlighter-default .enlighter-c2{color:var(--cs-c) !important;font-style:italic !important;}\r\n.page-id-22260 .enlighter-default .enlighter-s0,\r\n.page-id-22260 .enlighter-default .enlighter-s1,\r\n.page-id-22260 .enlighter-default .enlighter-s2,\r\n.page-id-22260 .enlighter-default .enlighter-s3{color:var(--cs-s) !important;}\r\n.page-id-22260 .enlighter-default .enlighter-k0,\r\n.page-id-22260 .enlighter-default .enlighter-k1,\r\n.page-id-22260 .enlighter-default .enlighter-k2,\r\n.page-id-22260 .enlighter-default .enlighter-k3,\r\n.page-id-22260 .enlighter-default .enlighter-k9,\r\n.page-id-22260 .enlighter-default .enlighter-e1,\r\n.page-id-22260 .enlighter-default .enlighter-x1{color:var(--cs-k) !important;}\r\n.page-id-22260 .enlighter-default .enlighter-m0,\r\n.page-id-22260 .enlighter-default .enlighter-m1,\r\n.page-id-22260 .enlighter-default .enlighter-m2,\r\n.page-id-22260 .enlighter-default .enlighter-m3,\r\n.page-id-22260 .enlighter-default .enlighter-x2{color:var(--cs-fn) !important;}\r\n.page-id-22260 .enlighter-default .enlighter-n0,\r\n.page-id-22260 .enlighter-default .enlighter-n1{color:var(--cs-n) !important;}\r\n.page-id-22260 .enlighter-default .enlighter-text,\r\n.page-id-22260 .enlighter-default .enlighter-g1{color:var(--cs-code-fg) !important;}\r\n\r\n\/* ---------- 2. TABLES ---------- *\/\r\n.page-id-22260 .elementor-widget-html table{\r\n  --tl:#e7e8ef; --tink:#0f1222; --tbody:#4a5063; --tmuted:#8a90a2;\r\n  --thead:#f6f7fb; --tindigo:#2f3bd9;\r\n  width:100% !important;\r\n  border-collapse:separate !important; border-spacing:0 !important;\r\n  border:1px solid var(--tl) !important;\r\n  border-radius:14px !important;\r\n  overflow:hidden;\r\n  background:#fff !important;\r\n  box-shadow:0 21px 18px -36px rgba(20,24,60,.5);\r\n  font-size:14.5px !important; line-height:1.6;\r\n  margin:0 0 20px !important;\r\n}\r\n.page-id-22260 .elementor-widget-html table th{\r\n  background:var(--thead) !important; color:var(--tmuted) !important;\r\n  font-size:12px !important; font-weight:700 !important;\r\n  text-transform:uppercase; letter-spacing:.05em;\r\n  text-align:left !important; padding:12px 16px !important;\r\n  border:0 !important; border-bottom:1px solid var(--tl) !important;\r\n  white-space:nowrap;\r\n}\r\n.page-id-22260 .elementor-widget-html table th strong{font-weight:700 !important; color:inherit !important;}\r\n.page-id-22260 .elementor-widget-html table td{\r\n  padding:13px 16px !important; vertical-align:top !important;\r\n  color:var(--tbody) !important;\r\n  border:0 !important; border-bottom:1px solid var(--tl) !important;\r\n}\r\n.page-id-22260 .elementor-widget-html table tbody tr:last-child td{border-bottom:0 !important;}\r\n.page-id-22260 .elementor-widget-html table tbody tr:hover td{background:#f9fafc !important;}\r\n.page-id-22260 .elementor-widget-html table thead tr:first-child th:first-child{border-top-left-radius:14px;}\r\n.page-id-22260 .elementor-widget-html table thead tr:first-child th:last-child{border-top-right-radius:14px;}\r\n.page-id-22260 .elementor-widget-html table tbody tr:last-child td:first-child{border-bottom-left-radius:14px;}\r\n.page-id-22260 .elementor-widget-html table tbody tr:last-child td:last-child{border-bottom-right-radius:14px;}\r\n.page-id-22260 .elementor-widget-html table td:first-child{\r\n  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important;\r\n  font-size:13px !important; font-weight:600 !important;\r\n  color:var(--tink) !important; white-space:nowrap;\r\n}\r\n.page-id-22260 .elementor-widget-html table td:nth-child(2){\r\n  color:var(--tmuted) !important; font-size:13.5px !important; white-space:nowrap;\r\n}\r\n.page-id-22260 .elementor-widget-html table td:nth-child(3){\r\n  font-weight:600 !important; color:var(--tink) !important;\r\n}\r\n.page-id-22260 .elementor-widget-html table td code,\r\n.page-id-22260 .elementor-widget-html table td em{\r\n  font-family:ui-monospace,Menlo,Consolas,monospace !important;\r\n  font-style:normal !important; font-size:12.5px !important;\r\n  background:var(--thead) !important; border:1px solid var(--tl) !important;\r\n  padding:1px 6px !important; border-radius:6px !important;\r\n  color:var(--tindigo) !important;\r\n}\r\n.page-id-22260 .elementor-widget-html > .elementor-widget-container{\r\n  overflow-x:auto; -webkit-overflow-scrolling:touch;\r\n}\r\n\r\n\/* ---------- 3. REQUIRED PILLS ---------- *\/\r\n.page-id-22260 .cs-req{\r\n  display:inline-flex; align-items:center; height:22px; padding:0 9px;\r\n  border-radius:999px; font-family:\"Plus Jakarta Sans\",system-ui,sans-serif;\r\n  font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase;\r\n}\r\n.page-id-22260 .cs-req--yes{background:#e7fbef; color:#0fa25e;}\r\n.page-id-22260 .cs-req--no{background:#f0f1f6; color:#8a90a2;}\r\n\r\n\/* ---------- mobile ---------- *\/\r\n@media (max-width:640px){\r\n  .page-id-22260 .enlighter-default .enlighter-toolbar::after{display:none;}\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);\r\n  else run();\r\n\r\n  function run(){\r\n    if (!document.body.classList.contains('page-id-22260')) return;\r\n\r\n    \/* ---- copy button feedback ----\r\n       NOTE: EnlighterJS calls stopPropagation() in its own click handler,\r\n       so a bubble-phase listener never fires. The `true` below (capture\r\n       phase) is required \u2014 do not remove it. *\/\r\n    document.addEventListener('click', function(e){\r\n      var btn = e.target && e.target.closest && e.target.closest('.enlighter-btn-copy');\r\n      if (!btn) return;\r\n      btn.classList.add('cs-copied');\r\n      clearTimeout(btn._csCopyTimer);\r\n      btn._csCopyTimer = setTimeout(function(){\r\n        btn.classList.remove('cs-copied');\r\n      }, 1600);\r\n    }, true);\r\n\r\n    \/* ---- Required column -> Yes\/No pills ---- *\/\r\n    document.querySelectorAll('.elementor-widget-html table').forEach(function(t){\r\n      var heads = [].slice.call(t.querySelectorAll('thead th'));\r\n      var idx = heads.findIndex(function(h){ return \/required\/i.test(h.textContent); });\r\n      if (idx < 0) return;\r\n      t.querySelectorAll('tbody tr').forEach(function(tr){\r\n        var cell = tr.cells[idx];\r\n        if (!cell || cell.querySelector('.cs-req')) return;\r\n        var m = cell.textContent.trim().match(\/^(Yes|No)(\\*?)$\/i);\r\n        if (!m) return;\r\n        var cls = \/^yes$\/i.test(m[1]) ? 'yes' : 'no';\r\n        cell.innerHTML = '<span class=\"cs-req cs-req--' + cls + '\">' + m[1] + m[2] + '<\/span>';\r\n      });\r\n    });\r\n  }\r\n})();\r\n<\/script>\n\n<style>\n\/* ================================================================\n   CapSkip - API Docs page only (page-id-22260)\n   4. Left navigation: real service marks, hover and active state\n   ================================================================ *\/\n\n.page-id-22260 .sticky-navigation li{position:relative;}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content{\n  display:flex; align-items:center; gap:11px;\n  padding:6px 11px; border-radius:10px;\n  transition:background-color .18s ease;\n}\n\n\/* The widget ships margin-bottom:15px on every row and 4.8px on the divider, so\n   each separator sat three times closer to the item below it than the one above.\n   Equal margins put the line in the middle of the gap. *\/\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-wrapper{\n  margin-bottom:5px !important;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-divider{\n  margin-bottom:5px !important;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-divider:last-child{\n  margin-bottom:0 !important;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-icon{\n  flex:0 0 22px; width:22px; height:22px;\n  display:flex; align-items:center; justify-content:center;\n  background-repeat:no-repeat; background-position:center; background-size:contain;\n  border-radius:0 !important;\n  margin:0 6px 0 0 !important;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-icon > svg{\n  width:18px !important; height:18px !important;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-title{\n  font-weight:600; line-height:1.35;\n  transition:color .18s ease;\n}\n\n\/* service marks. Font Awesome's inline glyph is hidden and the real logo is\n   painted behind it, so the SVG is fetched once and cached, not inlined five\n   times into the HTML. *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-dbd1c0d .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54f38d1 .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54477fc .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-dcf51fe .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-e55ac41 .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-92657ff .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-bdf4cf9 .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-e2d8c59 .ekit-stylish-list-content-icon > svg,\n.page-id-22260 .sticky-navigation .elementor-repeater-item-30bfca1 .ekit-stylish-list-content-icon > svg{display:none !important;}\n\n.page-id-22260 .sticky-navigation .elementor-repeater-item-dbd1c0d .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/textToImage.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54f38d1 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/reCaptcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54477fc .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/reCaptcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-dcf51fe .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/reCaptcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-e55ac41 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/reCaptcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-92657ff .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/reCaptcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-bdf4cf9 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/images\/cloudflare.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-e2d8c59 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/geetest-logo.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-30bfca1 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/altcha.svg\");}\n\n\/* the two entries that are not a brand keep their glyph, in page palette *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-96d5ddb .ekit-stylish-list-content-icon > svg{fill:#2F3BD9;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-f5bdfe0 .ekit-stylish-list-content-icon > svg{fill:#E5484D;}\n\n\/* hover and current section *\/\n.page-id-22260 .sticky-navigation li:hover .ekit-stylish-list-content{background:#f6f7fb;}\n.page-id-22260 .sticky-navigation li.cs-nav-active .ekit-stylish-list-content{background:#eef0fe;}\n.page-id-22260 .sticky-navigation li.cs-nav-active .ekit-stylish-list-content-title{\n  color:#2f3bd9; font-weight:700;\n}\n.page-id-22260 .sticky-navigation li.cs-nav-active::before{\n  content:\"\"; position:absolute; left:0; top:50%; transform:translateY(-50%);\n  width:3px; height:20px; border-radius:0 2px 2px 0; background:#2f3bd9;\n}\n\n\/* ---------- 5. fallbacks for the ALTCHA widgets ----------\n   Elementor compiles per-widget CSS into post-22260.css keyed by element id, so\n   brand new ids have no rules until that file is regenerated. These class-keyed\n   copies of the two rules that matter make the section render correctly either\n   way. *\/\n.page-id-22260 .cs-altcha-intro > .elementor-widget-container{\n  background-color:var( --e-global-color-secondary );\n  padding:20px 20px 20px 20px;\n  border-radius:10px 10px 10px 10px;\n}\n.page-id-22260 .cs-altcha-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-altcha-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-altcha-divider{\n  --divider-border-style:solid;\n  --divider-color:var( --e-global-color-text );\n  --divider-border-width:3.5px;\n  --divider-element-spacing:8px;\n}\n.page-id-22260 .cs-altcha-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-altcha-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-altcha-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-altcha-divider.elementor-view-stacked .elementor-icon{\n  background-color:var( --e-global-color-text ); color:var( --e-global-color-primary );\n}\n.page-id-22260 .cs-altcha-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n\n<script>\n(function(){\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);\n  else run();\n\n  \/* Highlights the menu entry for the section you are currently reading. *\/\n  function run(){\n    if (!document.body.classList.contains('page-id-22260')) return;\n    var nav = document.querySelector('.sticky-navigation');\n    if (!nav) return;\n\n    var entries = [];\n    nav.querySelectorAll('a.ekit-wrapper-link[href^=\"#\"]').forEach(function(a){\n      var target = document.getElementById(a.getAttribute('href').slice(1));\n      var li = a.closest('li');\n      if (target && li) entries.push({ li: li, target: target });\n    });\n    if (!entries.length) return;\n\n    var ticking = false;\n\n    function update(){\n      ticking = false;\n      \/* the last section whose heading has passed the reading line wins;\n         above the first heading nothing is highlighted *\/\n      var current = null;\n      entries.forEach(function(e){\n        if (e.target.getBoundingClientRect().top <= 150) current = e;\n      });\n      entries.forEach(function(e){\n        e.li.classList.toggle('cs-nav-active', e === current);\n      });\n    }\n\n    function onScroll(){\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(update);\n    }\n\n    window.addEventListener('scroll', onScroll, { passive: true });\n    window.addEventListener('resize', onScroll, { passive: true });\n    update();\n  }\n})();\n<\/script>\n\n<style>\n\/* ---------- cs-nav-containment ----------\n   Each row is a flex container, and a flex item defaults to min-width:auto, so a\n   row refused to shrink below its text's max-content width and grew past the\n   208px list. Nothing clipped it, so long translations painted onto the article\n   column (German overflowed here before this rule). English, Chinese and Hindi\n   never overflow, so English-only testing will not catch a regression.\n   min-width:0 lets the text shrink and wrap; max-width caps the row at the list\n   width whatever the kit's align-items does. *\/\n.page-id-22260 .sticky-navigation .ekit-stylish-list{align-items:stretch;}\n.page-id-22260 .sticky-navigation li.ekit-stylish-list-content-wrapper,\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content{\n  min-width:0; max-width:100%;\n}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-text{min-width:0;}\n.page-id-22260 .sticky-navigation .ekit-stylish-list-content-title{\n  overflow-wrap:break-word;   \/* nothing escapes, even a single long compound *\/\n  hyphens:auto;               \/* prefer a real hyphenation point where one exists *\/\n}\n\n\/* Reclaim the 40px of horizontal padding sitting between the 248px column and the\n   208px list (10px each on the column and the sticky container), taking the label\n   slot from 141px to 181px so most translations stay on one line. Vertical\n   padding is left alone. *\/\n.page-id-22260 .elementor-element-260b664,\n.page-id-22260 .elementor-element-cb72303{\n  padding-left:0 !important; padding-right:0 !important;\n}\n<\/style>\n<style>\n\/* ---- CaptchaFox ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-6314987 .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-6314987 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/captchafox.svg\");}\n\n\/* Elementor never regenerates post-22260.css on a REST write, so these two widget\n   types would render unstyled without class-keyed copies of their compiled rules. *\/\n.page-id-22260 .cs-captchafox-intro > .elementor-widget-container{\n  background-color:var( --e-global-color-secondary );\n  padding:20px 20px 20px 20px; border-radius:10px 10px 10px 10px;\n}\n.page-id-22260 .cs-captchafox-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-captchafox-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-captchafox-divider{\n  --divider-border-style:solid; --divider-color:var( --e-global-color-text );\n  --divider-border-width:3.5px; --divider-element-spacing:8px;\n}\n.page-id-22260 .cs-captchafox-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-captchafox-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-captchafox-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-captchafox-divider.elementor-view-stacked .elementor-icon{\n  background-color:var( --e-global-color-text ); color:var( --e-global-color-primary );\n}\n.page-id-22260 .cs-captchafox-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* ---- Capy Puzzle ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-c8ecdd7 .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-c8ecdd7 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/capy.svg\");}\n\n\/* Elementor never regenerates post-22260.css on a REST write, so these two widget\n   types would render unstyled without class-keyed copies of their compiled rules. *\/\n.page-id-22260 .cs-capy-intro > .elementor-widget-container{\n  background-color:var( --e-global-color-secondary );\n  padding:20px 20px 20px 20px; border-radius:10px 10px 10px 10px;\n}\n.page-id-22260 .cs-capy-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-capy-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-capy-divider{\n  --divider-border-style:solid; --divider-color:var( --e-global-color-text );\n  --divider-border-width:3.5px; --divider-element-spacing:8px;\n}\n.page-id-22260 .cs-capy-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-capy-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-capy-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-capy-divider.elementor-view-stacked .elementor-icon{\n  background-color:var( --e-global-color-text ); color:var( --e-global-color-primary );\n}\n.page-id-22260 .cs-capy-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* ---- Friendly Captcha ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-858fa0f .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-858fa0f .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/FriendlyCaptcha.svg\");}\n\n\/* Elementor never regenerates post-22260.css on a REST write, so these two widget\n   types would render unstyled without class-keyed copies of their compiled rules. *\/\n.page-id-22260 .cs-friendlycaptcha-intro > .elementor-widget-container{\n  background-color:var( --e-global-color-secondary );\n  padding:20px 20px 20px 20px; border-radius:10px 10px 10px 10px;\n}\n.page-id-22260 .cs-friendlycaptcha-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-friendlycaptcha-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-friendlycaptcha-divider{\n  --divider-border-style:solid; --divider-color:var( --e-global-color-text );\n  --divider-border-width:3.5px; --divider-element-spacing:8px;\n}\n.page-id-22260 .cs-friendlycaptcha-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-friendlycaptcha-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-friendlycaptcha-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-friendlycaptcha-divider.elementor-view-stacked .elementor-icon{\n  background-color:var( --e-global-color-text ); color:var( --e-global-color-primary );\n}\n.page-id-22260 .cs-friendlycaptcha-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4c788ed e-con-full e-flex e-con e-child\" data-id=\"4c788ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-589af1f e-con-full e-flex e-con e-child\" data-id=\"589af1f\" data-element_type=\"container\" data-e-type=\"container\" id=\"section1\">\n\t\t<div class=\"elementor-element elementor-element-80c6792 e-con-full e-flex e-con e-child\" data-id=\"80c6792\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69a2636 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"69a2636\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>This documentation is intended for developers who want to integrate CapSkip directly into their own scripts, applications, or automation systems. Users of third party software should follow the Tutorials section for setup instructions.<\/p>\n<p>CapSkip emulates the APIs of widely used CAPTCHA solving services, allowing it to connect to compatible third party software without requiring any modifications. Integration typically only requires running CapSkip.<\/p>\n<p>The documentation explains how to submit requests and retrieve results. CapSkip supports multiple API families, including the 2Captcha style API (in.php \/ res.php), the JSON createTask \/ getTaskResult API used by AntiCaptcha, CapMonster, and CapSolver, and the DeathByCaptcha REST API. Services within the same family share the same endpoints, request and response format. Only the base URL (host and port) differs for each service.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-740d7dd elementor-widget elementor-widget-html\" data-id=\"740d7dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\n  <thead>\n    <tr>\n      <th>API family<\/th>\n      <th>Services<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>2captcha-style<\/td>\n      <td>2captcha.com, rucaptcha.com, solvecaptcha.com, captchas.io<\/td>\n    <\/tr>\n    <tr>\n      <td>JSON (createTask \/ getTaskResult)<\/td>\n      <td>anti-captcha.com, capmonster.cloud, capsolver.com<\/td>\n    <\/tr>\n    <tr>\n      <td>DeathByCaptcha<\/td>\n      <td>deathbycaptcha.com<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce1856f elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"ce1856f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f13b73 e-con-full e-flex e-con e-child\" data-id=\"7f13b73\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-55786a8 elementor-widget elementor-widget-elementskit-heading\" data-id=\"55786a8\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"image-captcha\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/textToImage.svg\" width=\"34\" height=\"24\" \/> <span style=\"color: #000000\"><strong>Image CAPTCHA<\/strong><\/span><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d21c6c1 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"d21c6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>A normal CAPTCHA is an image containing distorted but human-readable text. To solve it, the user must type the text shown in the image.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a506a4 elementor-widget elementor-widget-text-editor\" data-id=\"7a506a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"99\" data-end=\"192\">To solve a normal CAPTCHA, submit the image via an HTTP POST request to the API endpoint. Send the request directly to your CapSkip instance using the configured local address and port, for example: <code data-start=\"480\" data-end=\"510\">http:\/\/127.0.0.1:PORT\/in.php<\/code><\/p><p data-start=\"512\" data-end=\"586\">CapSkip accepts images in multipart\/form-data or Base64-encoded format.<\/p><p data-start=\"512\" data-end=\"586\"><span style=\"color: #000000;\"><strong>Multipart sample form<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b53c02c elementor-widget elementor-widget-shortcode\" data-id=\"b53c02c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;form method=&quot;post&quot; action=&quot;http:\/\/127.0.0.1:PORT\/in.php&quot; enctype=&quot;multipart\/form-data&quot;&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;method&quot; value=&quot;post&quot;&gt;\nYour key:\n&lt;input type=&quot;text&quot; name=&quot;key&quot; value=&quot;YOUR_APIKEY&quot;&gt;\nThe CAPTCHA file:\n&lt;input type=&quot;file&quot; name=&quot;file&quot;&gt;\n&lt;input type=&quot;submit&quot; value=&quot;Upload and get the ID&quot;&gt;\n&lt;\/form&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aff63b3 elementor-widget elementor-widget-text-editor\" data-id=\"aff63b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><code>YOUR_APIKEY<\/code> represents your API key if API key validation is enabled in CapSkip. If API key validation is disabled, any string value will be accepted.<\/p><p><span style=\"color: #000000;\"><strong>Base64 sample form<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a2818ad elementor-widget elementor-widget-shortcode\" data-id=\"a2818ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;form method=&quot;post&quot; action=&quot;http:\/\/127.0.0.1:PORT\/in.php&quot;&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;method&quot; value=&quot;base64&quot;&gt;\nYour key:\n&lt;input type=&quot;text&quot; name=&quot;key&quot; value=&quot;YOUR_APIKEY&quot;&gt;\nThe CAPTCHA file body in base64 format:\n&lt;textarea name=&quot;body&quot;&gt;BASE64_FILE&lt;\/textarea&gt;\n&lt;input type=&quot;submit&quot; value=&quot;Upload and get the ID&quot;&gt;\n&lt;\/form&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-235a1f5 elementor-widget elementor-widget-text-editor\" data-id=\"235a1f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"52\" data-end=\"103\"><code>YOUR_APIKEY<\/code> represents your API key if API key validation is enabled in CapSkip. If API key validation is disabled, any string value will be accepted.<\/p><p data-start=\"52\" data-end=\"103\"><code data-start=\"54\" data-end=\"67\">BASE64_FILE<\/code> is the Base64-encoded image data.<\/p><h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e1dfcc elementor-widget elementor-widget-html\" data-id=\"2e1dfcc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>POST parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>method<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\npost \u2013 submit the image using multipart\/form-data<br>\r\nbase64 \u2013 submit the image as a Base64-encoded string\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>file<\/td>\r\n<td>File<\/td>\r\n<td>Yes*<\/td>\r\n<td>\r\nCAPTCHA image file.<br>\r\n* Required when method=post.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>body<\/td>\r\n<td>String<\/td>\r\n<td>Yes*<\/td>\r\n<td>\r\nBase64-encoded CAPTCHA image data.<br>\r\n* Required when method=base64.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text<br>\r\n1 \u2013 response is returned in JSON format\r\n<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2dbf7d1 elementor-widget elementor-widget-text-editor\" data-id=\"2dbf7d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit CAPTCHA (multipart file upload):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-208e3a1 elementor-widget elementor-widget-shortcode\" data-id=\"208e3a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -F &quot;key=YOUR_API_KEY&quot; -F &quot;method=post&quot; -F &quot;file=@captcha.png&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7cea3e elementor-widget elementor-widget-text-editor\" data-id=\"f7cea3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit CAPTCHA (base64 encoded):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d10f0e elementor-widget elementor-widget-shortcode\" data-id=\"7d10f0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=base64&amp;body=BASE64_IMAGE_DATA&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1cd5fd2 elementor-widget elementor-widget-text-editor\" data-id=\"1cd5fd2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"78\" data-end=\"183\">After submitting the request, if everything is correct, CapSkip will return the CAPTCHA ID as plain text: <code data-start=\"185\" data-end=\"195\">OK|12345<\/code><\/p><p data-start=\"197\" data-end=\"277\">If the <code data-start=\"204\" data-end=\"212\">json=1<\/code> parameter is used, the response will be returned in JSON format:<code data-start=\"279\" data-end=\"311\"><\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e1fb3c2 elementor-widget elementor-widget-shortcode\" data-id=\"e1fb3c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;:1,\n    &quot;request&quot;:&quot;12345&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71bef53 elementor-widget elementor-widget-text-editor\" data-id=\"71bef53\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"313\" data-end=\"423\">Wait 1 second, then send an HTTP GET request to the result endpoint (<code data-start=\"382\" data-end=\"392\">\/res.php<\/code>) with the returned CAPTCHA ID.<\/p><p data-start=\"425\" data-end=\"502\">If the CAPTCHA has been solved, CapSkip will return the result as plain text: <code data-start=\"504\" data-end=\"513\">OK|TEXT<\/code><\/p><p data-start=\"515\" data-end=\"563\">If <code data-start=\"518\" data-end=\"526\">json=1<\/code> was specified, the response will be:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5016ff7 elementor-widget elementor-widget-shortcode\" data-id=\"5016ff7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;:1,\n    &quot;request&quot;:&quot;TEXT&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84d9af0 elementor-widget elementor-widget-text-editor\" data-id=\"84d9af0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"598\" data-end=\"655\">If the CAPTCHA is not yet solved, CapSkip will return: <code data-start=\"657\" data-end=\"675\">CAPCHA_NOT_READY<\/code><\/p><p data-start=\"677\" data-end=\"762\">In this case, wait 1 second and repeat the request until a final result is received. If CapSkip returns an empty response body, the result has already been retrieved or the ID does not exist. Each result can be read only once.<\/p><h5><span style=\"color: #000000;\"><strong>List of\u00a0GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76c81d6 elementor-widget elementor-widget-html\" data-id=\"76c81d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>GET parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nget \u2013 retrieve the answer for the submitted CAPTCHA.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>id<\/td>\r\n<td>Integer<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe CAPTCHA ID returned by <code>in.php<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text<br>\r\n1 \u2013 response is returned in JSON format\r\n<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b825ef elementor-widget elementor-widget-shortcode\" data-id=\"1b825ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=CAPTCHA_ID&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27c7f80 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"27c7f80\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc3d4d5 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"dc3d4d5\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"recaptcha-v2\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/reCaptcha.svg\" alt=\"recaptcha v2 solver\" width=\"24\" height=\"24\" \/> \u00a0<strong>reCAPTCHA V2<\/strong><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98f1218 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"98f1218\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>reCAPTCHA v2, also known as the \u201cI\u2019m not a robot\u201d reCAPTCHA, is a widely used CAPTCHA type. The visitor ticks a checkbox, and Google either lets them through at once or asks them to pick matching images before the form can be submitted.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fde33b4 elementor-widget elementor-widget-text-editor\" data-id=\"fde33b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"91\" data-end=\"219\">To solve reCAPTCHA v2, send the <code data-start=\"123\" data-end=\"134\">googlekey<\/code> and <code data-start=\"139\" data-end=\"148\">pageurl<\/code> parameters along with <code data-start=\"171\" data-end=\"193\">method=userrecaptcha<\/code> and your CapSkip API key.<\/p><p data-start=\"221\" data-end=\"287\">You can obtain the <code data-start=\"240\" data-end=\"251\">googlekey<\/code> using one of the following methods:<\/p><p data-start=\"289\" data-end=\"379\">Right-click on the reCAPTCHA widget and select <strong data-start=\"336\" data-end=\"347\">Inspect<\/strong>. Locate a URL that begins with:<\/p><p data-start=\"381\" data-end=\"419\"><code data-start=\"381\" data-end=\"419\">www.google.com\/recaptcha\/api2\/anchor<\/code><\/p><p data-start=\"421\" data-end=\"471\">Copy the value of the <code data-start=\"443\" data-end=\"446\">k<\/code> parameter from that URL. Alternatively, find the <code data-start=\"497\" data-end=\"511\">data-sitekey<\/code> attribute in the page source and copy its value.<\/p><p data-start=\"473\" data-end=\"560\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/sitekey-recaptcha-v2.png\" alt=\"CapSkip sitekey\" width=\"738\" height=\"165\" \/><\/p><p data-start=\"562\" data-end=\"659\">Once you have the site key, submit an HTTP GET or POST request to <code data-start=\"793\" data-end=\"823\">http:\/\/127.0.0.1:PORT\/in.php<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e4b589c elementor-widget elementor-widget-text-editor\" data-id=\"e4b589c\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"v2-post\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0498f93 elementor-widget elementor-widget-html\" data-id=\"0498f93\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>Parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>method<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nuserrecaptcha \u2013 specifies a reCAPTCHA v2 request.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>googlekey<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe value of the <em>k<\/em> or <em>data-sitekey<\/em> parameter found on the target page.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>pageurl<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe full URL of the page where the reCAPTCHA is located.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>enterprise<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n1 \u2013 indicates reCAPTCHA Enterprise v2.<br>\r\n0 \u2013 standard reCAPTCHA v2.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>invisible<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n1 \u2013 indicates Invisible reCAPTCHA.<br>\r\n0 \u2013 standard checkbox reCAPTCHA.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>data-s<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>\r\nValue of the <em>data-s<\/em> parameter found on the page. Applicable to Google Search and certain Google services.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text.<br>\r\n1 \u2013 response is returned in JSON format.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>proxy<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Proxy address. Format for IP authentication: <code>IP:PORT<\/code> (example: <code>123.123.123.123:3128<\/code>). Format for login\/password authentication: <code>login:password@IP:PORT<\/code><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>proxytype<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Type of proxy. Supported values: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code>, <code>SOCKS5H<\/code>. Default: <code>HTTP<\/code> when <code>proxy<\/code> is provided but <code>proxytype<\/code> is omitted.<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e8b38da elementor-widget elementor-widget-text-editor\" data-id=\"e8b38da\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit reCAPTCHA v2 (Standard):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a01f294 elementor-widget elementor-widget-shortcode\" data-id=\"a01f294\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b9ce450 elementor-widget elementor-widget-text-editor\" data-id=\"b9ce450\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit reCAPTCHA v2 (Invisible):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a21c4c elementor-widget elementor-widget-shortcode\" data-id=\"5a21c4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&amp;invisible=1&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99f7dd5 elementor-widget elementor-widget-text-editor\" data-id=\"99f7dd5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit Enterprise reCAPTCHA v2:<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43d4175 elementor-widget elementor-widget-shortcode\" data-id=\"43d4175\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&amp;enterprise=1&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dce4453 elementor-widget elementor-widget-text-editor\" data-id=\"dce4453\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit Enterprise reCAPTCHA v2 (Invisible):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f388f6d elementor-widget elementor-widget-shortcode\" data-id=\"f388f6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&amp;enterprise=1&amp;invisible=1&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a6aa50 elementor-widget elementor-widget-text-editor\" data-id=\"4a6aa50\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"91\" data-end=\"173\">If the request is successful, CapSkip will return the CAPTCHA ID as plain text: <code data-start=\"175\" data-end=\"190\">OK|12345<\/code><\/p><p data-start=\"192\" data-end=\"273\">If the <code data-start=\"199\" data-end=\"207\">json=1<\/code> parameter was used, the response will be returned in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1fa30d elementor-widget elementor-widget-shortcode\" data-id=\"c1fa30d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;:1,\n    &quot;request&quot;:&quot;12345&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96867df elementor-widget elementor-widget-text-editor\" data-id=\"96867df\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"314\" data-end=\"373\">If the request fails, CapSkip will return an error code.<\/p><p data-start=\"375\" data-end=\"476\">Wait 15 to 20 seconds, then send an HTTP GET request to the result endpoint to retrieve the solution: <code data-start=\"554\" data-end=\"585\">http:\/\/127.0.0.1:PORT\/res.php<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ea1eaf elementor-widget elementor-widget-text-editor\" data-id=\"6ea1eaf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of\u00a0GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99b94ae elementor-widget elementor-widget-html\" data-id=\"99b94ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>GET parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nget \u2013 retrieve the answer for the submitted CAPTCHA.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>id<\/td>\r\n<td>Integer<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe CAPTCHA ID returned by <code>in.php<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text<br>\r\n1 \u2013 response is returned in JSON format\r\n<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3e4eea elementor-widget elementor-widget-shortcode\" data-id=\"e3e4eea\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=CAPTCHA_ID&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d3a222d elementor-widget elementor-widget-text-editor\" data-id=\"d3a222d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has been solved, CapSkip will respond in plain text or JSON and return the answer token. The token will look similar to the following:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db19877 elementor-widget elementor-widget-shortcode\" data-id=\"db19877\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\n03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c9a020 elementor-widget elementor-widget-text-editor\" data-id=\"3c9a020\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA is not yet solved, CapSkip will return <code>CAPCHA_NOT_READY<\/code>. In this case, wait 5 seconds and repeat the request. If CapSkip returns an empty response body, the result has already been retrieved or the ID does not exist. Each result can be read only once.<\/p><p>Locate the element with the ID <code data-start=\"77\" data-end=\"99\">g-recaptcha-response<\/code> and make it visible by removing the <code data-start=\"136\" data-end=\"151\">display: none<\/code> style.<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/g-recaptcha-response-capskip.png\" alt=\"g recaptcha response CapSkip\" width=\"742\" height=\"82\" \/><\/p><blockquote><p data-start=\"52\" data-end=\"207\"><strong data-start=\"52\" data-end=\"68\">Please note:<\/strong> In some cases, the page content is generated dynamically, and the <code data-start=\"135\" data-end=\"157\">g-recaptcha-response<\/code> element may not appear in the static HTML source. In such situations, inspect the page structure using your browser\u2019s developer tools to locate the dynamically generated element.<\/p><\/blockquote><p data-start=\"339\" data-end=\"443\"><br \/>As an alternative, you can use JavaScript to set the value of the <code data-start=\"405\" data-end=\"427\">g-recaptcha-response<\/code> field directly:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3e6eeb elementor-widget elementor-widget-shortcode\" data-id=\"a3e6eeb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ndocument.getElementById(&quot;g-recaptcha-response&quot;).innerHTML=&quot;TOKEN&quot;;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb15ee2 elementor-widget elementor-widget-text-editor\" data-id=\"cb15ee2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"52\" data-end=\"207\">An input field will appear on the page. Paste the answer token into that field and submit the form.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-adfe460 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"adfe460\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ee8b85 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"2ee8b85\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"recaptcha-v2-callback\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/reCaptcha.svg\" alt=\"recaptcha v2 solver\" width=\"24\" height=\"24\" \/> \u00a0<strong>reCAPTCHA V2 Callback<\/strong><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce1dce9 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"ce1dce9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>In some cases, there is no submit button and a callback function is used instead. The callback function is executed automatically when reCAPTCHA is solved.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d3db623 elementor-widget elementor-widget-text-editor\" data-id=\"d3db623\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"47\" data-end=\"132\">The list of POST and GET request parameters is available here: <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/capskip.com\/api-docs\/#v2-post\" data-wplink-url-error=\"true\">reCAPTCHA V2 POST and GET request parameters<\/a><\/span><\/p><p data-start=\"209\" data-end=\"322\">The callback function is typically defined in the <code data-start=\"259\" data-end=\"274\">data-callback<\/code> attribute of the reCAPTCHA widget, for example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f9b0ab elementor-widget elementor-widget-shortcode\" data-id=\"8f9b0ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ndata-callback=&quot;myCallbackFunction&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b24018b elementor-widget elementor-widget-text-editor\" data-id=\"b24018b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"61\" data-end=\"189\">In other cases, the callback function is defined as the <code data-start=\"117\" data-end=\"127\">callback<\/code> parameter of the <code data-start=\"145\" data-end=\"166\">grecaptcha.render()<\/code> function, for example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8b0143f elementor-widget elementor-widget-shortcode\" data-id=\"8b0143f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\ngrecaptcha.render(&#039;example&#039;, {\n&#039;sitekey&#039; : &#039;someSitekey&#039;,\n&#039;callback&#039; : myCallbackFunction,\n&#039;theme&#039; : &#039;dark&#039;\n});\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c568d5 elementor-widget elementor-widget-text-editor\" data-id=\"6c568d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"52\" data-end=\"187\">Another way to locate the callback function is to open the browser\u2019s JavaScript console and inspect the reCAPTCHA configuration object:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2044bb elementor-widget elementor-widget-shortcode\" data-id=\"f2044bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\n___grecaptcha_cfg.clients[0].aa.l.callback\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb1feca elementor-widget elementor-widget-text-editor\" data-id=\"bb1feca\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"59\" data-end=\"284\">Note that the <code data-start=\"73\" data-end=\"79\">aa.l<\/code> property may vary, and there may be multiple reCAPTCHA clients on the page. In such cases, you should also inspect <code data-start=\"195\" data-end=\"207\">clients[1]<\/code>, <code data-start=\"209\" data-end=\"221\">clients[2]<\/code>, and other entries to locate the correct configuration object.<\/p><p data-start=\"286\" data-end=\"380\">Alternatively, you can use the following script to automatically extract reCAPTCHA parameters:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee36ec2 elementor-widget elementor-widget-shortcode\" data-id=\"ee36ec2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\nfunction findRecaptchaClients() {\n  if (typeof (___grecaptcha_cfg) !== &#039;undefined&#039;) {\n    return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) =&gt; {\n      const data = { id: cid, version: cid &gt;= 10000 ? &#039;V3&#039; : &#039;V2&#039; };\n      const objects = Object.entries(client).filter(([_, value]) =&gt; value &amp;&amp; typeof value === &#039;object&#039;);\n\n      objects.forEach(([toplevelKey, toplevel]) =&gt; {\n        const found = Object.entries(toplevel).find(([_, value]) =&gt; (\n          value &amp;&amp; typeof value === &#039;object&#039; &amp;&amp; &#039;sitekey&#039; in value &amp;&amp; &#039;size&#039; in value\n        ));\n     \n        if (typeof toplevel === &#039;object&#039; &amp;&amp; toplevel instanceof HTMLElement &amp;&amp; toplevel[&#039;tagName&#039;] === &#039;DIV&#039;){\n            data.pageurl = toplevel.baseURI;\n        }\n        \n        if (found) {\n          const [sublevelKey, sublevel] = found;\n\n          data.sitekey = sublevel.sitekey;\n          const callbackKey = data.version === &#039;V2&#039; ? &#039;callback&#039; : &#039;promise-callback&#039;;\n          const callback = sublevel[callbackKey];\n          if (!callback) {\n            data.callback = null;\n            data.function = null;\n          } else {\n            data.function = callback;\n            const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) =&gt; `[&#039;${key}&#039;]`).join(&#039;&#039;);\n            data.callback = `___grecaptcha_cfg.clients${keys}`;\n          }\n        }\n      });\n      return data;\n    });\n  }\n  return [];\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a83dcc elementor-widget elementor-widget-text-editor\" data-id=\"8a83dcc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"59\" data-end=\"284\">Finally, call the callback function:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f3889cc elementor-widget elementor-widget-shortcode\" data-id=\"f3889cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\nmyCallbackFunction();\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-763835a elementor-widget elementor-widget-text-editor\" data-id=\"763835a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"35\" data-end=\"56\">Or alternatively:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e31cc2 elementor-widget elementor-widget-shortcode\" data-id=\"9e31cc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\n___grecaptcha_cfg.clients[0].aa.l.callback();\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe79d1d elementor-widget elementor-widget-text-editor\" data-id=\"fe79d1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"49\" data-end=\"195\">In some cases, the callback function requires an argument. In most situations, you should pass the solved token as that argument. For example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3e05af elementor-widget elementor-widget-shortcode\" data-id=\"c3e05af\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\nmyCallbackFunction(&#039;TOKEN&#039;);\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ba7a74 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"4ba7a74\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61fd16b sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"61fd16b\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"recaptcha-v2-invisible\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/reCaptcha.svg\" alt=\"recaptcha v2 solver\" width=\"24\" height=\"24\" \/> \u00a0<strong>reCAPTCHA V2 Invisible<\/strong><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bab793 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"5bab793\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>reCAPTCHA v2 also has an Invisible mode. You can see an example here:<\/p>\n<p><span style=\"color: #000000\"><code>https:\/\/www.google.com\/recaptcha\/api2\/demo?invisible=true<\/code><\/span><\/p>\n<p>Invisible reCAPTCHA does not display the \u201cI\u2019m not a robot\u201d checkbox. Instead, it is typically attached to a button or triggered automatically on page load or user interaction, such as clicking a button or submitting a form.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f6cf19 elementor-widget elementor-widget-text-editor\" data-id=\"0f6cf19\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"483\" data-end=\"643\">Internally, the Invisible reCAPTCHA widget is rendered inside a hidden <code data-start=\"554\" data-end=\"561\">&lt;div&gt;<\/code> element positioned outside the visible viewport, making it invisible to the user.<\/p><p data-start=\"645\" data-end=\"808\">Depending on the user\u2019s cookies and risk score, reCAPTCHA may pass automatically without displaying a challenge. Otherwise, a standard image challenge will appear.<\/p><p data-start=\"810\" data-end=\"944\">In most cases, once the challenge is completed, a callback function is executed. Refer to the callback section above for more details.<\/p><p data-start=\"810\" data-end=\"944\">The list of POST and GET request parameters is available here: <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/capskip.com\/api-docs\/#v2-post\" data-wplink-url-error=\"true\">reCAPTCHA V2 POST and GET request parameters<\/a><\/span><\/p><h6 data-start=\"951\" data-end=\"997\"><span style=\"color: #000000;\">How to Determine if reCAPTCHA is Invisible?<\/span><\/h6><p data-start=\"999\" data-end=\"1074\">You can identify Invisible reCAPTCHA using one of the following indicators:<\/p><ul data-start=\"1076\" data-end=\"1398\"><li data-start=\"1076\" data-end=\"1172\"><p data-start=\"1078\" data-end=\"1172\">The \u201cI\u2019m not a robot\u201d checkbox is not visible, but a challenge appears after user interaction.<\/p><\/li><li data-start=\"1173\" data-end=\"1240\"><p data-start=\"1175\" data-end=\"1240\">The reCAPTCHA iframe URL contains the parameter <code data-start=\"1223\" data-end=\"1239\">size=invisible<\/code>.<\/p><\/li><li data-start=\"1241\" data-end=\"1398\"><p data-start=\"1243\" data-end=\"1398\">The reCAPTCHA configuration object includes a <code data-start=\"1289\" data-end=\"1295\">size<\/code> property set to <code data-start=\"1312\" data-end=\"1323\">invisible<\/code>, for example:<br data-start=\"1337\" data-end=\"1340\" \/><code data-start=\"1342\" data-end=\"1398\">___grecaptcha_cfg.clients[0].aa.l.size === \"invisible\"<\/code><\/p><\/li><\/ul><p data-start=\"1400\" data-end=\"1464\">When solving Invisible reCAPTCHA via API, include the parameter: <code data-start=\"1466\" data-end=\"1479\">invisible=1<\/code><\/p><h6 data-start=\"1486\" data-end=\"1538\"><span style=\"color: #000000;\">How to Handle Invisible reCAPTCHA in the Browser?<\/span><\/h6><h6 data-start=\"1540\" data-end=\"1571\"><span style=\"color: #000000;\">Method 1: Using JavaScript<\/span><\/h6><p data-start=\"1573\" data-end=\"1656\">Set the value of the <code data-start=\"1594\" data-end=\"1616\">g-recaptcha-response<\/code> field to the token returned by CapSkip:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b6d611a elementor-widget elementor-widget-shortcode\" data-id=\"b6d611a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\ndocument.getElementById(&quot;g-recaptcha-response&quot;).innerHTML=&quot;TOKEN&quot;;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc83d0d elementor-widget elementor-widget-text-editor\" data-id=\"bc83d0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1746\" data-end=\"1841\">After setting the token, execute the action that normally occurs after successful verification.<\/p><p data-start=\"1843\" data-end=\"2001\">In most cases, this means submitting a form. You need to identify the correct form by its <code data-start=\"1933\" data-end=\"1937\">id<\/code>, <code data-start=\"1939\" data-end=\"1945\">name<\/code>, or another attribute, and then trigger the submission. Here are a few examples:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e58e165 elementor-widget elementor-widget-shortcode\" data-id=\"e58e165\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\ndocument.getElementById(&quot;recaptcha-demo-form&quot;).submit(); \/\/by id &quot;recaptcha-demo-form&quot;\ndocument.getElementsByName(&quot;myFormName&quot;)[0].submit(); \/\/by element name &quot;myFormName&quot;\ndocument.getElementsByClassName(&quot;example&quot;).submit(); \/\/by class name &quot;example&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8580172 elementor-widget elementor-widget-text-editor\" data-id=\"8580172\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"52\" data-end=\"138\">In some cases, a callback function is executed automatically when reCAPTCHA is solved.<\/p><p data-start=\"140\" data-end=\"253\">The callback function is typically defined in the <code data-start=\"190\" data-end=\"205\">data-callback<\/code> attribute of the reCAPTCHA widget, for example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4177e6c elementor-widget elementor-widget-shortcode\" data-id=\"4177e6c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\ndata-callback=&quot;myCallbackFunction&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ce09cb elementor-widget elementor-widget-text-editor\" data-id=\"2ce09cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"47\" data-end=\"175\">In other cases, the callback function is defined as the <code data-start=\"103\" data-end=\"113\">callback<\/code> parameter of the <code data-start=\"131\" data-end=\"152\">grecaptcha.render()<\/code> function, for example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc019de elementor-widget elementor-widget-shortcode\" data-id=\"bc019de\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\ngrecaptcha.render(&#039;example&#039;, {\n&#039;sitekey&#039; : &#039;someSitekey&#039;,\n&#039;callback&#039; : myCallbackFunction,\n&#039;theme&#039; : &#039;dark&#039;\n});\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4364f51 elementor-widget elementor-widget-text-editor\" data-id=\"4364f51\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"47\" data-end=\"175\">All you need to do is call that function:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-747c516 elementor-widget elementor-widget-shortcode\" data-id=\"747c516\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\nmyCallbackFunction();\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-498af21 elementor-widget elementor-widget-text-editor\" data-id=\"498af21\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6 data-start=\"52\" data-end=\"84\"><span style=\"color: #000000;\">Method 2: Modifying the HTML<\/span><\/h6><p data-start=\"86\" data-end=\"167\">Remove the <code data-start=\"97\" data-end=\"104\">&lt;div&gt;<\/code> element that contains the reCAPTCHA widget from the page body.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e792af9 elementor-widget elementor-widget-shortcode\" data-id=\"e792af9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;div style=&quot;visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;&quot;&gt;\n  &lt;div style=&quot;width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5;  filter: alpha(opacity=50)&quot;&gt;&lt;\/div&gt;\n  &lt;div style=&quot;margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;&quot;&gt;\n &lt;iframe src=&quot;https:\/\/www.google.com\/recaptcha\/api2\/bframe?hl=en&amp;v=r20170213115309&amp;k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj&quot;\n      title=&quot;recaptcha challenge&quot;\n      style=&quot;width: 100%; height: 100%;&quot;\n      scrolling=&quot;no&quot;\n      name=&quot;zglq3yifgkmj&quot;\n      frameborder=&quot;0&quot;&gt;&lt;\/iframe&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2bac58 elementor-widget elementor-widget-text-editor\" data-id=\"e2bac58\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"56\" data-end=\"108\">Remove the entire reCAPTCHA block from the page.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2891507 elementor-widget elementor-widget-shortcode\" data-id=\"2891507\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;div class=&quot;&quot;&gt;\n  &lt;!-- BEGIN: ReCAPTCHA implementation example. --&gt;\n  &lt;div\n    id=&quot;recaptcha-demo&quot;\n    class=&quot;g-recaptcha&quot;\n    data-sitekey=&quot;6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&quot;\n    data-callback=&quot;onSuccess&quot;\n    data-bind=&quot;recaptcha-demo-submit&quot;\n  &gt;\n    &lt;div\n      class=&quot;grecaptcha-badge&quot;\n      style=&quot;width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;&quot;\n    &gt;\n      &lt;div class=&quot;grecaptcha-logo&quot;&gt;\n        &lt;iframe\n          src=&quot;https:\/\/www.google.com\/recaptcha\/api2\/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&amp;co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&amp;hl=en&amp;v=r20170213115309&amp;size=invisible&amp;cb=uror1hlow5a&quot;\n          title=&quot;recaptcha widget&quot;\n          scrolling=&quot;no&quot;\n          name=&quot;undefined&quot;\n          width=&quot;256&quot;\n          height=&quot;60&quot;\n          frameborder=&quot;0&quot;\n        &gt;&lt;\/iframe&gt;\n      &lt;\/div&gt;\n      &lt;div class=&quot;grecaptcha-error&quot;&gt;&lt;\/div&gt;\n      &lt;textarea\n        id=&quot;g-recaptcha-response&quot;\n        name=&quot;g-recaptcha-response&quot;\n        class=&quot;g-recaptcha-response&quot;\n        style=&quot;width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;  display: none; &quot;\n      &gt;&lt;\/textarea&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n  &lt;script&gt;\n    var onSuccess = function (response) {\n      var errorDivs = document.getElementsByClassName(&#039;recaptcha-error&#039;);\n      if (errorDivs.length) {\n        errorDivs[0].className = &#039;&#039;;\n      }\n      var errorMsgs = document.getElementsByClassName(&#039;recaptcha-error-message&#039;);\n      if (errorMsgs.length) {\n        errorMsgs[0].parentNode.removeChild(errorMsgs[0]);\n      }\n      document.getElementById(&#039;recaptcha-demo-form&#039;).submit();\n    };\n  &lt;\/script&gt;\n  &lt;!-- Optional noscript fallback. --&gt;&lt;!-- END: ReCAPTCHA implementation example. --&gt;\n&lt;\/div&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86707c1 elementor-widget elementor-widget-text-editor\" data-id=\"86707c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"47\" data-end=\"107\">Insert the following code in place of the removed block:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a66ea0 elementor-widget elementor-widget-shortcode\" data-id=\"5a66ea0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;input type=&quot;submit&quot; \/&gt; &lt;textarea name=&quot;g-recaptcha-response&quot;&gt;%g-recaptcha-response%&lt;\/textarea&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c631c6 elementor-widget elementor-widget-text-editor\" data-id=\"9c631c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"47\" data-end=\"126\"><code data-start=\"47\" data-end=\"71\">%g-recaptcha-response%<\/code> represents the answer token received from CapSkip.<\/p><p data-start=\"128\" data-end=\"324\">After replacing the block, a \u201cSubmit query\u201d button will appear. Click the button to submit the form along with the <code data-start=\"247\" data-end=\"269\">g-recaptcha-response<\/code> value and all other required form data to the website.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab1cadb elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"ab1cadb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d19f8f sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"3d19f8f\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"recaptcha-v3\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/reCaptcha.svg\" alt=\"recaptcha v2 solver\" width=\"24\" height=\"24\" \/> \u00a0<strong>reCAPTCHA V3<\/strong><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1989bc7 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"1989bc7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>reCAPTCHA v3 is a modern CAPTCHA mechanism developed by Google. It does not present a visible challenge and requires no user interaction. Instead, it assigns a score based on the likelihood that the interaction is human.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fadcb6e elementor-widget elementor-widget-text-editor\" data-id=\"fadcb6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"142\" data-end=\"346\">Technically, reCAPTCHA v3 is similar to reCAPTCHA v2. The website receives a token from the reCAPTCHA API, which is then sent in a POST request to the target server and verified through the reCAPTCHA API.<\/p><p data-start=\"348\" data-end=\"667\">The key difference is that reCAPTCHA v3 does not display a visible challenge. Instead, it returns a rating that estimates whether the user is human or a bot. This rating is called a <strong data-start=\"530\" data-end=\"539\">score<\/strong> and ranges from 0.0 to 1.0. The score is sent to the website, which then decides how to handle the request based on that value.<\/p><p data-start=\"669\" data-end=\"898\">There is also an additional parameter called <code data-start=\"714\" data-end=\"722\">action<\/code>, which allows the website to distinguish between different user interactions. After verifying the token, the reCAPTCHA API returns the action name associated with the request.<\/p><h6 data-start=\"1343\" data-end=\"1386\"><span style=\"color: #000000;\">How to Solve reCAPTCHA v3 Using CapSkip?<\/span><\/h6><p data-start=\"1388\" data-end=\"1449\">First, confirm that the target website is using reCAPTCHA v3.<\/p><p data-start=\"1451\" data-end=\"1486\">Indicators of reCAPTCHA v3 include:<\/p><ul data-start=\"1488\" data-end=\"1780\"><li data-start=\"1488\" data-end=\"1528\"><p data-start=\"1490\" data-end=\"1528\">No visible CAPTCHA or image challenges<\/p><\/li><li data-start=\"1529\" data-end=\"1669\"><p data-start=\"1531\" data-end=\"1669\">The <code data-start=\"1535\" data-end=\"1543\">api.js<\/code> script is loaded with a <code data-start=\"1568\" data-end=\"1584\">render=SITEKEY<\/code> parameter, for example:<br data-start=\"1608\" data-end=\"1611\" \/><code data-start=\"1613\" data-end=\"1669\">https:\/\/www.google.com\/recaptcha\/api.js?render=SITEKEY<\/code><\/p><\/li><li data-start=\"1670\" data-end=\"1780\"><p data-start=\"1672\" data-end=\"1780\">The <code data-start=\"1676\" data-end=\"1703\">___grecaptcha_cfg.clients<\/code> array contains an entry with a high numeric index, such as <code data-start=\"1763\" data-end=\"1780\">clients[100000]<\/code><\/p><\/li><\/ul><p data-start=\"1812\" data-end=\"1878\">To solve reCAPTCHA v3, identify the following parameters:<\/p><ol><li data-start=\"1880\" data-end=\"2116\"><strong data-start=\"1880\" data-end=\"1891\">sitekey<\/strong><br data-start=\"1891\" data-end=\"1894\" \/>This can be found in the <code data-start=\"1919\" data-end=\"1927\">render<\/code> parameter of the <code data-start=\"1945\" data-end=\"1953\">api.js<\/code> script URL. It may also appear in an iframe URL, within JavaScript code that calls <code data-start=\"2037\" data-end=\"2059\">grecaptcha.execute()<\/code>, or inside the <code data-start=\"2075\" data-end=\"2094\">___grecaptcha_cfg<\/code> configuration object.<\/li><li data-start=\"2118\" data-end=\"2282\"><strong data-start=\"2118\" data-end=\"2128\">action<\/strong><br data-start=\"2128\" data-end=\"2131\" \/>Locate this by inspecting JavaScript code for calls to <code data-start=\"2186\" data-end=\"2208\">grecaptcha.execute()<\/code>, for example:<br data-start=\"2222\" data-end=\"2225\" \/><code data-start=\"2225\" data-end=\"2282\">grecaptcha.execute('SITEKEY', {action: 'do_something'})<br \/><\/code>In some cases, finding the action requires reviewing multiple JavaScript files loaded by the page. If you cannot determine the action value, you may use the default value <code data-start=\"2455\" data-end=\"2465\">\"verify\"<\/code>.<\/li><li data-start=\"2468\" data-end=\"2541\"><strong data-start=\"2468\" data-end=\"2479\">pageurl<\/strong><br data-start=\"2479\" data-end=\"2482\" \/>The full URL of the page where reCAPTCHA v3 is implemented.<\/li><\/ol><h6 data-start=\"2548\" data-end=\"2575\"><span style=\"color: #000000;\">Understanding the Score<\/span><\/h6><p data-start=\"2577\" data-end=\"2688\">The acceptable score threshold varies by website and can only be determined through testing. Scores range from:<\/p><ul data-start=\"2690\" data-end=\"2733\"><li data-start=\"2690\" data-end=\"2710\"><p data-start=\"2692\" data-end=\"2710\">0.0 \u2192 likely bot<\/p><\/li><li data-start=\"2711\" data-end=\"2733\"><p data-start=\"2713\" data-end=\"2733\">1.0 \u2192 likely human<\/p><\/li><\/ul><p data-start=\"2735\" data-end=\"2838\">Most websites use thresholds between 0.3 and 0.7, since even legitimate users may receive lower scores.<\/p><p data-start=\"2840\" data-end=\"2928\">You can pass your desired threshold using the <code data-start=\"2890\" data-end=\"2901\">min_score<\/code> parameter, but the final score is always decided by Google at verification time and cannot be guaranteed by the solver.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e856055 elementor-widget elementor-widget-text-editor\" data-id=\"e856055\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"v3-post\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6954904 elementor-widget elementor-widget-html\" data-id=\"6954904\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>Parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>method<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nuserrecaptcha \u2013 specifies a reCAPTCHA request.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>version<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nv3 \u2013 indicates that the request is for reCAPTCHA v3.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>googlekey<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe value of the <em>data-sitekey<\/em> parameter found on the target page.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>pageurl<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe full URL of the page where the reCAPTCHA is located.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>enterprise<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n1 \u2013 indicates reCAPTCHA Enterprise v3.<br>\r\n0 \u2013 standard reCAPTCHA v3.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<br>Default: verify<\/td>\r\n<td>No<\/td>\r\n<td>\r\nThe value of the <em>action<\/em> parameter defined on the page.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>min_score<\/td>\r\n<td>Float<\/td>\r\n<td>No<\/td>\r\n<td>\r\nRequested minimum score for the token. Google assigns the final score when your server verifies the token, so this value is a hint and is not guaranteed. CapSkip returns the token it obtains regardless of the score Google later assigns.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text.<br>\r\n1 \u2013 response is returned in JSON format.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>proxy<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Proxy address. Format for IP authentication: <code>IP:PORT<\/code> (example: <code>123.123.123.123:3128<\/code>). Format for login\/password authentication: <code>login:password@IP:PORT<\/code><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>proxytype<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Type of proxy. Supported values: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code>, <code>SOCKS5H<\/code>. Default: <code>HTTP<\/code> when <code>proxy<\/code> is provided but <code>proxytype<\/code> is omitted.<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-92b8085 elementor-widget elementor-widget-text-editor\" data-id=\"92b8085\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit reCAPTCHA v3:<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e4e805f elementor-widget elementor-widget-shortcode\" data-id=\"e4e805f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;version=v3&amp;action=submit&amp;min_score=0.7&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a937cdd elementor-widget elementor-widget-text-editor\" data-id=\"a937cdd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit Enterprise reCAPTCHA v3:<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4fe0dfc elementor-widget elementor-widget-shortcode\" data-id=\"4fe0dfc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=userrecaptcha&amp;version=v3&amp;action=submit&amp;min_score=0.7&amp;googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;pageurl=https:\/\/example.com&amp;enterprise=1&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-750725a elementor-widget elementor-widget-text-editor\" data-id=\"750725a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"77\" data-end=\"159\">If the request is successful, CapSkip will return the CAPTCHA ID as plain text: <code data-start=\"161\" data-end=\"176\">OK|12345<\/code><\/p><p data-start=\"178\" data-end=\"263\">If the <code data-start=\"185\" data-end=\"193\">json=1<\/code> parameter is specified, the response will be returned in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70f990c elementor-widget elementor-widget-shortcode\" data-id=\"70f990c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;:1,\n    &quot;request&quot;:&quot;12345&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb3e79e elementor-widget elementor-widget-text-editor\" data-id=\"cb3e79e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"304\" data-end=\"443\">If an error occurs, CapSkip will return an error code.<\/p><p data-start=\"445\" data-end=\"521\">Wait 10 to 15 seconds, then send an HTTP GET request to the result endpoint: <code data-start=\"245\" data-end=\"276\">http:\/\/127.0.0.1:PORT\/res.php<\/code><\/p><p data-start=\"555\" data-end=\"670\">Provide the returned CAPTCHA ID in your request. The full list of available parameters is shown in the table below.<\/p><p data-start=\"672\" data-end=\"849\">If the CAPTCHA has been solved successfully, CapSkip will return the result in plain text or JSON format. The returned value is a verification token similar to the following:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6431789 elementor-widget elementor-widget-shortcode\" data-id=\"6431789\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\n03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB--gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3--o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80a9959 elementor-widget elementor-widget-text-editor\" data-id=\"80a9959\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA is not yet solved, CapSkip will return <code data-start=\"115\" data-end=\"133\">CAPCHA_NOT_READY<\/code>. Wait 5 seconds and repeat the request. If CapSkip returns an empty response body, the result has already been retrieved or the ID does not exist. Each result can be read only once.<\/p><h5><span style=\"color: #000000;\"><strong>List of\u00a0GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f392a7c elementor-widget elementor-widget-html\" data-id=\"f392a7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>GET parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nget \u2013 retrieve the answer for the submitted CAPTCHA.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>id<\/td>\r\n<td>Integer<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe CAPTCHA ID returned by <code>in.php<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text<br>\r\n1 \u2013 response is returned in JSON format\r\n<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a01389b elementor-widget elementor-widget-shortcode\" data-id=\"a01389b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=CAPTCHA_ID&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3943f1 elementor-widget elementor-widget-text-editor\" data-id=\"a3943f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"66\" data-end=\"282\">After receiving the token from CapSkip, you must submit it correctly to the target website. The best way to understand how this works is to observe the requests sent when completing the verification as a normal user. Most browsers provide developer tools with a <strong data-start=\"329\" data-end=\"340\">Network<\/strong> tab that allows you to inspect outgoing requests.<\/p><p data-start=\"392\" data-end=\"633\">In most cases, the token is sent via a POST request. The parameter name may be <code data-start=\"471\" data-end=\"493\">g-recaptcha-response<\/code>, similar to reCAPTCHA v2, or something like <code data-start=\"538\" data-end=\"567\">g-recaptcha-response-100000<\/code>. In some implementations, a different parameter name may be used.<\/p><p data-start=\"635\" data-end=\"761\">You should inspect the network requests to determine how the token is transmitted and then structure your request accordingly.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d3dc709 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"d3dc709\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0081b4 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"e0081b4\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"recaptcha-enterprise\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/reCaptcha.svg\" alt=\"recaptcha v2 solver\" width=\"24\" height=\"24\" \/> \u00a0<strong>reCAPTCHA Enterprise<\/strong><\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d656ffb animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"d656ffb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>reCAPTCHA Enterprise is the advanced version of Google\u2019s reCAPTCHA system. It can operate in both v2 and v3 modes and provides website administrators with additional control, including the ability to assess and report whether an interaction was human or automated.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f22e399 elementor-widget elementor-widget-text-editor\" data-id=\"f22e399\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6 data-start=\"64\" data-end=\"101\"><span style=\"color: #000000;\">How to Solve reCAPTCHA Enterprise?<\/span><\/h6><p data-start=\"103\" data-end=\"199\">The first step is to determine whether the website is using the Enterprise version of reCAPTCHA.<\/p><p data-start=\"201\" data-end=\"248\">Key indicators of reCAPTCHA Enterprise include:<\/p><ul data-start=\"250\" data-end=\"504\"><li data-start=\"250\" data-end=\"404\"><p data-start=\"252\" data-end=\"404\">The page loads <code data-start=\"267\" data-end=\"282\">enterprise.js<\/code> instead of <code data-start=\"294\" data-end=\"302\">api.js<\/code>, for example:<br \/><br data-start=\"316\" data-end=\"319\" \/><code data-start=\"321\" data-end=\"404\">&lt;script src=\"https:\/\/recaptcha.net\/recaptcha\/enterprise.js\" async defer&gt;&lt;\/script&gt;<\/code><\/p><\/li><\/ul><ul data-start=\"250\" data-end=\"504\"><li data-start=\"405\" data-end=\"504\"><p data-start=\"407\" data-end=\"504\">The website\u2019s JavaScript code calls <code data-start=\"443\" data-end=\"473\">grecaptcha.enterprise.METHOD<\/code> instead of <code data-start=\"485\" data-end=\"504\">grecaptcha.METHOD<\/code><\/p><\/li><\/ul><p data-start=\"506\" data-end=\"685\">Next, determine which implementation is being used: v2, Invisible v2, or v3. This can usually be identified by analyzing how the widget is rendered and how it behaves on the page.<\/p><p data-start=\"687\" data-end=\"796\">Follow the flowchart below to determine the correct implementation. It applies in the vast majority of cases.<\/p><p data-start=\"687\" data-end=\"796\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/recaptcha-enterprise-v2-v3-capskip.png\" alt=\"recaptcha enterprise\" width=\"397\" height=\"223\" \/><\/p><p data-start=\"67\" data-end=\"151\">Identify the CAPTCHA parameters in the same way as described for reCAPTCHA v2 or v3.<\/p><p data-start=\"153\" data-end=\"384\">For v2 Enterprise implementations, there may be additional optional data. In most cases, this is a custom string defined in the <code data-start=\"281\" data-end=\"284\">s<\/code> or <code data-start=\"288\" data-end=\"296\">data-s<\/code> parameter. If present, include this value in your request using the <code data-start=\"365\" data-end=\"373\">data-s<\/code> parameter.<\/p><p data-start=\"153\" data-end=\"384\">The list of POST and GET request parameters is available here: <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/capskip.com\/api-docs\/#v2-post\" data-wplink-url-error=\"true\">reCAPTCHA V2 POST and GET request parameters<\/a><\/span><\/p><p data-start=\"386\" data-end=\"703\">For v3 Enterprise implementations, you may also need the <code data-start=\"443\" data-end=\"451\">action<\/code> value. To find it, inspect the website\u2019s JavaScript code and locate the <code data-start=\"524\" data-end=\"557\">grecaptcha.enterprise.execute()<\/code> call. The <code data-start=\"568\" data-end=\"576\">action<\/code> parameter is typically passed within this function. Keep in mind that <code data-start=\"647\" data-end=\"655\">action<\/code> is optional and may be undefined in some cases.<\/p><p data-start=\"386\" data-end=\"703\">The list of POST and GET request parameters is available here: <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/capskip.com\/api-docs\/#v3-post\" data-wplink-url-error=\"true\">reCAPTCHA V3 POST and GET request parameters<\/a><\/span><\/p><p data-start=\"705\" data-end=\"794\">When submitting your request to the <code data-start=\"741\" data-end=\"750\">\/in.php<\/code> endpoint, include the additional parameter: <code data-start=\"796\" data-end=\"810\">enterprise=1<\/code><\/p><p data-start=\"812\" data-end=\"990\">After that, interact with CapSkip API in the same way as when solving reCAPTCHA v2 or v3. Once the token is returned, submit it to the target website according to its implementation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d65a85d elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"d65a85d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9895787 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"9895787\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"cloudflare-turnstile\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/capskip.com\/images\/cloudflare.svg\" alt=\"Cloudflare turnstile solving\" width=\"20\" height=\"20\" \/>\u00a0Cloudflare Turnstile<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d766642 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"d766642\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>Cloudflare Turnstile is a modern CAPTCHA alternative developed by Cloudflare. It verifies whether a visitor is human without relying on traditional visual challenges. Turnstile can appear as a standalone widget or as part of a challenge page, and it operates with minimal or no user interaction.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f382715 elementor-widget elementor-widget-text-editor\" data-id=\"f382715\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p data-start=\"236\" data-end=\"287\" data-is-last-node=\"\" data-is-only-node=\"\">There are two common Turnstile implementations:<\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div><h6 data-start=\"110\" data-end=\"144\"><span style=\"color: #000000;\">1. Standalone Turnstile Widget<\/span><\/h6><p data-start=\"146\" data-end=\"271\">A standalone Turnstile widget is embedded directly on a website page, typically protecting a form from automated submissions. In this case:<\/p><ul data-start=\"288\" data-end=\"666\"><li data-start=\"288\" data-end=\"326\"><p data-start=\"290\" data-end=\"326\">Extract the <code data-start=\"302\" data-end=\"311\">sitekey<\/code> from the page.<\/p><\/li><li data-start=\"327\" data-end=\"378\"><p data-start=\"329\" data-end=\"378\">Send it to the CapSkip API along with the full <code data-start=\"368\" data-end=\"377\">pageurl<\/code>.<\/p><\/li><li data-start=\"379\" data-end=\"459\"><p data-start=\"381\" data-end=\"459\">After receiving the token, insert it into the <code data-start=\"427\" data-end=\"450\">cf-turnstile-response<\/code> field.<\/p><\/li><li data-start=\"460\" data-end=\"560\"><p data-start=\"462\" data-end=\"560\">In some implementations, the token may also need to be placed in the <code data-start=\"531\" data-end=\"553\">g-recaptcha-response<\/code> field.<\/p><\/li><li data-start=\"561\" data-end=\"666\"><p data-start=\"563\" data-end=\"666\">If a callback is defined in the <code data-start=\"595\" data-end=\"615\">turnstile.render()<\/code> configuration, execute it with the returned token.<\/p><\/li><\/ul><p data-start=\"668\" data-end=\"698\">Then submit the form as usual.<\/p><h6 data-start=\"705\" data-end=\"752\"><span style=\"color: #000000;\">2. Turnstile on a Cloudflare Challenge Page<\/span><\/h6><p data-start=\"754\" data-end=\"876\">This occurs when the website is proxied through Cloudflare and presents a Turnstile challenge page before granting access. In this case, you must extract the following parameters:<\/p><ul data-start=\"936\" data-end=\"972\"><li data-start=\"936\" data-end=\"945\"><p data-start=\"938\" data-end=\"945\"><code data-start=\"938\" data-end=\"945\">cData<\/code><\/p><\/li><li data-start=\"946\" data-end=\"961\"><p data-start=\"948\" data-end=\"961\"><code data-start=\"948\" data-end=\"961\">chlPageData<\/code><\/p><\/li><li data-start=\"962\" data-end=\"972\"><p data-start=\"964\" data-end=\"972\"><code data-start=\"964\" data-end=\"972\">action<\/code><\/p><\/li><\/ul><p data-start=\"974\" data-end=\"1123\">These values must be included in your API request. Additionally, you must use the <strong data-start=\"1056\" data-end=\"1070\">User-Agent<\/strong> value returned by the CapSkip API when submitting the token.<\/p><h6 data-start=\"64\" data-end=\"106\"><span style=\"color: #000000;\">How to Extract the Required Parameters?<\/span><\/h6><p data-start=\"108\" data-end=\"244\">To extract the required parameters, you can override the <code data-start=\"165\" data-end=\"183\">turnstile.render<\/code> method and intercept the arguments passed when it is called. For example, inject the following JavaScript code into the page. The script must be executed before the Turnstile widget is loaded in order to capture the parameters successfully.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5294e1 elementor-widget elementor-widget-shortcode\" data-id=\"d5294e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\nconst i = setInterval(()=&gt;{\nif (window.turnstile) {\nclearInterval(i)\nwindow.turnstile.render = (a,b) =&gt; {\nlet p = {\nmethod: &quot;turnstile&quot;,\nkey: &quot;YOUR_API_KEY&quot;,\nsitekey: b.sitekey,\npageurl: window.location.href,\ndata: b.cData,\npagedata: b.chlPageData,\naction: b.action,\nuserAgent: navigator.userAgent,\njson: 1\n}\nconsole.log(JSON.stringify(p))\nwindow.tsCallback = b.callback\nreturn &#039;foo&#039;\n}\n}\n},50)\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5f1bee elementor-widget elementor-widget-text-editor\" data-id=\"d5f1bee\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-788b46e elementor-widget elementor-widget-html\" data-id=\"788b46e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>Parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>method<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nturnstile \u2013 specifies a Cloudflare Turnstile request.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>sitekey<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe value of the <em>data-sitekey<\/em> parameter found on the target page.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>pageurl<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe full URL of the page where the Turnstile challenge is located.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>\r\nOptional action value defined in the <code>data-action<\/code> attribute or passed to <code>turnstile.render()<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>data<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>\r\nThe value of <code>cData<\/code> passed to <code>turnstile.render()<\/code> or defined in the <code>data-cdata<\/code> attribute.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>pagedata<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>\r\nThe value of <code>chlPageData<\/code> passed to <code>turnstile.render()<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 \u2013 response is returned as plain text.<br>\r\n1 \u2013 response is returned in JSON format.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>proxy<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Proxy address. Format for IP authentication: <code>IP:PORT<\/code> (example: <code>123.123.123.123:3128<\/code>). Format for login\/password authentication: <code>login:password@IP:PORT<\/code><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>proxytype<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Type of proxy. Supported values: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code>, <code>SOCKS5H<\/code>. Default: <code>HTTP<\/code> when <code>proxy<\/code> is provided but <code>proxytype<\/code> is omitted.<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-886335c elementor-widget elementor-widget-text-editor\" data-id=\"886335c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit Turnstile (standalone):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5f04b2 elementor-widget elementor-widget-shortcode\" data-id=\"a5f04b2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=turnstile&amp;sitekey=0x4AAAAAAABUYP0XeMJF0xoy&amp;pageurl=https:\/\/example.com&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-273bfd0 elementor-widget elementor-widget-text-editor\" data-id=\"273bfd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><strong>Submit Turnstile (challenge \u2013 optional action, data, pagedata):<\/strong><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b36821 elementor-widget elementor-widget-shortcode\" data-id=\"9b36821\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST -d &quot;key=YOUR_API_KEY&amp;method=turnstile&amp;sitekey=0x4AAAAAAABUYP0XeMJF0xoy&amp;pageurl=https:\/\/example.com&amp;action=managed&amp;data=...&amp;pagedata=...&quot; http:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b592344 elementor-widget elementor-widget-text-editor\" data-id=\"b592344\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"77\" data-end=\"159\">If the request is successful, CapSkip will return the CAPTCHA ID as plain text: <code data-start=\"161\" data-end=\"176\">OK|12345<\/code><\/p><p data-start=\"178\" data-end=\"263\">If the <code data-start=\"185\" data-end=\"193\">json=1<\/code> parameter is specified, the response will be returned in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-435bb11 elementor-widget elementor-widget-shortcode\" data-id=\"435bb11\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;:1,\n    &quot;request&quot;:&quot;12345&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-582b881 elementor-widget elementor-widget-text-editor\" data-id=\"582b881\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"304\" data-end=\"443\">If an error occurs, CapSkip will return an error code.<\/p><p data-start=\"44\" data-end=\"131\">Use the returned ID to retrieve the result from the <code data-start=\"98\" data-end=\"108\">\/res.php<\/code> endpoint of the API.<\/p><h5><span style=\"color: #000000;\"><strong>List of\u00a0GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49d4d58 elementor-widget elementor-widget-html\" data-id=\"49d4d58\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr>\r\n<th><strong>GET parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nYour CapSkip API key.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nget \u2013 retrieve the answer for the submitted CAPTCHA.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>id<\/td>\r\n<td>Integer<\/td>\r\n<td>Yes<\/td>\r\n<td>\r\nThe CAPTCHA ID returned by <code>in.php<\/code>.\r\n<\/td>\r\n<\/tr>\r\n\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td>\r\n0 - response is returned as plain text.<br>\r\n1 - response is returned in JSON format, including the <code>userAgent<\/code> value.<\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-632bce6 elementor-widget elementor-widget-text-editor\" data-id=\"632bce6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For Cloudflare Turnstile the solver uses a specific browser User-Agent, and you must send that same User-Agent when submitting the token. With <code>json=1<\/code> the response includes a <code>userAgent<\/code> field. In plain text mode, read the same value from the <code>X-Turnstile-User-Agent<\/code> response header.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8fb06f8 elementor-widget elementor-widget-shortcode\" data-id=\"8fb06f8\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"end\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=CAPTCHA_ID&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-941374f elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"941374f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cb7226 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"3cb7226\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"geetest-v3\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><a href=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/geetest-logo.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-25688\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/geetest-logo.svg\" alt=\"geetest v3\" width=\"24\" height=\"24\" \/><\/a>\u00a0GeeTest v3<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d899e64 animated-fast elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"d899e64\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>GeeTest v3 Slider is an interactive CAPTCHA developed by GeeTest. It verifies users through a slider challenge to distinguish humans from bots while providing a fast and seamless verification experience.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc22922 elementor-widget elementor-widget-text-editor\" data-id=\"bc22922\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p>To solve a GeeTest v3 CAPTCHA with CapSkip, you must first obtain the required CAPTCHA parameters from the target website. The required parameters are:<\/p><ul><li>gt: Public website key (static)<\/li><li>challenge: Dynamic challenge value<\/li><li>api_server: GeeTest API server domain (optional)<\/li><\/ul><p>These values are typically available when the website initializes GeeTest.<\/p><blockquote><p><strong data-start=\"504\" data-end=\"518\">Important:<\/strong> A new <code data-start=\"525\" data-end=\"536\">challenge<\/code> value must be obtained for every solve request. Once the CAPTCHA has been loaded on the page, the previous <code data-start=\"644\" data-end=\"655\">challenge<\/code> becomes invalid. You should inspect the website&#8217;s network requests to identify the request that generates a new <code data-start=\"768\" data-end=\"779\">challenge<\/code> value and perform that request before submitting each solve request to CapSkip.<\/p><\/blockquote><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a806f2 elementor-widget elementor-widget-text-editor\" data-id=\"3a806f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2c3263 elementor-widget elementor-widget-html\" data-id=\"e2c3263\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\r\n<table>\r\n<thead>\r\n<tr>\r\n<th><strong>Parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes*<\/td>\r\n<td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>method<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>Must be <code>geetest<\/code>. Specifies that you are submitting a GeeTest v3 CAPTCHA.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>gt<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>The <code>gt<\/code> value obtained from the target website.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>challenge<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>The <code>challenge<\/code> value obtained from the target website. A new value must be obtained for every solve request.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>pageurl<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>Full URL of the page containing the GeeTest CAPTCHA.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>api_server<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>The GeeTest API server domain used by the target website (for example <code>api.geetest.com<\/code> or <code>api-na.geetest.com<\/code>).<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>proxy<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Proxy address. Format for IP authentication: <code>IP:PORT<\/code> (example: <code>123.123.123.123:3128<\/code>). Format for login\/password authentication: <code>login:password@IP:PORT<\/code>.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>proxytype<\/td>\r\n<td>String<\/td>\r\n<td>No<\/td>\r\n<td>Type of proxy. Supported values: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code>, <code>SOCKS5H<\/code>. Default: <code>HTTP<\/code> when <code>proxy<\/code> is provided but <code>proxytype<\/code> is omitted.<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1107604 elementor-widget elementor-widget-text-editor\" data-id=\"1107604\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code data-start=\"1019\" data-end=\"1049\">\/in.php<\/code>) with <code data-start=\"1056\" data-end=\"1072\">method=geetest<\/code>. Include the required GeeTest parameters obtained in the previous step along with the full URL of the page containing the CAPTCHA.<\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a55e8fd elementor-widget elementor-widget-shortcode\" data-id=\"a55e8fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-d &quot;key=YOUR_API_KEY&quot; \\\n-d &quot;method=geetest&quot; \\\n-d &quot;gt=f1ab2cdefa3456789012345b6c78d90e&quot; \\\n-d &quot;challenge=12345678abc90123d45678ef90123a456b&quot; \\\n-d &quot;pageurl=https:\/\/www.example.com\/&quot; \\\n-d &quot;api_server=api-na.geetest.com&quot; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c22c68 elementor-widget elementor-widget-text-editor\" data-id=\"5c22c68\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p>If everything is successful, CapSkip will return the CAPTCHA ID as plain text: OK|212<\/p><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"1676\" data-end=\"1761\">If the <code data-start=\"1683\" data-end=\"1691\">json=1<\/code> parameter is specified, the response will be returned in JSON format:<\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e3ba98 elementor-widget elementor-widget-shortcode\" data-id=\"0e3ba98\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;212&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd36362 elementor-widget elementor-widget-text-editor\" data-id=\"cd36362\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"1825\" data-end=\"1882\">Otherwise, CapSkip will return an appropriate error code.<\/p><p data-start=\"1884\" data-end=\"1998\">Wait approximately <strong data-start=\"1903\" data-end=\"1915\">5 seconds<\/strong>, then submit an HTTP GET request to the <code data-start=\"1956\" data-end=\"1965\">res.php<\/code> endpoint to retrieve the result.<\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-377c937 elementor-widget elementor-widget-text-editor\" data-id=\"377c937\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of\u00a0GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0709c96 elementor-widget elementor-widget-html\" data-id=\"0709c96\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\r\n<table>\r\n<thead>\r\n<tr>\r\n<th><strong>Parameter<\/strong><\/th>\r\n<th><strong>Type<\/strong><\/th>\r\n<th><strong>Required<\/strong><\/th>\r\n<th><strong>Description<\/strong><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>key<\/td>\r\n<td>String<\/td>\r\n<td>Yes*<\/td>\r\n<td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>action<\/td>\r\n<td>String<\/td>\r\n<td>Yes<\/td>\r\n<td>Specify <code>get<\/code> to retrieve the CAPTCHA solution.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>id<\/td>\r\n<td>Integer<\/td>\r\n<td>Yes<\/td>\r\n<td>The CAPTCHA ID returned by the <code>in.php<\/code> request.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>json<\/td>\r\n<td>Integer<br>Default: 0<\/td>\r\n<td>No<\/td>\r\n<td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b82a21 elementor-widget elementor-widget-shortcode\" data-id=\"1b82a21\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=212&amp;json=1&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a30f46b elementor-widget elementor-widget-text-editor\" data-id=\"a30f46b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"2120\" data-end=\"2213\">If the CAPTCHA has been solved successfully, CapSkip will return the solution in JSON format:<\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-01bfc38 elementor-widget elementor-widget-shortcode\" data-id=\"01bfc38\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;{\\&quot;geetest_challenge\\&quot;:\\&quot;1a2b3456cd67890e12345fab678901c2de\\&quot;,\\&quot;geetest_validate\\&quot;:\\&quot;09fe8d7c6ba54f32e1dcb0a9fedc8765\\&quot;,\\&quot;geetest_seccode\\&quot;:\\&quot;12fe3d4c56789ba01f2e345d6789c012|jordan\\&quot;}&quot;\n}\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e3fb38 elementor-widget elementor-widget-text-editor\" data-id=\"4e3fb38\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col text-sm pb-25\"><article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-6989b5a0-3fb0-839c-b671-234b8b3040ce-99\" data-testid=\"conversation-turn-228\" data-scroll-anchor=\"true\" data-turn=\"assistant\"><div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm\/main:[--thread-content-margin:--spacing(6)] @w-lg\/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\"><div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\"><div class=\"flex max-w-full flex-col grow\"><div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"ba408668-0b6c-4e25-8064-8ba64ce24cda\"><div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\"><div class=\"markdown prose dark:prose-invert w-full wrap-break-word dark markdown-new-styling\"><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"2120\" data-end=\"2213\">If the CAPTCHA has not yet been solved, CapSkip will return: <code>CAPCHA_NOT_READY<\/code><\/p><div class=\"relative w-full mt-4 mb-1\"><div class=\"\"><div class=\"contents\"><div class=\"relative\"><div class=\"\"><div class=\"\"><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"2485\" data-end=\"2522\">Wait 5 seconds and repeat the request. If an error occurs, CapSkip will return an appropriate error code. Use the values returned by CapSkip when submitting your request to the target website using the following fields:<\/p><ul><li data-section-id=\"13yjrxe\" data-start=\"2707\" data-end=\"2728\"><code data-start=\"2709\" data-end=\"2728\">geetest_challenge<\/code><\/li><li data-section-id=\"1nf81mv\" data-start=\"2729\" data-end=\"2749\"><code data-start=\"2731\" data-end=\"2749\">geetest_validate<\/code><\/li><li data-section-id=\"1exb76h\" data-start=\"2750\" data-end=\"2769\"><code data-start=\"2752\" data-end=\"2769\">geetest_seccode<\/code><\/li><\/ul><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/article><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6498bd8 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"6498bd8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-220f9af sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"220f9af\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"altcha\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><a href=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/altcha.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-25685\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/altcha.svg\" alt=\"altcha solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;ALTCHA<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e552de2 animated-fast cs-altcha-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"e552de2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>ALTCHA is a proof of work CAPTCHA. There is no image to read and no audio to play. The target site issues a challenge, and the client must brute force the number that satisfies it. CapSkip computes that number and returns the payload the widget would have produced.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99d3d8c elementor-widget elementor-widget-text-editor\" data-id=\"99d3d8c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>How It Works<\/strong><\/span><\/h5><p>The defence is CPU cost, not recognition. The server states a target and a search range (<code>maxnumber<\/code>), and the client hashes candidates until one of them matches. Two things follow from that which are unusual for a CAPTCHA type.<\/p><p>First, a solve is deterministic. There is no model and no accuracy figure, because either the answer exists inside the stated range or the challenge was malformed. Nothing is ever read wrong.<\/p><p>Second, solve time is set by the target site rather than by CapSkip. The reference widget defaults to a range of 1,000,000, which is a few milliseconds of work. Sites are free to raise it, and some ship 999,999,999, which is roughly 500 million hashes for an average challenge. If a site is slow to solve, read its <code>maxnumber<\/code> value first.<\/p><p>The full cycle is four steps:<\/p><ol><li>Take the challenge from the endpoint the widget reads it from.<\/li><li>Submit it to <code>\/in.php<\/code> with <code>method=altcha<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the token is ready.<\/li><li>Send the token back in the target form&#8217;s <code>altcha<\/code> field.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b667615 elementor-widget elementor-widget-text-editor\" data-id=\"b667615\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>What You Need Before Solving<\/strong><\/span><\/h5><p>The challenge, in one of two forms. Both are accepted, so send whichever your scraper already has.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21c3254 elementor-widget elementor-widget-html\" data-id=\"21c3254\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th><strong>Parameter<\/strong><\/th>\n<th><strong>Use it when<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>challenge_json<\/td>\n<td>You already hold the challenge document. CapSkip solves it locally and makes no network request at all, which is the fastest path.<\/td>\n<\/tr>\n<tr>\n<td>challenge_url<\/td>\n<td>You only hold the endpoint that serves the challenge. CapSkip fetches it, through your proxy if you sent one, and then solves it.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3f3467 elementor-widget elementor-widget-text-editor\" data-id=\"e3f3467\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Where to Find the Challenge<\/strong><\/span><\/h5><p>Open the browser developer tools, switch to the Network tab on the target page, and look for the request that the <code>&lt;altcha-widget&gt;<\/code> element makes for its challenge. It is often a path such as <code>\/altcha\/challenge<\/code>. That request URL is your <code>challenge_url<\/code>, and the JSON it responds with is your <code>challenge_json<\/code>.<\/p><p>The widget attribute that names this endpoint changed between versions, so read the page source rather than assuming. Widget v1 and v2 use <code>challengeurl=\"...\"<\/code>, while v3 and later use <code>challenge=\"...\"<\/code> for both a URL and inline data. Some deployments generate the challenge in the page itself and fetch nothing at all.<\/p><p>A challenge document looks like this:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bbbd250 elementor-widget elementor-widget-shortcode\" data-id=\"bbbd250\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;algorithm&quot;: &quot;SHA-256&quot;,\n    &quot;challenge&quot;: &quot;3dd28253be6cc0c54d95f7f98c517e68a1b2c3d4e5f60718293a4b5c6d7e8f90&quot;,\n    &quot;salt&quot;: &quot;46d5b1c8871e5152d902ee3f?expires=1893456000&quot;,\n    &quot;signature&quot;: &quot;4b1cf0e0be0f4e5247e50b0f9a4498301234567890abcdef1234567890abcdef&quot;,\n    &quot;maxnumber&quot;: 1000000\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d450cbb elementor-widget elementor-widget-text-editor\" data-id=\"d450cbb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Challenges Expire, and the Window Is Short<\/strong><\/span><\/h5><p>Every challenge carries its own expiry, either inside the <code>salt<\/code> query string or as <code>parameters.expiresAt<\/code>. Once it passes, the target site rejects the solution with a bare verification failure that looks exactly like a wrong answer. Windows as tight as two minutes are common.<\/p><p>Fetch the challenge immediately before creating the task, and submit the token promptly. Do not collect challenges in advance, and do not hold a token while a user fills in a form. If you send <code>challenge_url<\/code> rather than <code>challenge_json<\/code>, CapSkip re-fetches automatically when a challenge expires while it is still queued.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca993f5 elementor-widget elementor-widget-text-editor\" data-id=\"ca993f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1081da7 elementor-widget elementor-widget-html\" data-id=\"1081da7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th><strong>Parameter<\/strong><\/th>\n<th><strong>Type<\/strong><\/th>\n<th><strong>Required<\/strong><\/th>\n<th><strong>Description<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>key<\/td>\n<td>String<\/td>\n<td>Yes*<\/td>\n<td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td>\n<\/tr>\n<tr>\n<td>method<\/td>\n<td>String<\/td>\n<td>Yes<\/td>\n<td>Must be <code>altcha<\/code>. Specifies that you are submitting an ALTCHA challenge.<\/td>\n<\/tr>\n<tr>\n<td>pageurl<\/td>\n<td>String<\/td>\n<td>Yes<\/td>\n<td>The full URL of the page the challenge came from.<\/td>\n<\/tr>\n<tr>\n<td>challenge_url<\/td>\n<td>String<\/td>\n<td>Yes*<\/td>\n<td>The endpoint CapSkip should fetch the challenge from. Required unless <code>challenge_json<\/code> is sent.<\/td>\n<\/tr>\n<tr>\n<td>challenge_json<\/td>\n<td>String<\/td>\n<td>Yes*<\/td>\n<td>The challenge document itself, as a JSON string. Required unless <code>challenge_url<\/code> is sent.<\/td>\n<\/tr>\n<tr>\n<td>proxy<\/td>\n<td>String<\/td>\n<td>No<\/td>\n<td>Proxy address. Accepts <code>IP:PORT<\/code>, <code>LOGIN:PASSWORD@IP:PORT<\/code> or <code>IP:PORT:LOGIN:PASSWORD<\/code>. Used only for the <code>challenge_url<\/code> fetch.<\/td>\n<\/tr>\n<tr>\n<td>proxytype<\/td>\n<td>String<\/td>\n<td>No<\/td>\n<td>Proxy type: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code> or <code>SOCKS5H<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>json<\/td>\n<td>Integer<br>Default: 0<\/td>\n<td>No<\/td>\n<td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e161a8 elementor-widget elementor-widget-text-editor\" data-id=\"3e161a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Send either <code>challenge_url<\/code> or <code>challenge_json<\/code>. Sending both is allowed, and the inline document wins, because fetching would only re-obtain what you already have.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=altcha<\/code>. Form fields and a JSON body are both accepted under identical field names, and <code>GET<\/code> works too, because ALTCHA carries no image to upload.<\/p><p>Submit ALTCHA (form fields):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6af2ed elementor-widget elementor-widget-shortcode\" data-id=\"e6af2ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-d &quot;key=YOUR_API_KEY&quot; \\\n-d &quot;method=altcha&quot; \\\n-d &quot;pageurl=https:\/\/www.example.com\/signup&quot; \\\n--data-urlencode &quot;challenge_url=https:\/\/www.example.com\/captcha\/api\/altcha\/challenge&quot; \\\n-d &quot;json=1&quot; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49ec652 elementor-widget elementor-widget-text-editor\" data-id=\"49ec652\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Submit ALTCHA (JSON body):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8b7285 elementor-widget elementor-widget-shortcode\" data-id=\"c8b7285\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-H &quot;Content-Type: application\/json&quot; \\\n-d &#039;{\n    &quot;key&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;method&quot;: &quot;altcha&quot;,\n    &quot;pageurl&quot;: &quot;https:\/\/www.example.com\/signup&quot;,\n    &quot;challenge_url&quot;: &quot;https:\/\/www.example.com\/captcha\/api\/altcha\/challenge&quot;,\n    &quot;json&quot;: 1\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f85bfbd elementor-widget elementor-widget-text-editor\" data-id=\"f85bfbd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A JSON body allows three things that form encoding cannot. Flags may be real booleans (<code>\"json\": true<\/code>), <code>challenge_json<\/code> may be the nested document rather than an escaped string, and a field set to <code>null<\/code> counts as not sent.<\/p><p>If everything is correct, CapSkip returns the CAPTCHA ID as plain text: <code>OK|2122988149<\/code>. If the <code>json=1<\/code> parameter was sent, the response is a JSON envelope instead. Either way, the returned value is the CAPTCHA ID you poll for the result.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f72caf elementor-widget elementor-widget-shortcode\" data-id=\"3f72caf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;2122988149&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acb102c elementor-widget elementor-widget-text-editor\" data-id=\"acb102c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Otherwise CapSkip returns an appropriate error code. A malformed inline challenge is rejected on the submit request itself rather than after polling, so you find out on the request that was wrong.<\/p><p>Wait approximately 5 seconds, then submit an HTTP GET request to the result endpoint (<code>\/res.php<\/code>) with the CAPTCHA ID you received.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18dbc4c elementor-widget elementor-widget-text-editor\" data-id=\"18dbc4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-67d8b0a elementor-widget elementor-widget-html\" data-id=\"67d8b0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th><strong>Parameter<\/strong><\/th>\n<th><strong>Type<\/strong><\/th>\n<th><strong>Required<\/strong><\/th>\n<th><strong>Description<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>key<\/td>\n<td>String<\/td>\n<td>Yes*<\/td>\n<td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td>\n<\/tr>\n<tr>\n<td>action<\/td>\n<td>String<\/td>\n<td>Yes<\/td>\n<td>Specify <code>get<\/code> to retrieve the CAPTCHA solution.<\/td>\n<\/tr>\n<tr>\n<td>id<\/td>\n<td>Integer<\/td>\n<td>Yes<\/td>\n<td>The CAPTCHA ID returned by the <code>in.php<\/code> request.<\/td>\n<\/tr>\n<tr>\n<td>json<\/td>\n<td>Integer<br>Default: 0<\/td>\n<td>No<\/td>\n<td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3418ce elementor-widget elementor-widget-shortcode\" data-id=\"a3418ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=2122988149&amp;json=1&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e00445 elementor-widget elementor-widget-text-editor\" data-id=\"3e00445\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has been solved, CapSkip returns the solution in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe26e09 elementor-widget elementor-widget-shortcode\" data-id=\"fe26e09\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiM2RkMi...&quot;,\n    &quot;solution&quot;: {\n        &quot;token&quot;: &quot;eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiM2RkMi...&quot;,\n        &quot;number&quot;: 9661\n    },\n    &quot;cost&quot;: &quot;0.0020&quot;,\n    &quot;createTime&quot;: 1788863246,\n    &quot;endTime&quot;: 1788863246,\n    &quot;errorId&quot;: 0,\n    &quot;solveCount&quot;: 1\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56d7916 elementor-widget elementor-widget-text-editor\" data-id=\"56d7916\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><code>request<\/code> and <code>solution.token<\/code> are always the same string, so read whichever one your client expects. <code>number<\/code> is the counter that solved the challenge, returned for completeness. Without <code>json=1<\/code>, the answer is simply <code>OK|&lt;token&gt;<\/code>.<\/p><p>If the CAPTCHA has not yet been solved, CapSkip returns <code>CAPCHA_NOT_READY<\/code>, spelled exactly that way as on every other method. Wait 5 seconds and repeat the request.<\/p><p>Gate your polling loop on <code>errorId<\/code>, not on <code>status<\/code>. <code>status<\/code> is the integer <code>1<\/code> that the <code>res.php<\/code> contract has always returned, which is what every compatible SDK reads. If you wrote your client against a documentation page showing <code>\"status\": \"ready\"<\/code>, check <code>errorId === 0<\/code> or the presence of <code>solution.token<\/code> instead.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7bd92c elementor-widget elementor-widget-text-editor\" data-id=\"f7bd92c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Submitting the Token<\/strong><\/span><\/h5><p>The ALTCHA widget puts its payload in a form field named <code>altcha<\/code>. Submit the token verbatim in that field, exactly as the widget would have:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e8e319 elementor-widget elementor-widget-shortcode\" data-id=\"4e8e319\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\nPOST https:\/\/www.example.com\/signup\nContent-Type: application\/x-www-form-urlencoded\n\nemail=someone%40example.com&amp;altcha=eyJhbGdvcml0aG0iOiJTSEEtMjU2Iiwi...\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c555295 elementor-widget elementor-widget-text-editor\" data-id=\"c555295\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The payload&#8217;s internal shape follows the challenge that generated it. A legacy challenge produces a flat document carrying <code>number<\/code>, while a PoW v2 challenge produces one that nests the original challenge under <code>challenge<\/code> and the answer under <code>solution<\/code>. Treat the token as opaque and pass it through unchanged, because the target site already knows which shape to expect.<\/p><p>Some integrations read the payload from a JSON body field instead, so check what the page&#8217;s own submit sends and mirror it. Do not re-encode, trim or re-order the token. It is base64 of a JSON document whose fields are covered by the server&#8217;s HMAC signature, so any modification invalidates it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6cc41a3 elementor-widget elementor-widget-text-editor\" data-id=\"6cc41a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Supported Algorithms<\/strong><\/span><\/h5><p>You do not have to work out which scheme a site uses. CapSkip reads the challenge and picks the algorithm itself.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25311e3 elementor-widget elementor-widget-html\" data-id=\"25311e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th><strong>Scheme<\/strong><\/th>\n<th><strong>Generation<\/strong><\/th>\n<th><strong>Supported<\/strong><\/th>\n<th><strong>Description<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Legacy PoW<\/td>\n<td>v1<\/td>\n<td>Yes<\/td>\n<td>Find <code>n<\/code> where <code>SHA(salt + n)<\/code> equals the challenge. SHA-1, SHA-256, SHA-384 and SHA-512 are all supported. This is the shape most deployments still run.<\/td>\n<\/tr>\n<tr>\n<td>PBKDF2<\/td>\n<td>PoW v2<\/td>\n<td>Yes<\/td>\n<td>Find a counter whose derived key starts with the target prefix. SHA-256, SHA-384 and SHA-512 are supported. This is the default that ALTCHA itself recommends.<\/td>\n<\/tr>\n<tr>\n<td>SHA<\/td>\n<td>PoW v2<\/td>\n<td>Yes<\/td>\n<td>The iterative hash variant of the same scheme.<\/td>\n<\/tr>\n<tr>\n<td>Argon2id<\/td>\n<td>PoW v2<\/td>\n<td>No<\/td>\n<td>Memory hard key derivation function. Refused rather than attempted.<\/td>\n<\/tr>\n<tr>\n<td>scrypt<\/td>\n<td>PoW v2<\/td>\n<td>No<\/td>\n<td>Memory hard key derivation function. Refused rather than attempted.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9e3866 elementor-widget elementor-widget-text-editor\" data-id=\"d9e3866\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Both effort modes work and need nothing from you. In <em>deterministic<\/em> mode the server precomputes the target so that solve time is predictable, and in <em>probabilistic<\/em> mode solve time varies from one challenge to the next. All three widget types (<code>native<\/code>, <code>checkbox<\/code> and <code>switch<\/code>) are supported, because the type is only the visual style of the control and never reaches the API.<\/p><p>Argon2id and scrypt are refused rather than attempted. A task using either returns <code>ERROR_CAPTCHA_UNSOLVABLE<\/code> in about a third of a second and is never retried, so it is never silently mis-solved. Since ALTCHA recommends PBKDF2 as its default, this affects a small minority of sites.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae363d8 elementor-widget-divider--view-line_icon elementor-view-stacked cs-altcha-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"ae363d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7a1b48 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"f7a1b48\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"captchafox\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><a href=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/captchafox.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-25903\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/captchafox.svg\" alt=\"captchafox solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;CaptchaFox<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b12d294 animated-fast cs-captchafox-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"b12d294\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>CaptchaFox is a privacy focused CAPTCHA that scores the browser itself rather than asking the visitor to read anything. Most visitors never see a puzzle at all. CapSkip solves it by driving the real widget in a real browser and returns the verification token the widget would have produced.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce52327 elementor-widget elementor-widget-text-editor\" data-id=\"ce52327\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>How It Works<\/strong><\/span><\/h5><p>CaptchaFox decides in three layers, and only the last one is visible. The widget runs a short proof of work, collects a large set of browser signals, and sends both to its own API. If that evidence satisfies the service, a token is issued immediately and no puzzle is ever drawn. An interactive challenge appears only when the evidence does not clear.<\/p><p>That shape has one practical consequence worth knowing before you integrate. The token is produced by a genuine browser session, not by a calculation over parameters you supply, so CapSkip loads the widget against your page URL and lets it run. You give CapSkip the site key and the page, and CapSkip returns the token.<\/p><p>The full cycle is four steps:<\/p><ol><li>Read the site key from the target page.<\/li><li>Submit it to <code>\/in.php<\/code> with <code>method=captchafox<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the token is ready.<\/li><li>Send the token back in the target form&#8217;s <code>cf-captcha-response<\/code> field.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-189d37a elementor-widget elementor-widget-text-editor\" data-id=\"189d37a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>What You Need Before Solving<\/strong><\/span><\/h5><p>Two values, and both are read straight off the target page. There is no challenge document to capture and nothing that expires while you queue the task.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2dc741 elementor-widget elementor-widget-html\" data-id=\"f2dc741\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Where it comes from<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>sitekey<\/td><td>The public key the widget is rendered with. It is not secret, it is the same for every visitor, and it conventionally starts with <code>sk_<\/code>.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>The full URL of the page the widget appears on. CaptchaFox checks this against the domains the key is registered for, so it has to be the real page.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd6a09e elementor-widget elementor-widget-text-editor\" data-id=\"dd6a09e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Where to Find the Site Key<\/strong><\/span><\/h5><p>Open the browser developer tools on the target page and look for the CaptchaFox container. Sites render the widget in one of two ways, and the key is visible in both.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99ce2c1 elementor-widget elementor-widget-shortcode\" data-id=\"99ce2c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;!-- Automatic rendering: the key is an attribute --&gt;\n&lt;div class=&quot;captchafox&quot; data-sitekey=&quot;sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G&quot;&gt;&lt;\/div&gt;\n\n&lt;!-- Explicit rendering: the key is in the render call --&gt;\n&lt;script&gt;\n  captchafox.render(&quot;#container&quot;, {\n    sitekey: &quot;sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G&quot;,\n    onVerify: function (token) { \/* ... *\/ }\n  });\n&lt;\/script&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8af331f elementor-widget elementor-widget-text-editor\" data-id=\"8af331f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If neither is in the served HTML because the page builds the widget at runtime, open the Network tab and find the request to <code>api.captchafox.com<\/code>. The key is the path segment after <code>\/captcha\/<\/code>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75c1352 elementor-widget elementor-widget-text-editor\" data-id=\"75c1352\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>The Page URL Has to Match the Key<\/strong><\/span><\/h5><p>CaptchaFox keys are registered against a list of allowed domains, and the service checks the host before it will issue anything. A key that is correct but used on a page outside that list is refused permanently, not intermittently.<\/p><p>CapSkip reports that case rather than retrying it, because retrying cannot help. If a site key fails immediately and consistently, check that <code>pageurl<\/code> is the page the widget actually runs on, and not a search page, a redirect or a shortened link that resolves elsewhere.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c111bc elementor-widget elementor-widget-text-editor\" data-id=\"5c111bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Challenge Types<\/strong><\/span><\/h5><p>You do not choose which challenge appears. CaptchaFox decides, and CapSkip handles what it is given.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50e808a elementor-widget elementor-widget-html\" data-id=\"50e808a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Challenge<\/strong><\/th><th><strong>Appears when<\/strong><\/th><th><strong>Supported<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>Invisible<\/td><td>Usually<\/td><td>Yes<\/td><td>The browser evidence satisfies the service and a token is issued with nothing drawn on screen. This is the common path and the fastest one.<\/td><\/tr>\n<tr><td>Slide<\/td><td>Sometimes<\/td><td>Yes<\/td><td>A slider puzzle where a piece has to be dragged into a gap. CapSkip locates the target and completes the drag.<\/td><\/tr>\n<tr><td>Image select<\/td><td>Rarely<\/td><td>No<\/td><td>A grid of images to pick from. Reported as unsolvable so your client can retry into a fresh challenge rather than wait out the timeout.<\/td><\/tr>\n<tr><td>Audio<\/td><td>Rarely<\/td><td>No<\/td><td>The accessibility fallback. Reported as unsolvable for the same reason.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e20e9ea elementor-widget elementor-widget-text-editor\" data-id=\"e20e9ea\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The two unsupported challenges are uncommon, and a retry usually draws a different one. Treat an unsolvable result as a signal to resubmit, not as a permanent failure of the key.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9bce65c elementor-widget elementor-widget-text-editor\" data-id=\"9bce65c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b1d8282 elementor-widget elementor-widget-html\" data-id=\"b1d8282\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>method<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>captchafox<\/code>. Specifies that you are submitting a CaptchaFox CAPTCHA.<\/td><\/tr>\n<tr><td>sitekey<\/td><td>String<\/td><td>Yes<\/td><td>The site key read from the target page, conventionally prefixed <code>sk_<\/code>.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget appears on.<\/td><\/tr>\n<tr><td>api_server<\/td><td>String<\/td><td>No<\/td><td>The widget entry point to load. Defaults to <code>https:\/\/cdn.captchafox.com\/<\/code>. See <strong>Choosing the Widget Source<\/strong> below.<\/td><\/tr>\n<tr><td>useragent<\/td><td>String<\/td><td>No<\/td><td>Accepted for compatibility with other services and not applied. CapSkip solves in a real browser and uses that browser&#8217;s own consistent identity.<\/td><\/tr>\n<tr><td>proxy<\/td><td>String<\/td><td>No<\/td><td>Proxy address. Accepts <code>IP:PORT<\/code>, <code>LOGIN:PASSWORD@IP:PORT<\/code> or <code>IP:PORT:LOGIN:PASSWORD<\/code>.<\/td><\/tr>\n<tr><td>proxytype<\/td><td>String<\/td><td>No<\/td><td>Proxy type: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code> or <code>SOCKS5H<\/code>.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-738a8db elementor-widget elementor-widget-text-editor\" data-id=\"738a8db\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Unlike most services, CapSkip does not force a proxy for this method. It will still want proxies as soon as you solve at any volume: CaptchaFox scores the network a widget runs on as well as the browser, so repeated solves from one address push that address toward the interactive challenges and, past that, toward refusals. One address is fine for testing and for occasional solves. Beyond that, configure a proxy pool in CapSkip and let it spread the load, or send a per-request proxy when the token has to come from a particular network.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=captchafox<\/code>. Form fields and a JSON body are both accepted under identical field names, and <code>GET<\/code> works too, because CaptchaFox carries no image to upload.<\/p><p>Submit CaptchaFox (form fields):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d12286 elementor-widget elementor-widget-shortcode\" data-id=\"6d12286\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-d &quot;key=YOUR_API_KEY&quot; \\\n-d &quot;method=captchafox&quot; \\\n-d &quot;sitekey=sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G&quot; \\\n-d &quot;pageurl=https:\/\/www.example.com\/signup&quot; \\\n-d &quot;json=1&quot; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f1ebea elementor-widget elementor-widget-text-editor\" data-id=\"3f1ebea\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Submit CaptchaFox (JSON body):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e67f57c elementor-widget elementor-widget-shortcode\" data-id=\"e67f57c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-H &quot;Content-Type: application\/json&quot; \\\n-d &#039;{\n    &quot;key&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;method&quot;: &quot;captchafox&quot;,\n    &quot;sitekey&quot;: &quot;sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G&quot;,\n    &quot;pageurl&quot;: &quot;https:\/\/www.example.com\/signup&quot;,\n    &quot;json&quot;: 1\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1c24c6 elementor-widget elementor-widget-text-editor\" data-id=\"f1c24c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If everything is correct, CapSkip returns the CAPTCHA ID as plain text: <code>OK|2122988149<\/code>. If the <code>json=1<\/code> parameter was sent, the response is a JSON envelope instead. Either way, the returned value is the CAPTCHA ID you poll for the result.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d352f5 elementor-widget elementor-widget-shortcode\" data-id=\"2d352f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;2122988149&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b6c42d elementor-widget elementor-widget-text-editor\" data-id=\"3b6c42d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Otherwise CapSkip returns an appropriate error code. A missing site key or an unusable page URL is rejected on the submit request itself rather than after polling, so you find out on the request that was wrong.<\/p><p>Wait approximately 5 seconds, then submit an HTTP GET request to the result endpoint (<code>\/res.php<\/code>) with the CAPTCHA ID you received. A CaptchaFox solve runs a real browser session, so expect it to take longer than a calculation based method such as ALTCHA, and longer again when an interactive challenge is drawn.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2eb0aa6 elementor-widget elementor-widget-text-editor\" data-id=\"2eb0aa6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-245b4d6 elementor-widget elementor-widget-html\" data-id=\"245b4d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>action<\/td><td>String<\/td><td>Yes<\/td><td>Specify <code>get<\/code> to retrieve the CAPTCHA solution.<\/td><\/tr>\n<tr><td>id<\/td><td>Integer<\/td><td>Yes<\/td><td>The CAPTCHA ID returned by the <code>in.php<\/code> request.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99723ab elementor-widget elementor-widget-shortcode\" data-id=\"99723ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=2122988149&amp;json=1&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-798c40a elementor-widget elementor-widget-text-editor\" data-id=\"798c40a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has been solved, CapSkip returns the solution in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5b7bdc7 elementor-widget elementor-widget-shortcode\" data-id=\"5b7bdc7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;177f50c25b845601e5c779cdb51b040d523e8ab69efb4d5b343e28df07d05076&quot;,\n    &quot;solution&quot;: {\n        &quot;token&quot;: &quot;177f50c25b845601e5c779cdb51b040d523e8ab69efb4d5b343e28df07d05076&quot;\n    },\n    &quot;cost&quot;: &quot;0.00145&quot;,\n    &quot;createTime&quot;: 1788863246,\n    &quot;endTime&quot;: 1788863262,\n    &quot;errorId&quot;: 0,\n    &quot;solveCount&quot;: 1\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37d3413 elementor-widget elementor-widget-text-editor\" data-id=\"37d3413\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><code>request<\/code> and <code>solution.token<\/code> are always the same string, so read whichever one your client expects. Without <code>json=1<\/code>, the answer is simply <code>OK|&lt;token&gt;<\/code>.<\/p><p>If the CAPTCHA has not yet been solved, CapSkip returns <code>CAPCHA_NOT_READY<\/code>, spelled exactly that way as on every other method. Wait 5 seconds and repeat the request.<\/p><p>Gate your polling loop on <code>errorId<\/code>, not on <code>status<\/code>. <code>status<\/code> is the integer <code>1<\/code> that the <code>res.php<\/code> contract has always returned, which is what every compatible SDK reads. If you wrote your client against a documentation page showing <code>\"status\": \"ready\"<\/code>, check <code>errorId === 0<\/code> or the presence of <code>solution.token<\/code> instead.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94634eb elementor-widget elementor-widget-text-editor\" data-id=\"94634eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Submitting the Token<\/strong><\/span><\/h5><p>The CaptchaFox widget puts its token in a form field named <code>cf-captcha-response<\/code>. Submit the token verbatim in that field, exactly as the widget would have:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a7cdebf elementor-widget elementor-widget-shortcode\" data-id=\"a7cdebf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\nPOST https:\/\/www.example.com\/signup\nContent-Type: application\/x-www-form-urlencoded\n\nemail=someone%40example.com&amp;cf-captcha-response=177f50c25b845601e5c779cdb51b040d...\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1e7fd7 elementor-widget elementor-widget-text-editor\" data-id=\"f1e7fd7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Some integrations read the token from a JSON body field instead, so check what the page&#8217;s own submit sends and mirror it. Treat the token as opaque and pass it through unchanged. It is verified server side against the session that produced it, so any edit invalidates it.<\/p><p>Tokens are short lived. Submit promptly rather than holding one while a user fills in a form, and solve again if the form is abandoned and resumed.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aba86d2 elementor-widget elementor-widget-text-editor\" data-id=\"aba86d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Choosing the Widget Source<\/strong><\/span><\/h5><p>CaptchaFox publishes its widget from two places, and which one a site loads decides the shape of the token it expects back. Send <code>api_server<\/code> only when the target page does not use the default.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58cb7d4 elementor-widget elementor-widget-html\" data-id=\"58cb7d4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>api_server<\/strong><\/th><th><strong>Token<\/strong><\/th><th><strong>Default<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>https:\/\/cdn.captchafox.com\/<\/td><td>Plain<\/td><td>Yes<\/td><td>The standard widget, used by the large majority of sites. This is what CapSkip loads when you send nothing.<\/td><\/tr>\n<tr><td>https:\/\/s.uicdn.com\/mampkg\/<\/td><td>MAM_ prefixed<\/td><td>No<\/td><td>The packaged build some platforms embed. It returns a token prefixed <code>MAM_<\/code>. Pass the full package path exactly as it appears in the page&#8217;s script tag.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5c1307 elementor-widget elementor-widget-text-editor\" data-id=\"c5c1307\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Read the value from the <code>&lt;script&gt;<\/code> tag that loads the widget on the target page. If you send the wrong one the solve still succeeds, but the token comes back in a format the target site will not accept, which looks like a silent verification failure rather than an error.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4ed945 elementor-widget-divider--view-line_icon elementor-view-stacked cs-captchafox-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"f4ed945\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee27745 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"ee27745\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"capy\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><a href=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/capy.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-25905\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/capy.svg\" alt=\"capy puzzle solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;Capy Puzzle<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1524e4 animated-fast cs-capy-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"f1524e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>Capy Puzzle is a drag and drop CAPTCHA: a piece is cut out of a photograph and the visitor slides it back into the hole it came from. CapSkip returns the three values the widget would have written into the page, ready to submit with your form.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d3adcf elementor-widget elementor-widget-text-editor\" data-id=\"3d3adcf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>How It Works<\/strong><\/span><\/h5><p>Capy is unusual among the CAPTCHAs on this page in that nothing about a challenge is issued by a server. The widget generates its own challenge key, asks the Capy API for the puzzle that belongs to that key, and the visitor drags the piece into place. There is no token to fetch beforehand and no handshake to replay.<\/p><p>The answer is not a coordinate. The widget records the path the piece was dragged along and encodes it as a string, so what you submit back to the target site is a plausible drag, not a destination. CapSkip builds that path for you.<\/p><p>The full cycle is four steps:<\/p><ol><li>Read the CAPTCHA key from the target page.<\/li><li>Submit it to <code>\/in.php<\/code> with <code>method=capy<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the solution is ready.<\/li><li>Send the three returned values back in the target form.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-347062c elementor-widget elementor-widget-text-editor\" data-id=\"347062c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>What You Need Before Solving<\/strong><\/span><\/h5><p>Two values, and both are read straight off the target page.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-299d506 elementor-widget elementor-widget-html\" data-id=\"299d506\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Where it comes from<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>captchakey<\/td><td>The site&#8217;s public Capy key, conventionally prefixed <code>PUZZLE_<\/code>. It appears in the page source as <code>capy_captchakey<\/code>, and in the widget script URL as the <code>k<\/code> query parameter.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>The full URL of the page the widget appears on. Capy never sees this value, but keys are registered against sites, so send the real page.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d8004f0 elementor-widget elementor-widget-text-editor\" data-id=\"d8004f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>There is a third value worth checking, <code>api_server<\/code>, which is the root of the Capy API the key lives behind. Read it from the same script tag. CapSkip defaults to <code>https:\/\/jp.api.capy.me<\/code>, which is where the live service is, and only needs telling otherwise if the target page points somewhere else.<\/p><p>Several solving services still document <code>api.capy.me<\/code> without the regional prefix. That host no longer resolves. If you copied it from elsewhere, drop it and let CapSkip use its default.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42b1e08 elementor-widget elementor-widget-text-editor\" data-id=\"42b1e08\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Where to Find the CAPTCHA Key<\/strong><\/span><\/h5><p>Open the browser developer tools on the target page and look for the Capy widget. The key is visible in both of the ways sites load it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3826973 elementor-widget elementor-widget-shortcode\" data-id=\"3826973\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;!-- In the page source, as the widget configuration --&gt;\n&lt;div id=&quot;capy&quot;&gt;&lt;\/div&gt;\n&lt;script&gt;\n  window.capyOptions = {\n    captchakey: &quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;,\n    puzzle_div: &quot;capy&quot;\n  };\n&lt;\/script&gt;\n\n&lt;!-- Or in the script URL itself, as the k parameter --&gt;\n&lt;script src=&quot;https:\/\/jp.api.capy.me\/puzzle\/get_js\/?k=PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;&gt;&lt;\/script&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c0c1d61 elementor-widget elementor-widget-text-editor\" data-id=\"c0c1d61\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The root of that script URL, <code>https:\/\/jp.api.capy.me\/<\/code> in the example above, is the <code>api_server<\/code> value if you need to send one.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c5b035 elementor-widget elementor-widget-text-editor\" data-id=\"6c5b035\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>The Answer Is Three Values, Not a Token<\/strong><\/span><\/h5><p>This is the one structural difference from every other method on this page, and it is worth reading before you write the client. reCAPTCHA, Turnstile and CaptchaFox all come back as a single opaque string. A Capy solution is three separate values that only work together.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a334abe elementor-widget elementor-widget-html\" data-id=\"a334abe\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Returned value<\/strong><\/th><th><strong>Goes into the target form field<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>captchakey<\/td><td><code>capy_captchakey<\/code><\/td><\/tr>\n<tr><td>challengekey<\/td><td><code>capy_challengekey<\/code><\/td><\/tr>\n<tr><td>answer<\/td><td><code>capy_answer<\/code><\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e77797 elementor-widget elementor-widget-text-editor\" data-id=\"7e77797\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Because a bare <code>OK|&lt;token&gt;<\/code> has room for one value and not three, <code>\/res.php<\/code> returns the whole solution object for this method. The plain text reply carries it, and so does the <code>request<\/code> field of a JSON reply. A fourth field, <code>respKey<\/code>, comes back as an empty string for compatibility with clients written against other services. It carries nothing for a puzzle solve and can be ignored.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6d5a56 elementor-widget elementor-widget-text-editor\" data-id=\"e6d5a56\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1dcf3e3 elementor-widget elementor-widget-html\" data-id=\"1dcf3e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>method<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>capy<\/code>. Specifies that you are submitting a Capy Puzzle CAPTCHA.<\/td><\/tr>\n<tr><td>captchakey<\/td><td>String<\/td><td>Yes<\/td><td>The CAPTCHA key read from the target page, conventionally prefixed <code>PUZZLE_<\/code>. <code>sitekey<\/code> and <code>websiteKey<\/code> are accepted as aliases.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget appears on.<\/td><\/tr>\n<tr><td>api_server<\/td><td>String<\/td><td>No<\/td><td>The root of the Capy API the key lives behind. Defaults to <code>https:\/\/jp.api.capy.me<\/code>.<\/td><\/tr>\n<tr><td>version<\/td><td>String<br>Default: puzzle<\/td><td>No<\/td><td>The challenge family. Only <code>puzzle<\/code> is solved. See <strong>Puzzle and Avatar<\/strong> below.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent to send with the puzzle request. Optional, and rarely needed.<\/td><\/tr>\n<tr><td>proxy<\/td><td>String<\/td><td>No<\/td><td>Proxy address. Accepts <code>IP:PORT<\/code>, <code>LOGIN:PASSWORD@IP:PORT<\/code> or <code>IP:PORT:LOGIN:PASSWORD<\/code>.<\/td><\/tr>\n<tr><td>proxytype<\/td><td>String<\/td><td>No<\/td><td>Proxy type: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code> or <code>SOCKS5H<\/code>.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16c47fa elementor-widget elementor-widget-text-editor\" data-id=\"16c47fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>CapSkip does not force a proxy for this method, but you will want proxies as soon as you solve at any volume. Every solve draws a fresh puzzle from the Capy API over a live request, and a steady stream of those from one address is the pattern rate limiting exists to catch. One address is fine for testing and for occasional solves. Past that, configure a proxy pool in CapSkip and let it spread the load, or send a per-request proxy when a solve has to come from a particular network.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=capy<\/code>. Form fields, a query string and a JSON body are all accepted under identical field names, because Capy carries no image to upload.<\/p><p>Submit Capy Puzzle (form fields):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5b9814 elementor-widget elementor-widget-shortcode\" data-id=\"f5b9814\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-d &quot;key=YOUR_API_KEY&quot; \\\n-d &quot;method=capy&quot; \\\n-d &quot;captchakey=PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot; \\\n-d &quot;pageurl=https:\/\/www.example.com\/login&quot; \\\n-d &quot;json=1&quot; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6affae4 elementor-widget elementor-widget-text-editor\" data-id=\"6affae4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Submit Capy Puzzle (JSON body):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96a70f4 elementor-widget elementor-widget-shortcode\" data-id=\"96a70f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-H &quot;Content-Type: application\/json&quot; \\\n-d &#039;{\n    &quot;key&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;method&quot;: &quot;capy&quot;,\n    &quot;captchakey&quot;: &quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;,\n    &quot;api_server&quot;: &quot;https:\/\/jp.api.capy.me\/&quot;,\n    &quot;pageurl&quot;: &quot;https:\/\/www.example.com\/login&quot;,\n    &quot;json&quot;: 1\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cfbbb56 elementor-widget elementor-widget-text-editor\" data-id=\"cfbbb56\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If everything is correct, CapSkip returns the CAPTCHA ID as plain text: <code>OK|2122988149<\/code>. If the <code>json=1<\/code> parameter was sent, the response is a JSON envelope instead. Either way, the returned value is the CAPTCHA ID you poll for the result.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-500aab9 elementor-widget elementor-widget-shortcode\" data-id=\"500aab9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;2122988149&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f942a9a elementor-widget elementor-widget-text-editor\" data-id=\"f942a9a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Otherwise CapSkip returns an appropriate error code. A missing CAPTCHA key, an unusable page URL or an <code>api_server<\/code> that is not a URL is rejected on the submit request itself rather than after polling, so you find out on the request that was wrong.<\/p><p>Wait approximately 3 seconds, then submit an HTTP GET request to the result endpoint (<code>\/res.php<\/code>) with the CAPTCHA ID you received. A solve is deliberately held back to a human plausible duration before it is returned, for the reason described under <strong>Timing<\/strong> below.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-243d660 elementor-widget elementor-widget-text-editor\" data-id=\"243d660\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae29979 elementor-widget elementor-widget-html\" data-id=\"ae29979\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>action<\/td><td>String<\/td><td>Yes<\/td><td>Specify <code>get<\/code> to retrieve the CAPTCHA solution.<\/td><\/tr>\n<tr><td>id<\/td><td>Integer<\/td><td>Yes<\/td><td>The CAPTCHA ID returned by the <code>in.php<\/code> request.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d77615 elementor-widget elementor-widget-shortcode\" data-id=\"7d77615\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=2122988149&amp;json=1&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc4519b elementor-widget elementor-widget-text-editor\" data-id=\"dc4519b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has been solved, CapSkip returns the solution in JSON format:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae0c2fc elementor-widget elementor-widget-shortcode\" data-id=\"ae0c2fc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: {\n        &quot;captchakey&quot;: &quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;,\n        &quot;challengekey&quot;: &quot;BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP&quot;,\n        &quot;answer&quot;: &quot;0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx0x26x68x0x2gx5kx0x34x50x&quot;,\n        &quot;respKey&quot;: &quot;&quot;\n    },\n    &quot;solution&quot;: {\n        &quot;captchakey&quot;: &quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;,\n        &quot;challengekey&quot;: &quot;BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP&quot;,\n        &quot;answer&quot;: &quot;0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx0x26x68x0x2gx5kx0x34x50x&quot;,\n        &quot;respKey&quot;: &quot;&quot;\n    },\n    &quot;cost&quot;: &quot;0.00299&quot;,\n    &quot;createTime&quot;: 1788863246,\n    &quot;endTime&quot;: 1788863250,\n    &quot;errorId&quot;: 0,\n    &quot;solveCount&quot;: 1\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1da20a8 elementor-widget elementor-widget-text-editor\" data-id=\"1da20a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><code>request<\/code> and <code>solution<\/code> carry the same object, so read whichever one your client expects. Without <code>json=1<\/code>, the same object follows the <code>OK|<\/code> prefix as a single line of JSON, which is what a client reading <code>res.php<\/code> as plain text will hand back:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a8085b1 elementor-widget elementor-widget-shortcode\" data-id=\"a8085b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\nOK|{&quot;captchakey&quot;:&quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;,&quot;challengekey&quot;:&quot;BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP&quot;,&quot;answer&quot;:&quot;0xax8ex0xax84x0xkx7qx&quot;,&quot;respKey&quot;:&quot;&quot;}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4caa999 elementor-widget elementor-widget-text-editor\" data-id=\"4caa999\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has not yet been solved, CapSkip returns <code>CAPCHA_NOT_READY<\/code>, spelled exactly that way as on every other method. Wait 3 seconds and repeat the request.<\/p><p>Each result is delivered once. The first successful poll returns the solution and discards it, and every later poll for the same ID returns an empty body, so keep the values from the reply that carried them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-838b937 elementor-widget elementor-widget-text-editor\" data-id=\"838b937\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Submitting the Solution<\/strong><\/span><\/h5><p>The three values go into the form fields the Capy widget would have filled in itself. Submit them verbatim:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-92b2a0d elementor-widget elementor-widget-shortcode\" data-id=\"92b2a0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;input type=&quot;hidden&quot; name=&quot;capy_captchakey&quot;   value=&quot;PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v&quot;&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;capy_challengekey&quot; value=&quot;BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP&quot;&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;capy_answer&quot;       value=&quot;0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx&quot;&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2894ac8 elementor-widget elementor-widget-text-editor\" data-id=\"2894ac8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Do not trim, re-encode or otherwise clean the <code>answer<\/code> string. It is the drag path the widget would have recorded, and the target site&#8217;s backend verifies it against the challenge it issued, so any edit invalidates it.<\/p><p>The challenge key is single use and short lived. CapSkip generates a fresh one for every solve and the puzzle is bound to it, so submit the three values promptly rather than caching them, and never reuse a <code>challengekey<\/code> for a second submission.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d51a429 elementor-widget elementor-widget-text-editor\" data-id=\"d51a429\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Timing: Capy Refuses Answers That Arrive Too Fast<\/strong><\/span><\/h5><p>This is the part of Capy that will cost you a day if you build against it yourself. Capy measures the wall clock gap between issuing the puzzle and receiving the answer, and refuses anything that looks superhuman. It refuses it with the same message a wrong answer gets, so a perfectly correct solve returned in 200 milliseconds is indistinguishable from a broken solver.<\/p><p>Measured against Capy&#8217;s own sign in page, holding a correct answer constant:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a8dc16 elementor-widget elementor-widget-html\" data-id=\"3a8dc16\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Time from puzzle to verification<\/strong><\/th><th><strong>Result<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>0.48 seconds<\/td><td>Refused<\/td><\/tr>\n<tr><td>1.03 seconds and above, tested to 4 seconds<\/td><td>Accepted<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29a9186 elementor-widget elementor-widget-text-editor\" data-id=\"29a9186\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>CapSkip therefore holds every result back until enough time has passed since the puzzle was drawn, at roughly double the observed floor, because the floor belongs to Capy and can move. The hold is applied automatically to every solve and there is nothing to configure. It costs latency and not throughput, and if you poll for the result it is invisible, because the task simply takes around two seconds.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2a07429 elementor-widget elementor-widget-text-editor\" data-id=\"2a07429\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Puzzle and Avatar<\/strong><\/span><\/h5><p>Capy publishes two challenge families. They are different challenges behind different endpoints, and CapSkip solves one of them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b15c872 elementor-widget elementor-widget-html\" data-id=\"b15c872\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>version<\/strong><\/th><th><strong>Challenge<\/strong><\/th><th><strong>Supported<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>puzzle<\/td><td>Assemble a puzzle<\/td><td>Yes<\/td><td>The default, and what almost every deployment uses. A piece is dragged back into the hole it was cut from.<\/td><\/tr>\n<tr><td>avatar<\/td><td>Drag an object<\/td><td>No<\/td><td>A separate challenge type. Refused at submit time with <code>ERROR_BAD_PARAMETERS<\/code> rather than answered.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ad55693 elementor-widget elementor-widget-text-editor\" data-id=\"ad55693\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Sending no <code>version<\/code> means <code>puzzle<\/code>, so most integrations never set it. An <code>avatar<\/code> request is rejected rather than attempted on purpose: answering it as a puzzle would return a solution the target site refuses, which is worse than a clear error because it looks like a failing solver rather than an unsupported challenge.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cc5360 elementor-widget-divider--view-line_icon elementor-view-stacked cs-capy-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"2cc5360\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12af241 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"12af241\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"friendlycaptcha\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4><a href=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/FriendlyCaptcha.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-25936\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/09\/FriendlyCaptcha.svg\" alt=\"friendly captcha solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;Friendly Captcha<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0d7b36 animated-fast cs-friendlycaptcha-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"d0d7b36\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>Friendly Captcha asks the visitor&#8217;s browser to do a piece of arithmetic instead of asking the visitor to do anything. There is no image to click, no slider and no audio fallback, so there is nothing on screen to get wrong. CapSkip returns the token the widget would have produced, ready to submit with your form.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7cee7a9 elementor-widget elementor-widget-text-editor\" data-id=\"7cee7a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>How It Works<\/strong><\/span><\/h5><p>Friendly Captcha is a proof of work CAPTCHA. The widget is handed a difficulty setting, searches for values that hash below it, and writes the result into a hidden field in your form. Nothing is ever shown to the visitor, which is the point of the product: a page using it looks like a page with no CAPTCHA on it.<\/p><p>Two entirely different protocols ship under this one name, and a sitekey does not tell you which one a site uses. They share a brand and a sitekey namespace and nothing else. Deciding between them is the first thing an integration has to get right, so it has its own section below.<\/p><p>The full cycle is four steps:<\/p><ol><li>Read the sitekey from the target page, and the widget script URL with it.<\/li><li>Submit both to <code>\/in.php<\/code> with <code>method=friendly_captcha<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the token is ready.<\/li><li>Put the token in the form field the widget would have filled, and submit.<\/li><\/ol><p>Solve time is not a constant for this method. The service decides how much work a request is worth at the moment it is made, so the same sitekey can cost noticeably more at one time than another. Budget for that in your polling rather than assuming a fixed duration.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-993b7fa elementor-widget elementor-widget-text-editor\" data-id=\"993b7fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>What You Need Before Solving<\/strong><\/span><\/h5><p>Two values are required, and a third is worth sending whenever you can get it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-63a2114 elementor-widget elementor-widget-html\" data-id=\"63a2114\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Where it comes from<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>sitekey<\/td><td>The <code>data-sitekey<\/code> attribute of the widget element, which is the element carrying <code>class=\"frc-captcha\"<\/code>.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>The full URL of the page the widget appears on.<\/td><\/tr>\n<tr><td>module_script<\/td><td>The <code>src<\/code> of the widget script tag that carries <code>type=\"module\"<\/code>. Not required, but it is what tells CapSkip which protocol version the site uses, so send it if the page has one.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1f596b elementor-widget elementor-widget-text-editor\" data-id=\"d1f596b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Version 1 and Version 2<\/strong><\/span><\/h5><p>This is the part that will cost you an afternoon if you skip it. Both versions are live, both are in use, and a sitekey registered for one also answers on the other&#8217;s endpoint. Solve the wrong one and you get a well formed token that the target site rejects, with no indication anywhere that the version was the problem.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2f130aa elementor-widget elementor-widget-html\" data-id=\"2f130aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>version<\/strong><\/th><th><strong>Widget package<\/strong><\/th><th><strong>Supported<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>v1<\/td><td>friendly-challenge<\/td><td>Yes<\/td><td>The original, open source widget. Its script is <code>widget.module.min.js<\/code> or <code>widget.min.js<\/code>. The default when nothing says otherwise.<\/td><\/tr>\n<tr><td>v2<\/td><td>@friendlycaptcha\/sdk<\/td><td>Yes<\/td><td>The current SDK. Its script is <code>site.min.js<\/code>. A page loading this one is v2 whatever else it looks like.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6caf32 elementor-widget elementor-widget-text-editor\" data-id=\"e6caf32\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>CapSkip decides the version in this order, and stops at the first answer:<\/p><ol><li>The <code>version<\/code> parameter, if you sent one. <code>v1<\/code> and <code>v2<\/code> are the spellings; a bare <code>1<\/code> or <code>2<\/code> is accepted too.<\/li><li>The widget script URL, from <code>module_script<\/code> or <code>nomodule_script<\/code>. This is the most reliable signal there is, because it is the build the site actually loads.<\/li><li>Failing both, <code>v1<\/code>.<\/li><\/ol><p>CapSkip does not ask the service which version a sitekey belongs to, because the service will answer for either one. Send the <code>version<\/code>, or send the script URL, and the question never arises.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7089b3 elementor-widget elementor-widget-text-editor\" data-id=\"c7089b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Where to Find the Sitekey<\/strong><\/span><\/h5><p>Open the browser developer tools on the target page and look for the widget element. The sitekey and the script are next to each other in the page source, and between them they give you everything this method needs.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b035a16 elementor-widget elementor-widget-shortcode\" data-id=\"b035a16\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;!-- Version 1: the friendly-challenge widget --&gt;\n&lt;div class=&quot;frc-captcha&quot; data-sitekey=&quot;FCMEXAMPLE1234AB&quot;&gt;&lt;\/div&gt;\n&lt;script type=&quot;module&quot; src=&quot;https:\/\/cdn.example.com\/friendly-challenge@0.9.19\/widget.module.min.js&quot;&gt;&lt;\/script&gt;\n&lt;script nomodule src=&quot;https:\/\/cdn.example.com\/friendly-challenge@0.9.19\/widget.min.js&quot;&gt;&lt;\/script&gt;\n\n&lt;!-- Version 2: the @friendlycaptcha\/sdk widget --&gt;\n&lt;div class=&quot;frc-captcha&quot; data-sitekey=&quot;FCMEXAMPLE1234AB&quot;&gt;&lt;\/div&gt;\n&lt;script type=&quot;module&quot; src=&quot;https:\/\/cdn.example.com\/@friendlycaptcha\/sdk@0.1.6\/site.min.js&quot;&gt;&lt;\/script&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe73628 elementor-widget elementor-widget-text-editor\" data-id=\"fe73628\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Some deployments serve the script from their own domain rather than a CDN. The file name is what matters, not the host it comes from.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3091e7 elementor-widget elementor-widget-text-editor\" data-id=\"c3091e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9781202 elementor-widget elementor-widget-html\" data-id=\"9781202\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>method<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>friendly_captcha<\/code>. Specifies that you are submitting a Friendly Captcha.<\/td><\/tr>\n<tr><td>sitekey<\/td><td>String<\/td><td>Yes<\/td><td>The <code>data-sitekey<\/code> value read from the widget element on the target page.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget appears on.<\/td><\/tr>\n<tr><td>version<\/td><td>String<br>Default: v1<\/td><td>No<\/td><td>The protocol version, <code>v1<\/code> or <code>v2<\/code>. See <strong>Version 1 and Version 2<\/strong> above.<\/td><\/tr>\n<tr><td>module_script<\/td><td>String<\/td><td>No<\/td><td>The <code>src<\/code> of the widget script tag carrying <code>type=\"module\"<\/code>. Used to work out the version when <code>version<\/code> was not sent.<\/td><\/tr>\n<tr><td>nomodule_script<\/td><td>String<\/td><td>No<\/td><td>The <code>src<\/code> of the widget script tag carrying <code>nomodule<\/code>. Read for the same reason.<\/td><\/tr>\n<tr><td>api_server<\/td><td>String<\/td><td>No<\/td><td>Specific to CapSkip. The data residency endpoint the sitekey belongs to. Accepts <code>global<\/code> (the default), <code>eu<\/code>, or a full URL. See <strong>Data Residency<\/strong> below.<\/td><\/tr>\n<tr><td>useragent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent to send with the request. Optional, and rarely needed.<\/td><\/tr>\n<tr><td>proxy<\/td><td>String<\/td><td>No<\/td><td>Proxy address. Accepts <code>IP:PORT<\/code>, <code>LOGIN:PASSWORD@IP:PORT<\/code> or <code>IP:PORT:LOGIN:PASSWORD<\/code>.<\/td><\/tr>\n<tr><td>proxytype<\/td><td>String<\/td><td>No<\/td><td>Proxy type: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code> or <code>SOCKS5H<\/code>.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69668bd elementor-widget elementor-widget-text-editor\" data-id=\"69668bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>CapSkip does not force a proxy for this method, and you will want one sooner here than almost anywhere else on this page. The service decides how much work each request is worth, and it raises that figure for addresses it has already seen a lot of: measured against one sitekey from a single address, the difficulty setting rose steadily over a session of testing, and the published range between a fresh address and a heavily used one is close to thirty times the work for the same token. One address is fine for testing and for occasional solves. Past that, configure a proxy pool in CapSkip and let it spread the load, or send a per-request proxy when a solve has to come from a particular network.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=friendly_captcha<\/code>. Form fields, a query string and a JSON body are all accepted under identical field names, because this method carries no image to upload.<\/p><p>Submit Friendly Captcha (form fields):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23dbc5b elementor-widget elementor-widget-shortcode\" data-id=\"23dbc5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-d &quot;key=YOUR_API_KEY&quot; \\\n-d &quot;method=friendly_captcha&quot; \\\n-d &quot;sitekey=FCMEXAMPLE1234AB&quot; \\\n-d &quot;pageurl=https:\/\/www.example.com\/signup&quot; \\\n-d &quot;version=v2&quot; \\\n-d &quot;json=1&quot; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61166d1 elementor-widget elementor-widget-text-editor\" data-id=\"61166d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Submit Friendly Captcha (JSON body, with the script URLs instead of an explicit version):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f2fdc5 elementor-widget elementor-widget-shortcode\" data-id=\"7f2fdc5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl -X POST \\\n-H &quot;Content-Type: application\/json&quot; \\\n-d &#039;{\n    &quot;key&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;method&quot;: &quot;friendly_captcha&quot;,\n    &quot;sitekey&quot;: &quot;FCMEXAMPLE1234AB&quot;,\n    &quot;pageurl&quot;: &quot;https:\/\/www.example.com\/signup&quot;,\n    &quot;module_script&quot;: &quot;https:\/\/cdn.example.com\/@friendlycaptcha\/sdk@0.1.6\/site.min.js&quot;,\n    &quot;nomodule_script&quot;: &quot;https:\/\/cdn.example.com\/@friendlycaptcha\/sdk@0.1.6\/site.compat.js&quot;,\n    &quot;json&quot;: 1\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/in.php\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84c7e15 elementor-widget elementor-widget-text-editor\" data-id=\"84c7e15\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If everything is correct, CapSkip returns the CAPTCHA ID as plain text: <code>OK|2122988149<\/code>. If the <code>json=1<\/code> parameter was sent, the response is a JSON envelope instead. Either way, the returned value is the CAPTCHA ID you poll for the result.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4f3e0e elementor-widget elementor-widget-shortcode\" data-id=\"f4f3e0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;2122988149&quot;\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d626af6 elementor-widget elementor-widget-text-editor\" data-id=\"d626af6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Otherwise CapSkip returns an appropriate error code. A missing sitekey or an unusable page URL is rejected on the submit request itself rather than after polling, so you find out on the request that was wrong.<\/p><p>Wait approximately 5 seconds, then submit an HTTP GET request to the result endpoint (<code>\/res.php<\/code>) with the CAPTCHA ID you received.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-366e7a1 elementor-widget elementor-widget-text-editor\" data-id=\"366e7a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>List of GET request parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e0d56f elementor-widget elementor-widget-html\" data-id=\"9e0d56f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>Parameter<\/strong><\/th><th><strong>Type<\/strong><\/th><th><strong>Required<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>key<\/td><td>String<\/td><td>Yes*<\/td><td>Your CapSkip API key. Required only when <strong>API Key Validation<\/strong> is enabled.<\/td><\/tr>\n<tr><td>action<\/td><td>String<\/td><td>Yes<\/td><td>Specify <code>get<\/code> to retrieve the CAPTCHA solution.<\/td><\/tr>\n<tr><td>id<\/td><td>Integer<\/td><td>Yes<\/td><td>The CAPTCHA ID returned by the <code>in.php<\/code> request.<\/td><\/tr>\n<tr><td>json<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-88a97d6 elementor-widget elementor-widget-shortcode\" data-id=\"88a97d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\ncurl &quot;http:\/\/127.0.0.1:8080\/res.php?key=YOUR_API_KEY&amp;action=get&amp;id=2122988149&amp;json=1&quot;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c4e9e29 elementor-widget elementor-widget-text-editor\" data-id=\"c4e9e29\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has been solved, CapSkip returns the token in JSON format. The token is in <code>request<\/code>, and <code>solution.token<\/code> carries the same string for clients that expect it there:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10deaa2 elementor-widget elementor-widget-shortcode\" data-id=\"10deaa2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"json\" class=\"EnlighterJSRAW\">\n{\n    &quot;status&quot;: 1,\n    &quot;request&quot;: &quot;c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY\/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB&quot;,\n    &quot;solution&quot;: {\n        &quot;token&quot;: &quot;c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY\/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB&quot;\n    },\n    &quot;cost&quot;: &quot;0.00299&quot;,\n    &quot;createTime&quot;: 1789667786,\n    &quot;endTime&quot;: 1789667807,\n    &quot;errorId&quot;: 0,\n    &quot;solveCount&quot;: 1\n}\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c52542 elementor-widget elementor-widget-text-editor\" data-id=\"4c52542\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Without <code>json=1<\/code>, the same token follows the <code>OK|<\/code> prefix as plain text, which is what a client reading <code>res.php<\/code> as text will hand back:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab0fabc elementor-widget elementor-widget-shortcode\" data-id=\"ab0fabc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\nOK|c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY\/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c66f333 elementor-widget elementor-widget-text-editor\" data-id=\"c66f333\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the CAPTCHA has not yet been solved, CapSkip returns <code>CAPCHA_NOT_READY<\/code>, spelled exactly that way as on every other method. Wait 5 seconds and repeat the request.<\/p><p>Each result is delivered once. The first successful poll returns the token and discards it, and every later poll for the same ID returns an empty body, so keep the token from the reply that carried it.<\/p><p>The two versions produce tokens of very different shapes and sizes. A v1 token is four dot separated parts and runs to a few hundred characters, as above. A v2 token is a single opaque string beginning <code>AQQA.<\/code> and is roughly six kilobytes long, so make sure whatever carries it, a hidden field, a database column or a proxied request, is sized for that.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27af4e7 elementor-widget elementor-widget-text-editor\" data-id=\"27af4e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Submitting the Token<\/strong><\/span><\/h5><p>The token goes into the hidden field the widget would have filled in itself, and the two versions do not use the same field name. This catches people who move a working v1 integration onto a v2 site.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-14ba349 elementor-widget elementor-widget-html\" data-id=\"14ba349\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>version<\/strong><\/th><th><strong>Form field the token goes into<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>v1<\/td><td><code>frc-captcha-solution<\/code><\/td><\/tr>\n<tr><td>v2<\/td><td><code>frc-captcha-response<\/code><\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7ad486b elementor-widget elementor-widget-shortcode\" data-id=\"7ad486b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\n&lt;!-- Version 1 --&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;frc-captcha-solution&quot; value=&quot;c62c4da3...AgAB&quot;&gt;\n\n&lt;!-- Version 2 --&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;frc-captcha-response&quot; value=&quot;AQQA.vW7kd3CujKT8PaQgEcW18QaH...&quot;&gt;\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2cba94 elementor-widget elementor-widget-text-editor\" data-id=\"b2cba94\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Submit the token verbatim. Do not trim it, re-encode it or strip what look like padding characters: every part of it is verified against the challenge it was issued for, so any edit invalidates it.<\/p><p>A site is free to rename that field, and some do. If the page you are integrating with uses a different name, read the name off the widget element and use that instead. If the page defines a callback for the widget, calling it with the token as its only argument does the same job.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f6418cd elementor-widget elementor-widget-text-editor\" data-id=\"f6418cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><span style=\"color: #000000;\"><strong>Data Residency<\/strong><\/span><\/h5><p>Friendly Captcha runs separate endpoints for different data residency regions, and a sitekey belongs to one of them. Both will issue a token for the same sitekey, so sending the request to the wrong one produces a token that looks perfectly valid here and is refused by the target site with nothing more useful than a failed verification.<\/p><p>The widget names its region in a <code>data-api-endpoint<\/code> attribute. If the target page carries one, pass the same value as <code>api_server<\/code>. That parameter is specific to CapSkip and has no equivalent elsewhere, so a client written against another service will not be sending it: add it yourself when the target page is on a regional endpoint.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b9e3e26 elementor-widget elementor-widget-html\" data-id=\"b9e3e26\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr><th><strong>api_server<\/strong><\/th><th><strong>What it selects<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>global<\/td><td>The default. Used when the attribute is absent, which is the common case.<\/td><\/tr>\n<tr><td>eu<\/td><td>The European endpoint, selected by <code>data-api-endpoint=\"eu\"<\/code>.<\/td><\/tr>\n<tr><td>A full URL<\/td><td>A self hosted or otherwise custom deployment. Send the endpoint exactly as the page gives it.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4574f4c elementor-widget-divider--view-line_icon elementor-view-stacked cs-friendlycaptcha-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"4574f4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7406fdb sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"7406fdb\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"proxy\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4>Using Proxies<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f6e8f45 elementor-widget elementor-widget-text-editor\" data-id=\"f6e8f45\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For reCAPTCHA v2, v3, Invisible, Enterprise, and Cloudflare, you can send a proxy with each task. CapSkip will solve the CAPTCHA through that proxy instead of using the proxy pool configured in the CapSkip application.<\/p><p>This is useful when the target website checks that the CAPTCHA token was generated from the same IP address as your own requests, for example, sites behind Cloudflare, strict reCAPTCHA scoring, or geo-restricted pages.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c4d06b elementor-widget elementor-widget-text-editor\" data-id=\"9c4d06b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5 data-start=\"53\" data-end=\"111\"><span style=\"color: #000000;\"><strong data-start=\"76\" data-end=\"111\">List of POST Request Parameters<\/strong><\/span><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0289f6d elementor-widget elementor-widget-html\" data-id=\"0289f6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th><strong>Parameter<\/strong><\/th>\n<th><strong>Type<\/strong><\/th>\n<th><strong>Required<\/strong><\/th>\n<th><strong>Description<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>proxy<\/td>\n<td>String<\/td>\n<td>No<\/td>\n<td>Proxy address. Format for IP authentication: <code>IP:PORT<\/code> (example: <code>123.123.123.123:3128<\/code>). Format for login\/password authentication: <code>login:password@IP:PORT<\/code><\/td>\n<\/tr>\n<tr>\n<td>proxytype<\/td>\n<td>String<\/td>\n<td>No<\/td>\n<td>Type of proxy. Supported values: <code>HTTP<\/code>, <code>HTTPS<\/code>, <code>SOCKS5<\/code>, <code>SOCKS5H<\/code>. Default: <code>HTTP<\/code> when <code>proxy<\/code> is provided but <code>proxytype<\/code> is omitted.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d81cfd1 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"d81cfd1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd1f2bc sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"cd1f2bc\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"error-codes\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-   ekit_heading_mobile-\">\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<h4>Error Codes<\/h4>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-431175a elementor-widget elementor-widget-html\" data-id=\"431175a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<table>\r\n<thead>\r\n<tr><th><strong>Code<\/strong><\/th><th><strong>Meaning<\/strong><\/th><\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr><td><code>ERROR_KEY_DOES_NOT_EXIST<\/code><\/td><td>Invalid API key.<\/td><\/tr>\r\n<tr><td><code>ERROR_WRONG_USER_KEY<\/code><\/td><td>API key missing or empty.<\/td><\/tr>\r\n<tr><td><code>ERROR_WRONG_METHOD<\/code><\/td><td>Invalid HTTP method or <code>action<\/code> parameter.<\/td><\/tr>\r\n<tr><td><code>ERROR_WRONG_ID_FORMAT<\/code><\/td><td>Invalid captcha ID format.<\/td><\/tr>\r\n<tr><td><code>ERROR_BAD_PARAMETERS<\/code><\/td><td>Missing or invalid required parameters.<\/td><\/tr>\r\n<tr><td><code>ERROR_UPLOAD<\/code><\/td><td>No image data provided or upload failed.<\/td><\/tr>\r\n<tr><td><code>ERROR_INVALID_IMAGE<\/code><\/td><td>Invalid image format or corrupted image data.<\/td><\/tr>\r\n<tr><td><code>ERROR_INVALID_BASE64<\/code><\/td><td>Invalid base64 encoding.<\/td><\/tr>\r\n<tr><td><code>ERROR_TOO_BIG_CAPTCHA_FILESIZE<\/code><\/td><td>Image size exceeds 600 kB or dimensions exceed 1000px.<\/td><\/tr>\r\n<tr><td><code>ERROR_CAPTCHA_UNSOLVABLE<\/code><\/td><td>Failed to solve the captcha. Submit a new task and retry.<\/td><\/tr>\r\n<tr><td><code>ERROR_GOOGLEKEY<\/code><\/td><td>Invalid <code>googlekey<\/code> parameter.<\/td><\/tr>\r\n<tr><td><code>ERROR_PAGEURL<\/code><\/td><td>Invalid <code>pageurl<\/code> parameter.<\/td><\/tr>\r\n<tr><td><code>ERROR_ZERO_BALANCE<\/code><\/td><td>The API key has no credits left for this method.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_FORMAT<\/code><\/td><td>The <code>proxy<\/code> value could not be parsed.<\/td><\/tr>\n<tr><td><code>CAPCHA_NOT_READY<\/code><\/td><td>The captcha is still being processed. Keep polling.<\/td><\/tr>\r\n<tr><td><em>(empty response)<\/em><\/td><td>The result has already been retrieved, or the ID does not exist.<\/td><\/tr>\r\n<\/tbody>\r\n<\/table>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a106f1 elementor-widget-divider--view-line_icon elementor-view-stacked elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"6a106f1\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"last\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg class=\"csi csi-fa\" style=\"fill:none!important\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5.5 6l6 6-6 6\"\/><path class=\"a\" d=\"M12.5 6l6 6-6 6\"\/><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>API Documentation Reference for available endpoints, request formats, parameters, and example responses for integrating the API into your applications. Image CAPTCHA reCAPTCHA V2 reCAPTCHA V2 Callback reCAPTCHA V2 Invisible reCAPTCHA V3 reCAPTCHA Enterprise Cloudflare Turnstile Geetest V3 ALTCHA CaptchaFox Capy Puzzle Friendly Captcha Using Proxies Error Codes This documentation is intended for developers who want [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":23624,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-22260","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages\/22260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/comments?post=22260"}],"version-history":[{"count":70,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages\/22260\/revisions"}],"predecessor-version":[{"id":25939,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages\/22260\/revisions\/25939"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/media\/23624"}],"wp:attachment":[{"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/media?parent=22260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}