## Current user (`me`)

The signed-in user views or edits their own profile, real-name verification and UI preferences.

Authentication: User · Docs: https://www-demo.kuxitong.com/en/docs/api/me

### GET `/api/v2/me`

Get current user · Authentication: User

```sh
curl "https://panel.example.com/api/v2/me" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/me`

Update profile · Authentication: User

Request body:

| Field | Type | Required | Description |
|---|---|---|---|
| `email` | string |  | Email |
| `email_code` | string |  | Code sent to the new email (POST /verify-codes, purpose=bind); required when changing the email |
| `login_ip_allow` | string[] |  | Login IP allowlist (IPs or CIDRs); empty means no restriction |
| `login_verify` | LoginVerify |  | Second-factor login: none means not required; email / sms also require an email/SMS code at login (the platform must allow it and the address must be bound) Values: ["none","email","sms"] |
| `phone` | string |  | Phone number |
| `phone_code` | string |  | Code sent to the new phone number (POST /verify-codes, purpose=bind); required when changing the phone number |

```sh
curl -X PUT "https://panel.example.com/api/v2/me" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/me/certification`

Get real-name verification status · Authentication: User

```sh
curl "https://panel.example.com/api/v2/me/certification" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/me/certification`

Submit real-name verification · Authentication: User

Request body:

| Field | Type | Required | Description |
|---|---|---|---|
| `id_number` | string | Yes | Masked ID number |
| `real_name` | string | Yes | Masked real name |

```sh
curl -X POST "https://panel.example.com/api/v2/me/certification" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id_number":"11010519491231002X","real_name":"张三"}'
```

### GET `/api/v2/me/preferences`

Get preferences · Authentication: User

```sh
curl "https://panel.example.com/api/v2/me/preferences" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/me/preferences`

Update preferences · Authentication: User

```sh
curl -X PUT "https://panel.example.com/api/v2/me/preferences" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

Current user object:

| Field | Type | Required | Description |
|---|---|---|---|
| `balance_cents` | integer |  | Account balance in cents, same as balance_cents of GET /users/{user_id}/account (0 when there is no account). Only present in the GET /users list, not in single-user responses (read-only) |
| `certified` | boolean |  | Whether real-name verification has passed |
| `client_ip` | string |  | Source IP of this request, derived the same way as the login IP allowlist check (what the allowlist compares is what is shown). Only present in GET /me and PUT /me (read-only) |
| `created_at` | string |  | Created at (read-only) |
| `delegated_session` | boolean |  | Whether the current session was issued by superadmin sign-in or switch-to-user (if so, password, email, phone, login allowlist, login verification and real-name are read-only). Only present in GET /me and PUT /me (read-only) |
| `email` | string |  | Email |
| `email_code` | string |  | Code sent to the new email (POST /verify-codes, purpose=bind); required when changing the email |
| `enabled` | boolean |  | Whether enabled |
| `id` | integer |  | Record ID (read-only) |
| `id_number` | string |  | Masked ID number |
| `login_ip_allow` | string[] |  | Login IP allowlist (IPs or CIDRs); empty means no restriction |
| `login_verify` | LoginVerify |  | Second-factor login: none means not required; email / sms also require an email/SMS code at login (the platform must allow it and the address must be bound) Values: ["none","email","sms"] |
| `phone` | string |  | Phone number |
| `phone_code` | string |  | Code sent to the new phone number (POST /verify-codes, purpose=bind); required when changing the phone number |
| `provider` | string |  | Real-name verification provider |
| `real_name` | string |  | Masked real name |
| `reason` | string |  | Reason for failure |
| `role` | string |  | Account role: admin or tenant Values: ["admin","tenant"] |
| `status` | string |  | Verification status: none, pending, verified or failed Values: ["none","pending","verified","failed"] |
| `totp_enabled` | boolean |  | Whether TOTP is enabled |
| `totp_recovery_left` | integer |  | Number of unused TOTP recovery codes. Only present in GET /me and PUT /me when TOTP is enabled (read-only) |
| `updated_at` | string |  | Updated at (read-only) |
| `url` | string |  | Verification URL the user must visit while pending (returned only on submission) |
| `username` | string |  | Username |
