Friendly Captcha Token Solving
Solve Friendly Captcha challenges programmatically. Friendly Captcha is a privacy-focused CAPTCHA alternative that uses proof-of-work puzzles.
What is Friendly Captcha?
Friendly Captcha is a GDPR-compliant, privacy-first CAPTCHA solution. It uses cryptographic proof-of-work puzzles instead of image challenges, making it more accessible while still providing bot protection. The solution returns a token for form submission.
Captcha Type
Use the following captcha type identifier in your API requests:
"type": "FRIENDLY_CAPTCHA_TOKEN"
Finding Captcha Parameters
To solve Friendly Captcha, you need to find the siteKey from the page:
<!-- Look for a div with class frc-captcha: -->
<div class="frc-captcha" data-sitekey="FCMGEMUD2KTDSQ5H"></div>
<!-- The siteKey is: FCMGEMUD2KTDSQ5H -->
Request Format
POST
/createTask
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
auth.token |
string | required | Your API key |
captcha.type |
string | required | Must be "FRIENDLY_CAPTCHA_TOKEN" |
captcha.metadata.siteUrl |
string | required | The URL where the captcha appears |
captcha.metadata.siteKey |
string | required | Friendly Captcha site key (data-sitekey attribute) |
captcha.payload.proxy |
object | optional | Proxy configuration (optional) |
Example Request
JavaScript
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: 'FRIENDLY_CAPTCHA_TOKEN',
metadata: {
siteUrl: 'https://example.com/contact',
siteKey: 'FCMGEMUD2KTDSQ5H'
},
payload: {}
}
})
});
const data = await response.json();
console.log('Task ID:', data.task.id);
Response Format
Create Task Response (Processing)
{
"success": true,
"service": "MyDisct Solver",
"message": "Task created successfully",
"task": {
"id": "MyDisctSolver_abc123",
"status": "processing"
}
}
Fetch Result Response (Completed)
{
"success": true,
"service": "MyDisct Solver",
"message": "Captcha solved successfully",
"task": {
"id": "MyDisctSolver_abc123",
"status": "completed",
"result": {
"token": "f8b10f4ad796484bae963b1ebe3ce2bb.ZXL8Z...AAAAAA.AgAD",
"timestamp": "2025-11-26T12:00:15.000Z"
}
}
}
Using the Token
The token field contains the Friendly Captcha solution. Submit this token in the
frc-captcha-solution input field of the form.
Python Example
Python
import requests
import time
def solve_friendly_captcha(site_url, site_key, api_key):
# Step 1: Create task
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': 'FRIENDLY_CAPTCHA_TOKEN',
'metadata': {
'siteUrl': site_url,
'siteKey': site_key
},
'payload': {}
}
}
)
create_data = create_response.json()
if not create_data['success']:
raise Exception(create_data['error']['message'])
task_id = create_data['task']['id']
# Step 2: Poll for result
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('Solving failed')
# Usage
token = solve_friendly_captcha(
site_url='https://example.com/contact',
site_key='FCMGEMUD2KTDSQ5H',
api_key='YOUR_API_KEY'
)
# Submit with form
response = requests.post('https://example.com/contact', data={
'name': 'John Doe',
'frc-captcha-solution': token
})
Best Practices
Recommendations
- Friendly Captcha tokens expire after a few minutes, use them promptly
- Check for custom solution field names via data-solution-field-name attribute
- Friendly Captcha typically does not require proxy for solving
- Site keys are alphanumeric strings like "FCMGEMUD2KTDSQ5H"