Skip to content

API Пользователей

Общая информация

Базовый URL

/api/v1/users

Заголовок аутентификации

Authorization: Bearer <access_token>

Формат ответа

Все ответы следуют стандартному формату:

typescript
// Успешный ответ
interface SuccessResponse<T> {
  success: true;
  data: T;
  meta?: {
    pagination?: PaginationMeta;
    [key: string]: unknown;
  };
}

// Ответ с ошибкой
interface ErrorResponse {
  success: false;
  error: {
    code: string;
    message: string;
    details?: Record<string, string[]>;
  };
}

Формат пагинации

typescript
interface PaginationMeta {
  total: number;
  page: number;
  pageSize: number;
  totalPages: number;
  hasNext: boolean;
  hasPrevious: boolean;
}

Ограничения запросов

ЭндпоинтЛимит
Все эндпоинты пользователей100/мин
Загрузка аватара10/час
Отправка KYC5/день

Эндпоинты

GET /api/v1/users/me

Получение профиля текущего аутентифицированного пользователя.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

Нет

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface UserProfileResponse {
  id: string;
  email: string;
  phone: string | null;
  status: 'PENDING_VERIFICATION' | 'ACTIVE' | 'SUSPENDED' | 'BANNED';
  emailVerifiedAt: string | null;
  phoneVerifiedAt: string | null;
  lastLoginAt: string | null;
  profile: {
    firstName: string;
    lastName: string;
    middleName: string | null;
    dateOfBirth: string | null;     // YYYY-MM-DD
    avatarUrl: string | null;
    language: string;
    timezone: string;
  };
  kyc: {
    status: string;
    level: string;
  };
  roles: string[];
  twoFactorEnabled: boolean;
  createdAt: string;
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token

Пример

Запрос:

bash
curl -X GET https://api.iwm-platform.com/api/v1/users/me \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "phone": "+79991234567",
    "status": "ACTIVE",
    "emailVerifiedAt": "2024-01-15T10:35:00Z",
    "phoneVerifiedAt": null,
    "lastLoginAt": "2024-01-15T14:00:00Z",
    "profile": {
      "firstName": "John",
      "lastName": "Doe",
      "middleName": null,
      "dateOfBirth": "1990-05-15",
      "avatarUrl": "https://cdn.iwm-platform.com/avatars/550e8400.jpg",
      "language": "ru",
      "timezone": "Europe/Moscow"
    },
    "kyc": {
      "status": "APPROVED",
      "level": "STANDARD"
    },
    "roles": ["USER"],
    "twoFactorEnabled": true,
    "createdAt": "2024-01-15T10:30:00Z",
    "updatedAt": "2024-01-15T12:00:00Z"
  }
}

PATCH /api/v1/users/me

Обновление профиля текущего пользователя.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

typescript
interface UpdateProfileRequest {
  firstName?: string;           // 2-100 символов
  lastName?: string;            // 2-100 символов
  middleName?: string | null;   // 2-100 символов или null
  dateOfBirth?: string;         // Формат YYYY-MM-DD
  phone?: string;               // Формат E.164
  language?: string;            // ISO 639-1 (например, 'ru', 'en')
  timezone?: string;            // Часовой пояс IANA (например, 'Europe/Moscow')
}

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface UpdateProfileResponse {
  id: string;
  email: string;
  phone: string | null;
  profile: {
    firstName: string;
    lastName: string;
    middleName: string | null;
    dateOfBirth: string | null;
    avatarUrl: string | null;
    language: string;
    timezone: string;
  };
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORНеверные входные данные
401UNAUTHORIZEDНедействительный или истекший access token
409PHONE_ALREADY_EXISTSНомер телефона уже используется

Пример

Запрос:

bash
curl -X PATCH https://api.iwm-platform.com/api/v1/users/me \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "John",
    "lastName": "Smith",
    "language": "en",
    "timezone": "Europe/London"
  }'

Ответ:

json
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "phone": "+79991234567",
    "profile": {
      "firstName": "John",
      "lastName": "Smith",
      "middleName": null,
      "dateOfBirth": "1990-05-15",
      "avatarUrl": "https://cdn.iwm-platform.com/avatars/550e8400.jpg",
      "language": "en",
      "timezone": "Europe/London"
    },
    "updatedAt": "2024-01-15T15:00:00Z"
  }
}

