DataDome Generator
A high-performance HTTP service, written in Go, that generates valid DataDome payloads to solve and bypass DataDome's bot-protection challenges. It exposes a small, API-key-authenticated REST API for generating payloads and managing user quotas, backed by MongoDB.
Last supported DataDome version:
4.19.0If you prefer a managed solution, CapSolver is a viable alternative.
[!WARNING] This project is provided for educational and research purposes only. You are responsible for ensuring your use complies with the terms of service of any site you interact with and with all applicable laws.
Features
- Payload generation — produces the
chandlejsDatapayloads required to pass DataDome challenges. - API-key authentication — every request is authenticated; admin keys gate user management.
- Usage quotas — per-user solve limits with the ability to query remaining solves.
- User management — register, ban, and inspect users via dedicated endpoints.
- MongoDB-backed — persistent storage for users, keys, and quotas.
- Structured logging — powered by zap.
- Docker-ready — ships with a
Dockerfilefor containerized deployment.
Tech Stack
| Component | Technology |
|---|---|
| Language | Go 1.20 |
| HTTP router | Gin |
| Database | MongoDB |
| Logging | zap |
| Config | godotenv |
Getting Started
Prerequisites
- Go
1.20or newer - A running MongoDB instance
- A timezone API key (used for accurate payload timestamps)
Configuration
Create a .env file based on .env.example:
MONGO_URI= # MongoDB connection string
ADDRESS= # Address the server listens on (e.g. :8080)
TIMEZONE_API_KEY= # API key for the timezone provider
RELEASE_MODE= # "true" to run Gin in release mode
ADMIN_API_KEY= # Master key for admin-only endpoints
Installation
# Clone the repository
git clone https://github.com/combo23/datadome_generator.git
cd datadome_generator
# Install dependencies
go get .
# Build
go build .
# Run
./datadome_generator
Docker
docker build -t datadome-generator .
docker run --env-file .env -p 8080:8080 datadome-generator
API Reference
All endpoints (except /status) require an X-api-key header. Admin-only endpoints require a valid admin API key.
Health Check
Check whether the service is running.
GET /status
Response
{
"status": "alive"
}
Generate DataDome Payload
Generate the ch and le payloads for a target site. The ch payload is posted first, followed by le.
POST /datadome
Headers
| Header | Required | Description |
|---|---|---|
X-api-key |
Yes | Your API key. |
Request body
{
"site": "tickets.mancity.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
"cid": "xxxxx",
"responsePage": "origin",
"IP": "your_ip",
"referer": "https://tickets.mancity.com/en-GB/categories/Men's%20Tickets"
}
Response
{
"ch": "jsData=...",
"le": "jsData=..."
}
Register User
Create a new user and issue an API key. Admin only.
POST /register
Headers
| Header | Required | Description |
|---|---|---|
X-api-key |
Yes | Admin API key. |
Request body
{
"name": "@user_name",
"solves": 5000
}
Response
{
"status": "success",
"api_key": "XXXXXX"
}
Ban User
Revoke a user's access by their API key. Admin only.
POST /ban?apikey=<user_api_key>
Query parameters
| Parameter | Required | Description |
|---|---|---|
apikey |
Yes | API key of the user to ban. |
Headers
| Header | Required | Description |
|---|---|---|
X-api-key |
Yes | Admin API key. |
Response
{
"status": "success"
}
Get Remaining Solves
Fetch the number of solves remaining for a given API key.
GET /solves?apikey=<user_api_key>
Query parameters
| Parameter | Required | Description |
|---|---|---|
apikey |
Yes | API key to check the remaining solves for. |
Response
{
"solves": 1000
}
Testing
go test ./...
License
This project is licensed under the terms of the LICENSE file included in this repository.