3x-ui3x-ui

Clients

Manage clients as first-class entities that can be attached to one or more inbounds. A single client row drives the settings.clients entry in every inbound it belongs to. Endpoints live under /panel/api/clients.

GET
/panel/api/clients/list

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/list'
Example Response200
{  "success": true,  "obj": [    {      "id": 1,      "email": "alice@example.com",      "subId": "abcd1234",      "uuid": "...",      "totalGB": 53687091200,      "expiryTime": 1735689600000,      "enable": true,      "reverse": null,      "inboundIds": [        3,        5      ],      "traffic": {        "up": 1024,        "down": 4096,        "enable": true      }    }  ]}
GET
/panel/api/clients/list/paged

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Query Parameters

page?integer

1-indexed page number. Defaults to 1.

Default1
pageSize?integer

Rows per page. Defaults to 25, capped at 200.

Default25
search?string

Case-insensitive substring match on email, subId, comment, UUID, password, auth or Telegram ID.

filter?string

CSV status buckets: online, active, deactive, depleted or expiring. Values are ORed.

protocol?string

CSV inbound protocols: vmess, vless, trojan, shadowsocks, wireguard, hysteria, http, mixed, tunnel, tun, mtproto or amneziawg. Values are ORed.

inbound?string

CSV positive inbound IDs. Values are ORed; invalid or non-positive IDs are ignored.

sort?string

Sort key. An omitted or unknown value falls back to client ID ascending.

Value in"enable""email""inboundIds""traffic""remaining""expiryTime""createdAt""updatedAt""lastOnline"
order?string

Sort direction. Only descend selects descending order; otherwise ascending.

Value in"ascend""descend"
expiryFrom?integer

Inclusive minimum expiry time in Unix milliseconds. Zero or negative means unset.

expiryTo?integer

Inclusive maximum expiry time in Unix milliseconds. Zero or negative means unbounded.

usageFrom?integer

Inclusive minimum combined upload and download usage in bytes. Zero means unset.

usageTo?integer

Inclusive maximum combined upload and download usage in bytes. Zero means unbounded.

autoRenew?string

on selects clients with an interval or calendar-day reset; off selects clients without either.

Value in"on""off"
hasTgId?string

yes selects clients with a non-zero Telegram ID; no selects clients without one.

Value in"yes""no"
hasComment?string

yes selects clients with a non-blank comment; no selects clients without one.

Value in"yes""no"
group?string

CSV group names, matched case-insensitively after trimming. Values are ORed.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?

ClientPageResponse is the shape returned by ListPaged. Total is the row count in the DB; Filtered is the count after Search/Filter/Protocol were applied, before pagination. The page contains at most PageSize items. Summary is computed across the full DB row set so dashboard counters on the clients page stay stable as the user paginates/filters.

Example Request
curl -X GET 'https://example.com/panel/api/clients/list/paged'
Example Response200
{  "success": true,  "obj": {    "filtered": 47,    "groups": [      "staff",      "trial"    ],    "items": [      {        "comment": "Primary device",        "createdAt": 1735000000000,        "email": "alice@example.com",        "enable": true,        "expiryTime": 1735689600000,        "group": "staff",        "inboundIds": [          3,          5        ],        "limitHwid": 0,        "limitIp": 0,        "reset": 0,        "resetDay": 0,        "resetMax": 0,        "resetWeekday": 0,        "subId": "abcd1234",        "totalGB": 53687091200,        "traffic": null,        "updatedAt": 1735100000000      }    ],    "page": 1,    "pageSize": 25,    "summary": {      "active": 1850,      "deactive": [        "bob@example.com"      ],      "deactiveCount": 150,      "depleted": [],      "depletedCount": 0,      "expiring": [],      "expiringCount": 0,      "online": [        "alice@example.com"      ],      "onlineCount": 1,      "total": 2000    },    "total": 2000  }}
GET
/panel/api/clients/get/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/get/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
GET
/panel/api/clients/get

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Query Parameters

email*string

Client email (unique identifier).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/get?email=string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
GET
/panel/api/clients/get/subId/{subId}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

subId*string