POST /api/v1/users/me/avatar

Загрузка нового изображения аватара.

Аутентификация: Обязательна

Лимит запросов: 10 запросов в час

Заголовки запроса

Authorization: Bearer <access_token>
Content-Type: multipart/form-data

Тело запроса

typescript
// multipart/form-data
interface AvatarUploadRequest {
  avatar: File;                 // Файл изображения (JPEG, PNG, WebP)
                                // Макс. размер: 5MB
                                // Мин. размеры: 100x100
                                // Макс. размеры: 2000x2000
}

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface AvatarUploadResponse {
  avatarUrl: string;
  thumbnailUrl: string;
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORФайл не предоставлен
400INVALID_FILE_TYPEТип файла не поддерживается
400FILE_TOO_LARGEФайл превышает лимит 5MB
400INVALID_DIMENSIONSРазмеры изображения вне допустимого диапазона
401UNAUTHORIZEDНедействительный или истекший access token
429RATE_LIMIT_EXCEEDEDСлишком много попыток загрузки

Пример

Запрос:

bash
curl -X POST https://api.iwm-platform.com/api/v1/users/me/avatar \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -F "avatar=@/path/to/image.jpg"

Ответ:

json
{
  "success": true,
  "data": {
    "avatarUrl": "https://cdn.iwm-platform.com/avatars/550e8400-full.jpg",
    "thumbnailUrl": "https://cdn.iwm-platform.com/avatars/550e8400-thumb.jpg"
  }
}

DELETE /api/v1/users/me/avatar

Удаление текущего аватара.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

Нет

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface RemoveAvatarResponse {
  message: string;
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token
404NO_AVATARНет аватара для удаления

Пример

Запрос:

bash
curl -X DELETE https://api.iwm-platform.com/api/v1/users/me/avatar \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "message": "Avatar removed successfully"
  }
}

GET /api/v1/users/me/kyc

Получение статуса и деталей KYC верификации.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

Нет

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface KycStatusResponse {
  status: 'NOT_STARTED' | 'DOCUMENTS_PENDING' | 'SUBMITTED' | 'UNDER_REVIEW' | 'APPROVED' | 'REJECTED' | 'NEEDS_INFO';
  level: 'NONE' | 'BASIC' | 'STANDARD' | 'ENHANCED';
  submittedAt: string | null;
  reviewedAt: string | null;
  expiresAt: string | null;
  rejectionReason: string | null;
  requiredDocuments: {
    type: string;
    status: 'REQUIRED' | 'PENDING' | 'VERIFIED' | 'REJECTED';
    rejectionReason: string | null;
  }[];
  limits: {
    dailyWithdrawal: number;
    monthlyWithdrawal: number;
    singleTransaction: number;
  };
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token

Пример

Запрос:

bash
curl -X GET https://api.iwm-platform.com/api/v1/users/me/kyc \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "status": "APPROVED",
    "level": "STANDARD",
    "submittedAt": "2024-01-10T14:00:00Z",
    "reviewedAt": "2024-01-12T09:30:00Z",
    "expiresAt": "2025-01-12T09:30:00Z",
    "rejectionReason": null,
    "requiredDocuments": [
      {
        "type": "PASSPORT",
        "status": "VERIFIED",
        "rejectionReason": null
      },
      {
        "type": "SELFIE",
        "status": "VERIFIED",
        "rejectionReason": null
      },
      {
        "type": "UTILITY_BILL",
        "status": "REQUIRED",
        "rejectionReason": null
      }
    ],
    "limits": {
      "dailyWithdrawal": 100000,
      "monthlyWithdrawal": 1000000,
      "singleTransaction": 500000
    }
  }
}

POST /api/v1/users/me/kyc

Отправка документов KYC для верификации.

Аутентификация: Обязательна

Лимит запросов: 5 запросов в день

Заголовки запроса

Authorization: Bearer <access_token>
Content-Type: multipart/form-data

