All REST API endpoints are hosted at https://cloud.bots.win/api and require Bearer token authentication:
Authorization: Bearer your-user-token-hereCheck remaining quota before launching jobs.
curl -H "Authorization: Bearer your-token" https://cloud.bots.win/api/quotaResponse:
{
"remainingQuota": 7650,
"sessions": {
"max": 5,
"active": 2
},
"pricing": {
"baseRate": 1,
"current": {
"multiplier": 1.3,
"effectiveRate": 1.3
},
"max": {
"multiplier": 1.8,
"effectiveRate": 1.8
},
"breakdown": {
"sessionMultiplier": 1.3,
"cloakTierPremium": 0.5,
"contextMultiplier": 1.0,
"userDataPremium": 0.1,
"devtoolsPremium": 0.35,
"superStealthPremium": 0.40
}
}
}Response Fields:
| Field | Description |
|---|---|
remainingQuota |
Available quota balance |
sessions.max |
Maximum allowed concurrent sessions |
sessions.active |
Currently active sessions |
pricing.baseRate |
Base quota consumption per minute |
pricing.current |
Billing rate based on current active sessions |
pricing.max |
Billing rate if using maximum sessions |
pricing.breakdown |
Detailed multiplier components |
pricing.breakdown.sessionMultiplier |
Multiplier based on concurrent session count |
pricing.breakdown.cloakTierPremium |
Premium for Cloak Tier (basic/pro/ent1/ent2/ent3) |
pricing.breakdown.contextMultiplier |
Multiplier for Multi-Context feature (1.0 = disabled, 1.5 = enabled) |
pricing.breakdown.userDataPremium |
Premium for User Data quota |
pricing.breakdown.devtoolsPremium |
Premium for DevTools access (+0.35) |
pricing.breakdown.superStealthPremium |
Premium for Super Stealth Mode (+0.40) |
Get usage statistics for reporting and cost analysis.
curl -H "Authorization: Bearer your-token" https://cloud.bots.win/api/usageResponse:
{
"totalSessions": 142,
"totalMinutes": 2350,
"activeSessions": 1
}Retrieve session history for audit trails. Supports optional start and end query parameters (ISO 8601 timestamps).
curl -H "Authorization: Bearer your-token" https://cloud.bots.win/api/historyWith date range:
curl -H "Authorization: Bearer your-token" \
"https://cloud.bots.win/api/history?start=2025-01-01T00:00:00Z&end=2025-01-31T23:59:59Z"Response:
{
"sessions": [
{
"id": 1,
"startedAt": "2025-01-15T10:30:00Z",
"endedAt": "2025-01-15T10:33:25Z",
"durationMinutes": 3,
"quotaConsumed": 3,
"disconnectReason": "client_closed"
}
],
"total": 1
}Disconnect Reasons:
| Reason | Description |
|---|---|
client_closed |
Client called browser.close() |
client_disconnected |
WebSocket connection closed unexpectedly |
server_closed |
Browser server closed the connection |
insufficient_balance |
Quota exhausted during session |
socket_timeout |
No data transferred for 5 minutes |
tcp_error |
Network error |
User Data enables persistent browser state (cookies, localStorage, login sessions) and fingerprint binding across sessions.
Create a new User Data entry.
curl -X POST \
-H "Authorization: Bearer your-token" \
https://cloud.bots.win/api/user-dataResponse:
{
"id": "udd_abc123def456xyz0",
"createdAt": "2025-01-15T10:30:00Z"
}Error Codes:
| Code | Message | Description |
|---|---|---|
| 403 | NO_PERMISSION |
User does not have permission to create User Data |
| 429 | QUOTA_EXCEEDED |
User Data quota limit reached |
List all User Data entries owned by the authenticated user.
curl -H "Authorization: Bearer your-token" \
https://cloud.bots.win/api/user-dataResponse:
{
"items": [
{
"id": "udd_abc123def456xyz0",
"createdAt": "2025-01-15T10:30:00Z",
"lastUsedAt": "2025-01-16T08:00:00Z",
"isLocked": false
}
],
"total": 1,
"quota": {
"used": 1,
"max": 5,
"canCreate": true
}
}Field Descriptions:
| Field | Description |
|---|---|
isLocked |
True when User Data is currently in use by an active session |
quota.used |
Number of User Data entries created |
quota.max |
Maximum allowed User Data entries |
quota.canCreate |
Whether user can create more User Data |
Delete a User Data entry and its associated browser data.
curl -X DELETE \
-H "Authorization: Bearer your-token" \
https://cloud.bots.win/api/user-data/udd_abc123def456xyz0Response:
{
"success": true
}Error Codes:
| Code | Description |
|---|---|
| 404 | User Data not found |
| 403 | Access denied (not owned by user) |
| 409 | User Data is currently in use (locked) |
User Data enables:
- Fingerprint Persistence: Same device identity across sessions (canvas, WebGL, audio fingerprints)
- State Persistence: Cookies, localStorage, and login states survive session restarts
- Session Lock: Only one active session can use a
user_data_idat a time
// 1. Create User Data
const response = await fetch('https://cloud.bots.win/api/user-data', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` }
});
const { id: userDataId } = await response.json();
// 2. Connect with User Data
const params = new URLSearchParams({
token: 'your-token',
'--proxy-server': 'username:password@proxy.example.com:4600',
user_data_id: userDataId
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://cloud.bots.win?${params.toString()}`
});
// 3. Browser state persists across sessions
// Cookies, localStorage, and fingerprint remain consistentSee examples/user-data/ for complete working examples.
User Data enables fingerprint persistence across sessions:
| Scenario | Fingerprint | Browser State |
|---|---|---|
With user_data_id |
Persistent (bound to user_data_id + device_type) | Persistent |
Without user_data_id |
Fresh each session | Not persisted |
View Fingerprint Management Guide →
Connect to BotCloud via WebSocket:
wss://cloud.bots.win?token=xxx&--proxy-server=user:pass@host:port&device_type=mac
See CLI Parameters for all available connection parameters.
BotCloud uses dynamic usage-based billing. Your rate is calculated based on actual resource usage.
Total Multiplier = Session Multiplier × Context Multiplier + Cloak Tier Premium + User Data Premium + DevTools Premium + Super Stealth Premium
Effective Rate = Base Rate × Total Multiplier
- Base rate: 1 quota per minute
- Context Multiplier: 1.0x (standard) or 1.5x (Multi-Context enabled, ENT3 required)
Based on concurrent session count:
| Sessions | Multiplier |
|---|---|
| 1 | 1.0x |
| 2-5 | 1.3x |
| 6-10 | 1.8x |
| 11-20 | 2.7x |
| 21-50 | 4.5x |
| 51-100 | 6.0x |
| 101-200 | 10.5x |
| 201-300 | 15.5x |
| 301-500 | 23.0x |
| 501-1000 | 44.0x |
| Tier | Premium | Features |
|---|---|---|
| basic | +0 | Proxy support (HTTP/HTTPS/SOCKS5/SOCKS5H), noise controls (Canvas/WebGL/Audio/ClientRects/TextRects), auto geo detection from proxy IP, Playwright/Puppeteer integration, cross-platform profiles (mac/win), basic WebRTC control |
| pro | +1.0 | + Random history injection (--bot-inject-random-history), always-active windows (--bot-always-active), Android profile support |
| ent1 | +2.0 | + Cookie management (--bot-cookies), proxy IP specification (--proxy-ip), local DNS (--bot-local-dns), per-context proxy, custom geo override, console message suppression (--bot-disable-console-message), WebRTC ICE control (--bot-webrtc-ice) |
| ent2 | +3.0 | + Browser brand spoofing (--bot-config-browser-brand), deterministic noise seed (--bot-noise-seed), time scaling (--bot-time-scale), precision FPS simulation, Widevine CDM, DRM simulation, extension sync |
| ent3 | +4.0 | + SOCKS5 UDP/QUIC tunneling, Mirror distributed sync (--bot-mirror-*), Multi-Context (up to 10 contexts with per-context fingerprint) |
| Feature | Premium | Description |
|---|---|---|
| DevTools | +0.35 | Remote browser debugging via Chrome DevTools |
| Super Stealth | +0.40 | Maximum anti-detection capability |
| Multi-Context | 1.5x | Up to 10 independent contexts per session (ENT3 required) |
All API errors return JSON with an error message:
{
"error": "Error message here"
}Common HTTP status codes:
| Code | Description |
|---|---|
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid or missing token |
| 403 | Forbidden - No permission or quota exceeded |
| 404 | Not Found - Resource doesn't exist |
| 409 | Conflict - Resource is locked |
| 429 | Too Many Requests - Rate limited |
| 500 | Internal Server Error |