Exact subscription ID (URL-encoded).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?array<>|null
Example Request
curl -X GET 'https://example.com/panel/api/clients/get/subId/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": [    {      "client": {        "adTag": "string",        "allowedIPs": "string",        "auth": "string",        "clientHostRuleIds": [          1,          2        ],        "comment": "string",        "createdAt": 0,        "email": "string",        "enable": true,        "expiryTime": 0,        "flow": "string",        "forwardedPorts": "string",        "group": "string",        "id": 0,        "keepAlive": 0,        "limitHwid": 0,        "limitIp": 0,        "password": "string",        "preSharedKey": "string",        "privateKey": "string",        "publicKey": "string",        "reset": 0,        "resetDay": 0,        "resetMax": 0,        "resetWeekday": 0,        "reverse": null,        "secret": "string",        "security": "string",        "subId": "string",        "tgId": 0,        "totalGB": 0,        "trafficReset": "string",        "trafficResetDay": 0,        "updatedAt": 0,        "uuid": "string"      },      "inboundIds": [        0      ],      "externalLinks": [        {}      ],      "usedTraffic": 0,      "tunnelAllowedIPs": {        "property1": "string",        "property2": "string"      }    }  ]}
GET
/panel/api/clients/get/tgId/{tgId}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

tgId*integer

Telegram user ID (numeric).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/get/tgId/0'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/add

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body
client*

Client fields: email, subId, id (uuid), password, auth, flow, totalGB, expiryTime, limitIp, limitHwid, tgId (numeric Telegram user ID, 0 = none), comment, enable. Protocol-specific: secret and adTag (mtproto), privateKey, publicKey, preSharedKey, allowedIPs and keepAlive (WireGuard).

inboundIds*array<integer>

Inbound IDs to attach the client to. At least one required.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/add' \  -H 'Content-Type: application/json' \  -d '{  "client": {    "email": "alice@example.com",    "totalGB": 53687091200,    "expiryTime": 1735689600000,    "tgId": 0,    "limitIp": 0,    "limitHwid": 0,    "enable": true  },  "inboundIds": [    3,    5  ]}'
Example Response200
{  "success": true,  "msg": "Client added"}
POST
/panel/api/clients/renewalPreview

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body
expiryTime*integer

Current cutoff in Unix milliseconds; 0 unlimited, negative first-use duration.

reset*integer

Fixed interval in days; 0 disabled.

resetDay*integer

Monthly calendar day 1-31; 0 disabled.

resetWeekday*integer

Weekly calendar day 1-7 (Monday-Sunday); 0 disabled.

resetMax*integer

Maximum renewals; 0 unlimited.

resetCount*integer

Renewals already consumed; defaults to 0.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?
Example Request
curl -X POST 'https://example.com/panel/api/clients/renewalPreview' \  -H 'Content-Type: application/json' \  -d '{  "expiryTime": 0,  "reset": 0,  "resetDay": 0,  "resetWeekday": 0,  "resetMax": 0,  "resetCount": 0}'
Example Response200
{  "success": true,  "obj": {    "canRenew": true,    "delayedStart": false,    "nextExpiry": "2030-02-01T00:00:00Z",    "renewAt": "2030-01-01T00:00:00Z",    "renewals": 1,    "suggestedExpiry": "2030-01-01T00:00:00Z",    "suggestedExpiryTime": 1893456000000,    "timeZone": "UTC",    "validThrough": "2029-12-31T23:59:59Z"  }}
POST
/panel/api/clients/update/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Current client email (unique identifier).

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/update/string' \  -H 'Content-Type: application/json' \  -d '{  "email": "alice@example.com",  "totalGB": 107374182400,  "expiryTime": 1767225600000,  "limitHwid": 2,  "tgId": 123456789,  "enable": true}'
Example Response200
{  "success": true,  "msg": "Client updated"}
POST
/panel/api/clients/update

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Query Parameters

email*string

Current client email (unique identifier).

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/update?email=string' \  -H 'Content-Type: application/json' \  -d '{  "email": "alice@example.com",  "totalGB": 107374182400,  "expiryTime": 1767225600000,  "limitHwid": 2,  "tgId": 123456789,  "enable": true}'
Example Response200
{  "success": true,  "msg": "Client updated"}
POST
/panel/api/clients/del/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Query Parameters