Тело запроса

typescript
// multipart/form-data
interface KycSubmissionRequest {
  personalInfo: {
    firstName: string;
    lastName: string;
    middleName?: string;
    dateOfBirth: string;          // YYYY-MM-DD
    nationality: string;          // ISO 3166-1 alpha-2
    documentNumber: string;
    documentType: 'PASSPORT' | 'ID_CARD' | 'DRIVER_LICENSE';
    documentIssueDate: string;    // YYYY-MM-DD
    documentExpiryDate: string;   // YYYY-MM-DD
    address: {
      country: string;            // ISO 3166-1 alpha-2
      region: string;
      city: string;
      street: string;
      building: string;
      apartment?: string;
      postalCode: string;
    };
  };
  documents: {
    type: 'PASSPORT' | 'ID_CARD' | 'DRIVER_LICENSE' | 'UTILITY_BILL' | 'BANK_STATEMENT' | 'SELFIE';
    file: File;                   // Файл изображения (JPEG, PNG, PDF для документов)
                                  // Макс. размер: 10MB на файл
  }[];
}

Параметры запроса

Нет

Ответ (201 Created)

typescript
interface KycSubmissionResponse {
  verificationId: string;
  status: 'SUBMITTED';
  estimatedReviewTime: string;    // например, "24-48 hours"
  documentsSubmitted: {
    type: string;
    status: 'PENDING';
  }[];
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORНеверные входные данные
400MISSING_DOCUMENTSНе предоставлены обязательные документы
400INVALID_FILE_TYPEТип файла не поддерживается
400FILE_TOO_LARGEФайл превышает лимит 10MB
401UNAUTHORIZEDНедействительный или истекший access token
409KYC_PENDINGKYC верификация уже на рассмотрении
409KYC_APPROVEDKYC уже одобрена для этого уровня
429RATE_LIMIT_EXCEEDEDСлишком много попыток отправки

Пример

Запрос:

bash
curl -X POST https://api.iwm-platform.com/api/v1/users/me/kyc \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -F 'personalInfo={"firstName":"John","lastName":"Doe",...}' \
  -F "documents[0][type]=PASSPORT" \
  -F "documents[0][file]=@/path/to/passport.jpg" \
  -F "documents[1][type]=SELFIE" \
  -F "documents[1][file]=@/path/to/selfie.jpg"

Ответ:

json
{
  "success": true,
  "data": {
    "verificationId": "770e8400-e29b-41d4-a716-446655440000",
    "status": "SUBMITTED",
    "estimatedReviewTime": "24-48 hours",
    "documentsSubmitted": [
      {
        "type": "PASSPORT",
        "status": "PENDING"
      },
      {
        "type": "SELFIE",
        "status": "PENDING"
      }
    ]
  }
}

GET /api/v1/users/me/notifications

Получение уведомлений пользователя.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

Нет

Параметры запроса

ПараметрТипОписание
pagenumberНомер страницы (опционально)
pageSizenumberЭлементов на странице, макс. 50 (опционально)
statusstringФильтр по статусу: 'UNREAD', 'READ', 'ALL' (опционально)
typestringФильтр по типу (опционально)

Ответ (200 OK)

typescript
interface NotificationsResponse {
  notifications: Notification[];
  unreadCount: number;
}

interface Notification {
  id: string;
  type: 'SYSTEM' | 'ORDER' | 'COMMISSION' | 'PAYOUT' | 'KYC' | 'SECURITY' | 'PROMO';
  title: string;
  message: string;
  data: Record<string, unknown> | null;
  isRead: boolean;
  readAt: string | null;
  createdAt: string;
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token

Пример

Запрос:

bash
curl -X GET "https://api.iwm-platform.com/api/v1/users/me/notifications?status=UNREAD&page=1&pageSize=20" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "notifications": [
      {
        "id": "880e8400-e29b-41d4-a716-446655440000",
        "type": "COMMISSION",
        "title": "New Commission Received",
        "message": "You earned 500 RUB commission from a referral purchase",
        "data": {
          "commissionId": "990e8400-e29b-41d4-a716-446655440000",
          "amount": 500
        },
        "isRead": false,
        "readAt": null,
        "createdAt": "2024-01-15T14:30:00Z"
      }
    ],
    "unreadCount": 5
  },
  "meta": {
    "pagination": {
      "total": 25,
      "page": 1,
      "pageSize": 20,
      "totalPages": 2,
      "hasNext": true,
      "hasPrevious": false
    }
  }
}

