Skip to content
../products
● fastest in class

Friendly Captcha Solver, solved in 11.6s.

Solve Friendly Captcha v1 and v2 proof-of-work tokens via API. Privacy-first, no proxy required.

per 1,000$2.00
avg solve~11.6s
success99%+
throughput5/m
type: FriendlyCaptchaTaskProxyLess…0.00s
POST/createTask type=FriendlyCaptchaTaskProxyLess
taskId tsk_holiorox
POLL/getTaskResult status=processing
status ready
token 0xb1026ee2359b9...
type: FriendlyCaptchaTaskProxyLess● running on production solvers

What is Friendly Captcha?

Friendly Captcha is a GDPR-friendly, privacy-first CAPTCHA widely deployed across EU websites — banks, government portals, e-commerce — as a non-tracking alternative to Google reCAPTCHA. The visitor's browser solves a proof-of-work puzzle invisibly in the background while they fill in a form, and the resulting solution token is submitted alongside. Two versions ship in production: v1 (the legacy `friendly-challenge` widget loaded from jsDelivr) and v2 (the `global.frcapi.com` API). Both produce a long alphanumeric token bound to the sitekey but not to the visitor's IP.

How It Works

1

Send Task

POST your FriendlyCaptchaTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.

2

We Solve

Capzy auto-detects whether the target uses v1 or v2 and runs the matching widget on our infrastructure with the sitekey you provide. We wait for the PoW to complete naturally and harvest the resulting solution token. No user interaction simulated — the puzzle solves the same way it does for a real visitor, so the resulting token is indistinguishable from a legitimate submission.

3

Get Token

Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.

Quick Integration

solve.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "FriendlyCaptchaTaskProxyLess",
        "type": "FriendlyCaptchaTaskProxyLess",
        "websiteKey": "FCMS01ABCDEF...",
        "websiteURL": "https://example.com/contact"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

# Step 3: Use the result — paste the token into the site's captcha form field
token = result["solution"]["token"]
# Browser side: set the textarea value or the hidden input. Then submit.
# Server-to-server: post the token alongside the form fields you normally send.
resp = requests.post("https://target.example.com/submit", data={
    "username": "...",
    "captcha_response": token,   # <-- replace with the field name your site uses
})
print(resp.status_code)

Using Your Own Proxy

Use FriendlyCaptchaTask instead of FriendlyCaptchaTaskProxyLess to route the solve through your own proxy. This is useful when the target site checks the IP that solved the captcha matches the IP submitting the form.

solve_proxy.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "FriendlyCaptchaTask",
        "type": "FriendlyCaptchaTask",
        "proxyPort": "8080",
        "proxyType": "http",
        "proxyLogin": "user",
        "websiteKey": "FCMS01ABCDEF...",
        "websiteURL": "https://example.com/contact",
        "proxyAddress": "123.45.67.89",
        "proxyPassword": "pass"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

# Step 3: Use the result — paste the token into the site's captcha form field
token = result["solution"]["token"]
# Browser side: set the textarea value or the hidden input. Then submit.
# Server-to-server: post the token alongside the form fields you normally send.
resp = requests.post("https://target.example.com/submit", data={
    "username": "...",
    "captcha_response": token,   # <-- replace with the field name your site uses
})
print(resp.status_code)

additional proxy parameters

proxyTypetypestringreqyesProxy protocol: http, https, socks4, or socks5
proxyAddresstypestringreqyesProxy IP address or hostname
proxyPorttypenumberreqyesProxy port number
proxyLogintypestringreqnoProxy username (if auth required)
proxyPasswordtypestringreqnoProxy password (if auth required)

task parameters.

typetypestringreqyesFriendlyCaptchaTaskProxyLess (recommended) or FriendlyCaptchaTask
websiteURLtypestringreqyesFull URL of the page hosting the Friendly Captcha widget
websiteKeytypestringreqyesThe Friendly Captcha sitekey — read it from the widget's data-sitekey attribute

solution response.

tokentypestringThe solution token — drop it into the `frc-captcha-solution` form input or POST it directly to your site's verify endpoint

Example response

Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.

{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": ".UMNS4ABCDEFGHIJ0123456789abcdefghij.AaBbCcDd1122334455667788.ZyXwVuTsRqPoNmLkJiHgFeDcBa9876543210"
  }
}

Error response

Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.

{
  "errorId": 1,
  "errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
  "errorDescription": "Solver gave up — automatically refunded."
}

Pending response

While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.

{
  "errorId": 0,
  "status": "processing"
}

Features

Auto-detects v1 (friendly-challenge) and v2 (frcapi.com) widget versions
Median ~11 s end-to-end — matches a real browser's PoW completion time
Tokens are sitekey-bound, not IP-bound — submit from any IP
Optional proxy variant available if your site geo-fences the widget endpoint
Compatible with vanilla forms, React, Vue, and the official Friendly Captcha libraries

ProxyLess Task Type

FriendlyCaptchaTaskProxyLess

With Proxy

FriendlyCaptchaTask

Frequently Asked Questions

start solving friendly captcha.

$0.10 in free credits — no card. ~250 free solves to test before you spend.