keepTraffic*integer

Pass 1 to retain the xray_client_traffic row after deletion.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/del/string?keepTraffic=0'
Example Response200
{  "success": true,  "msg": "Client deleted"}
POST
/panel/api/clients/del

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Query Parameters

email*string

Client email (unique identifier).

keepTraffic*integer

Pass 1 to retain the xray_client_traffic row after deletion.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/del?email=string&keepTraffic=0'
Example Response200
{  "success": true,  "msg": "Client deleted"}
POST
/panel/api/clients/{email}/attach

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json
  1. body
inboundIds*array<integer>

Inbound IDs to attach.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/string/attach' \  -H 'Content-Type: application/json' \  -d '{  "inboundIds": [    7,    9  ]}'
Example Response200
{  "success": true}
POST
/panel/api/clients/{email}/detach

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json
  1. body
inboundIds*array<integer>

Inbound IDs to detach.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/string/detach' \  -H 'Content-Type: application/json' \  -d '{  "inboundIds": [    5  ]}'
Example Response200
{  "success": true}
POST
/panel/api/clients/{email}/externalLinks

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json
  1. body
externalLinks*array<>

Full replacement list; the server replaces all rows. Each row supports { kind, value, remark, enable, expiryTime, namePrefix }. kind=link: value must be a supported share link such as vless://, vmess://, trojan://, ss://, hysteria2://, or wireguard://, and remark overrides the exported node name. kind=subscription: value must be an http(s) subscription URL, and namePrefix is prepended to fetched node names. Omit enable to default true; enable=false or an expired expiryTime keeps the row saved but excludes it from generated subscriptions. expiryTime is a unix millisecond timestamp where 0 means no link-specific expiry; the owning client's enabled state and expiry still apply. A negative value is rejected. Rows are matched by kind+value across saves, so id is ignored on write. lastFetchAt and lastFetchError are read-only status fields returned by GET.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/string/externalLinks' \  -H 'Content-Type: application/json' \  -d '{  "externalLinks": [    {      "kind": "link",      "value": "vless://uuid@host:443?...#srv",      "remark": "DE",      "enable": true,      "expiryTime": 0    },    {      "kind": "subscription",      "value": "https://provider.example/sub/abc",      "remark": "Provider",      "enable": false,      "expiryTime": 1767225600000,      "namePrefix": "[zjh] "    }  ]}'
Example Response200
{  "success": true}
POST
/panel/api/clients/resetAllTraffics

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/resetAllTraffics'
Example Response200
{  "success": true}
POST
/panel/api/clients/delDepleted

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/delDepleted'
Example Response200
{  "success": true,  "obj": {    "deleted": 0  }}
POST
/panel/api/clients/delOrphans

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/delOrphans'
Example Response200
{  "success": true,  "obj": {    "deleted": 0  }}
Example Request
curl -X GET 'https://example.com/panel/api/clients/export'
Example Response200
{  "success": true,  "obj": [    {      "client": {        "email": "alice@example.com",        "id": "...",        "totalGB": 53687091200,        "expiryTime": 0,        "limitHwid": 2,        "enable": true,        "subId": "..."      },      "inboundIds": [        7,        9      ],      "traffic": {        "up": 1048576,        "down": 2097152,        "resetCount": 0,        "lastOnline": 1735680000000      }    }  ]}
Example Request
curl -X POST 'https://example.com/panel/api/clients/import' \  -H 'Content-Type: application/json' \  -d '{  "data": "[{\"client\":{\"email\":\"alice@example.com\",\"enable\":true},\"inboundIds\":[7]}]"}'
Example Response200
{  "success": true,  "obj": {    "created": 2,    "skipped": [      {        "email": "alice@example.com",        "reason": "email already in use: alice@example.com"      }    ]  }}
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkAdjust' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ],  "addDays": 30,  "addBytes": 53687091200,  "flow": "xtls-rprx-vision",  "limitHwid": 2,  "adTag": "0123456789abcdef0123456789abcdef"}'
Example Response200
{  "success": true,  "obj": {    "adjusted": 2,    "skipped": [      {        "email": "carol",        "reason": "unlimited expiry"      }    ]  }}
POST
/panel/api/clients/bulkEnable

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkEnable' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ]}'
Example Response200
{  "success": true,  "obj": {    "changed": 2,    "skipped": [      {        "email": "carol",        "reason": "client not found"      }    ]  }}
POST
/panel/api/clients/bulkDisable

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkDisable' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ]}'
Example Response200
{  "success": true,  "obj": {    "changed": 2,    "skipped": [      {        "email": "carol",        "reason": "client not found"      }    ]  }}
POST
/panel/api/clients/bulkDel

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkDel' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ],  "keepTraffic": false}'
Example Response200
{  "success": true,  "obj": {    "deleted": 2,    "skipped": [      {        "email": "carol",        "reason": "client not found"      }    ]  }}
POST
/panel/api/clients/bulkCreate

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkCreate' \  -H 'Content-Type: application/json' \  -d '[  {    "client": {      "email": "alice@example.com",      "totalGB": 53687091200,      "expiryTime": 0,      "limitHwid": 2,      "enable": true    },    "inboundIds": [      7    ]  },  {    "client": {      "email": "bob@example.com",      "totalGB": 53687091200,      "expiryTime": 0,      "limitHwid": 0,      "enable": true    },    "inboundIds": [      7,      9    ]  }]'
Example Response200
{  "success": true,  "obj": {    "created": 2,    "skipped": [      {        "email": "alice@example.com",        "reason": "email already in use"      }    ]  }}
POST
/panel/api/clients/groups/bulkAdd

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/bulkAdd' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ],  "group": "customer-a"}'
Example Response200
{  "success": true,  "obj": {    "affected": 2  }}
POST
/panel/api/clients/groups/bulkRemove

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/bulkRemove' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ]}'
Example Response200
{  "success": true,  "obj": {    "affected": 2  }}
POST
/panel/api/clients/bulkAttach

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body
emails*array<string>

