Prosopo Captcha Token Solving
Solve Prosopo CAPTCHA challenges and obtain valid tokens for protected web forms and API endpoints. Prosopo is a decentralized CAPTCHA provider built on blockchain infrastructure, and our solver handles the full challenge-response flow to return a verified token.
Prosopo is a next-generation CAPTCHA platform that uses a decentralized network of human workers to verify user authenticity. Unlike traditional CAPTCHAs, Prosopo challenges are served through a web3-compatible infrastructure, with each challenge being uniquely signed and verified on-chain. The site integrates the Prosopo SDK, which presents a challenge widget to the user. Upon successful completion, the SDK returns a signed verification token. Our solver completes the Prosopo challenge flow and returns a valid token that can be submitted to the protected endpoint.
Captcha Type
Use the following captcha type identifier in your API requests:
"type": "PROSOPO_CAPTCHA_TOKEN"
Request Format
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
auth.token |
string | required | Your API key |
captcha.type |
string | required | Must be "PROSOPO_CAPTCHA_TOKEN" |
captcha.metadata.siteUrl |
string | required | The full URL of the page where the Prosopo CAPTCHA widget is displayed |
captcha.metadata.siteKey |
string | required | The Prosopo site key used to initialize the CAPTCHA widget on the target page. Found in the Prosopo widget configuration on the page. |
captcha.payload.userAgent |
string | optional | Your browser user agent string |
captcha.payload.proxy |
object | optional | Proxy configuration object |
captcha.payload.proxy.protocol |
string | required* | Proxy protocol: "http", "https", "socks4", or "socks5" |
captcha.payload.proxy.host |
string | required* | Proxy IP address or hostname |
captcha.payload.proxy.port |
number | required* | Proxy port number |
captcha.payload.proxy.username |
string | optional | Proxy authentication username |
captcha.payload.proxy.password |
string | optional | Proxy authentication password |
* Required only if the parent object (proxy) is provided
The Prosopo site key is typically found in the page source within the Prosopo widget
initialization code. Look for a JavaScript call similar to
new Procaptcha(element, { siteKey: 'YOUR_SITE_KEY' }) or as a
data-sitekey attribute on the CAPTCHA widget container element.
Example Request
{
"auth": {
"token": "YOUR_API_KEY"
},
"context": {
"source": "api",
"version": "1.0.0"
},
"captcha": {
"type": "PROSOPO_CAPTCHA_TOKEN",
"metadata": {
"siteUrl": "https://example.com/signup",
"siteKey": "5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB"
},
"payload": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"proxy": {
"protocol": "http",
"host": "1.2.3.4",
"port": 8080,
"username": "proxyuser",
"password": "proxypass"
}
}
}
}
const response = await fetch('https://solver-api.mydisct.com/createTask', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': 'YOUR_API_KEY'
},
body: JSON.stringify({
auth: {
token: 'YOUR_API_KEY'
},
context: {
source: 'api',
version: '1.0.0'
},
captcha: {
type: 'PROSOPO_CAPTCHA_TOKEN',
metadata: {
siteUrl: 'https://example.com/signup',
siteKey: '5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB'
},
payload: {
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
proxy: {
protocol: 'http',
host: '1.2.3.4',
port: 8080,
username: 'proxyuser',
password: 'proxypass'
}
}
}
})
});
const data = await response.json();
console.log('Task ID:', data.task.id);
import requests
response = requests.post(
'https://solver-api.mydisct.com/createTask',
headers={
'Content-Type': 'application/json',
'apikey': 'YOUR_API_KEY'
},
json={
'auth': {'token': 'YOUR_API_KEY'},
'context': {'source': 'api', 'version': '1.0.0'},
'captcha': {
'type': 'PROSOPO_CAPTCHA_TOKEN',
'metadata': {
'siteUrl': 'https://example.com/signup',
'siteKey': '5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB'
},
'payload': {
'userAgent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'proxy': {
'protocol': 'http',
'host': '1.2.3.4',
'port': 8080,
'username': 'proxyuser',
'password': 'proxypass'
}
}
}
}
)
data = response.json()
print('Task ID:', data['task']['id'])
curl -X POST https://solver-api.mydisct.com/createTask \
-H "Content-Type: application/json" \
-H "apikey: YOUR_API_KEY" \
-d '{
"auth": {"token": "YOUR_API_KEY"},
"context": {"source": "api", "version": "1.0.0"},
"captcha": {
"type": "PROSOPO_CAPTCHA_TOKEN",
"metadata": {
"siteUrl": "https://example.com/signup",
"siteKey": "5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB"
},
"payload": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
}
}'
Response Format
Create Task Response (Processing)
{
"success": true,
"service": "MyDisct Solver",
"message": "Captcha task created successfully",
"task": {
"id": "MyDisctSolver_abc123",
"status": "processing"
}
}
Fetch Result Response (Completed)
{
"success": true,
"service": "MyDisct Solver",
"message": "Prosopo captcha solved successfully",
"task": {
"id": "MyDisctSolver_abc123",
"status": "completed",
"result": {
"token": "5HGjWAeF...eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...",
"timestamp": "2025-10-10T12:00:00.000Z"
}
}
}
The Prosopo token is typically submitted as a form field named prosopo-response
or procaptcha-response, depending on the site's implementation. Some sites also
accept it via a JSON body field. Inspect the form submission or API call of the target site
to identify the correct field name.
Implementation Guide
Complete JavaScript Implementation
async function solveProsopoToken(siteUrl, siteKey, options = {}) {
const createResponse = await fetch('https://solver-api.mydisct.com/createTask', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': 'YOUR_API_KEY'
},
body: JSON.stringify({
auth: { token: 'YOUR_API_KEY' },
context: { source: 'api', version: '1.0.0' },
captcha: {
type: 'PROSOPO_CAPTCHA_TOKEN',
metadata: { siteUrl, siteKey },
payload: {
userAgent: options.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
proxy: options.proxy
}
}
})
});
const createData = await createResponse.json();
if (!createData.success) throw new Error(createData.error.message);
const taskId = createData.task.id;
while (true) {
await new Promise(resolve => setTimeout(resolve, 5000));
const resultResponse = await fetch('https://solver-api.mydisct.com/fetchResult', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': 'YOUR_API_KEY'
},
body: JSON.stringify({ taskId })
});
const resultData = await resultResponse.json();
if (resultData.task.status === 'completed') {
return resultData.task.result.token;
} else if (resultData.task.status === 'failed') {
throw new Error('Prosopo captcha solving failed');
}
}
}
const token = await solveProsopoToken(
'https://example.com/signup',
'5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB'
);
const signupResponse = await fetch('https://example.com/api/signup', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '[email protected]',
password: 'securepassword',
'prosopo-response': token
})
});
const result = await signupResponse.json();
console.log('Signup result:', result);
Python Implementation
import requests
import time
def solve_prosopo_token(site_url, site_key, api_key, user_agent=None, proxy_config=None):
create_response = requests.post(
'https://solver-api.mydisct.com/createTask',
headers={
'Content-Type': 'application/json',
'apikey': api_key
},
json={
'auth': {'token': api_key},
'context': {'source': 'api', 'version': '1.0.0'},
'captcha': {
'type': 'PROSOPO_CAPTCHA_TOKEN',
'metadata': {
'siteUrl': site_url,
'siteKey': site_key
},
'payload': {
'userAgent': user_agent or 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'proxy': proxy_config
}
}
}
)
create_data = create_response.json()
if not create_data['success']:
raise Exception(create_data['error']['message'])
task_id = create_data['task']['id']
print(f'Task created: {task_id}')
while True:
time.sleep(5)
result_response = requests.post(
'https://solver-api.mydisct.com/fetchResult',
headers={
'Content-Type': 'application/json',
'apikey': api_key
},
json={'taskId': task_id}
)
result_data = result_response.json()
if result_data['task']['status'] == 'completed':
return result_data['task']['result']['token']
elif result_data['task']['status'] == 'failed':
raise Exception('Prosopo captcha solving failed')
print('Waiting for solution...')
token = solve_prosopo_token(
site_url='https://example.com/signup',
site_key='5HGjWAeFDfZs23407hqEQbmkjMkntAbpsaiLd9Y8mhPcB',
api_key='YOUR_API_KEY'
)
print(f'Token: {token[:50]}...')
signup_response = requests.post(
'https://example.com/api/signup',
headers={'Content-Type': 'application/json'},
json={
'email': '[email protected]',
'password': 'securepassword',
'prosopo-response': token
}
)
print(f'Signup status: {signup_response.status_code}')
Best Practices
- Correct Site Key: Always extract the exact site key from the page — Prosopo site keys are unique to each deployment and must match for the token to be valid
- Inspect the Form Submission: Check the network request made when a user submits the form to determine the exact field name the site uses for the Prosopo token
- Token Expiry: Prosopo tokens are time-limited and typically valid for a few minutes — submit them to the protected endpoint immediately after receiving
- Single Use: Prosopo tokens are single-use verification credentials — do not attempt to reuse a token for multiple submissions
- Polling Interval: Use 5-second polling intervals — Prosopo challenges typically complete within 10 to 30 seconds
Common Issues
Solution: Confirm that the site key you provided matches the one actually used by the page. Also verify that the token is being submitted to the correct field name. Inspect the form or API call of a legitimate session to identify the exact field name.
Solution: Prosopo tokens have a short validity window. Generate the token immediately before submitting the form or API call, and minimize any delays between receiving the token and using it.