PATCH /api/v1/users/me/notifications/preferences

Обновление настроек уведомлений.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

typescript
interface NotificationPreferencesRequest {
  email: {
    orders?: boolean;
    commissions?: boolean;
    payouts?: boolean;
    security?: boolean;
    marketing?: boolean;
    newsletter?: boolean;
  };
  push: {
    orders?: boolean;
    commissions?: boolean;
    payouts?: boolean;
    security?: boolean;
    marketing?: boolean;
  };
  sms: {
    security?: boolean;          // OTP, уведомления о входе
    payouts?: boolean;           // Подтверждения выплат
  };
}

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface NotificationPreferencesResponse {
  email: {
    orders: boolean;
    commissions: boolean;
    payouts: boolean;
    security: boolean;
    marketing: boolean;
    newsletter: boolean;
  };
  push: {
    orders: boolean;
    commissions: boolean;
    payouts: boolean;
    security: boolean;
    marketing: boolean;
  };
  sms: {
    security: boolean;
    payouts: boolean;
  };
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORНеверный формат настроек
401UNAUTHORIZEDНедействительный или истекший access token

Пример

Запрос:

bash
curl -X PATCH https://api.iwm-platform.com/api/v1/users/me/notifications/preferences \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": {
      "marketing": false,
      "newsletter": false
    },
    "push": {
      "marketing": false
    }
  }'

Ответ:

json
{
  "success": true,
  "data": {
    "email": {
      "orders": true,
      "commissions": true,
      "payouts": true,
      "security": true,
      "marketing": false,
      "newsletter": false
    },
    "push": {
      "orders": true,
      "commissions": true,
      "payouts": true,
      "security": true,
      "marketing": false
    },
    "sms": {
      "security": true,
      "payouts": true
    },
    "updatedAt": "2024-01-15T15:30:00Z"
  }
}

GET /api/v1/users/me/addresses

Получение списка сохраненных адресов.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

Нет

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface AddressesResponse {
  addresses: Address[];
}

interface Address {
  id: string;
  label: string;                  // например, "Дом", "Офис"
  isDefault: boolean;
  country: string;                // ISO 3166-1 alpha-2
  region: string;
  city: string;
  street: string;
  building: string;
  apartment: string | null;
  postalCode: string;
  phone: string | null;
  recipientName: string | null;
  createdAt: string;
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token

Пример

Запрос:

bash
curl -X GET https://api.iwm-platform.com/api/v1/users/me/addresses \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "addresses": [
      {
        "id": "aa0e8400-e29b-41d4-a716-446655440000",
        "label": "Home",
        "isDefault": true,
        "country": "RU",
        "region": "Moscow Oblast",
        "city": "Moscow",
        "street": "Tverskaya",
        "building": "15",
        "apartment": "42",
        "postalCode": "125009",
        "phone": "+79991234567",
        "recipientName": "John Doe",
        "createdAt": "2024-01-10T10:00:00Z",
        "updatedAt": "2024-01-10T10:00:00Z"
      }
    ]
  }
}

POST /api/v1/users/me/addresses

Добавление нового адреса.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Тело запроса

typescript
interface CreateAddressRequest {
  label: string;                  // например, "Дом", "Офис"
  isDefault?: boolean;            // Если true, устанавливается как адрес по умолчанию
  country: string;                // ISO 3166-1 alpha-2
  region: string;
  city: string;
  street: string;
  building: string;
  apartment?: string;
  postalCode: string;
  phone?: string;
  recipientName?: string;
}

Параметры запроса

Нет

Ответ (201 Created)