Emails of existing clients to attach.

inboundIds*array<integer>

Target inbound IDs to attach every client to.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkAttach' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ],  "inboundIds": [    7,    9  ]}'
Example Response200
{  "success": true,  "obj": {    "attached": [      "alice",      "bob"    ],    "skipped": [      "bob"    ],    "errors": []  }}
POST
/panel/api/clients/bulkDetach

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body
emails*array<string>

Emails of existing clients to detach.

inboundIds*array<integer>

Inbound IDs to detach the clients from.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkDetach' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ],  "inboundIds": [    7,    9  ]}'
Example Response200
{  "success": true,  "obj": {    "detached": [      "alice",      "bob"    ],    "skipped": [],    "errors": []  }}
POST
/panel/api/clients/bulkResetTraffic

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/bulkResetTraffic' \  -H 'Content-Type: application/json' \  -d '{  "emails": [    "alice",    "bob"  ]}'
Example Response200
{  "success": true,  "obj": {    "affected": 2  }}
GET
/panel/api/clients/groups

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/groups'
Example Response200
{  "success": true,  "obj": [    {      "name": "customer-a",      "clientCount": 5    },    {      "name": "internal",      "clientCount": 0    }  ]}
GET
/panel/api/clients/groups/{name}/emails

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

name*string

Group name (URL-encoded).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/groups/string/emails'
Example Response200
{  "success": true,  "obj": [    "alice",    "bob",    "carol"  ]}
POST
/panel/api/clients/groups/create

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/create' \  -H 'Content-Type: application/json' \  -d '{  "name": "customer-a"}'
Example Response200
{  "success": true,  "obj": {    "name": "customer-a"  }}
POST
/panel/api/clients/groups/rename

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/rename' \  -H 'Content-Type: application/json' \  -d '{  "oldName": "customer-a",  "newName": "tier-1"}'
Example Response200
{  "success": true,  "obj": {    "affected": 5  }}
POST
/panel/api/clients/groups/delete

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/delete' \  -H 'Content-Type: application/json' \  -d '{  "name": "customer-a"}'
Example Response200
{  "success": true,  "obj": {    "affected": 5  }}
POST
/panel/api/clients/groups/resetTraffic

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/groups/resetTraffic' \  -H 'Content-Type: application/json' \  -d '{  "name": "customer-a"}'
Example Response200
{  "success": true,  "obj": {    "name": "customer-a"  }}
POST
/panel/api/clients/resetTraffic/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/resetTraffic/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/updateTraffic/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Request Body

