---
title: "Get user chats with pagination"
method: GET
path: "/admin/users/{id}/chats"
tags: ["Admin Users"]
---

# Get user chats with pagination

`GET /admin/users/{id}/chats`

Retrieve a paginated list of chats for a specific user with their last messages

## Path parameters

- `id` string, required

## Query parameters

- `page` number
- `limit` number

## Response `200`

User chats retrieved successfully

- UserChatsResponseDto
  - `userId` string, required — User ID
  - `chats` UserChatDto[], required — List of user chats
    - `id` string, required — Chat ID
    - `model` GetModelByIdResponseDto, required
      - `id` string, required — The model ID
      - `slug` string, required — The model URL slug
      - `name` string, required — The model name
      - `status` 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', required — The model status
      - `description` string, required — The model description
      - `photo` string, required — The model photo URL
      - `avatarIcon` string — The model avatar icon URL
      - `video` string — The model video URL
      - `useVideo` boolean — Whether the model uses video
      - `isPublic` boolean, required — Whether the model is public
      - `gender` 'male' | 'female', required — The model gender
      - `age` number, required — The model age
      - `relationship` string, required — The model relationship
      - `hairColor` 'Blonde' | 'Brunette' | 'Black' | 'Red' | 'Pink' | 'Blue' | 'Violet' | 'Airtouch' | 'Black with blonde highlights' | 'Ombre', required — The model hair color
      - `hairStyle` 'Straight' | 'Braids' | 'Bangs' | 'Bun' | 'Curly' | 'Short' | 'Long' | 'Pigtails' | 'Ponytail' | 'Emo' | 'Shoulder-length' | 'Buzz' | 'Pixie' | 'Hijab' | 'Veil', required — The model hair style
      - `eyesColor` 'Blue' | 'Brown' | 'Green', required — The model eyes color
      - `ethnicity` 'caucasian' | 'latina' | 'asian' | 'arab' | 'afro' | 'indian' | 'furry' | 'kemonomimi' | 'tiefling', required — The model ethnicity
      - `buttSize` 'small' | 'medium' | 'large', required — The model butt size
      - `bodyType` 'slim' | 'average' | 'athletic' | 'chubby', required — The model body type
      - `breastType` 'small' | 'medium' | 'large' | 'xl', required — The model breast size
      - `personality` string, required — The model personality
      - `occupation` 'Massage Therapist' | 'Dentist' | 'Nutritionist' | 'Fitness Coach' | 'Artist' | 'Pharmacist' | 'Hairdresser' | 'Makeup Artist' | 'Gynecologist' | 'Writer' | 'Secretary' | 'Librarian' | 'Social Worker' | 'Fashion Designer' | 'Model' | 'Police Officer' | 'Nurse' | 'Yoga Instructor' | 'Waitress' | 'Cook' | 'Unemployed' | 'Dancer' | 'Teacher' | 'Student' | 'Life Coach' | 'Astronaut' | 'Kindergarten Teacher' | 'Soldier/Military Personnel' | 'Architect' | 'DJ' | 'Nun', required — The model occupation
      - `hobbies` string, required — The model hobbies
      - `isPro` boolean, required — Whether the model is pro
      - `isNew` boolean, required — Whether the model is new
      - `tiktokVideo` string — The model TikTok video URL
      - `onboardingImage` string — The model onboarding image URL
      - `demoModelPreviewVideo` string — Short demo clip URL (static CDN) for model card / preview in demo flows
      - `onboardingSubscriptionRewardVideoPreview` string — Still preview for onboarding subscription reward (FLUX Klein edit pipeline; static CDN image/WebP)
      - `onboardingSubscriptionRewardVideo` string — Video for onboarding subscription reward (i2v from FLUX edit; static CDN)
      - `hasDefaultScenario` boolean, required — Whether the model has its own default scenario (cover/initial message)
      - `allowedChatModes` string[], required — Chat modes this model may be started in (GEN-1386). Never empty. More than one → the web asks the user to pick before creating the chat.
      - `defaultScenarioCover` string — CDN URL for the model default scenario cover image (chat-images)
      - `headerGallery` ModelContentMediaDto[], required — Up to five ordered public profile photos for the model header. Locked paid content exposes only one teaser thumbnail.
        - `id` string, required
        - `type` 'PHOTO' | 'VIDEO', required
        - `url` string
        - `videoUrl` string
        - `previewUrl` string
        - `nsfwThumbnailUrl` string
        - `lockedCoverUrl` string
        - `duration` number
        - `order` number, required
        - `price` number, required
        - `isPurchased` boolean, required
        - `isLocked` boolean, required
      - `mediaCounts` ModelProfileMediaCountsDto, required
        - `photos` number, required
        - `videos` number, required
      - `socialRating` SocialRatingDto, required
        - `views` number, required — Number of chats created with the model
        - `likes` number, required — Number of chats with >= 2 completed attachment messages
    - `lastMessage` MessageDto, required
      - `id` string, required — The ID of the message
      - `chatId` string, required — The ID of the chat
      - `text` string, required — The text of the message
      - `status` 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', required — The status of the message
      - `isFromUser` boolean, required — Whether the message is from the user
      - `isFromSystem` boolean, required — Whether the message is a system message
      - `isRead` boolean, required — Whether the message is read
      - `createdAt` string, date-time, required — The date and time the message was created
      - `attachments` AttachmentDto[], required — The attachments of the message
        - `id` string, required — The ID of the attachment
        - `messageId` string, required — The ID of the message
        - `status` 'IN_QUEUE' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', required — The status of the attachment. IN_QUEUE = scene generation is still in the Visual Director (prompt-building) phase; IN_PROGRESS = media is rendering.
        - `type` string, required — The type of the attachment
        - `url` string, required — The URL of the attachment
        - `videoUrl` string, nullable, required — The video URL of the attachment
        - `blurredUrl` string, nullable, required — Pre-blurred stand-in to render while the media is gated. Empty when the media has no teaser.
        - `explicit` boolean, required — Whether the attachment is explicit
        - `mimeType` string, required — The MIME type of the attachment
        - `prompt` string, nullable, required — The prompt used for generation or gift description
        - `rephrasedPrompt` string, nullable, required — The raw rephrased prompt before composition
        - `source` 'chat_ask' | 'scene_maker' | 'chat_animate_image' | 'chat_gift' | 'user_photo' | 'voice_over' | 'voice_message' | 'ai_initiated' | 'studio' | 'demo_subscription_reward' | 'upscale', nullable, required — The source of the attachment (e.g., chat_ask, ai_initiated)
        - `durationSeconds` number, nullable, required — Duration in seconds for audio/video attachments
        - `canRetry` boolean, required — Whether "retry generation" is still available for this attachment (failed image or video with retries left). False once the retry limit is spent — the client should stop offering the button.
        - `retryCount` number, required — Manual retries already spent on this attachment
      - `messageType` 'TEXT' | 'IMAGE_REQUEST' | 'VIDEO_REQUEST' | 'ATTACHMENT' | 'ANIMATE_REQUEST', required — The type of the message
      - `moderationStatus` 'NONE' | 'ALLOWED' | 'BLOCKED' | 'FAILED_OPEN' | 'FLAGGED', required — Moderation verdict. BLOCKED = hidden from the character (still shown to the user with a notice); FAILED_OPEN = classifier failed and the message was let through.
      - `moderationFeedbackSent` boolean, required — Whether the user submitted feedback on a blocked message.
      - `isDeleted` boolean — Soft-deleted flag. Emitted true so the client removes a message (e.g. a torn-down typing placeholder).
      - `idempotencyKey` string, required — The idempotency key of the message
      - `suggestions` string[] — Suggested follow-up responses for the user
      - `giftSuggestion` object — Gift suggestion from the AI companion
      - `actions` string[] — Structured UI actions for the client to render
    - `createdAt` string, date-time, required — Created At
    - `updatedAt` string, date-time, required — Updated At
  - `total` number, required — Total number of chats
  - `page` number, required — Current page number
  - `limit` number, required — Number of items per page
  - `totalPages` number, required — Total number of pages

## Other responses

- `404` — User not found

---

[API](https://skmtc.dev/miaai/apis/backend-template-api.md) · [All operations](https://skmtc.dev/miaai/apis/backend-template-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/miaai/backend-template-api/revisions/2a8d88a5124f/schema)
