Users
Every route on this page needs the users scope. A user’s sessions and sign-in history are under
Logins and audit (scope logins).
List users
Section titled “List users”/seller/v1/usersscope: users| Query | Notes |
|---|---|
app_id |
Your token’s app |
q |
Username (up to 32 characters) |
banned |
true or false |
page, page_size |
See paging |
{ "ok": true, "data": { "items": [ { "id": "usr_9206d97f8a2f426a9dc457b0177ae800", "app_id": "app_ea9745b1df9e4a9bacb22cb1c200993b", "app_name": "My App", "username": "carol", "login_method": "key", "hwid": "4ccd18389bb5a0309978674695321f6f7b1fa67c12ca8392e5f115d73886e85e", "hwid_check": null, "banned": 0, "ban_reason": null, "created_at": 1794497606, "last_login": 1794497606, "last_login_ip": "203.0.113.24", "hwid_resets_used": 0, "paused_at": null, "keys_redeemed": 1, "active_sessions": 1, "subscriptions": [ { "tier_id": "tier_048ef9f8f38c4ab2af05db05bbde4aed", "tier": "Default", "level": 1, "expires_at": 1797089606, "active": true } ], "max_hwid_resets": 1, "hwid_locked": true, "hwid_lock_source": "app" } ], "total": 3, "page": 1, "page_size": 50 }}login_methodispasswordorkey(a key-login account).subscriptions[].expires_atisnullfor lifetime tiers.hwid_lock_sourcesays which setting decidedhwid_locked:user,keyorapp.
Ban and unban
Section titled “Ban and unban”/seller/v1/user/banscope: usersEnds the user’s sessions at once and refuses new sign-ins.
| Field | Type | Required | Notes |
|---|---|---|---|
user_id |
string | yes | |
reason |
string | no | Up to 200 characters |
{ "ok": true, "data": { "banned": true, "sessions_revoked": 1 } }/seller/v1/user/unbanscope: users{ "user_id": "usr_9206d97f8a2f426a9dc457b0177ae800" }{ "ok": true, "data": { "banned": false } }Pause and unpause
Section titled “Pause and unpause”/seller/v1/user/pausescope: usersStops the user’s subscriptions counting down. A paused user can’t sign in (USER_PAUSED).
{ "user_id": "usr_4d97591b6d9040f38bc196b6b4ac0236" }{ "ok": true, "data": { "paused": true } }/seller/v1/user/unpausescope: usersGives back exactly the time the user was paused for.
{ "ok": true, "data": { "paused": false, "seconds_returned": 86400, "tiers": ["Default"] } }HWID lock
Section titled “HWID lock”/seller/v1/user/hwid-checkscope: usersSets this user’s PC lock. The user setting wins over keys and the app.
| Field | Type | Required | Notes |
|---|---|---|---|
user_id |
string | yes | |
hwid_check |
boolean or null | yes | true always lock, false never lock, null follow keys and app |
{ "ok": true, "data": { "user_id": "usr_4d97591b6d9040f38bc196b6b4ac0236", "hwid_check": false } }/seller/v1/user/reset-hwidscope: usersFrees the user’s PC lock so they can sign in from a new PC. Counts against their allowance and respects the app’s cooldown.
| Field | Type | Required | Notes |
|---|---|---|---|
user_id |
string | yes | |
force |
boolean | no | Ignore the allowance. Owner only, not available to tokens |
{ "ok": true, "data": { "reset": true, "hwid_resets_used": 1, "allowance": 1 } }When no PC is bound yet, nothing is used up:
{ "ok": true, "data": { "reset": false, "reason": "No HWID is bound" } }409 HWID_RESET_QUOTA_EXCEEDED when the allowance is used up; 409 HWID_RESET_COOLDOWN when the
last reset was too recent.
Rename
Section titled “Rename”/seller/v1/user/renamescope: users| Field | Type | Required | Notes |
|---|---|---|---|
user_id |
string | yes | |
username |
string | yes | 3 to 32 letters, digits, _, ., -; unique in the app |
{ "ok": true, "data": { "username": "alice2" } }409 USERNAME_TAKEN if another account in the app has it.
Per-user variables
Section titled “Per-user variables”The small values your app stores on a user’s account (up to 50, 4 KB each).
/seller/v1/user/variablesscope: users| Query | Required |
|---|---|
user_id |
yes |
{ "ok": true, "data": { "items": [{ "name": "theme", "value": "dark", "updated_at": 1794497607 }] } }/seller/v1/user/variable/setscope: users| Field | Type | Required | Notes |
|---|---|---|---|
user_id |
string | yes | |
name |
string | yes | Letters, digits, _, ., -, up to 64 |
value |
string or null | yes | Up to 4096 characters. null deletes it |
{ "ok": true, "data": { "saved": true } }Add or subtract time
Section titled “Add or subtract time”/seller/v1/users/timescope: usersFor some users or for every user in the app.
| Field | Type | Required | Notes |
|---|---|---|---|
app_id |
string | yes | |
user_ids |
string[] | one of these | 1 to 1000 users |
all_users |
boolean | one of these | true for every user. Give user_ids or all_users, not both |
tier_id |
string or null | no | Only this tier; absent or null for all of the user’s tiers |
seconds |
integer | yes | Positive adds, negative subtracts. Not 0; at most ten years either way |
reason |
string | no | Up to 200 characters |
{ "app_id": "app_ea9745b1df9e4a9bacb22cb1c200993b", "all_users": true, "seconds": 86400, "reason": "outage on 12 Nov" }{ "ok": true, "data": { "adjustments": 3 } }adjustments counts the subscriptions changed.
Delete a user
Section titled “Delete a user”/seller/v1/user/deletescope: usersRemoves the account and the keys linked to it.
{ "user_id": "usr_9206d97f8a2f426a9dc457b0177ae800" }{ "ok": true, "data": { "deleted": true, "keys_deleted": 1 } }Whole-app tools
Section titled “Whole-app tools”/seller/v1/users/unban-allscope: users{ "app_id": "app_ea9745b1df9e4a9bacb22cb1c200993b" }{ "ok": true, "data": { "unbanned": 0 } }/seller/v1/users/delete-expiredscope: usersDeletes users with no active subscription, 500 accounts at a time. Paused users and accounts made in
the last hour are left alone. Call it again with next_offset while remaining is true.
| Field | Type | Required | Notes |
|---|---|---|---|
app_id |
string | yes | |
offset |
integer | no | Default 0; pass the previous next_offset |
{ "ok": true, "data": { "checked": 500, "deleted": 212, "next_offset": 288, "remaining": true } }/seller/v1/users/reset-all-hwidsnot available to tokensResets every user’s PC lock. Owner only: a token gets 403 FORBIDDEN. Use the panel.
Export users
Section titled “Export users”/seller/v1/users/exportscope: usersUp to 5,000 users, oldest first.
| Query | Required |
|---|---|
app_id |
yes |
{ "ok": true, "data": { "items": [ { "id": "usr_4d97591b6d9040f38bc196b6b4ac0236", "username": "alice", "login_method": "key", "hwid": null, "banned": 0, "ban_reason": null, "paused_at": null, "created_at": 1794497605, "last_login": 1794497605, "last_login_ip": "203.0.113.24", "subscriptions": "Default:1797179605" } ], "truncated": false }}subscriptions is tier:expires_at pairs separated by spaces, with lifetime in place of a time
for lifetime tiers.
Blacklist
Section titled “Blacklist”Blocks PCs and IP addresses from the app. See Blacklist.
/seller/v1/blacklistscope: users| Query | Required |
|---|---|
app_id |
yes |
{ "ok": true, "data": { "items": [ { "id": "bl_ea13fe49ab37464c9be58b59e6a0d500", "type": "hwid", "value": "e77c589552ba961b5d6ae3a743e7ea69c04b6f7dbb606895b26a717c72dd8810", "reason": "cracked build", "created_at": 1794497607, "created_by": "tok_2ad338dbbfe44929977a4c4525a9e274" } ] }}/seller/v1/blacklist/addscope: usersMatching sessions end at once.
| Field | Type | Required | Notes |
|---|---|---|---|
app_id |
string | yes | |
type |
string | yes | hwid or ip |
value |
string | yes | A 64-character hex HWID, or an IPv4 / IPv6 address |
reason |
string | no | Up to 200 characters |
{ "ok": true, "data": { "added": true, "sessions_revoked": 0 } }The new entry’s ID is in the list.
/seller/v1/blacklist/removescope: users{ "entry_id": "bl_ea13fe49ab37464c9be58b59e6a0d500" }{ "ok": true, "data": { "removed": true } }Free devices
Section titled “Free devices”PCs using the app’s free mode.
/seller/v1/free-devicesscope: users| Query | Notes |
|---|---|
app_id |
Required |
q |
Part of a HWID or IP address (up to 64 characters) |
status |
banned or converted |
page, page_size |
See paging |
{ "ok": true, "data": { "items": [ { "id": "dev_bb0945821ca7419e9ce38e951b678d5b", "hwid": "f7cb1fde8e5b66efff9f155b10ba8d442f6e09c17d062dd0cbfa1c2d5d3ba4f8", "first_seen_at": 1794497606, "last_seen_at": 1794497606, "last_version": "1.4.2", "last_ip": "203.0.113.50", "logins": 1, "banned": 0, "ban_reason": null, "user_id": null, "username": null, "converted_at": null, "online": 1 } ], "total": 1 }}user_id, username and converted_at are set once the PC has signed in to an account.
/seller/v1/free-device/banscope: users| Field | Type | Required | Notes |
|---|---|---|---|
device_id |
string | yes | |
reason |
string | no | Up to 200 characters |
{ "ok": true, "data": { "banned": true } }/seller/v1/free-device/unbanscope: users{ "ok": true, "data": { "banned": false } }/seller/v1/free-device/deletescope: usersForgets the PC. If it signs in again it is a new free device.
{ "ok": true, "data": { "deleted": true } }