application/json
  1. body

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/updateTraffic/string' \  -H 'Content-Type: application/json' \  -d '{  "upload": 1073741824,  "download": 5368709120}'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/ips/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/ips/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/clearIps/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/clearIps/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/hwids/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/hwids/string'
Example Response200
{  "success": true,  "obj": [    {      "id": 1,      "firstSeen": 1735000000000,      "lastSeen": 1735100000000,      "userAgent": "Happ/1.0",      "deviceOs": "android",      "osVersion": "15",      "deviceModel": "Pixel 9",      "fingerprint": "6ad17c93e821"    }  ]}
DELETE
/panel/api/clients/hwids/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X DELETE 'https://example.com/panel/api/clients/hwids/string'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
DELETE
/panel/api/clients/hwids/{email}/{id}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email.

id*integer

Device id, from the list endpoint.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X DELETE 'https://example.com/panel/api/clients/hwids/string/0'
Example Response200
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/onlines

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/onlines'
Example Response200
{  "success": true,  "obj": [    "user1",    "user2"  ]}
POST
/panel/api/clients/onlinesByGuid

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/onlinesByGuid'
Example Response200
{  "success": true,  "obj": {    "a1b2-...": [      "user1"    ],    "c3d4-...": [      "user1",      "user2"    ]  }}
POST
/panel/api/clients/clientIpsByGuid

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/clientIpsByGuid'
Example Response200
{  "success": true,  "obj": {    "a1b2-...": {      "user1": [        {          "ip": "1.2.3.4",          "timestamp": 1700000000        }      ]    }  }}
POST
/panel/api/clients/activeInbounds

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/activeInbounds'
Example Response200
{  "success": true,  "obj": {    "a1b2-...": [      "in-443-tcp",      "in-8443-tcp"    ]  }}
POST
/panel/api/clients/lastOnline

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X POST 'https://example.com/panel/api/clients/lastOnline'
Example Response200
{  "success": true,  "obj": {    "user1": 1700000000,    "user2": 1699999000  }}
GET
/panel/api/clients/traffic/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique across the panel).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?

ClientTraffic represents traffic statistics and limits for a specific client. It tracks upload/download usage, expiry times, and online status for inbound clients.

Example Request
curl -X GET 'https://example.com/panel/api/clients/traffic/string'
Example Response200
{  "success": true,  "obj": {    "down": 2097152,    "email": "user1",    "enable": true,    "expiryTime": 1735689600000,    "id": 14825,    "inboundId": 1,    "lastOnline": 1735680000000,    "lastSubFetch": 1735680000000,    "reset": 0,    "resetCount": 0,    "resetDay": 0,    "resetMax": 0,    "resetWeekday": 0,    "subId": "i7tvdpeffi0hvvf1",    "total": 10737418240,    "up": 1048576,    "uuid": "e18c9a96-71bf-48d4-933f-8b9a46d4290c"  }}
GET
/panel/api/clients/subLinks/{subId}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

subId*string

Subscription ID, taken from the client's subId field.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/subLinks/string'
Example Response200
{  "success": true,  "obj": [    "vless://uuid@host:443?security=reality&...#user1",    "vmess://eyJ2IjoyLC..."  ]}
POST
/panel/api/clients/happLink/{id}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

id*integer

Stable client record ID.

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?
Example Request
curl -X POST 'https://example.com/panel/api/clients/happLink/0'
Example Response200
{  "success": true,  "obj": {    "encryptedLink": "happ://crypt5/example"  }}
GET
/panel/api/clients/links/{email}

Authorization

headerAuthorizationBearer <token>

Scoped API token from Settings → Security → API Token. Send as Authorization: Bearer <token>.

Path Parameters

email*string

Client email (unique identifier).

Response Body

Successful response

application/json
  1. response
success?boolean
msg?string
obj?unknown
Example Request
curl -X GET 'https://example.com/panel/api/clients/links/string'
Example Response200
{  "success": true,  "obj": [    "vless://uuid@host:443?...#user1"  ]}