MTCaptcha · Live demo

MTCaptcha Demo

Distorted letters to type back, with an optional invisible mode.

Windows x64·Runs locally, so no CAPTCHA leaves your machine
  • Free, no signup
  • The real provider widget
  • See the verification response
MTCaptcha tokens a month40,000
40.0k250.0k
Metered elsewhere, about $1.45 per 1,000$58.00
CapSkip Bronze, flat$35.00
$23.00stays in your pocketevery month, at this volume

Live MTCaptcha widget

Type the characters shown in the picture into the box below it. It verifies as soon as MTCaptcha returns a verified token.

Time to solve 0.0s
Solve cost $0 with CapSkip

How to Solve MTCaptcha

The box above is a live MTCaptcha widget. This page shows two ways to solve MTCaptcha and get a verified v1 token: by calling the CapSkip HTTP API from your own code, or by routing the captcha service your tools already call to CapSkip. CapSkip is an unlimited MTCaptcha solver that runs locally on your device, so there are no per solve fees and nothing leaves your machine.

For developers

Option 1: Solve MTCaptcha with the CapSkip HTTP API

Building automation, a scraper or a bot? Send this page's MTPublic site key and URL to the CapSkip app with one request, poll for the result, and CapSkip hands back a verified MTCaptcha token you can submit like a real one. The API uses the standard in.php / res.php endpoints, so it works from Python, Node.js, PHP, C# or any other language that can make an HTTP call.

Site key
MTPublic-C8YHBQqYE
Page URL
https://capskip.com/captcha-demo/mtcaptcha/

Before you start

CapSkip solves locally. Download and run the CapSkip desktop app and keep it open in the background. Your code talks to it on 127.0.0.1:8080, so there are no cloud calls and no per solve fees.

1

Send the MTCaptcha to CapSkip

Post this page's sitekey and pageurl to in.php with method=mt_captcha. CapSkip answers at once with a task ID.

import time
import requests

API = "http://127.0.0.1:8080"   # the CapSkip app on your machine
KEY = "YOUR_API_KEY"

# 1. Submit the MTCaptcha shown on this page
task = requests.post(f"{API}/in.php", data={
    "key": KEY,
    "method": "mt_captcha",
    "sitekey": "MTPublic-C8YHBQqYE",
    "pageurl": "https://capskip.com/captcha-demo/mtcaptcha/",
    "json": 1,
}).json()["request"]

# 2. Poll until the token is ready
while True:
    time.sleep(3)
    res = requests.get(f"{API}/res.php", params={
        "key": KEY, "action": "get", "id": task, "json": 1,
    }).json()
    if res["request"] != "CAPCHA_NOT_READY":
        break

token = res["request"]   # the v1(...) verified token
print(token)
const API = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
const KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

(async () => {
  // 1. Submit the MTCaptcha shown on this page
  const submit = await fetch(`${API}/in.php`, {
    method: 'POST',
    body: new URLSearchParams({
      key: KEY,
      method: 'mt_captcha',
      sitekey: 'MTPublic-C8YHBQqYE',
      pageurl: 'https://capskip.com/captcha-demo/mtcaptcha/',
      json: '1',
    }),
  }).then((r) => r.json());

  // 2. Poll until the token is ready
  let res;
  do {
    await sleep(3000);
    res = await fetch(`${API}/res.php?key=${KEY}&action=get&id=${submit.request}&json=1`)
      .then((r) => r.json());
  } while (res.request === 'CAPCHA_NOT_READY');

  const token = res.request; // the v1(...) verified token
  console.log(token);
})();
<?php
$api = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
$key = 'YOUR_API_KEY';

// 1. Submit the MTCaptcha shown on this page
$ch = curl_init("$api/in.php");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS     => http_build_query([
        'key'     => $key,
        'method'  => 'mt_captcha',
        'sitekey' => 'MTPublic-C8YHBQqYE',
        'pageurl' => 'https://capskip.com/captcha-demo/mtcaptcha/',
        'json'    => 1,
    ]),
]);
$task = json_decode(curl_exec($ch), true)['request'];

// 2. Poll until the token is ready
do {
    sleep(3);
    $res = json_decode(file_get_contents(
        "$api/res.php?key=$key&action=get&id=$task&json=1"
    ), true);
} while ($res['request'] === 'CAPCHA_NOT_READY');

$token = $res['request']; // the v1(...) verified token
echo $token;
using System.Text.Json;

const string Api = "http://127.0.0.1:8080"; // the CapSkip app on your machine
const string Key = "YOUR_API_KEY";
var http = new HttpClient();

// 1. Submit the MTCaptcha shown on this page
var submit = await http.PostAsync($"{Api}/in.php", new FormUrlEncodedContent(new Dictionary<string, string>
{
    ["key"] = Key,
    ["method"] = "mt_captcha",
    ["sitekey"] = "MTPublic-C8YHBQqYE",
    ["pageurl"] = "https://capskip.com/captcha-demo/mtcaptcha/",
    ["json"] = "1",
}));
string task = JsonDocument.Parse(await submit.Content.ReadAsStringAsync())
    .RootElement.GetProperty("request").GetString()!;

// 2. Poll until the token is ready
string token;
do
{
    await Task.Delay(3000);
    var res = JsonDocument.Parse(await http.GetStringAsync(
        $"{Api}/res.php?key={Key}&action=get&id={task}&json=1"));
    token = res.RootElement.GetProperty("request").GetString()!;
} while (token == "CAPCHA_NOT_READY");

Console.WriteLine(token); // the v1(...) verified token

