Tarkibga o'tish

Profil API

Barcha endpointlar Authorization: Bearer <token> talab qiladi.


Profilni ko'rish

O'z profili

GET /api/v1/profile
Authorization: Bearer <token>

Javob (200):

{
  "ok": true,
  "user": {
    "id": 42,
    "username": "ali1234",
    "email": "ali@example.com",
    "first_name": "Ali",
    "last_name": "Valiyev",
    "bio": "Backend developer",
    "avatar_url": "/static/uploads/avatars/42.jpg",
    "cover_url": null,
    "website_url": "https://example.com",
    "telegram_url": "https://t.me/ali",
    "instagram_url": null,
    "github_url": "https://github.com/ali",
    "location": "Toshkent",
    "thinking_about": null,
    "is_verified": true,
    "created_at": "2026-01-15T10:00:00Z"
  }
}

Boshqa foydalanuvchi profili

GET /api/v1/users/<username>
Authorization: Bearer <token>

Profilni yangilash

PUT /api/v1/profile
Authorization: Bearer <token>
Content-Type: application/json

So'rov (o'zgartirilishi kerak bo'lgan maydonlar):

{
  "first_name": "Ali",
  "last_name": "Valiyev",
  "bio": "Python developer",
  "website_url": "https://mysite.uz",
  "telegram_url": "https://t.me/ali",
  "instagram_url": null,
  "github_url": "https://github.com/ali",
  "location": "Toshkent",
  "thinking_about": "Yangi loyiha ustida ishlayapman"
}


Avatar yuklash

POST /api/v1/profile/avatar
Authorization: Bearer <token>
Content-Type: multipart/form-data
Maydon Turi Tavsif
file File JPEG, PNG, WebP, GIF, AVIF — maks. 5 MB

Javob (200):

{
  "ok": true,
  "avatar_url": "/static/uploads/avatars/42_1234567890.jpg"
}


Muqova rasmi yuklash

POST /api/v1/profile/cover
Authorization: Bearer <token>
Content-Type: multipart/form-data
Maydon Turi Tavsif
file File JPEG, PNG, WebP — maks. 5 MB

Mavjud muqova shablonlari

GET /api/v1/profile/covers
Authorization: Bearer <token>

Parol o'zgartirish

Action token talab qilinadi (oldin /api/v1/auth/action-challenge/api/v1/auth/action-verify).

POST /api/v1/profile/change-password
Authorization: Bearer <token>
X-Action-Token: <action_token>
Content-Type: application/json
{
  "current_password": "eskilParol",
  "new_password": "yangiParol123"
}

FCM Push token (Android)

Ro'yxatga olish

POST /api/v1/profile/fcm-token
Authorization: Bearer <token>
Content-Type: application/json
{ "token": "firebase_fcm_token_string" }

O'chirish

DELETE /api/v1/profile/fcm-token
Authorization: Bearer <token>
Content-Type: application/json
{ "token": "firebase_fcm_token_string" }

Fikr-mulohaza yuborish

POST /api/v1/profile/feedback
Authorization: Bearer <token>
Content-Type: application/json
{
  "subject": "Taklif",
  "message": "Qorong'u rejim yaxshi bo'lardi"
}

Maxfiylik sozlamalari

Ko'rish

GET /api/v1/profile/settings/privacy
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "settings": {
    "profile_visibility": "public",
    "message_permission": "everyone",
    "follow_approval": false,
    "activity_visibility": "followers"
  }
}

Yangilash

PUT /api/v1/profile/settings/privacy
Authorization: Bearer <token>
Content-Type: application/json
{
  "profile_visibility": "public",
  "message_permission": "followers",
  "follow_approval": true,
  "activity_visibility": "private"
}
Maydon Mumkin qiymatlar
profile_visibility public, private
message_permission everyone, followers, none
follow_approval true, false
activity_visibility public, followers, private

Ko'rinish (Appearance) sozlamalari

Ko'rish

GET /api/v1/profile/settings/appearance
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "settings": {
    "theme": "system",
    "language": "uz",
    "compact_layout": false
  }
}

Yangilash

PUT /api/v1/profile/settings/appearance
Authorization: Bearer <token>
Content-Type: application/json
{
  "theme": "dark",
  "language": "uz",
  "compact_layout": true
}
Maydon Mumkin qiymatlar
theme system, light, dark
language uz, ru, en
compact_layout true, false

Xavfsizlik sozlamalari

Holat

GET /api/v1/profile/settings/security/state
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "two_step_enabled": true,
  "recovery_codes_count": 6,
  "devices_count": 3
}

Ikki bosqichli tasdiqlash yoqish/o'chirish

PUT /api/v1/profile/settings/security/two-step
Authorization: Bearer <token>
X-Action-Token: <action_token>
Content-Type: application/json
{ "enabled": true, "secondary_password": "ikkinchiParol", "hint": "dastlab..." }

Tiklash kodlarini yangilash

POST /api/v1/profile/settings/security/recovery-codes
Authorization: Bearer <token>
X-Action-Token: <action_token>

Javob:

{
  "ok": true,
  "codes": ["ABCD-1234", "EFGH-5678", ...]
}

Qurilmalar ro'yxati

GET /api/v1/profile/settings/security/devices
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "devices": [
    {
      "id": 1,
      "device_info": "Chrome 120 / Windows 11",
      "ip_address": "192.168.1.1",
      "last_active": "2026-06-11T10:00:00Z",
      "is_current": true
    }
  ]
}

Qurilmani o'chirish

DELETE /api/v1/profile/settings/security/devices/<session_id>
Authorization: Bearer <token>

Boshqa barcha qurilmalardan chiqish

POST /api/v1/profile/settings/security/devices/revoke-others
Authorization: Bearer <token>

Bloklangan foydalanuvchilar

Ro'yxat

GET /api/v1/profile/settings/privacy/blocked
Authorization: Bearer <token>

Bloklash

POST /api/v1/profile/settings/privacy/blocked
Authorization: Bearer <token>
Content-Type: application/json
{ "user_id": 55 }

Blokni olib tashlash

DELETE /api/v1/profile/settings/privacy/blocked/<user_id>
Authorization: Bearer <token>

Daftar sozlamalari

Ikkilamchi parol o'rnatish

POST /api/v1/profile/settings/diary/secondary-lock
Authorization: Bearer <token>
Content-Type: application/json
{ "secondary_password": "bParol", "hint": "ismning 3 harfi" }

Daftar eksport

POST /api/v1/profile/settings/diary/entries/export
Authorization: Bearer <token>

Shifrlangan JSON formatida barcha yozuvlar qaytariladi.