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.
- 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.
| Component | Technology |
|---|---|
| Language | Go 1.20 |
| HTTP router | Gin |
| Database | MongoDB |
| Logging | zap |
| Config | godotenv |
- Go
1.20or newer - A running MongoDB instance
- A timezone API key (used for accurate payload timestamps)
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# Clone the repository
git clone https://github.com/combo23/datadome_generator.git
cd datadome_generator
# Install dependencies
go get .
# Build
go build .
# Run
./datadome_generatordocker build -t datadome-generator .
docker run --env-file .env -p 8080:8080 datadome-generatorAll endpoints (except /status) require an X-api-key header. Admin-only endpoints require a valid admin API key.
Check whether the service is running.
GET /statusResponse
{
"status": "alive"
}Generate the ch and le payloads for a target site. The ch payload is posted first, followed by le.
POST /datadomeHeaders
| 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=..."
}Create a new user and issue an API key. Admin only.
POST /registerHeaders
| Header | Required | Description |
|---|---|---|
X-api-key |
Yes | Admin API key. |
Request body
{
"name": "@user_name",
"solves": 5000
}Response
{
"status": "success",
"api_key": "XXXXXX"
}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"
}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
}go test ./...This project is licensed under the terms of the LICENSE file included in this repository.