Prosopo (Procaptcha)
Prosopo Procaptcha is a decentralized CAPTCHA solution built on blockchain technology. It offers privacy-preserving bot detection by leveraging a decentralized network of human verifiers rather than centralized servers. Procaptcha is used by Web3 applications, decentralized platforms, and privacy-focused websites. The challenge produces a verification token that is submitted with form data for server-side validation.
Supported Types
Section titled “Supported Types”| Type | Proxy Required | Description |
|---|---|---|
ProsopoToken | Yes | Solves the challenge using your proxy. |
ProsopoTokenProxyLess | No | Solves the challenge without a proxy. Recommended for most use cases. |
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | ProsopoToken or ProsopoTokenProxyLess |
websiteURL | string | Yes | The URL of the page containing the Procaptcha widget |
websiteKey | string | Yes | The site key found in the Procaptcha widget configuration (the siteKey value in the initialization script) |
Proxy Parameters
Section titled “Proxy Parameters”Required when using the ProsopoToken type:
| Parameter | Type | Required | Description |
|---|---|---|---|
proxyType | string | Yes | http, socks4, or socks5 |
proxyAddress | string | Yes | Proxy IP or hostname |
proxyPort | integer | Yes | Proxy port |
proxyLogin | string | No | Proxy username |
proxyPassword | string | No | Proxy password |
Create Task Request
Section titled “Create Task Request”{ "clientKey": "YOUR_API_KEY", "task": { "type": "ProsopoTokenProxyLess", "websiteURL": "https://example.com/register", "websiteKey": "5HGjXJPbERv4F..." }}With proxy:
{ "clientKey": "YOUR_API_KEY", "task": { "type": "ProsopoToken", "websiteURL": "https://example.com/register", "websiteKey": "5HGjXJPbERv4F...", "proxyType": "http", "proxyAddress": "1.2.3.4", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" }}Response
Section titled “Response”{ "errorId": 0, "taskId": "550e8400-e29b-41d4-a716-446655440000", "status": "processing"}Solution Object
Section titled “Solution Object”{ "token": "0x7a9f3b..."}| Field | Type | Description |
|---|---|---|
token | string | The Procaptcha verification token to submit with the form |
How to Use
Section titled “How to Use”- Find the Procaptcha site key on the target page. It is typically in the widget element’s attributes or in the JavaScript initialization code as the
siteKeyparameter. - Submit the task and poll for the solution.
- Set the returned
tokenas the value of the Procaptcha response field in the form (usually a hidden input namedprocaptcha-response). - Submit the form. The server will verify the token through the Prosopo verification API.
Code Examples
Section titled “Code Examples”Python
Section titled “Python”import requestsimport time
API_KEY = "YOUR_API_KEY"
response = requests.post("https://api.ucaptcha.net/createTask", json={ "clientKey": API_KEY, "task": { "type": "ProsopoTokenProxyLess", "websiteURL": "https://example.com/register", "websiteKey": "5HGjXJPbERv4F..." }})task_id = response.json()["taskId"]
while True: result = requests.post("https://api.ucaptcha.net/getTaskResult", json={ "clientKey": API_KEY, "taskId": task_id }).json() if result["status"] == "ready": token = result["solution"]["token"] print("Solution:", token)
# Submit the form with the Procaptcha token form_data = { "procaptcha-response": token, "email": "user@example.com", "password": "securepassword" } response = requests.post("https://example.com/register", data=form_data) print("Status:", response.status_code) break elif result["status"] == "failed": print("Error:", result.get("errorDescription")) break time.sleep(5)JavaScript
Section titled “JavaScript”const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: API_KEY, task: { type: "ProsopoTokenProxyLess", websiteURL: "https://example.com/register", websiteKey: "5HGjXJPbERv4F..." } })}).then(r => r.json());
while (true) { const result = await fetch("https://api.ucaptcha.net/getTaskResult", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: API_KEY, taskId }) }).then(r => r.json());
if (result.status === "ready") { console.log("Solution:", result.solution.token); break; } else if (result.status === "failed") { console.error("Error:", result.errorDescription); break; } await new Promise(r => setTimeout(r, 5000));}# Create the taskcurl -X POST https://api.ucaptcha.net/createTask \ -H "Content-Type: application/json" \ -d '{ "clientKey": "YOUR_API_KEY", "task": { "type": "ProsopoTokenProxyLess", "websiteURL": "https://example.com/register", "websiteKey": "5HGjXJPbERv4F..." } }'
# Poll for the result (replace TASK_ID with the returned taskId)curl -X POST https://api.ucaptcha.net/getTaskResult \ -H "Content-Type: application/json" \ -d '{ "clientKey": "YOUR_API_KEY", "taskId": "TASK_ID" }'Provider Coverage
Section titled “Provider Coverage”- 2Captcha
- Anti-Captcha
- CapMonster
Aliases
Section titled “Aliases”No backward-compatible aliases. Use ProsopoToken or ProsopoTokenProxyLess directly.