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"
}
POST /solve

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..."
}
POST /session

Create a persistent browser session with a consistent fingerprint. Required for Discord, Riot Games, and Steam before calling /solve.

Discord Riot Steam

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.

POST /tokengen

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)
email 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
}
POST /report_task

Report whether a token was accepted or rejected by the target site.

Required for Epic

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'
  })
});
GET /client/stats

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"
}