3x-ui3x-ui
مرجعمرجع API

کلاینت‌ها

کلاینت‌ها را به‌عنوان موجودیت‌های مستقل مدیریت کنید که می‌توانند به یک یا چند inbound متصل شوند. هر رکورد کلاینت، ورودی settings.clients را در تمام inboundهایی که به آن‌ها تعلق دارد هدایت می‌کند. این endpointها زیر مسیر /panel/api/clients قرار دارند.

GET
/panel/api/clients/list

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/list"
{  "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

AuthorizationBearer <token>

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

In: header

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

application/json

curl -X GET "https://example.com/panel/api/clients/list/paged"
{  "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,        "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

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique identifier).

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/get/string"
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/add

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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    ]  }'
{  "success": true,  "msg": "Client added"}
POST
/panel/api/clients/update/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Current client email (unique identifier).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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  }'
{  "success": true,  "msg": "Client updated"}
POST
/panel/api/clients/del/{email}

Authorization

AuthorizationBearer <token>

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

In: header

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

application/json

curl -X POST "https://example.com/panel/api/clients/del/string?keepTraffic=0"
{  "success": true,  "msg": "Client deleted"}
POST
/panel/api/clients/{email}/attach

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/string/attach" \  -H "Content-Type: application/json" \  -d '{    "inboundIds": [      7,      9    ]  }'
{  "success": true}
POST
/panel/api/clients/{email}/detach

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/string/detach" \  -H "Content-Type: application/json" \  -d '{    "inboundIds": [      5    ]  }'
{  "success": true}
POST
/panel/api/clients/{email}/externalLinks

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique identifier).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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] "      }    ]  }'
{  "success": true}
POST
/panel/api/clients/resetAllTraffics

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/resetAllTraffics"
{  "success": true}
POST
/panel/api/clients/delDepleted

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/delDepleted"
{  "success": true,  "obj": {    "deleted": 0  }}
POST
/panel/api/clients/delOrphans

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/delOrphans"
{  "success": true,  "obj": {    "deleted": 0  }}
curl -X GET "https://example.com/panel/api/clients/export"
{  "success": true,  "obj": [    {      "client": {        "email": "alice@example.com",        "id": "...",        "totalGB": 53687091200,        "expiryTime": 0,        "limitHwid": 2,        "enable": true,        "subId": "..."      },      "inboundIds": [        7,        9      ]    }  ]}
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]}]"  }'
{  "success": true,  "obj": {    "created": 2,    "skipped": [      {        "email": "alice@example.com",        "reason": "email already in use: alice@example.com"      }    ]  }}
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"  }'
{  "success": true,  "obj": {    "adjusted": 2,    "skipped": [      {        "email": "carol",        "reason": "unlimited expiry"      }    ]  }}
POST
/panel/api/clients/bulkEnable

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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      ]    }  ]'
{  "success": true,  "obj": {    "created": 2,    "skipped": [      {        "email": "alice@example.com",        "reason": "email already in use"      }    ]  }}
POST
/panel/api/clients/groups/bulkAdd

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/groups/bulkRemove" \  -H "Content-Type: application/json" \  -d '{    "emails": [      "alice",      "bob"    ]  }'
{  "success": true,  "obj": {    "affected": 2  }}
POST
/panel/api/clients/bulkAttach

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/bulkAttach" \  -H "Content-Type: application/json" \  -d '{    "emails": [      "alice",      "bob"    ],    "inboundIds": [      7,      9    ]  }'
{  "success": true,  "obj": {    "attached": [      "alice",      "bob"    ],    "skipped": [      "bob"    ],    "errors": []  }}
curl -X POST "https://example.com/panel/api/clients/bulkDetach" \  -H "Content-Type: application/json" \  -d '{    "emails": [      "alice",      "bob"    ],    "inboundIds": [      7,      9    ]  }'
{  "success": true,  "obj": {    "detached": [      "alice",      "bob"    ],    "skipped": [],    "errors": []  }}
POST
/panel/api/clients/bulkResetTraffic

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/bulkResetTraffic" \  -H "Content-Type: application/json" \  -d '{    "emails": [      "alice",      "bob"    ]  }'
{  "success": true,  "obj": {    "affected": 2  }}
GET
/panel/api/clients/groups

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/groups"
{  "success": true,  "obj": [    {      "name": "customer-a",      "clientCount": 5    },    {      "name": "internal",      "clientCount": 0    }  ]}
GET
/panel/api/clients/groups/{name}/emails

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

name*string

Group name (URL-encoded).

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/groups/string/emails"
{  "success": true,  "obj": [    "alice",    "bob",    "carol"  ]}
POST
/panel/api/clients/groups/create

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/groups/create" \  -H "Content-Type: application/json" \  -d '{    "name": "customer-a"  }'
{  "success": true,  "obj": {    "name": "customer-a"  }}
POST
/panel/api/clients/groups/rename

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/groups/delete" \  -H "Content-Type: application/json" \  -d '{    "name": "customer-a"  }'
{  "success": true,  "obj": {    "affected": 5  }}
POST
/panel/api/clients/resetTraffic/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/resetTraffic/string"
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/updateTraffic/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

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

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/ips/string"
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/clearIps/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email.

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/clearIps/string"
{  "success": true,  "msg": "string",  "obj": null}
POST
/panel/api/clients/onlines

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/onlines"
{  "success": true,  "obj": [    "user1",    "user2"  ]}
POST
/panel/api/clients/onlinesByGuid

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/onlinesByGuid"
{  "success": true,  "obj": {    "a1b2-...": [      "user1"    ],    "c3d4-...": [      "user1",      "user2"    ]  }}
POST
/panel/api/clients/clientIpsByGuid

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/clientIpsByGuid"
{  "success": true,  "obj": {    "a1b2-...": {      "user1": [        {          "ip": "1.2.3.4",          "timestamp": 1700000000        }      ]    }  }}
POST
/panel/api/clients/activeInbounds

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/activeInbounds"
{  "success": true,  "obj": {    "a1b2-...": [      "in-443-tcp",      "in-8443-tcp"    ]  }}
POST
/panel/api/clients/lastOnline

Authorization

AuthorizationBearer <token>

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

In: header

Response Body

application/json

curl -X POST "https://example.com/panel/api/clients/lastOnline"
{  "success": true,  "obj": {    "user1": 1700000000,    "user2": 1699999000  }}
GET
/panel/api/clients/traffic/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique across the panel).

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/traffic/string"
{  "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,    "subId": "i7tvdpeffi0hvvf1",    "total": 10737418240,    "up": 1048576,    "uuid": "e18c9a96-71bf-48d4-933f-8b9a46d4290c"  }}
GET
/panel/api/clients/subLinks/{subId}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

subId*string

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

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/subLinks/string"
{  "success": true,  "obj": [    "vless://uuid@host:443?security=reality&...#user1",    "vmess://eyJ2IjoyLC..."  ]}
GET
/panel/api/clients/links/{email}

Authorization

AuthorizationBearer <token>

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

In: header

Path Parameters

email*string

Client email (unique identifier).

Response Body

application/json

curl -X GET "https://example.com/panel/api/clients/links/string"
{  "success": true,  "obj": [    "vless://uuid@host:443?...#user1"  ]}