You get a verified token that starts with v1(, valid for this site key and this page, ready to submit. It works once and only for a few minutes, so ask for it just before you send the form.

2

Use the token

Put the token into the widget's hidden mtcaptcha-verifiedtoken field and submit the form. Your server then checks it with MTCaptcha's checktoken call and its private key. Note that this demo verifies through the widget's own callback, so it checks the token the widget produced rather than one you place in the field.

// 1. Drop the solved token into the hidden field the widget submits
document.querySelector('[name="mtcaptcha-verifiedtoken"]').value = token;

// 2. ...then submit your form.
Advanced

Invisible MTCaptcha and page actions

In invisible (low friction) mode most visitors never see a picture, and MTCaptcha only shows one when a visit looks suspicious. The same request covers it, and CapSkip answers the picture if one is asked for. If the page's mtcaptchaConfig sets an action, send it with the job, since the token is tied to it.

POST http://127.0.0.1:8080/in.php
     key=YOUR_API_KEY
     method=mt_captcha
     sitekey=MTPublic-SITEKEY_FROM_THE_PAGE
     pageurl=https://the-protected-site.com/login
     action=login
     json=1

GET  http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1
     {"status":1,"request":"v1(2f7e3c1a,b7c6…)"}

The API also accepts a proxy and proxytype, which spreads steady volume over several addresses. JSON clients can send the same job as a createTask of type MTCaptchaTask or MtCaptchaTaskProxyless, with isInvisible for low friction widgets.

The full list of request parameters, response fields and error codes lives in the CapSkip API docs.

No code changes

Option 2: Send your existing solver-service code to CapSkip

Already solving MTCaptcha through a pay-per-captcha service such as 2Captcha, CapMonster Cloud or CapSolver? You do not have to rewrite a line. The CapSkip app includes a service emulator that speaks those services' own APIs locally: pick the service you use, click Add to hosts file, and every request your bot, scraper or off-the-shelf tool already sends to it is answered by CapSkip on your own machine, for a flat price instead of a per-solve bill.

1

Pick your service

Open the CapSkip app and choose the service your code already talks to: 2Captcha, RuCaptcha, SolveCaptcha, CapMonster Cloud, CapSolver or DeathByCaptcha.

2

Add to hosts file

One click in the app points that service's domain at CapSkip, so the calls your tool makes are answered on your own machine instead of going out to a paid API.

3

Run your tool unchanged

Same API key, same request, same polling loop. CapSkip replies in that service's own format and your code gets a verified MTCaptcha token back.

Nothing below changes when you switch. It is the same call your code makes today, except that MTCaptcha is now solved locally and a verified token comes back from CapSkip:

POST https://2captcha.com/in.php
     key=YOUR_EXISTING_API_KEY
     method=mt_captcha
     sitekey=MTPublic-C8YHBQqYE
     pageurl=https://capskip.com/captcha-demo/mtcaptcha/

GET  https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
     OK|v1(2f7e3c1a,b7c6…)  the verified token, solved by CapSkip

Client libraries work the same way: a createTask / getTaskResult pair with MTCaptchaTask, DeathByCaptcha type 18, or any wrapper built on one of these services, keeps working once the emulator is on. The full request and response reference lives in the CapSkip API docs.

About this MTCaptcha demo

This page is a live MTCaptcha demo where you can test how MTCaptcha works and watch it get solved in real time. MTCaptcha is a privacy-focused CAPTCHA that shows a short line of distorted characters, partly covered by a coloured ellipse, with a box to type them into and buttons for audio and a new picture. Sites that want less friction switch on its invisible mode, which lets most visitors through and only shows the picture to the ones it doubts. Use it to explore MTCaptcha token generation, the mtcaptcha-verifiedtoken value, and the checktoken verification that websites rely on to protect forms, logins and signups from spam, abuse and bots.

Developers, testers and automation engineers can use this MTCaptcha test page to check integrations, validate a setup and benchmark how fast CapSkip solves MTCaptcha. Whether you need to solve MTCaptcha once or automate thousands of solves, CapSkip works two ways: a plain HTTP API you can call from any language, and drop-in emulation of the captcha services you may be paying per solve today, both with unlimited solving on one flat price. Both are driven by the same desktop AI captcha solver, installed once and running on your own machine, so nothing is queued on a remote server and nothing is billed per solve. See the MTCaptcha solver page for the full picture.

How do I solve MTCaptcha?
Run the CapSkip desktop app, send the MTPublic sitekey and the page URL to its API with method=mt_captcha, and CapSkip returns a verified token that starts with v1(. Put it in the mtcaptcha-verifiedtoken field and submit the form.
Can I keep my existing 2Captcha or CapSolver code?
Yes. The CapSkip app emulates the MTCaptcha calls of 2Captcha, RuCaptcha, SolveCaptcha, CapMonster Cloud, CapSolver and DeathByCaptcha. Pick your service in the app, click "Add to hosts file", and the MTCaptcha requests your code already sends are solved locally by CapSkip, with no code changes and no per-solve fee.
Where do I find the MTCaptcha sitekey?
Look in the page source for the mtcaptchaConfig object: its sitekey value starts with MTPublic-. When the widget is already on screen, the same sitekey appears in the address of its iframe on service.mtcaptcha.com.
Does CapSkip handle invisible MTCaptcha?
Yes. Invisible widgets go through the same request as the visible text challenge, and the reply is the same kind of token. If MTCaptcha decides a picture is needed after all, CapSkip answers it.
How long does an MTCaptcha token stay valid?
Only a few minutes, and only once. Ask for it right before you submit the form and use it straight away. A token that sat in a queue or was already used is rejected by checktoken.
Is CapSkip a free MTCaptcha solver?
The free trial gives you full access for three days with 500 solves. Paid licenses unlock unlimited solving at one flat price, with no per captcha fees.
PricingLogin