Getting Started
Enterprise-grade hCaptcha solving. Fast, reliable API for Epic Games, Discord, Riot Games, and Steam.
Discord Riot Steam Session Required
For Discord, Riot Games, and Steam you must call /session first to create a browser session before using /solve. Epic Games does not require this step.
Base URL: https://epicfucker.xyz/api
// Authentication is required for all endpoints
{
"api_key": "sk_your_key_here"
}
Submit an hCaptcha challenge. Returns a valid response token for your target platform.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your secret API key |
| sitekey | string | Yes | hCaptcha sitekey for the target platform |
| host | string | Yes | Target domain (e.g. www.epicgames.com) |
| rqdata | string | Yes | Challenge rqdata from the page |
| proxy | string | Yes | Proxy URL (falls back to server pool if empty) |
| href | string | Yes | Full page URL where the captcha appears |
| session_id | string | Conditional | Required for Discord, Riot, and Steam. From /session |
| is_join | boolean | Optional | Set true for Discord server joins (uses dedicated fingerprint profile) |
| is_invisible | boolean | Optional | Set true to force invisible captcha mode |
Note: Epic Games requires www.epicgames.com (with www prefix). Steam requires store.steampowered.com.
Examples
// Epic Games - no session needed
const res = await fetch('https://epicfucker.xyz/api/solve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
host: 'www.epicgames.com',
sitekey: '91e4137f-95af-4bc9-97af-cdcedce21c8c',
proxy: 'http://user:pass@ip:port',
rqdata: 'your_rqdata',
href: 'https://www.epicgames.com/id/login'
})
});
const data = await res.json();
console.log(data.token);
# Epic Games - no session needed
import requests
resp = requests.post('https://epicfucker.xyz/api/solve', json={
'api_key': 'sk_your_key',
'host': 'www.epicgames.com',
'sitekey': '91e4137f-95af-4bc9-97af-cdcedce21c8c',
'proxy': 'http://user:pass@ip:port',
'rqdata': 'your_rqdata',
'href': 'https://www.epicgames.com/id/login'
})
data = resp.json()
print(data['token'])
// Discord register - session required
// Step 1: Create session
const sess = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'discord'
})
}).then(r => r.json());
// Step 2: Solve with session_id
const res = await fetch('https://epicfucker.xyz/api/solve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
host: 'discord.com',
sitekey: 'a9b5fb07-92ff-493f-86fe-352a2803b3df',
proxy: 'http://user:pass@ip:port',
rqdata: 'your_rqdata',
href: 'https://discord.com/register',
session_id: sess.session_id
})
});
const data = await res.json();
console.log(data.token);
// Discord server join - session required + is_join: true
// Step 1: Create session
const sess = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'discord'
})
}).then(r => r.json());
// Step 2: Solve with is_join: true
const res = await fetch('https://epicfucker.xyz/api/solve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
host: 'discord.com',
sitekey: 'a9b5fb07-92ff-493f-86fe-352a2803b3df',
proxy: 'http://user:pass@ip:port',
rqdata: 'your_rqdata',
href: 'https://discord.com/channels/@me/',
session_id: sess.session_id,
is_join: true
})
});
const data = await res.json();
console.log(data.token);
// Steam - session required
// Step 1: Create session
const sess = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'steam'
})
}).then(r => r.json());
// Step 2: Solve with session_id
const res = await fetch('https://epicfucker.xyz/api/solve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
host: 'store.steampowered.com',
sitekey: 'e18a349a-46c2-46a0-87a8-74be79345c92',
proxy: 'http://user:pass@ip:port',
rqdata: 'your_rqdata',
href: 'https://store.steampowered.com/join/',
session_id: sess.session_id
})
});
const data = await res.json();
console.log(data.token);
Success Response
{
"success": true,
"token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"solve_type": "silent_pass",
"elapsed_ms": 3420,
"task_id": "a1b2c3d4e5f6...",
"host": "www.epicgames.com",
"profile": "desktop_146_basic_render",
"user_agent": "Mozilla/5.0...",
"cost": 1,
"remaining_balance": 4999,
"eg-token": "eg1~eyJ...",
"ewa": "b",
"kid": "Yjqmlr"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the solve succeeded |
| token | string | hCaptcha response token to submit to the target site |
| solve_type | string | silent_pass, image_label_binary, or text_free_entry |
| elapsed_ms | number | Total solve time in milliseconds |
| task_id | string | Unique task ID — pass to /report_task to report result |
| host | string | Target domain used for the solve |
| profile | string | Fingerprint profile name used |
| user_agent | string | User-Agent string — use this in your requests to the target site |
| cost | number | Solves deducted from your balance (usually 1) |
| remaining_balance | number | Your remaining solve balance after this request |
| eg-token | string | Epic Games only. XAL token required for Epic login requests |
| ewa | string | Epic Games only. EWA parameter for login |
| kid | string | Epic Games only. KID parameter for login |
| error | string | Error message (only present when success is false) |
Epic Games only: The fields eg-token, ewa, and kid are only returned when the target host is www.epicgames.com. These are required for submitting Epic Games login requests.
Error Response
{
"success": false,
"token": "",
"elapsed_ms": 1200,
"error": "no_pass_token",
"profile": "desktop_146_basic_render",
"user_agent": "Mozilla/5.0..."
}
Create a persistent browser session with a consistent fingerprint. Required for Discord, Riot Games, and Steam before calling /solve.
Required for Discord, Riot, and Steam. Not needed for Epic Games.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your secret API key |
| type | string | Yes | Session type (see table below) |
Session Types
| Type | Platform | Description |
|---|---|---|
| discord | Discord | Discord register and server join captchas |
| riot | Riot | Riot Games authentication captchas |
| steam | Steam | Steam account creation captchas |
| steam_recovery | Steam | Steam account recovery captchas |
| epic | Epic | Epic Games (optional, generates XAL token) |
Examples
const res = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'discord'
})
});
const { session_id, user_agent } = await res.json();
const res = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'riot'
})
});
const { session_id, user_agent } = await res.json();
const res = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'steam'
})
});
const { session_id, user_agent } = await res.json();
const res = await fetch('https://epicfucker.xyz/api/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
type: 'steam_recovery'
})
});
const { session_id, user_agent } = await res.json();
import requests
# Works for all types: discord, riot, steam, steam_recovery, epic
resp = requests.post('https://epicfucker.xyz/api/session', json={
'api_key': 'sk_your_key',
'type': 'steam'
})
data = resp.json()
session_id = data['session_id']
user_agent = data['user_agent']
Response
{
"session_id": "a1b2c3d4e5f6...",
"user_agent": "Mozilla/5.0...",
"profile": "desktop_146_basic_render",
"type": "steam"
}
Tip: Use the same session_id for multiple solves to maintain a consistent browser fingerprint. The user_agent returned should be used in your requests to the target site.
Generate a Discord token with automatic registration, email verification, and unlock check.
Full Automation Flow
Handles registration, captcha solving, email verification, and unlock check in a single call. Deducts 1 credit per successful generation.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your API key |
| proxy | string | Yes | Proxy URL (http://user:pass@ip:port) |
| string | Optional | Custom email (if provided, skips auto-verification) |
Status "email_locked": When using a custom email (not auto-generated), the account may receive "email_locked" status. Auto-generated emails are fully verified by the system.
// Auto-generated email (fully verified)
const res = await fetch('https://epicfucker.xyz/api/tokengen', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
proxy: 'http://user:pass@ip:port'
})
});
const data = await res.json();
console.log(data.token);
// Custom email (skips verification, may be email_locked)
const res = await fetch('https://epicfucker.xyz/api/tokengen', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
proxy: 'http://user:pass@ip:port',
email: 'custom@gmail.com'
})
});
const data = await res.json();
console.log(data.token);
# Auto-generated email (fully verified)
import requests
resp = requests.post('https://epicfucker.xyz/api/tokengen', json={
'api_key': 'sk_your_key',
'proxy': 'http://user:pass@ip:port'
})
data = resp.json()
print(data['token'])
# Custom email (skips verification, may be email_locked)
import requests
resp = requests.post('https://epicfucker.xyz/api/tokengen', json={
'api_key': 'sk_your_key',
'proxy': 'http://user:pass@ip:port',
'email': 'custom@gmail.com'
})
data = resp.json()
print(data['token'])
Response
{
"success": true,
"token": "MTE3NjQ...",
"email": "abc123@mailer.work.gd",
"password": "x7k92!@ABCD",
"status": "unlocked", // "unlocked" or "locked" or "email_locked"
"verify": "verified", // "verified" or "failed_to_verify"
"elapsed_ms": 45200
}
Report whether a token was accepted or rejected by the target site.
Optional but recommended for Discord, Riot, and Steam.
| Field | Type | Description |
|---|---|---|
| api_key | string | Your API key |
| task_id | string | From /solve response |
| result | string | "success" or "incorrect" |
const res = await fetch('https://epicfucker.xyz/api/report_task', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'sk_your_key',
task_id: 't_abc123',
result: 'success'
})
});
Retrieve account statistics and balance.
// GET /api/client/stats?key=sk_your_key
{
"name": "username",
"total_solves": 1523,
"balance": 487,
"epic_access": true,
"stats": {
"image_label_binary": 850,
"text_free_entry": 120
},
"reports": {
"success": 1480,
"incorrect": 43
}
}
Balance System
Pay only for successful solves. Failed attempts are free.
| Event | Cost |
|---|---|
| Successful solve | -1 credit |
| Failed solve | 0 credits |
| Admin top-up | +N credits |
Platform Notes
Epic Games
- Host must be www.epicgames.com (with www)
- No session required
- Returns eg-token (XAL) for login
- Reporting is mandatory
Discord
- Session required (type: discord)
- Use is_join: true for server join captchas (uses dedicated fingerprint)
- Register and join use different motion profiles internally
- Reporting recommended
Riot Games
- Session required (type: riot)
- Host: authenticate.riotgames.com
Steam
- Session required (type: steam or steam_recovery)
- Host: store.steampowered.com
- Use steam for account creation, steam_recovery for account recovery
- Each type loads a different fingerprint pool
Sitekeys
Reference table of known sitekeys per platform.
| Platform | Sitekey | Host |
|---|---|---|
| Epic | 91e4137f-95af-4bc9-97af-cdcedce21c8c | www.epicgames.com |
| Discord | a9b5fb07-92ff-493f-86fe-352a2803b3df | discord.com |
| Riot | 019f1553-3845-481c-a6f5-5a60ccf6d830 | authenticate.riotgames.com |
| Steam | e18a349a-46c2-46a0-87a8-74be79345c92 | store.steampowered.com |
Proxy
If not provided, the server uses its internal proxy pool as fallback.
// Supported formats
"http://user:pass@host:port"
"http://host:port"
Error Codes
| Code | Meaning |
|---|---|
| 400 | Bad Request - Invalid or missing parameters |
| 401 | Unauthorized - Invalid API key |
| 403 | Forbidden - Insufficient balance or sitekey not allowed |
| 429 | Too Many Requests - Rate limited (too many no-balance attempts) |
| 500 | Server Error - Not charged |
{
"success": false,
"error": "Invalid API key"
}