{"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-11-09T00:35:28","modified_gmt":"2026-11-09T00:35:28","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=\"csv csi-fa\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><defs><linearGradient id=\"cskic-g-1\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#5A9BFF\"\/><stop offset=\"1\" stop-color=\"#2F6FE4\"\/><\/linearGradient><clipPath id=\"cskic-c-1\"><rect x=\".5\" y=\".5\" width=\"23\" height=\"23\" rx=\"6\"\/><\/clipPath><\/defs><rect x=\".5\" y=\".5\" width=\"23\" height=\"23\" rx=\"6\" fill=\"url(#cskic-g-1)\"\/><g clip-path=\"url(#cskic-c-1)\"><path d=\"M-1 25L-0.5 26.6L5.1 20.7Q6 19.6 6.9 20.7L11.4 22L17.3 17.5Q18.2 16.4 19.1 17.5L25 23.6L25 25Z\" fill=\"#fff\" fill-opacity=\".38\"\/><\/g><path fill=\"#fff\" d=\"M8.61 4.9C4.84 4.9 2 7.57 2 11.09C2 11.97 2.17 12.79 2.49 13.54C3.33 7.13 8.65 7.29 8.65 7.29V7.31C9.85 7.31 10.99 7.9 11.7 8.84L14.23 7.71C13.08 6 11.04 4.9 8.61 4.9L8.61 4.9ZM4.76 11.11C4.48 11.79 4.02 13.05 4.44 14.39C4.57 14.81 4.91 15.7 5.93 16.54C6.29 16.83 6.69 17.04 7.11 17.2C7.58 17.31 8.09 17.36 8.61 17.36C11.02 17.36 13.04 16.26 14.2 14.55L11.68 13.43C10.97 14.37 9.83 14.97 8.65 14.97L8.67 14.93C6.66 14.93 4.77 13.22 4.76 11.11V11.11Z\"\/><circle cx=\"18.8\" cy=\"6.3\" r=\"1.65\" fill=\"#FFC83D\"\/><path fill=\"none\" d=\"M21.25 6.3L21.9 6.3M20.53 8.03L20.99 8.49M18.8 8.75L18.8 9.4M17.07 8.03L16.61 8.49M16.35 6.3L15.7 6.3M17.07 4.57L16.61 4.11M18.8 3.85L18.8 3.2M20.53 4.57L20.99 4.11\" stroke=\"#FFC83D\" stroke-width=\"0.95\" stroke-linecap=\"round\"\/><\/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-6bab9a7\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#cloudflare-cf-clearance\" aria-label=\"Cloudflare Challenge (cf_clearance)\"><\/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 Challenge (cf_clearance)<\/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-8a8a71f\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#hcaptcha\" aria-label=\"hCaptcha\"><\/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=\"M12 3 4.5 6v5.5c0 4.4 3.1 8 7.5 9.5 4.4-1.5 7.5-5.1 7.5-9.5V6z\"\/><path class=\"a\" d=\"M8.9 12l2.2 2.2 4-4.2\"\/><\/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\">hCaptcha<\/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-11a37de\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#aws-waf\" aria-label=\"AWS WAF 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\">\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=\"M12 3 4.5 6v5.5c0 4.4 3.1 8 7.5 9.5 4.4-1.5 7.5-5.1 7.5-9.5V6z\"\/><path class=\"a\" d=\"M8.9 12l2.2 2.2 4-4.2\"\/><\/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\">AWS WAF 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-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-1ab8039\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#datadome\" aria-label=\"DataDome\"><\/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=\"M12 3 4.5 6v5.5c0 4.4 3.1 8 7.5 9.5 4.4-1.5 7.5-5.1 7.5-9.5V6z\"\/><path class=\"a\" d=\"M8.9 12l2.2 2.2 4-4.2\"\/><\/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\">DataDome<\/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-4579e88\" >\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"ekit-wrapper-link\" href=\"#mtcaptcha\" aria-label=\"MTCaptcha\"><\/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=\"M12 3 4.5 6v5.5c0 4.4 3.1 8 7.5 9.5 4.4-1.5 7.5-5.1 7.5-9.5V6z\"\/><path class=\"a\" d=\"M8.9 12l2.2 2.2 4-4.2\"\/><\/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\">MTCaptcha<\/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\/wp-content\/uploads\/2026\/10\/capskip-app-image-captcha.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54f38d1 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/recaptcha-logo.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-54477fc .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/recaptcha-logo.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-dcf51fe .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/recaptcha-logo.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-e55ac41 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/recaptcha-logo.svg\");}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-92657ff .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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>\n<style>\n\/* ---- Cloudflare Challenge (cf_clearance) ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-6bab9a7 .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-6bab9a7 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/cloudflare.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-cloudflare-cf-clearance-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-cloudflare-cf-clearance-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-cloudflare-cf-clearance-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-cloudflare-cf-clearance-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-cloudflare-cf-clearance-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-cloudflare-cf-clearance-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-cloudflare-cf-clearance-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-cloudflare-cf-clearance-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-cloudflare-cf-clearance-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* intro card is dark: show inline code as plain monospace text, not a light badge *\/\n.page-id-22260 .cs-cloudflare-cf-clearance-intro code{background:none !important;border:0 !important;padding:0 !important;color:#FFFFFF !important;font-family:Consolas,Monaco,\"Courier New\",monospace;font-size:0.95em;}\n<\/style>\n<style>\n\/* ---- AWS WAF CAPTCHA ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-11a37de .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-11a37de .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/awswaf.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-aws-waf-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-aws-waf-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-aws-waf-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-aws-waf-intro code{background:none !important;border:0 !important;padding:0 !important;color:#FFFFFF !important;font-family:Consolas,Monaco,\"Courier New\",monospace;font-size:0.95em;}\n.page-id-22260 .cs-aws-waf-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-aws-waf-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-aws-waf-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-aws-waf-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-aws-waf-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-aws-waf-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* ---- DataDome ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-1ab8039 .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-1ab8039 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/DataDome.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-datadome-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-datadome-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-datadome-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-datadome-intro code{background:none !important;border:0 !important;padding:0 !important;color:#FFFFFF !important;font-family:Consolas,Monaco,\"Courier New\",monospace;font-size:0.95em;}\n.page-id-22260 .cs-datadome-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-datadome-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-datadome-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-datadome-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-datadome-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-datadome-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* ---- hCaptcha ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-8a8a71f .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-8a8a71f .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/hCaptcha.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-hcaptcha-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-hcaptcha-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-hcaptcha-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-hcaptcha-intro code{background:none !important;border:0 !important;padding:0 !important;color:#FFFFFF !important;font-family:Consolas,Monaco,\"Courier New\",monospace;font-size:0.95em;}\n.page-id-22260 .cs-hcaptcha-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-hcaptcha-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-hcaptcha-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-hcaptcha-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-hcaptcha-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-hcaptcha-divider.elementor-view-stacked .elementor-icon svg{fill:var( --e-global-color-primary );}\n<\/style>\n<style>\n\/* ---- MTCaptcha ---- *\/\n.page-id-22260 .sticky-navigation .elementor-repeater-item-4579e88 .ekit-stylish-list-content-icon > svg{display:none !important;}\n.page-id-22260 .sticky-navigation .elementor-repeater-item-4579e88 .ekit-stylish-list-content-icon{background-image:url(\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/mtcaptcha.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-mtcaptcha-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-mtcaptcha-intro .elementskit-section-title-wraper .elementskit-section-title{color:#FFFFFF;}\n.page-id-22260 .cs-mtcaptcha-intro .elementskit-section-title-wraper p{color:#FFFFFF;}\n.page-id-22260 .cs-mtcaptcha-intro code{background:none !important;border:0 !important;padding:0 !important;color:#FFFFFF !important;font-family:Consolas,Monaco,\"Courier New\",monospace;font-size:0.95em;}\n.page-id-22260 .cs-mtcaptcha-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-mtcaptcha-divider .elementor-divider-separator{width:100%;}\n.page-id-22260 .cs-mtcaptcha-divider .elementor-divider{padding-block-start:15px;padding-block-end:15px;}\n.page-id-22260 .cs-mtcaptcha-divider .elementor-icon{padding:8px;border-radius:21px;}\n.page-id-22260 .cs-mtcaptcha-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-mtcaptcha-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, CapSolver, NextCaptcha and EzCaptcha, 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, nextcaptcha.com, ez-captcha.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\/wp-content\/uploads\/2026\/10\/capskip-app-image-captcha.svg\" width=\"24\" 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: submit the image using multipart\/form-data<br>\r\nbase64: 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: response is returned as plain text<br>\r\n1: 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: 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\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\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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: 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: indicates reCAPTCHA Enterprise v2.<br>\r\n0: 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: indicates Invisible reCAPTCHA.<br>\r\n0: 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: response is returned as plain text.<br>\r\n1: 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: 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\n<code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON, including the <code>userAgent<\/code> value when one is available.\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-e83a893 elementor-widget elementor-widget-text-editor\" data-id=\"e83a893\" 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>Each token comes with the browser User-Agent it was obtained with. With <code>json=1<\/code> the response includes a <code>userAgent<\/code> field next to <code>request<\/code>. In plain text mode, read the same value from the <code>X-Recaptcha-User-Agent<\/code> response header. If you use the JSON API, <code>getTaskResult<\/code> returns it as <code>solution.userAgent<\/code>. Send this User-Agent when you submit the token, because some sites check that the two match. The field and the header are left out when no User-Agent is available.<\/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-bee02de elementor-widget elementor-widget-shortcode\" data-id=\"bee02de\" 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;03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq...&quot;,\n    &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/140.0.0.0 Safari\/537.36&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-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\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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: 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: 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: indicates reCAPTCHA Enterprise v3.<br>\r\n0: 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: response is returned as plain text.<br>\r\n1: 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-1d6b69f elementor-widget elementor-widget-text-editor\" data-id=\"1d6b69f\" 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>Each token comes with the browser User-Agent it was obtained with. With <code>json=1<\/code> the response includes a <code>userAgent<\/code> field next to <code>request<\/code>. In plain text mode, read the same value from the <code>X-Recaptcha-User-Agent<\/code> response header. If you use the JSON API, <code>getTaskResult<\/code> returns it as <code>solution.userAgent<\/code>. Send this User-Agent when you submit the token, because some sites check that the two match. The field and the header are left out when no User-Agent is available.<\/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-128dc90 elementor-widget elementor-widget-shortcode\" data-id=\"128dc90\" 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;03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq...&quot;,\n    &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/140.0.0.0 Safari\/537.36&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-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: 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\n<code>0<\/code> returns the response as plain text. <code>1<\/code> returns the response as JSON, including the <code>userAgent<\/code> value when one is available.\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\/wp-content\/uploads\/2026\/10\/recaptcha-logo.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: 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: response is returned as plain text.<br>\r\n1: 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 page, with 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: 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-fe73749 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"fe73749\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"cloudflare-cf-clearance\" 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\/10\/cloudflare.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-26548\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/cloudflare.svg\" alt=\"cloudflare challenge solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;Cloudflare Challenge (cf_clearance)<\/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-7cda131 animated-fast cs-cloudflare-cf-clearance-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"7cda131\" 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>Some sites behind Cloudflare stop every visitor at a full page that reads &#8220;Just a moment...&#8221; before showing any content. Passing that page sets a <code>cf_clearance<\/code> cookie, and every later request that carries the cookie is let straight through. CapSkip passes the page for the URL you send and returns the cookie, so a script or tool that has no browser of its own can fetch the site with ordinary HTTP requests.<\/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-5e28530 elementor-widget elementor-widget-text-editor\" data-id=\"5e28530\" 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>This method is for the full page challenge. If the site shows a Turnstile widget inside a form instead, you want a token, not a cookie: see the <strong>Cloudflare Turnstile<\/strong> section above.<\/p><p>Cloudflare binds a <code>cf_clearance<\/code> cookie to the IP address and the User-Agent that earned it. A cookie replayed from a different address, or with a different User-Agent, is refused and the challenge page comes back. That is why every request for this method carries your proxy, and why the answer tells you which User-Agent to send.<\/p><p>The full cycle is four steps:<\/p><ol><li>Turn on <strong>Return cf_clearance cookies<\/strong> in CapSkip (see below).<\/li><li>Submit the page URL and your proxy to <code>\/createTask<\/code>.<\/li><li>Poll <code>\/getTaskResult<\/code> until the cookie is ready.<\/li><li>Send your own requests through the same proxy, with the same User-Agent and the cookie.<\/li><\/ol><p>This method is available on the JSON <code>createTask<\/code> \/ <code>getTaskResult<\/code> API only. The legacy <code>in.php<\/code> \/ <code>res.php<\/code> surface has no cookie mode.<\/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-d5b645f elementor-widget elementor-widget-text-editor\" data-id=\"d5b645f\" 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>Before You Start<\/strong><\/span><\/h5><p>The method is off by default. Open CapSkip, go to <strong>Settings<\/strong>, <strong>Captcha types<\/strong>, <strong>Cloudflare<\/strong>, and turn on <strong>Return cf_clearance cookies<\/strong>. While it is off, every request for this method is refused with <code>ERROR_TASK_NOT_SUPPORTED<\/code>. The switch takes effect on the next request; there is nothing to restart.<\/p><p>Two things are required on every request:<\/p><ul><li><strong>A proxy.<\/strong> The cookie is only valid from the address that earned it, so the request has to name the proxy you will use afterwards. A request without one is refused before any work is done. HTTP, HTTPS, SOCKS5 and SOCKS5H proxies are accepted; SOCKS4 is not.<\/li><li><strong>A matching User-Agent, if you send one.<\/strong> It must be the User-Agent of Chrome for Windows, with the same major version as the Google Chrome installed on the computer running CapSkip. Any other User-Agent would produce a cookie the site rejects, so it is refused up front with an error instead. The simplest choice is to send no User-Agent at all and use the one returned with the cookie.<\/li><\/ul>\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-de48af0 elementor-widget elementor-widget-text-editor\" data-id=\"de48af0\" 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>Task Types<\/strong><\/span><\/h5><p>Three spellings of the same request are accepted, one for each client family that has a cookie mode. They all solve the same way; only the field names and the shape of the answer differ.<\/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-d17edf7 elementor-widget elementor-widget-html\" data-id=\"d17edf7\" 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>Task type<\/strong><\/th><th><strong>Style<\/strong><\/th><th><strong>Supported<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td><code>AntiCloudflareTask<\/code><\/td><td>CapSolver<\/td><td>Yes<\/td><td>Proxy as a single <code>proxy<\/code> string. The answer carries the cookie, a <code>token<\/code> holding the same value, and the User-Agent.<\/td><\/tr>\n<tr><td><code>TurnstileTask<\/code> with <code>cloudflareTaskType<\/code> set to <code>cf_clearance<\/code><\/td><td>CapMonster<\/td><td>Yes<\/td><td>Proxy as separate fields. The answer carries the cookie, plus the User-Agent when the request did not send one.<\/td><\/tr>\n<tr><td><code>TurnstileTask<\/code> without <code>websiteKey<\/code><\/td><td>NextCaptcha<\/td><td>Yes<\/td><td>Proxy as separate fields. Recognised only while NextCaptcha is the selected service. The answer carries the cookie and the User-Agent.<\/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-7003192 elementor-widget elementor-widget-text-editor\" data-id=\"7003192\" 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>AntiCloudflareTask 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-fe49725 elementor-widget elementor-widget-html\" data-id=\"fe49725\" 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>clientKey<\/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>type<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>AntiCloudflareTask<\/code>.<\/td><\/tr>\n<tr><td>websiteURL<\/td><td>String<\/td><td>Yes<\/td><td>The full <code>http<\/code> or <code>https<\/code> URL of the page that shows the challenge.<\/td><\/tr>\n<tr><td>proxy<\/td><td>String<\/td><td>Yes<\/td><td>The proxy to solve through. Accepts <code>IP:PORT:LOGIN:PASSWORD<\/code>, <code>LOGIN:PASSWORD@IP:PORT<\/code>, <code>http:\/\/LOGIN:PASSWORD@IP:PORT<\/code> (also <code>https:\/\/<\/code>, <code>socks5:\/\/<\/code>, <code>socks5h:\/\/<\/code>) and <code>socks5:IP:PORT:LOGIN:PASSWORD<\/code>. Login and password are optional.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent you will send with the cookie. See <strong>Before You Start<\/strong> for what is accepted.<\/td><\/tr>\n<tr><td>html<\/td><td>String<\/td><td>No<\/td><td>Accepted for compatibility and ignored.<\/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-66e1079 elementor-widget elementor-widget-text-editor\" data-id=\"66e1079\" 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>TurnstileTask (cf_clearance) 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-3fd2fed elementor-widget elementor-widget-html\" data-id=\"3fd2fed\" 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>clientKey<\/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>type<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>TurnstileTask<\/code>.<\/td><\/tr>\n<tr><td>cloudflareTaskType<\/td><td>String<\/td><td>Yes<\/td><td>Must be <code>cf_clearance<\/code>. Without it, the task is a Turnstile token request.<\/td><\/tr>\n<tr><td>websiteURL<\/td><td>String<\/td><td>Yes<\/td><td>The full <code>http<\/code> or <code>https<\/code> URL of the page that shows the challenge.<\/td><\/tr>\n<tr><td>websiteKey<\/td><td>String<\/td><td>No<\/td><td>Accepted for compatibility. The page has no sitekey to give, so any value will do.<\/td><\/tr>\n<tr><td>proxyType<\/td><td>String<br>Default: http<\/td><td>No<\/td><td><code>http<\/code>, <code>https<\/code>, <code>socks5<\/code> or <code>socks5h<\/code>.<\/td><\/tr>\n<tr><td>proxyAddress<\/td><td>String<\/td><td>Yes<\/td><td>The proxy IP address or host name.<\/td><\/tr>\n<tr><td>proxyPort<\/td><td>Integer<\/td><td>Yes<\/td><td>The proxy port.<\/td><\/tr>\n<tr><td>proxyLogin<\/td><td>String<\/td><td>No<\/td><td>The proxy login.<\/td><\/tr>\n<tr><td>proxyPassword<\/td><td>String<\/td><td>No<\/td><td>The proxy password. Taken as sent, so characters such as <code>@<\/code> and <code>:<\/code> are fine.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent you will send with the cookie. See <strong>Before You Start<\/strong> for what is accepted.<\/td><\/tr>\n<tr><td>htmlPageBase64<\/td><td>String<\/td><td>No<\/td><td>Accepted for compatibility and ignored.<\/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-243a636 elementor-widget elementor-widget-text-editor\" data-id=\"243a636\" 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 NextCaptcha spelling takes the same <code>proxyType<\/code>, <code>proxyAddress<\/code>, <code>proxyPort<\/code>, <code>proxyLogin<\/code> and <code>proxyPassword<\/code> fields, with <code>type<\/code> set to <code>TurnstileTask<\/code> and no <code>websiteKey<\/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-ad327ec elementor-widget elementor-widget-text-editor\" data-id=\"ad327ec\" 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 a Task<\/strong><\/span><\/h5><p>Submit an HTTP POST request with a JSON body to your CapSkip API endpoint (<code>\/createTask<\/code>).<\/p><p>Submit AntiCloudflareTask:<\/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-31cb399 elementor-widget elementor-widget-shortcode\" data-id=\"31cb399\" 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;clientKey&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;task&quot;: {\n        &quot;type&quot;: &quot;AntiCloudflareTask&quot;,\n        &quot;websiteURL&quot;: &quot;https:\/\/www.example.com\/&quot;,\n        &quot;proxy&quot;: &quot;203.0.113.10:8080:login:password&quot;\n    }\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/createTask\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-1092034 elementor-widget elementor-widget-text-editor\" data-id=\"1092034\" 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 TurnstileTask with <code>cloudflareTaskType<\/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-811d8d1 elementor-widget elementor-widget-shortcode\" data-id=\"811d8d1\" 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;clientKey&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;task&quot;: {\n        &quot;type&quot;: &quot;TurnstileTask&quot;,\n        &quot;cloudflareTaskType&quot;: &quot;cf_clearance&quot;,\n        &quot;websiteURL&quot;: &quot;https:\/\/www.example.com\/&quot;,\n        &quot;websiteKey&quot;: &quot;xxxxxx&quot;,\n        &quot;proxyType&quot;: &quot;http&quot;,\n        &quot;proxyAddress&quot;: &quot;203.0.113.10&quot;,\n        &quot;proxyPort&quot;: 8080,\n        &quot;proxyLogin&quot;: &quot;login&quot;,\n        &quot;proxyPassword&quot;: &quot;password&quot;\n    }\n}&#039; \\\nhttp:\/\/127.0.0.1:8080\/createTask\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-e6a9ea3 elementor-widget elementor-widget-text-editor\" data-id=\"e6a9ea3\" 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 request is accepted, CapSkip returns the task ID. A request made while the setting is off, without a proxy, or with a User-Agent that cannot be used is refused here, on the submit request itself, before any work is done.<\/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-dbf556d elementor-widget elementor-widget-shortcode\" data-id=\"dbf556d\" 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;errorId&quot;: 0,\n    &quot;errorCode&quot;: &quot;&quot;,\n    &quot;errorDescription&quot;: &quot;&quot;,\n    &quot;taskId&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-63ee826 elementor-widget elementor-widget-text-editor\" data-id=\"63ee826\" 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>Getting the Result<\/strong><\/span><\/h5><p>Wait about 5 seconds, then submit an HTTP POST request to <code>\/getTaskResult<\/code> with the task ID. Repeat every few seconds while the status is <code>processing<\/code>. Most pages are passed within 5 to 20 seconds; a slow proxy adds to 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-5d6499a elementor-widget elementor-widget-shortcode\" data-id=\"5d6499a\" 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;{&quot;clientKey&quot;: &quot;YOUR_API_KEY&quot;, &quot;taskId&quot;: &quot;2122988149&quot;}&#039; \\\nhttp:\/\/127.0.0.1:8080\/getTaskResult\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-e94bbe1 elementor-widget elementor-widget-shortcode\" data-id=\"e94bbe1\" 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;errorId&quot;: 0,\n    &quot;taskId&quot;: &quot;2122988149&quot;,\n    &quot;status&quot;: &quot;processing&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-b6dc793 elementor-widget elementor-widget-text-editor\" data-id=\"b6dc793\" 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>Ready answer for <code>AntiCloudflareTask<\/code>. <code>token<\/code> holds the same value as the cookie:<\/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-5126031 elementor-widget elementor-widget-shortcode\" data-id=\"5126031\" 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;errorId&quot;: 0,\n    &quot;errorCode&quot;: &quot;&quot;,\n    &quot;errorDescription&quot;: &quot;&quot;,\n    &quot;taskId&quot;: &quot;2122988149&quot;,\n    &quot;solution&quot;: {\n        &quot;cookies&quot;: {\n            &quot;cf_clearance&quot;: &quot;3gBq2EXAMPLE9vRk7pT0c1aZ.uWx4yNq8mLs-1792066388-1.2.1.1-Qx7aEXAMPLEpZ0kR3vT9wYb2&quot;\n        },\n        &quot;token&quot;: &quot;3gBq2EXAMPLE9vRk7pT0c1aZ.uWx4yNq8mLs-1792066388-1.2.1.1-Qx7aEXAMPLEpZ0kR3vT9wYb2&quot;,\n        &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/155.0.0.0 Safari\/537.36&quot;\n    },\n    &quot;status&quot;: &quot;ready&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-349f475 elementor-widget elementor-widget-text-editor\" data-id=\"349f475\" 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>Ready answer for <code>TurnstileTask<\/code> with <code>cloudflareTaskType<\/code>. When the request sent its own <code>userAgent<\/code>, the solution is the cookie alone, because the cookie is bound to the User-Agent you sent. When it did not, <code>userAgent<\/code> is added so you know which one to use:<\/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-1a33b94 elementor-widget elementor-widget-shortcode\" data-id=\"1a33b94\" 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;errorId&quot;: 0,\n    &quot;errorCode&quot;: &quot;&quot;,\n    &quot;errorDescription&quot;: &quot;&quot;,\n    &quot;taskId&quot;: &quot;2122988149&quot;,\n    &quot;solution&quot;: {\n        &quot;cf_clearance&quot;: &quot;3gBq2EXAMPLE9vRk7pT0c1aZ.uWx4yNq8mLs-1792066388-1.2.1.1-Qx7aEXAMPLEpZ0kR3vT9wYb2&quot;,\n        &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/155.0.0.0 Safari\/537.36&quot;\n    },\n    &quot;status&quot;: &quot;ready&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-8747e1a elementor-widget elementor-widget-text-editor\" data-id=\"8747e1a\" 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 NextCaptcha spelling answers with <code>cf_clearance<\/code> and <code>userAgent<\/code> side by side in <code>solution<\/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-6d874fb elementor-widget elementor-widget-text-editor\" data-id=\"6d874fb\" 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>Using the Cookie<\/strong><\/span><\/h5><p>Send the cookie with every request to the site, through the <strong>same proxy<\/strong> and with the <strong>same User-Agent<\/strong>. Change either one and Cloudflare shows the challenge page again.<\/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-8efce6f elementor-widget elementor-widget-shortcode\" data-id=\"8efce6f\" 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 &quot;http:\/\/login:password@203.0.113.10:8080&quot; \\\n-A &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/155.0.0.0 Safari\/537.36&quot; \\\n-b &quot;cf_clearance=3gBq2EXAMPLE9vRk7pT0c1aZ.uWx4yNq8mLs-1792066388-1.2.1.1-Qx7aEXAMPLEpZ0kR3vT9wYb2&quot; \\\nhttps:\/\/www.example.com\/\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-e9e8b23 elementor-widget elementor-widget-text-editor\" data-id=\"e9e8b23\" 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 cookie lasts as long as the site&#8217;s own Cloudflare settings allow, often 30 minutes and sometimes much longer. When the challenge page comes back, submit a new task. If you rotate proxies, solve once per proxy: a cookie earned on one address does not carry over to another.<\/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-82b3fa3 elementor-widget elementor-widget-text-editor\" data-id=\"82b3fa3\" 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>Errors<\/strong><\/span><\/h5><p>Refusals arrive on the <code>createTask<\/code> request. Solve failures arrive on <code>getTaskResult<\/code> with <code>status<\/code> set to <code>failed<\/code>. With NextCaptcha selected, the codes and HTTP statuses follow NextCaptcha&#8217;s own error table 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-e3733c4 elementor-widget elementor-widget-html\" data-id=\"e3733c4\" 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>Code<\/strong><\/th><th><strong>Meaning<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td><code>ERROR_TASK_NOT_SUPPORTED<\/code><\/td><td><strong>Return cf_clearance cookies<\/strong> is off in CapSkip.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_MISSING<\/code><\/td><td><code>TurnstileTask<\/code> spelling: no usable proxy in the request.<\/td><\/tr>\n<tr><td><code>ERROR_WRONG_USERAGENT<\/code><\/td><td><code>TurnstileTask<\/code> spelling: the User-Agent is not Chrome for Windows with the same major version as the Google Chrome installed on the CapSkip computer.<\/td><\/tr>\n<tr><td><code>ERROR_BAD_PARAMETERS<\/code><\/td><td><code>AntiCloudflareTask<\/code> spelling: no usable proxy or an unusable User-Agent. Either spelling: <code>websiteURL<\/code> is missing.<\/td><\/tr>\n<tr><td><code>ERROR_PAGEURL<\/code><\/td><td><code>websiteURL<\/code> is not a full <code>http<\/code> or <code>https<\/code> URL.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_BANNED<\/code><\/td><td>Cloudflare blocked the proxy address outright. Use a different proxy.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_CONNECT_REFUSED<\/code><\/td><td>The page could not be reached through the proxy. Check that the proxy is up and the login is right.<\/td><\/tr>\n<tr><td><code>ERROR_CAPTCHA_UNSOLVABLE<\/code><\/td><td>No cookie was obtained in time, or the page showed no Cloudflare challenge at all (<code>errorDescription<\/code> then reads &#8220;No Cloudflare challenge on this page&#8221;). Submit a new task to retry.<\/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-8b07622 elementor-widget-divider--view-line_icon elementor-view-stacked cs-cloudflare-cf-clearance-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"8b07622\" 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-7c210cf sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"7c210cf\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"hcaptcha\" 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\/11\/hCaptcha.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27219\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/hCaptcha.svg\" alt=\"hcaptcha solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;hCaptcha<\/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-4f8719a animated-fast cs-hcaptcha-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"4f8719a\" 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>hCaptcha is a CAPTCHA widget used by many sign-up, login and checkout forms. The visitor ticks a checkbox, sometimes answers a picture challenge, and the widget then puts a token in the form. The site checks that token with hCaptcha before it accepts the form. CapSkip passes the widget for the sitekey and page you send and returns the token, ready to submit with the form. hCaptcha Enterprise and invisible widgets use the same method.<\/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-f06f730 elementor-widget elementor-widget-text-editor\" data-id=\"f06f730\" 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><ol><li>Find the sitekey of the hCaptcha widget on the target page (see below).<\/li><li>Submit the sitekey and the page URL to <code>\/in.php<\/code> with <code>method=hcaptcha<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the token is ready.<\/li><li>Put the token in the form, or pass it to the page&#8217;s callback, and submit the form.<\/li><\/ol><p>A solve usually takes between 10 and 30 seconds. Poll every 5 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-49777eb elementor-widget elementor-widget-text-editor\" data-id=\"49777eb\" 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>Finding the Sitekey<\/strong><\/span><\/h5><p>The sitekey is a public identifier, the same for every visitor of the page. Most pages carry it on the widget container as <code>data-sitekey<\/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-63fdac7 elementor-widget elementor-widget-shortcode\" data-id=\"63fdac7\" 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;h-captcha&quot; data-sitekey=&quot;a5f74b19-9e45-40e0-b45d-47ff91b7a6c2&quot;&gt;&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-73bc8f8 elementor-widget elementor-widget-text-editor\" data-id=\"73bc8f8\" 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>When a page builds the widget with a script, look for the <code>sitekey<\/code> option of <code>hcaptcha.render()<\/code>, or for the <code>sitekey=<\/code> parameter in the address of the hCaptcha iframe. A widget with <code>data-size=\"invisible\"<\/code> is invisible: send <code>invisible=1<\/code> for it.<\/p><p>Some hCaptcha Enterprise sites also pass an <code>rqdata<\/code> value to the widget, through <code>hcaptcha.setData()<\/code>, before it runs. If the page does this, send that value as <code>data<\/code>. It is issued by the site for one challenge and expires quickly, so fetch a fresh one for every 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-824bcae elementor-widget elementor-widget-text-editor\" data-id=\"824bcae\" 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-7c66744 elementor-widget elementor-widget-html\" data-id=\"7c66744\" 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>hcaptcha<\/code>. Specifies that you are submitting an hCaptcha.<\/td><\/tr>\n<tr><td>sitekey<\/td><td>String<\/td><td>Yes<\/td><td>The sitekey of the hCaptcha widget.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget is on.<\/td><\/tr>\n<tr><td>invisible<\/td><td>Integer<br>Default: 0<\/td><td>No<\/td><td><code>1<\/code> for an invisible widget.<\/td><\/tr>\n<tr><td>data<\/td><td>String<\/td><td>No<\/td><td>The <code>rqdata<\/code> value of an hCaptcha Enterprise widget, when the site sets one.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent you will submit the form with. CapSkip uses it only when it matches the browser CapSkip solves with. The reply always names the User-Agent the token was earned with.<\/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-cbb3801 elementor-widget elementor-widget-text-editor\" data-id=\"cbb3801\" 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. One address is fine for testing and for occasional solves. Past that, hCaptcha scores the network a token comes from as well as the browser, and a steady stream of solves from one IP is what its rate limits and reputation checks are built to catch. At volume, configure a proxy pool under <strong>Settings<\/strong>, <strong>Captcha types<\/strong>, <strong>hCaptcha<\/strong>, <strong>Configure Proxies<\/strong>, or send a proxy with each task when the solve has to come from a particular network. A proxy sent with a task always takes priority over the list.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=hcaptcha<\/code>. Form fields, a query string and a JSON body are all accepted under identical field names.<\/p><p>Submit hCaptcha:<\/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-173d62a elementor-widget elementor-widget-shortcode\" data-id=\"173d62a\" 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=hcaptcha&quot; \\\n-d &quot;sitekey=a5f74b19-9e45-40e0-b45d-47ff91b7a6c2&quot; \\\n--data-urlencode &quot;pageurl=https:\/\/accounts.hcaptcha.com\/demo&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-7c893b7 elementor-widget elementor-widget-text-editor\" data-id=\"7c893b7\" 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-894d85b elementor-widget elementor-widget-shortcode\" data-id=\"894d85b\" 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-87733f8 elementor-widget elementor-widget-text-editor\" data-id=\"87733f8\" 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 error code on the submit request itself, before any work is done:<\/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-d6e57c7 elementor-widget elementor-widget-html\" data-id=\"d6e57c7\" 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>Error<\/strong><\/th><th><strong>Cause<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>ERROR_RECAPTCHA_INVALID_SITEKEY<\/td><td><code>sitekey<\/code> is missing or empty.<\/td><\/tr>\n<tr><td>ERROR_PAGEURL<\/td><td><code>pageurl<\/code> is missing or is not an <code>http<\/code> or <code>https<\/code> address.<\/td><\/tr>\n<tr><td>ERROR_PROXY_FORMAT<\/td><td>The proxy value could not be read.<\/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-f3c8d97 elementor-widget elementor-widget-text-editor\" data-id=\"f3c8d97\" 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>Wait approximately 10 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-99d51f8 elementor-widget elementor-widget-text-editor\" data-id=\"99d51f8\" 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-415785c elementor-widget elementor-widget-html\" data-id=\"415785c\" 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-f85bc68 elementor-widget elementor-widget-shortcode\" data-id=\"f85bc68\" 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-673c449 elementor-widget elementor-widget-text-editor\" data-id=\"673c449\" 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 widget has been passed, CapSkip returns the token:<\/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-9e5cdc7 elementor-widget elementor-widget-shortcode\" data-id=\"9e5cdc7\" 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;P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.hadwYXNza2V5xQZ2...f3Kq8nV2&quot;,\n    &quot;respKey&quot;: &quot;E0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjA0...9wB1&quot;,\n    &quot;useragent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/156.0.0.0 Safari\/537.36&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-5bc419a elementor-widget elementor-widget-text-editor\" data-id=\"5bc419a\" 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> is the token. <code>respKey<\/code> is the second value hCaptcha hands the widget along with the token; most sites never read it, and it can be empty. <code>useragent<\/code> is the User-Agent the token was earned with.<\/p><p>Without <code>json=1<\/code>, the token follows the <code>OK|<\/code> prefix as plain text, and the User-Agent arrives in the <code>X-HCaptcha-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-8f213c2 elementor-widget elementor-widget-shortcode\" data-id=\"8f213c2\" 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|P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.hadwYXNza2V5xQZ2...f3Kq8nV2\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-a46b0c3 elementor-widget elementor-widget-text-editor\" data-id=\"a46b0c3\" 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 widget has not yet been passed, 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, so keep it from the reply that carried it.<\/p><p>A task that could not be solved returns <code>ERROR_CAPTCHA_UNSOLVABLE<\/code>. Two failures name their cause instead, because resubmitting the same task would fail again: <code>ERROR_RECAPTCHA_INVALID_SITEKEY<\/code> when hCaptcha refused the sitekey for that page, so check the sitekey and the <code>pageurl<\/code>, and <code>ERROR_PROXY_CONNECT_REFUSED<\/code> when the proxy could not be reached.<\/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-d4446b2 elementor-widget elementor-widget-text-editor\" data-id=\"d4446b2\" 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>JSON API (createTask)<\/strong><\/span><\/h5><p>hCaptcha is also accepted on <code>\/createTask<\/code>, with the result read from <code>\/getTaskResult<\/code>. Four task types are recognised: <code>HCaptchaTaskProxyless<\/code> and <code>HCaptchaEnterpriseTaskProxyless<\/code> solve without a proxy of yours, <code>HCaptchaTask<\/code> and <code>HCaptchaEnterpriseTask<\/code> take one. All four are solved the same way.<\/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-466cd62 elementor-widget elementor-widget-html\" data-id=\"466cd62\" 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>type<\/td><td>String<\/td><td>Yes<\/td><td>One of the four task types above.<\/td><\/tr>\n<tr><td>websiteURL<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget is on.<\/td><\/tr>\n<tr><td>websiteKey<\/td><td>String<\/td><td>Yes<\/td><td>The sitekey of the hCaptcha widget.<\/td><\/tr>\n<tr><td>isInvisible<\/td><td>Boolean<\/td><td>No<\/td><td><code>true<\/code> for an invisible widget.<\/td><\/tr>\n<tr><td>enterprisePayload<\/td><td>Object<\/td><td>No<\/td><td>An object carrying <code>rqdata<\/code>, for hCaptcha Enterprise. A flat <code>rqdata<\/code> field is accepted too.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>As for <code>in.php<\/code> above.<\/td><\/tr>\n<tr><td>proxy<\/td><td>String<\/td><td>No<\/td><td>Proxy as a single string, or the <code>proxyType<\/code>, <code>proxyAddress<\/code>, <code>proxyPort<\/code>, <code>proxyLogin<\/code> and <code>proxyPassword<\/code> fields.<\/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-7c40f1b elementor-widget elementor-widget-shortcode\" data-id=\"7c40f1b\" 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 http:\/\/127.0.0.1:8080\/createTask \\\n-H &quot;Content-Type: application\/json&quot; \\\n-d &#039;{\n    &quot;clientKey&quot;: &quot;YOUR_API_KEY&quot;,\n    &quot;task&quot;: {\n        &quot;type&quot;: &quot;HCaptchaTaskProxyless&quot;,\n        &quot;websiteURL&quot;: &quot;https:\/\/accounts.hcaptcha.com\/demo&quot;,\n        &quot;websiteKey&quot;: &quot;a5f74b19-9e45-40e0-b45d-47ff91b7a6c2&quot;\n    }\n}&#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-9519a23 elementor-widget elementor-widget-text-editor\" data-id=\"9519a23\" 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 solution carries the token twice, under <code>gRecaptchaResponse<\/code> and <code>token<\/code>, so clients written for either name read it unchanged:<\/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-99b7172 elementor-widget elementor-widget-shortcode\" data-id=\"99b7172\" 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;errorId&quot;: 0,\n    &quot;status&quot;: &quot;ready&quot;,\n    &quot;solution&quot;: {\n        &quot;gRecaptchaResponse&quot;: &quot;P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.hadwYXNza2V5xQZ2...f3Kq8nV2&quot;,\n        &quot;token&quot;: &quot;P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.hadwYXNza2V5xQZ2...f3Kq8nV2&quot;,\n        &quot;respKey&quot;: &quot;E0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjA0...9wB1&quot;,\n        &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/156.0.0.0 Safari\/537.36&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-18ff77d elementor-widget elementor-widget-text-editor\" data-id=\"18ff77d\" 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 failed task carries the same error codes as on <code>res.php<\/code>, in <code>errorCode<\/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-567c428 elementor-widget elementor-widget-text-editor\" data-id=\"567c428\" 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>On the page, the widget writes its token into a hidden <code>textarea<\/code> named <code>h-captcha-response<\/code> (and a copy named <code>g-recaptcha-response<\/code>) inside the form. Put the token you received in both fields and submit the form. If the widget was rendered with a <code>data-callback<\/code>, call that function with the token instead, 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-d9b000a elementor-widget elementor-widget-shortcode\" data-id=\"d9b000a\" 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.querySelector(&#039;[name=&quot;h-captcha-response&quot;]&#039;).value = token;\nconst g = document.querySelector(&#039;[name=&quot;g-recaptcha-response&quot;]&#039;);\nif (g) g.value = token;\n\/\/ or, when the widget has a data-callback:\nwindow[callbackName](token);\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-e578f90 elementor-widget elementor-widget-text-editor\" data-id=\"e578f90\" 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>When you post the form without a browser, send the token as the <code>h-captcha-response<\/code> field (and <code>g-recaptcha-response<\/code>, if the form has one), with the User-Agent from the reply.<\/p><p>hCaptcha tokens are single use and expire about two minutes after they are issued. Submit each token soon after you receive it, and request a new one for every form 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-7b2fc57 elementor-widget elementor-widget-text-editor\" data-id=\"7b2fc57\" 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>Strict Sitekeys<\/strong><\/span><\/h5><p>Some sites, hCaptcha Enterprise ones in particular, refuse tokens that hCaptcha scored as risky, even though the widget was passed. If a site rejects tokens CapSkip returned, turn on <strong>High score mode for hCaptcha<\/strong> under <strong>Settings<\/strong>, <strong>Captcha types<\/strong>, <strong>hCaptcha<\/strong>. It requires Google Chrome to be installed on the computer running CapSkip. Use a good proxy as well, and submit the form from the same address and with the User-Agent the reply names.<\/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-86f97c0 elementor-widget-divider--view-line_icon elementor-view-stacked cs-hcaptcha-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"86f97c0\" 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-b7594dd sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"b7594dd\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"aws-waf\" 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\/10\/awswaf.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27096\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/10\/awswaf.svg\" alt=\"aws waf captcha solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;AWS WAF 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-c8981cf animated-fast cs-aws-waf-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"c8981cf\" 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>AWS WAF CAPTCHA is the puzzle Amazon Web Services shows when a site&#8217;s firewall wants proof that a visitor is human: usually a grid of nine pictures with an instruction such as &#8220;Choose all the curtains&#8221;, sometimes a small toy car to steer to the end of a path. Passing it earns an <code>aws-waf-token<\/code> cookie. Send CapSkip the values from the protected page and it returns the result that turns into that cookie.<\/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-41c7a7f elementor-widget elementor-widget-text-editor\" data-id=\"41c7a7f\" 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>Sites meet AWS WAF CAPTCHA in one of two shapes, and both are handled by this method:<\/p><ul><li><strong>The challenge page.<\/strong> The firewall answers the request with HTTP status <code>405<\/code> and a small page instead of the content. That page carries a <code>window.gokuProps<\/code> object and loads <code>challenge.js<\/code> and <code>captcha.js<\/code> from an <code>awswaf.com<\/code> host.<\/li><li><strong>The JS-API widget.<\/strong> An ordinary page, for example a contact or download form, loads <code>jsapi.js<\/code> and draws the puzzle itself with <code>AwsWafCaptcha.renderCaptcha<\/code>.<\/li><\/ul><p>The full cycle is four steps:<\/p><ol><li>Read the values listed below from the protected page.<\/li><li>Submit them to <code>\/in.php<\/code> with <code>method=amazon_waf<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the answer is ready.<\/li><li>Exchange the answer for the <code>aws-waf-token<\/code> and send it with your requests to the site.<\/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-a96e092 elementor-widget elementor-widget-text-editor\" data-id=\"a96e092\" 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 Values on a Challenge Page<\/strong><\/span><\/h5><p>Request the protected URL and keep the body of the <code>405<\/code> response, or open it in a browser and use <strong>View Page Source<\/strong>. Everything you need is in the HTML:<\/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-429c87e elementor-widget elementor-widget-shortcode\" data-id=\"429c87e\" 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;script&gt;\n  window.gokuProps = {\n    &quot;key&quot;: &quot;AQIDAHjcYuEXAMPLEghicBgQ\/7bFaQZ+m5FKCMDnO+vTbNg96AHDh0IR5vgzHNceHYqZR+GOAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM...&quot;,\n    &quot;iv&quot;: &quot;CgAFRDIjfgAAA5yY&quot;,\n    &quot;context&quot;: &quot;Rbp3r8fvbuhmrCqpUe8Mh1TLvs8OSKJZiSs2vCF4dt9rxVZI7xYJa2n5k\/9r+XaXe7KUIu2I8nXTDHHkDvIOTDc2...&quot;\n  };\n&lt;\/script&gt;\n&lt;script src=&quot;https:\/\/3f2a9c7d41b0.edge.sdk.awswaf.com\/3f2a9c7d41b0\/8e51d0c7a2f4\/challenge.js&quot;&gt;&lt;\/script&gt;\n&lt;script src=&quot;https:\/\/3f2a9c7d41b0.edge.sdk.awswaf.com\/3f2a9c7d41b0\/8e51d0c7a2f4\/captcha.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-1bd0d67 elementor-widget elementor-widget-html\" data-id=\"1bd0d67\" 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>Value on the page<\/strong><\/th><th><strong>Send it as<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>gokuProps.key<\/td><td><code>sitekey<\/code>. The long key that usually starts with <code>AQIDAH<\/code>. It identifies the site&#8217;s firewall configuration.<\/td><\/tr>\n<tr><td>gokuProps.iv<\/td><td><code>iv<\/code>. Changes with every challenge page.<\/td><\/tr>\n<tr><td>gokuProps.context<\/td><td><code>context<\/code>. Changes with every challenge page, together with <code>iv<\/code>.<\/td><\/tr>\n<tr><td>challenge.js URL<\/td><td><code>challenge_script<\/code>. The full address of the script, as it appears in the <code>src<\/code> attribute.<\/td><\/tr>\n<tr><td>captcha.js URL<\/td><td><code>captcha_script<\/code>. The full address of the script, as it appears in the <code>src<\/code> attribute.<\/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-41a7747 elementor-widget elementor-widget-text-editor\" data-id=\"41a7747\" 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>Only <code>sitekey<\/code> and <code>pageurl<\/code> are required. <code>iv<\/code> and <code>context<\/code> belong together: send both or neither. Any of these values you leave out is read from <code>pageurl<\/code> at solve time, which is the safer choice when your copy of the page is more than a few minutes old.<\/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-edb89c3 elementor-widget elementor-widget-text-editor\" data-id=\"edb89c3\" 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 Values on a Widget Page<\/strong><\/span><\/h5><p>Open the page that shows the puzzle and look in its source, or in the Network tab of the browser developer tools, for the <code>jsapi.js<\/code> script and the <code>renderCaptcha<\/code> call:<\/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-c670ac2 elementor-widget elementor-widget-shortcode\" data-id=\"c670ac2\" 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;script src=&quot;https:\/\/5b7e0a19c3d8.us-east-1.captcha-sdk.awswaf.com\/5b7e0a19c3d8\/jsapi.js&quot;&gt;&lt;\/script&gt;\n&lt;script&gt;\n  AwsWafCaptcha.renderCaptcha(document.getElementById(&quot;captcha&quot;), {\n    apiKey: &quot;Xr9kEXAMPLE2bWQx1vTq8LmZ0aYc4dHs7nFp3gJt6uKw5eRi...9AbCdEfGh=_0_1&quot;,\n    onSuccess: function (wafToken) { \/* ... *\/ }\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-dc5f281 elementor-widget elementor-widget-html\" data-id=\"dc5f281\" 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>Value on the page<\/strong><\/th><th><strong>Send it as<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>apiKey<\/td><td><code>sitekey<\/code>. A long key that ends in a short suffix such as <code>_0_1<\/code>. Some sites keep it in a separate JavaScript bundle rather than in the HTML, so search the loaded scripts for <code>apiKey<\/code> if it is not in the page.<\/td><\/tr>\n<tr><td>jsapi.js URL<\/td><td><code>jsapiScript<\/code>. The full address of the script, as it appears in the <code>src<\/code> attribute.<\/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-3b19ae0 elementor-widget elementor-widget-text-editor\" data-id=\"3b19ae0\" 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 widget page has no <code>gokuProps<\/code>, so send no <code>iv<\/code> or <code>context<\/code>. Sending <code>jsapiScript<\/code> without them is what marks the request as a widget solve.<\/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-3a93c8e elementor-widget elementor-widget-text-editor\" data-id=\"3a93c8e\" 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>AWS WAF decides which puzzle to show. You do not need to tell CapSkip which one to expect.<\/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-5a14bd6 elementor-widget elementor-widget-html\" data-id=\"5a14bd6\" 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>Looks like<\/strong><\/th><th><strong>Supported<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>Image grid<\/td><td>3 x 3 tiles<\/td><td>Yes<\/td><td>Nine pictures and an instruction such as &#8220;Choose all the beds&#8221;, finished with a <strong>Confirm<\/strong> button. The usual puzzle.<\/td><\/tr>\n<tr><td>Toy car<\/td><td>One picture<\/td><td>Yes<\/td><td>A toy car on a small road map, to be moved to the end of its path.<\/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-ef4a425 elementor-widget elementor-widget-text-editor\" data-id=\"ef4a425\" 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>Now and then a puzzle cannot be answered and the result is <code>ERROR_CAPTCHA_UNSOLVABLE<\/code>. Submit a new task: every attempt draws a fresh puzzle.<\/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-81aa729 elementor-widget elementor-widget-text-editor\" data-id=\"81aa729\" 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-2e39b0d elementor-widget elementor-widget-html\" data-id=\"2e39b0d\" 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>amazon_waf<\/code>. Specifies that you are submitting an AWS WAF CAPTCHA.<\/td><\/tr>\n<tr><td>sitekey<\/td><td>String<\/td><td>Yes<\/td><td>The <code>gokuProps.key<\/code> of a challenge page, or the widget&#8217;s <code>apiKey<\/code>.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full <code>http<\/code> or <code>https<\/code> URL of the page protected by AWS WAF.<\/td><\/tr>\n<tr><td>iv<\/td><td>String<\/td><td>No<\/td><td>The <code>gokuProps.iv<\/code> of a challenge page. Send it together with <code>context<\/code>, or leave both out.<\/td><\/tr>\n<tr><td>context<\/td><td>String<\/td><td>No<\/td><td>The <code>gokuProps.context<\/code> of a challenge page. Send it together with <code>iv<\/code>, or leave both out.<\/td><\/tr>\n<tr><td>challenge_script<\/td><td>String<\/td><td>No<\/td><td>The full URL of the page&#8217;s <code>challenge.js<\/code>.<\/td><\/tr>\n<tr><td>captcha_script<\/td><td>String<\/td><td>No<\/td><td>The full URL of the page&#8217;s <code>captcha.js<\/code>.<\/td><\/tr>\n<tr><td>jsapiScript<\/td><td>String<\/td><td>No<\/td><td>Widget pages only: the full URL of <code>jsapi.js<\/code>.<\/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>. <code>SOCKS4<\/code> is not accepted.<\/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-bd3f33e elementor-widget elementor-widget-text-editor\" data-id=\"bd3f33e\" 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>Every script URL you send must point to an <code>awswaf.com<\/code> host. A script from anywhere else is refused, because it is not an AWS WAF integration.<\/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-fa15982 elementor-widget elementor-widget-text-editor\" data-id=\"fa15982\" 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>Proxies<\/strong><\/span><\/h5><p>CapSkip does not force a proxy for this method, and one address is fine for testing and for occasional solves. Past that you need proxies. Sites protected by AWS WAF usually pair the CAPTCHA with rate limits and IP reputation rules, so a steady stream of solves from one address soon draws harder treatment and then outright blocks. Configure a proxy list for AWS WAF in CapSkip&#8217;s <strong>Settings<\/strong> and let it spread the load, or send a per-request <code>proxy<\/code> when the token has to come from a particular network.<\/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-debd7fd elementor-widget elementor-widget-text-editor\" data-id=\"debd7fd\" 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 a Task<\/strong><\/span><\/h5><p>Submit an HTTP POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=amazon_waf<\/code>. Form fields, a JSON body and a <code>GET<\/code> query string are all accepted under the same field names. The keys contain <code>+<\/code>, <code>\/<\/code> and <code>=<\/code>, so URL-encode them when you send form fields.<\/p><p>Submit a challenge 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-dc7cbee elementor-widget elementor-widget-shortcode\" data-id=\"dc7cbee\" 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--data-urlencode &quot;key=YOUR_API_KEY&quot; \\\n--data-urlencode &quot;method=amazon_waf&quot; \\\n--data-urlencode &quot;sitekey=AQIDAHjcYuEXAMPLEghicBgQ\/7bFaQZ+m5FKCMDnO+vTbNg96AHDh0IR5vgzHNceHYqZR+GOAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM...&quot; \\\n--data-urlencode &quot;iv=CgAFRDIjfgAAA5yY&quot; \\\n--data-urlencode &quot;context=Rbp3r8fvbuhmrCqpUe8Mh1TLvs8OSKJZiSs2vCF4dt9rxVZI7xYJa2n5k\/9r+XaXe7KUIu2I8nXTDHHkDvIOTDc2...&quot; \\\n--data-urlencode &quot;challenge_script=https:\/\/3f2a9c7d41b0.edge.sdk.awswaf.com\/3f2a9c7d41b0\/8e51d0c7a2f4\/challenge.js&quot; \\\n--data-urlencode &quot;pageurl=https:\/\/www.example.com\/&quot; \\\n--data-urlencode &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-76311af elementor-widget elementor-widget-text-editor\" data-id=\"76311af\" 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 a widget page (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-8366480 elementor-widget elementor-widget-shortcode\" data-id=\"8366480\" 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;amazon_waf&quot;,\n    &quot;sitekey&quot;: &quot;Xr9kEXAMPLE2bWQx1vTq8LmZ0aYc4dHs7nFp3gJt6uKw5eRi...9AbCdEfGh=_0_1&quot;,\n    &quot;jsapiScript&quot;: &quot;https:\/\/5b7e0a19c3d8.us-east-1.captcha-sdk.awswaf.com\/5b7e0a19c3d8\/jsapi.js&quot;,\n    &quot;pageurl&quot;: &quot;https:\/\/www.example.com\/contact&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-bd06364 elementor-widget elementor-widget-text-editor\" data-id=\"bd06364\" 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>. With <code>json=1<\/code>, the response is a JSON envelope 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-65bc085 elementor-widget elementor-widget-shortcode\" data-id=\"65bc085\" 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-21a63b2 elementor-widget elementor-widget-text-editor\" data-id=\"21a63b2\" 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 missing <code>sitekey<\/code>, an unusable <code>pageurl<\/code>, an <code>iv<\/code> without <code>context<\/code> (or the other way round) and a malformed proxy are refused on this request, before any work is done.<\/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-2023850 elementor-widget elementor-widget-text-editor\" data-id=\"2023850\" 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>Getting the Result<\/strong><\/span><\/h5><p>Wait about 5 seconds, then submit an HTTP GET request to <code>\/res.php<\/code> with the CAPTCHA ID. Repeat every 5 seconds while the answer is <code>CAPCHA_NOT_READY<\/code>. Most tasks are ready within 15 seconds; a slow proxy adds to 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-7d38afe elementor-widget elementor-widget-html\" data-id=\"7d38afe\" 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-a84390e elementor-widget elementor-widget-shortcode\" data-id=\"a84390e\" 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-18d12af elementor-widget elementor-widget-text-editor\" data-id=\"18d12af\" 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 answer is two values, so <code>request<\/code> is an object rather than a string:<\/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-6fae79d elementor-widget elementor-widget-shortcode\" data-id=\"6fae79d\" 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;captcha_voucher&quot;: &quot;eyJ2b3VjaGVyIjoiRVhBTVBMRSJ9.9QwZcEXAMPLEvoucherJk4LmN0pQ&quot;,\n        &quot;existing_token&quot;: &quot;7d4c2a91-EXAMPLE-4f0b-9e6d-3a1b5c8e2f70:EQoAeXAMPLEtokenAAAA:Wm9wc2E=&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-166825e elementor-widget elementor-widget-text-editor\" data-id=\"166825e\" 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 object follows <code>OK|<\/code> on one line:<\/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-6107c80 elementor-widget elementor-widget-shortcode\" data-id=\"6107c80\" 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;captcha_voucher&quot;:&quot;eyJ2b3VjaGVyIjoiRVhBTVBMRSJ9.9QwZcEXAMPLEvoucherJk4LmN0pQ&quot;,&quot;existing_token&quot;:&quot;7d4c2a91-EXAMPLE-4f0b-9e6d-3a1b5c8e2f70:EQoAeXAMPLEtokenAAAA:Wm9wc2E=&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-1318f7c elementor-widget elementor-widget-html\" data-id=\"1318f7c\" 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>Field<\/strong><\/th><th><strong>Meaning<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>captcha_voucher<\/td><td>Proof from AWS WAF that the puzzle was answered.<\/td><\/tr>\n<tr><td>existing_token<\/td><td>The token the voucher was issued for. The two only work as a pair.<\/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-e396809 elementor-widget elementor-widget-text-editor\" data-id=\"e396809\" 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 task failed, <code>\/res.php<\/code> returns <code>ERROR_CAPTCHA_UNSOLVABLE<\/code>, or the replacement error text configured in CapSkip. Submit a new task to retry.<\/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-eb2e0db elementor-widget elementor-widget-text-editor\" data-id=\"eb2e0db\" 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>Turning the Voucher into the Cookie<\/strong><\/span><\/h5><p>AWS WAF trades the pair for the finished <code>aws-waf-token<\/code> on its own token host: the host and folder <code>challenge.js<\/code> is loaded from. On a widget page, find that <code>challenge.js<\/code> request in the Network tab; <code>jsapi.js<\/code> loads it for you. Replace <code>challenge.js<\/code> with <code>voucher<\/code> and POST the pair as JSON:<\/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-45218b1 elementor-widget elementor-widget-shortcode\" data-id=\"45218b1\" 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: text\/plain;charset=UTF-8&quot; \\\n-H &quot;Origin: https:\/\/www.example.com&quot; \\\n-d &#039;{&quot;captcha_voucher&quot;:&quot;eyJ2b3VjaGVyIjoiRVhBTVBMRSJ9.9QwZcEXAMPLEvoucherJk4LmN0pQ&quot;,&quot;existing_token&quot;:&quot;7d4c2a91-EXAMPLE-4f0b-9e6d-3a1b5c8e2f70:EQoAeXAMPLEtokenAAAA:Wm9wc2E=&quot;}&#039; \\\nhttps:\/\/3f2a9c7d41b0.edge.sdk.awswaf.com\/3f2a9c7d41b0\/8e51d0c7a2f4\/voucher\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-e57824d elementor-widget elementor-widget-text-editor\" data-id=\"e57824d\" 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 response is a JSON object whose <code>token<\/code> field holds the <code>aws-waf-token<\/code>. Exchange the voucher as soon as it arrives rather than storing it for later.<\/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-3d24c7d elementor-widget elementor-widget-text-editor\" data-id=\"3d24c7d\" 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>Using the Token<\/strong><\/span><\/h5><p>Send the token as the <code>aws-waf-token<\/code> cookie on the protected domain and repeat the request that was challenged. The site now answers with its real content instead of the <code>405<\/code> 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-6b69b7a elementor-widget elementor-widget-shortcode\" data-id=\"6b69b7a\" 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 -b &quot;aws-waf-token=7d4c2a91-EXAMPLE-4f0b-9e6d-3a1b5c8e2f70:HgoAxEXAMPLEcookieBBBB:Q2FwU2tpcA==&quot; \\\nhttps:\/\/www.example.com\/\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-41b4b69 elementor-widget elementor-widget-text-editor\" data-id=\"41b4b69\" 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>On a widget page, this is the same token the page&#8217;s <code>onSuccess<\/code> callback receives. Many such pages pass it on as the <code>aws-waf-token<\/code> cookie, others in an <code>x-aws-waf-token<\/code> request header, so check what the page&#8217;s own request sends and mirror it.<\/p><p>The token stays valid for the site&#8217;s immunity time, which AWS WAF sets to 5 minutes by default and site owners can lengthen. When the challenge comes back, submit a new 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-b4a6508 elementor-widget elementor-widget-text-editor\" data-id=\"b4a6508\" 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>JSON API<\/strong><\/span><\/h5><p>The JSON <code>createTask<\/code> \/ <code>getTaskResult<\/code> API accepts AWS WAF too, as <code>AmazonTask<\/code> \/ <code>AmazonTaskProxyless<\/code> and <code>AntiAwsWafTask<\/code> \/ <code>AntiAwsWafTaskProxyLess<\/code>, with the field names and the result format of the service CapSkip is emulating. Several of those formats return the finished <code>aws-waf-token<\/code> directly, so there is no voucher to exchange. They are not available while NextCaptcha or EzCaptcha is the selected service.<\/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-a388438 elementor-widget-divider--view-line_icon elementor-view-stacked cs-aws-waf-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"a388438\" 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. Use the <code>userAgent<\/code> returned with the result instead.<\/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        &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/140.0.0.0 Safari\/537.36&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    &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/140.0.0.0 Safari\/537.36&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-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>When the solve reports one, the browser User-Agent comes back as <code>userAgent<\/code>, both at the top level and inside <code>solution<\/code>. In plain text mode, read it from the <code>X-CaptchaFox-User-Agent<\/code> response header. Send that User-Agent when you submit the token.<\/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-b223b03 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"b223b03\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"datadome\" 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\/11\/DataDome.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27147\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/DataDome.svg\" alt=\"datadome solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;DataDome<\/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-f37c28e animated-fast cs-datadome-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"f37c28e\" 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>DataDome is the bot protection behind many large shops, news sites and marketplaces. When it doubts a visitor, the site answers with a block page instead of its content, and that page holds a slider or a short device check. Passing it sets a <code>datadome<\/code> cookie, and requests that carry the cookie are let through. CapSkip passes the challenge you send and returns the cookie, so a script with no browser of its own can keep fetching the site.<\/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-5295c49 elementor-widget elementor-widget-text-editor\" data-id=\"5295c49\" 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>A blocked request comes back with status <code>403<\/code> (sometimes <code>401<\/code>) and a small HTML page. That page carries a script object, <code>var dd={...}<\/code>, and loads the challenge in an iframe from <code>geo.captcha-delivery.com<\/code>. The iframe address is what CapSkip needs: it is called the <code>captcha_url<\/code> below.<\/p><p>DataDome shows two kinds of challenge, and CapSkip handles both through this one method:<\/p><ul><li><strong>Slider.<\/strong> The iframe path is <code>\/captcha\/<\/code> and the visitor drags a slider, sometimes onto a puzzle piece.<\/li><li><strong>Device check.<\/strong> The iframe path is <code>\/interstitial\/<\/code> and the page reads &#8220;Verifying the device&#8221; for a few seconds. When the check is not satisfied, DataDome moves on to a slider, and CapSkip follows it.<\/li><\/ul><p>The full cycle is four steps:<\/p><ol><li>Request the target page and receive the DataDome block page.<\/li><li>Build the <code>captcha_url<\/code> from that page (see below), and submit it to <code>\/in.php<\/code> with <code>method=datadome<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the cookie is ready.<\/li><li>Repeat your request with the cookie, the same User-Agent and the same IP address.<\/li><\/ol><p>A solve usually takes between 3 and 20 seconds. Device checks are at the short end of that range and sliders at the long end.<\/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-f451dc5 elementor-widget elementor-widget-text-editor\" data-id=\"f451dc5\" 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 Cookie Belongs to One IP and One Browser<\/strong><\/span><\/h5><p>DataDome ties the cookie to the IP address and the User-Agent that earned it. A cookie replayed from a different address, or with a different User-Agent, is usually refused and the block page comes back. Two rules follow from that:<\/p><ul><li><strong>The solve has to come from the address you will use the cookie from.<\/strong> If your requests go out through a proxy, send that proxy with the task. If they come from the computer running CapSkip, send no proxy.<\/li><li><strong>Send the User-Agent you will use.<\/strong> It must be Chrome for Windows with the same major version as the browser CapSkip solves with. Any other User-Agent would produce a cookie the site rejects, so it is refused up front with <code>ERROR_WRONG_USERAGENT<\/code>. Firefox, Safari, Edge and mobile User-Agents are refused for the same reason.<\/li><\/ul><p>When the block page itself says the address is banned, nothing sent from that address can pass, so the task is refused at once with <code>ERROR_PROXY_BANNED<\/code> instead of being attempted. You can spot this in advance: the <code>dd<\/code> object carries <code>'t':'bv'<\/code> instead of <code>'t':'fe'<\/code>. Change the address and request the page again.<\/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-fbe677c elementor-widget elementor-widget-text-editor\" data-id=\"fbe677c\" 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>Building the captcha_url<\/strong><\/span><\/h5><p>If the block page you received already contains the iframe, take its <code>src<\/code> attribute as it is. Most block pages build the iframe with a script instead, so you assemble the same address from the <code>dd<\/code> object. A block page 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-d6e871a elementor-widget elementor-widget-shortcode\" data-id=\"d6e871a\" 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;script&gt;\nvar dd={&#039;rt&#039;:&#039;c&#039;,&#039;cid&#039;:&#039;AHrlqAAAAAMA7KBvCr0n4cEAG330MA==&#039;,&#039;hsh&#039;:&#039;D013AA612AB2224D03B2318D0F5B19&#039;,&#039;t&#039;:&#039;fe&#039;,&#039;s&#039;:45225,&#039;e&#039;:&#039;549255a0289eaf17af60822309ab8db4&#039;,&#039;host&#039;:&#039;geo.captcha-delivery.com&#039;,&#039;cookie&#039;:&#039;KzE6_pZBBTHdCdvZkauT9VAshi0wS7~v5_M_MacEtdw8&#039;}\n&lt;\/script&gt;\n&lt;script src=&quot;https:\/\/ct.captcha-delivery.com\/c.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-87ce8b9 elementor-widget elementor-widget-text-editor\" data-id=\"87ce8b9\" 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 value of <code>rt<\/code> picks the path: <code>c<\/code> means <code>https:\/\/geo.captcha-delivery.com\/captcha\/<\/code> and <code>i<\/code> means <code>https:\/\/geo.captcha-delivery.com\/interstitial\/<\/code>. The query string is built from the other 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-d52fa5a elementor-widget elementor-widget-html\" data-id=\"d52fa5a\" 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>URL parameter<\/strong><\/th><th><strong>Value<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>initialCid<\/td><td>The <code>cid<\/code> field.<\/td><\/tr>\n<tr><td>hash<\/td><td>The <code>hsh<\/code> field.<\/td><\/tr>\n<tr><td>cid<\/td><td>The <code>cookie<\/code> field.<\/td><\/tr>\n<tr><td>t<\/td><td>The <code>t<\/code> field. Present on <code>\/captcha\/<\/code> only.<\/td><\/tr>\n<tr><td>referer<\/td><td>The URL of the page you requested.<\/td><\/tr>\n<tr><td>s<\/td><td>The <code>s<\/code> field.<\/td><\/tr>\n<tr><td>e<\/td><td>The <code>e<\/code> field, when present.<\/td><\/tr>\n<tr><td>b<\/td><td>The <code>b<\/code> field. Present on <code>\/interstitial\/<\/code> only.<\/td><\/tr>\n<tr><td>dm<\/td><td>Always <code>cd<\/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-eea1ece elementor-widget elementor-widget-text-editor\" data-id=\"eea1ece\" 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>URL encode every value. In JavaScript:<\/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-e90703f elementor-widget elementor-widget-shortcode\" data-id=\"e90703f\" 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 dd = JSON.parse(html.match(\/var dd=(\\{[^}]*\\})\/)[1].replace(\/&#039;\/g, &#039;&quot;&#039;));\nconst path = dd.rt === &#039;i&#039; ? &#039;interstitial&#039; : &#039;captcha&#039;;\nconst q = new URLSearchParams({ initialCid: dd.cid, hash: dd.hsh, cid: dd.cookie });\nif (dd.t) q.set(&#039;t&#039;, dd.t);\nq.set(&#039;referer&#039;, pageUrl);\nq.set(&#039;s&#039;, dd.s);\nif (dd.e) q.set(&#039;e&#039;, dd.e);\nif (dd.b) q.set(&#039;b&#039;, dd.b);\nq.set(&#039;dm&#039;, &#039;cd&#039;);\nconst captchaUrl = `https:\/\/${dd.host || &#039;geo.captcha-delivery.com&#039;}\/${path}\/?${q}`;\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-ebaf588 elementor-widget elementor-widget-text-editor\" data-id=\"ebaf588\" 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>Each block page is a fresh challenge. Submit it soon after you receive it, and request the page again for the next task rather than reusing an old <code>captcha_url<\/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-8800421 elementor-widget elementor-widget-text-editor\" data-id=\"8800421\" 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-5037d18 elementor-widget elementor-widget-html\" data-id=\"5037d18\" 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>datadome<\/code>. Specifies that you are submitting a DataDome challenge.<\/td><\/tr>\n<tr><td>captcha_url<\/td><td>String<\/td><td>Yes<\/td><td>The address of the challenge iframe on <code>geo.captcha-delivery.com<\/code>. See <strong>Building the captcha_url<\/strong> above.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page that returned the block page.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent you will send with the cookie: Chrome for Windows, with the same major version as the browser CapSkip solves with. If you send none, CapSkip uses the User-Agent of that browser, and the reply names it so you can copy it as it is.<\/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>. Send the proxy your later requests will use.<\/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-7060a34 elementor-widget elementor-widget-text-editor\" data-id=\"7060a34\" 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. One address is fine for testing and for occasional solves. Past that, DataDome scores the address as much as the browser, and a steady stream of block pages from one IP ends in a ban for that IP on the site. At volume, send your requests and your tasks through a pool of residential proxies, one proxy per task, and use each cookie through the proxy that earned it. Use sticky proxies, ones that keep the same exit IP for at least a few minutes. A proxy that changes its IP on every connection cannot produce a working cookie: the challenge loads from several addresses, and the cookie is refused from the next one.<\/p><p>CapSkip also has a DataDome proxy list of its own, under <strong>Settings<\/strong>, <strong>Captcha types<\/strong>, <strong>DataDome<\/strong>, <strong>Configure Proxies<\/strong>. Tasks sent without a proxy are solved through that list. Leave it empty unless the requests that carry the cookie also go through those same proxies, since the cookie will only work from the address that solved it. The reply names the proxy each task used. A proxy sent with a task always takes priority over the list.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=datadome<\/code>. Form fields, a query string and a JSON body are all accepted under identical field names.<\/p><p>Submit DataDome:<\/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-48cfdc0 elementor-widget elementor-widget-shortcode\" data-id=\"48cfdc0\" 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--data-urlencode &quot;key=YOUR_API_KEY&quot; \\\n--data-urlencode &quot;method=datadome&quot; \\\n--data-urlencode &quot;captcha_url=https:\/\/geo.captcha-delivery.com\/captcha\/?initialCid=AHrlqAAAAAMA7KBvCr0n4cEAG330MA%3D%3D&amp;hash=D013AA612AB2224D03B2318D0F5B19&amp;cid=KzE6_pZBBTHdCdvZkauT9VAshi0wS7~v5_M_MacEtdw8&amp;t=fe&amp;referer=https%3A%2F%2Fwww.example.com%2F&amp;s=45225&amp;e=549255a0289eaf17af60822309ab8db4&amp;dm=cd&quot; \\\n--data-urlencode &quot;pageurl=https:\/\/www.example.com\/&quot; \\\n--data-urlencode &quot;userAgent=Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/156.0.0.0 Safari\/537.36&quot; \\\n--data-urlencode &quot;proxy=login:password@203.0.113.10:8080&quot; \\\n--data-urlencode &quot;proxytype=HTTP&quot; \\\n--data-urlencode &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-576702b elementor-widget elementor-widget-text-editor\" data-id=\"576702b\" 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-10da430 elementor-widget elementor-widget-shortcode\" data-id=\"10da430\" 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-e78b8c1 elementor-widget elementor-widget-text-editor\" data-id=\"e78b8c1\" 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 error code on the submit request itself, before any work is done:<\/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-5bc283e elementor-widget elementor-widget-html\" data-id=\"5bc283e\" 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>Error<\/strong><\/th><th><strong>Cause<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>ERROR_BAD_PARAMETERS<\/td><td><code>captcha_url<\/code> is missing or is not a DataDome challenge address.<\/td><\/tr>\n<tr><td>ERROR_PAGEURL<\/td><td><code>pageurl<\/code> is missing or is not an <code>http<\/code> or <code>https<\/code> address.<\/td><\/tr>\n<tr><td>ERROR_WRONG_USERAGENT<\/td><td>The User-Agent is not Chrome for Windows with the major version CapSkip solves with.<\/td><\/tr>\n<tr><td>ERROR_PROXY_BANNED<\/td><td>The block page says this address is banned (<code>t=bv<\/code>).<\/td><\/tr>\n<tr><td>ERROR_PROXY_FORMAT<\/td><td>The proxy value could not be read.<\/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-ec320bf elementor-widget elementor-widget-text-editor\" data-id=\"ec320bf\" 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>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-597717a elementor-widget elementor-widget-text-editor\" data-id=\"597717a\" 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-447ade1 elementor-widget elementor-widget-html\" data-id=\"447ade1\" 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-7b1628f elementor-widget elementor-widget-shortcode\" data-id=\"7b1628f\" 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-6a7949f elementor-widget elementor-widget-text-editor\" data-id=\"6a7949f\" 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 challenge has been passed, CapSkip returns the cookie exactly as DataDome set it, attributes included:<\/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-606d1c1 elementor-widget elementor-widget-shortcode\" data-id=\"606d1c1\" 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;datadome=FAPPpli4jkT1MZGtgF8ez7mjSz8MrJ9fGRNE51Gj79cq9fXp5xn~F1P5APWjqvJojf4U9dq0R81Xaj2hpYtjle95mkg; Max-Age=31536000; Domain=.example.com; Path=\/; Secure; SameSite=Lax&quot;,\n    &quot;userAgent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/156.0.0.0 Safari\/537.36&quot;,\n    &quot;proxy&quot;: &quot;203.0.113.10:8080&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-d7cd2a5 elementor-widget elementor-widget-text-editor\" data-id=\"d7cd2a5\" 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>userAgent<\/code> is the User-Agent the cookie was earned with: the one you sent, or the one CapSkip used when you sent none. Send it with every request that carries the cookie.<\/p><p><code>proxy<\/code> appears only when your task sent no proxy and CapSkip took one from its DataDome proxy list. It is that proxy as <code>host:port<\/code>, without its login, and the cookie works only through it. When the task sent its own proxy, or CapSkip solved without one, the field is absent.<\/p><p>Without <code>json=1<\/code>, the cookie follows the <code>OK|<\/code> prefix as plain text, and the same two values arrive in the <code>X-DataDome-User-Agent<\/code> and <code>X-DataDome-Proxy<\/code> response headers:<\/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-4506157 elementor-widget elementor-widget-shortcode\" data-id=\"4506157\" 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|datadome=FAPPpli4jkT1MZGtgF8ez7mjSz8MrJ9fGRNE51Gj79cq9fXp5xn~F1P5APWjqvJojf4U9dq0R81Xaj2hpYtjle95mkg; Max-Age=31536000; Domain=.example.com; Path=\/; Secure; SameSite=Lax\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-da201e7 elementor-widget elementor-widget-text-editor\" data-id=\"da201e7\" 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 challenge has not yet been passed, 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 cookie and discards it, so keep it from the reply that carried it.<\/p><p>A task that could not be passed returns <code>ERROR_CAPTCHA_UNSOLVABLE<\/code>. Two failures name the address instead, because resubmitting through it would fail again: <code>ERROR_PROXY_BANNED<\/code> when DataDome banned the address during the solve, and <code>ERROR_PROXY_CONNECT_REFUSED<\/code> when the proxy could not be reached.<\/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-a64e526 elementor-widget elementor-widget-text-editor\" data-id=\"a64e526\" 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>Using the Cookie<\/strong><\/span><\/h5><p>The part before the first semicolon is the cookie itself. Send it with your next request, through the same proxy and with the same User-Agent you sent in 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-b06c58c elementor-widget elementor-widget-shortcode\" data-id=\"b06c58c\" 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;https:\/\/www.example.com\/&quot; \\\n-x &quot;http:\/\/login:password@203.0.113.10:8080&quot; \\\n-A &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/156.0.0.0 Safari\/537.36&quot; \\\n-b &quot;datadome=FAPPpli4jkT1MZGtgF8ez7mjSz8MrJ9fGRNE51Gj79cq9fXp5xn~F1P5APWjqvJojf4U9dq0R81Xaj2hpYtjle95mkg&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-f7ad7ee elementor-widget elementor-widget-text-editor\" data-id=\"f7ad7ee\" 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 you keep a cookie jar, you can store the whole string instead: <code>Domain<\/code>, <code>Path<\/code> and <code>Max-Age<\/code> are the values DataDome chose for the site.<\/p><p>DataDome may send a replacement <code>datadome<\/code> cookie on later responses. Keep the newest one, as a browser would. When the block page comes back anyway, the site has decided to challenge again: build a new <code>captcha_url<\/code> from it and submit a new 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-7dac5d6 elementor-widget-divider--view-line_icon elementor-view-stacked cs-datadome-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"7dac5d6\" 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-5ff5d31 sticky-section elementor-widget elementor-widget-elementskit-heading\" data-id=\"5ff5d31\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"mtcaptcha\" 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\/11\/mtcaptcha.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27871\" src=\"https:\/\/capskip.com\/wp-content\/uploads\/2026\/11\/mtcaptcha.svg\" alt=\"mtcaptcha solver\" width=\"24\" height=\"24\" \/><\/a>&nbsp;MTCaptcha<\/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-65179b2 animated-fast cs-mtcaptcha-intro elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"65179b2\" 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>MTCaptcha is a text CAPTCHA used on login, sign-up and contact forms. The visitor types the distorted characters shown in a picture, and the widget puts a verified token into the form. CapSkip takes the sitekey and page address you send and returns a valid MTCaptcha token, ready to submit with the 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-45a152d elementor-widget elementor-widget-text-editor\" data-id=\"45a152d\" 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 MTCaptcha widget is configured on the page with a sitekey that starts with <code>MTPublic-<\/code>. When a visitor passes the challenge, MTCaptcha issues a token beginning with <code>v1(<\/code>, and the widget writes it into a hidden form field named <code>mtcaptcha-verifiedtoken<\/code>. The site checks that token with MTCaptcha when the form arrives.<\/p><p>CapSkip needs only the sitekey and the page address. You do not load or solve the widget yourself: the picture your browser shows is never sent, and the token CapSkip returns is accepted on its own. The full cycle is three steps:<\/p><ol><li>Submit the sitekey and page URL to <code>\/in.php<\/code> with <code>method=mt_captcha<\/code>.<\/li><li>Poll <code>\/res.php<\/code> until the token is ready.<\/li><li>Submit the form with the token in <code>mtcaptcha-verifiedtoken<\/code>.<\/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-95282cb elementor-widget elementor-widget-text-editor\" data-id=\"95282cb\" 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>Finding the Sitekey<\/strong><\/span><\/h5><p>Most pages configure the widget with a <code>mtcaptchaConfig<\/code> object in the page source:<\/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-12df1bf elementor-widget elementor-widget-shortcode\" data-id=\"12df1bf\" 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;script&gt;\nvar mtcaptchaConfig = {\n  &quot;sitekey&quot;: &quot;MTPublic-KzqLY1cKH&quot;,\n  &quot;action&quot;: &quot;login&quot;\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-8fb30fa elementor-widget elementor-widget-text-editor\" data-id=\"8fb30fa\" 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>Copy the sitekey exactly as it appears. If the object also sets <code>action<\/code>, send that value too. When the widget is already on screen, the same sitekey is in the address of its iframe on <code>service.mtcaptcha.com<\/code>, in its query string as <code>sitekey<\/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-b4f0119 elementor-widget elementor-widget-text-editor\" data-id=\"b4f0119\" 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-e6b8faa elementor-widget elementor-widget-html\" data-id=\"e6b8faa\" 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>mt_captcha<\/code>. Specifies that you are submitting an MTCaptcha challenge. <code>mtcaptcha<\/code> is accepted as well.<\/td><\/tr>\n<tr><td>sitekey<\/td><td>String<\/td><td>Yes<\/td><td>The MTCaptcha sitekey from the page, starting with <code>MTPublic-<\/code>.<\/td><\/tr>\n<tr><td>pageurl<\/td><td>String<\/td><td>Yes<\/td><td>The full URL of the page the widget is on. MTCaptcha only issues tokens for the domains the sitekey is registered for, so send the real page address.<\/td><\/tr>\n<tr><td>action<\/td><td>String<\/td><td>No<\/td><td>The action name the page sets in its <code>mtcaptchaConfig<\/code> object, if it sets one.<\/td><\/tr>\n<tr><td>userAgent<\/td><td>String<\/td><td>No<\/td><td>The User-Agent to present to MTCaptcha. If you send none, CapSkip uses a Chrome for Windows User-Agent.<\/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>SOCKS4<\/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-a7dd2cd elementor-widget elementor-widget-text-editor\" data-id=\"a7dd2cd\" 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. One address is fine for testing and for occasional solves. Past that, configure a proxy pool: every solve requests fresh challenges from MTCaptcha&#8217;s service, and a steady stream of them from one address is what rate limiting is built to catch. Add the pool under <strong>Settings<\/strong>, <strong>Captcha types<\/strong>, <strong>MTCaptcha<\/strong>, <strong>Configure Proxies<\/strong>, and tasks sent without a proxy are spread across it. Send <code>proxy<\/code> with a task when the solve has to come from a particular network. A proxy sent with a task always takes priority over the list.<\/p><p>Submit an HTTP GET or POST request to your CapSkip API endpoint (<code>\/in.php<\/code>) with <code>method=mt_captcha<\/code>. Form fields, a query string and a JSON body are all accepted under identical field names.<\/p><p>Submit MTCaptcha:<\/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-80cc7a1 elementor-widget elementor-widget-shortcode\" data-id=\"80cc7a1\" 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--data-urlencode &quot;key=YOUR_API_KEY&quot; \\\n--data-urlencode &quot;method=mt_captcha&quot; \\\n--data-urlencode &quot;sitekey=MTPublic-KzqLY1cKH&quot; \\\n--data-urlencode &quot;pageurl=https:\/\/www.example.com\/login&quot; \\\n--data-urlencode &quot;action=login&quot; \\\n--data-urlencode &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-1c30a83 elementor-widget elementor-widget-text-editor\" data-id=\"1c30a83\" 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-a1b44c8 elementor-widget elementor-widget-shortcode\" data-id=\"a1b44c8\" 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-ff346e8 elementor-widget elementor-widget-text-editor\" data-id=\"ff346e8\" 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 error code on the submit request itself, before any work is done:<\/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-28e0fb9 elementor-widget elementor-widget-html\" data-id=\"28e0fb9\" 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>Error<\/strong><\/th><th><strong>Cause<\/strong><\/th><\/tr>\n<\/thead>\n<tbody>\n<tr><td>ERROR_BAD_PARAMETERS<\/td><td><code>sitekey<\/code> is missing or is not an MTCaptcha sitekey (<code>MTPublic-<\/code> followed by letters, digits, <code>-<\/code> or <code>_<\/code>).<\/td><\/tr>\n<tr><td>ERROR_PAGEURL<\/td><td><code>pageurl<\/code> is missing or is not an <code>http<\/code> or <code>https<\/code> address.<\/td><\/tr>\n<tr><td>ERROR_PROXY_FORMAT<\/td><td>The proxy value could not be read.<\/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-c60c723 elementor-widget elementor-widget-text-editor\" data-id=\"c60c723\" 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>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-fe2575a elementor-widget elementor-widget-text-editor\" data-id=\"fe2575a\" 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-8d30b62 elementor-widget elementor-widget-html\" data-id=\"8d30b62\" 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-e289a05 elementor-widget elementor-widget-shortcode\" data-id=\"e289a05\" 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-f69c981 elementor-widget elementor-widget-text-editor\" data-id=\"f69c981\" 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 challenge has been passed, CapSkip returns the MTCaptcha token:<\/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-fc7aee7 elementor-widget elementor-widget-shortcode\" data-id=\"fc7aee7\" 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;v1(23ed91f2,61d9f4fe,MTPublic-KzqLY1cKH,079c683122559a6f**)&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-2acfa86 elementor-widget elementor-widget-text-editor\" data-id=\"2acfa86\" 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 token follows the <code>OK|<\/code> prefix as plain text:<\/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-d12371e elementor-widget elementor-widget-shortcode\" data-id=\"d12371e\" 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|v1(23ed91f2,61d9f4fe,MTPublic-KzqLY1cKH,079c683122559a6f**)\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-ac25cd2 elementor-widget elementor-widget-text-editor\" data-id=\"ac25cd2\" 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 challenge has not yet been passed, 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, so keep it from the reply that carried it.<\/p><p>A task that could not be passed returns <code>ERROR_CAPTCHA_UNSOLVABLE<\/code>. Two failures name the task instead, because resubmitting it unchanged would fail again: <code>ERROR_RECAPTCHA_INVALID_SITEKEY<\/code> when MTCaptcha does not recognise the sitekey, and <code>ERROR_RECAPTCHA_INVALID_DOMAIN<\/code> when the sitekey is not allowed on the domain of <code>pageurl<\/code>. Both codes keep their historical names and apply to every method.<\/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-b492f14 elementor-widget elementor-widget-text-editor\" data-id=\"b492f14\" 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>Put the token in the form field <code>mtcaptcha-verifiedtoken<\/code> and submit the form as the page would. If you post the form yourself:<\/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-ecbb2be elementor-widget elementor-widget-shortcode\" data-id=\"ecbb2be\" 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 &quot;https:\/\/www.example.com\/login&quot; \\\n--data-urlencode &quot;username=alice&quot; \\\n--data-urlencode &quot;password=YOUR_PASSWORD&quot; \\\n--data-urlencode &quot;mtcaptcha-verifiedtoken=v1(23ed91f2,61d9f4fe,MTPublic-KzqLY1cKH,079c683122559a6f**)&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-5195220 elementor-widget elementor-widget-text-editor\" data-id=\"5195220\" 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>In a browser you control, set the hidden field before the form is submitted:<\/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-d0376f2 elementor-widget elementor-widget-shortcode\" data-id=\"d0376f2\" 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.querySelector(&#039;input[name=&quot;mtcaptcha-verifiedtoken&quot;]&#039;).value = token;\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-254060c elementor-widget elementor-widget-text-editor\" data-id=\"254060c\" 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 token is short-lived and single-use: MTCaptcha accepts it once, and only for a few minutes after it is issued. Use it as soon as it arrives, and request a new one for every form submission. The site verifies the token on its own server with MTCaptcha&#8217;s <code>checktoken<\/code> call, which checks the sitekey and the domain, so a token is only good on the site it was requested for.<\/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-1074ecb elementor-widget-divider--view-line_icon elementor-view-stacked cs-mtcaptcha-divider elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"1074ecb\" 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, Cloudflare, GeeTest, ALTCHA, CaptchaFox, Capy Puzzle and Friendly Captcha, 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>ERROR_TASK_NOT_SUPPORTED<\/code><\/td><td>The task type is not supported, or its setting is turned off in CapSkip.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_MISSING<\/code><\/td><td>The task requires a proxy and the request carried no usable one.<\/td><\/tr>\n<tr><td><code>ERROR_WRONG_USERAGENT<\/code><\/td><td>The User-Agent in the request cannot be used for this task.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_BANNED<\/code><\/td><td>The target site blocked the proxy address. Use a different proxy.<\/td><\/tr>\n<tr><td><code>ERROR_PROXY_CONNECT_REFUSED<\/code><\/td><td>The target could not be reached through the proxy.<\/td><\/tr>\n<tr><td><code>ERROR_RECAPTCHA_INVALID_SITEKEY<\/code><\/td><td>The <code>sitekey<\/code> is missing, or the CAPTCHA service refused it for this page.<\/td><\/tr>\n<tr><td><code>ERROR_RECAPTCHA_INVALID_SITEKEY<\/code><\/td><td>The CAPTCHA provider does not recognise the sitekey. Check the <code>sitekey<\/code> you sent.<\/td><\/tr>\n<tr><td><code>ERROR_RECAPTCHA_INVALID_DOMAIN<\/code><\/td><td>The sitekey is not allowed on the domain of <code>pageurl<\/code>. Send the address of the page the widget is really on.<\/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 Cloudflare Challenge (cf_clearance) hCaptcha AWS WAF CAPTCHA Geetest V3 ALTCHA CaptchaFox Capy Puzzle Friendly Captcha DataDome MTCaptcha Using Proxies Error [&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":84,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages\/22260\/revisions"}],"predecessor-version":[{"id":27874,"href":"https:\/\/capskip.com\/zh\/wp-json\/wp\/v2\/pages\/22260\/revisions\/27874"}],"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}]}}