typescript
interface CreateAddressResponse {
  id: string;
  label: string;
  isDefault: boolean;
  country: string;
  region: string;
  city: string;
  street: string;
  building: string;
  apartment: string | null;
  postalCode: string;
  phone: string | null;
  recipientName: string | null;
  createdAt: string;
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORНеверные входные данные
401UNAUTHORIZEDНедействительный или истекший access token
400MAX_ADDRESSES_REACHEDМаксимум 10 адресов разрешено

Пример

Запрос:

bash
curl -X POST https://api.iwm-platform.com/api/v1/users/me/addresses \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Office",
    "isDefault": false,
    "country": "RU",
    "region": "Moscow Oblast",
    "city": "Moscow",
    "street": "Arbat",
    "building": "25",
    "apartment": "100",
    "postalCode": "119002",
    "phone": "+79999876543",
    "recipientName": "John Doe"
  }'

Ответ:

json
{
  "success": true,
  "data": {
    "id": "bb0e8400-e29b-41d4-a716-446655440000",
    "label": "Office",
    "isDefault": false,
    "country": "RU",
    "region": "Moscow Oblast",
    "city": "Moscow",
    "street": "Arbat",
    "building": "25",
    "apartment": "100",
    "postalCode": "119002",
    "phone": "+79999876543",
    "recipientName": "John Doe",
    "createdAt": "2024-01-15T16:00:00Z",
    "updatedAt": "2024-01-15T16:00:00Z"
  }
}

PATCH /api/v1/users/me/addresses/:id

Обновление существующего адреса.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Параметры пути

ПараметрТипОписание
idstring (UUID)ID адреса

Тело запроса

typescript
interface UpdateAddressRequest {
  label?: string;
  isDefault?: boolean;
  country?: string;
  region?: string;
  city?: string;
  street?: string;
  building?: string;
  apartment?: string | null;
  postalCode?: string;
  phone?: string | null;
  recipientName?: string | null;
}

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface UpdateAddressResponse {
  id: string;
  label: string;
  isDefault: boolean;
  country: string;
  region: string;
  city: string;
  street: string;
  building: string;
  apartment: string | null;
  postalCode: string;
  phone: string | null;
  recipientName: string | null;
  createdAt: string;
  updatedAt: string;
}

Ответы с ошибками

СтатусКодОписание
400VALIDATION_ERRORНеверные входные данные
401UNAUTHORIZEDНедействительный или истекший access token
404ADDRESS_NOT_FOUNDАдрес не найден

Пример

Запрос:

bash
curl -X PATCH https://api.iwm-platform.com/api/v1/users/me/addresses/bb0e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "isDefault": true,
    "apartment": "101"
  }'

Ответ:

json
{
  "success": true,
  "data": {
    "id": "bb0e8400-e29b-41d4-a716-446655440000",
    "label": "Office",
    "isDefault": true,
    "country": "RU",
    "region": "Moscow Oblast",
    "city": "Moscow",
    "street": "Arbat",
    "building": "25",
    "apartment": "101",
    "postalCode": "119002",
    "phone": "+79999876543",
    "recipientName": "John Doe",
    "createdAt": "2024-01-15T16:00:00Z",
    "updatedAt": "2024-01-15T16:30:00Z"
  }
}

DELETE /api/v1/users/me/addresses/:id

Удаление адреса.

Аутентификация: Обязательна

Лимит запросов: 100 запросов в минуту

Заголовки запроса

Authorization: Bearer <access_token>

Параметры пути

ПараметрТипОписание
idstring (UUID)ID адреса

Тело запроса

Нет

Параметры запроса

Нет

Ответ (200 OK)

typescript
interface DeleteAddressResponse {
  message: string;
  addressId: string;
}

Ответы с ошибками

СтатусКодОписание
401UNAUTHORIZEDНедействительный или истекший access token
404ADDRESS_NOT_FOUNDАдрес не найден
400CANNOT_DELETE_DEFAULTНельзя удалить адрес по умолчанию при наличии других адресов

Пример

Запрос:

bash
curl -X DELETE https://api.iwm-platform.com/api/v1/users/me/addresses/bb0e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Ответ:

json
{
  "success": true,
  "data": {
    "message": "Address deleted successfully",
    "addressId": "bb0e8400-e29b-41d4-a716-446655440000"
  }
}

Связанные документы