serp·base API Documentation

Captcha: Capy Puzzle

Capy Puzzle is a Japanese jigsaw captcha: the user drags a puzzle piece to complete an image. We return the solution token you submit to the target site.

$15.00 / 1,000 POST /v1/query x402 · USDC on Base

Overview

Single endpoint, predictable JSON. Send POST /v1/query with the tool field set to captcha_capy.

curl -X POST https://api.serp-base.com/v1/query \
  -H "Content-Type: application/json" \
  -d '{"tool": "captcha_capy", "sitekey": "PUZZLE_xxx", "url": "https://site.com/login", "api_server": "https://jp.api.capy.me/"}'

Parameters

FieldTypeRequiredDescriptionExample
sitekeystringyesCapy captcha key (starts with PUZZLE_)PUZZLE_h4k2THJgd5dR5jYrKRHdddaSEp7aDN
urlstringyesFull URL of the page with the captchahttps://www.capy.me/products/puzzle_captcha/
api_serverstringnoCapy API cluster. Default jp.api.capy.mehttps://jp.api.capy.me/

Code examples

cURL

curl -X POST https://api.serp-base.com/v1/query \
  -H "Content-Type: application/json" \
  -d '{"tool": "captcha_capy", "sitekey": "PUZZLE_xxx", "url": "https://site.com/login", "api_server": "https://jp.api.capy.me/"}'

Python

import requests

r = requests.post("https://api.serp-base.com/v1/query", json={
  "tool": "captcha_capy", "sitekey": "PUZZLE_xxx", "url": "https://site.com/login", "api_server": "https://jp.api.capy.me/"
})
print(r.json()["data"])

JavaScript

const r = await fetch('https://api.serp-base.com/v1/query', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
  "tool": "captcha_capy", "sitekey": "PUZZLE_xxx", "url": "https://site.com/login", "api_server": "https://jp.api.capy.me/"
})
});
const { data } = await r.json();

PHP

$ch = curl_init('https://api.serp-base.com/v1/query');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
  CURLOPT_POSTFIELDS => '{"tool": "captcha_capy", "sitekey": "PUZZLE_xxx", "url": "https://site.com/login", "api_server": "https://jp.api.capy.me/"}',
  CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);

Response

{
  "ok": true,
  "data": {
    "solution": "0xax50x0xkx50x0xux50x..."
  }
}

Tip: pass api_server exactly as it appears in the target page source (inside the Capy widget init). Using the wrong cluster is the most common reason for a solve failure.

Payment

Pay per request with USDC on Base via the x402 protocol. Gas is paid by the facilitator — you only need USDC in your wallet.

No payment is taken when a service fails. We run the work first and settle afterwards.

Errors

CodeMeaningAction
402Payment requiredSign the payment and retry with X-PAYMENT
400Bad parametersCheck required fields above
422Data could not be producedNothing charged — retry later
429Rate limitedBack off and retry
503Tool temporarily unavailableRetry later — nothing charged

Related tools

Captcha: image to text · Captcha: reCAPTCHA V2 · Captcha: reCAPTCHA V3 · Captcha: hCaptcha · Captcha: Cloudflare Turnstile Captcha: Cloudflare Challenge · Captcha: Yandex SmartCaptcha

Pay-per-request data APIs. Built for agents and developers.