---
title: "Get chat by id with scene information (v2)"
method: GET
path: "/v2/chats/{id}"
tags: ["Chats v2"]
---

# Get chat by id with scene information (v2)

`GET /v2/chats/{id}`

## Path parameters

- `id` string, required

## Response `200`

Chat retrieved successfully

- V2CreateChatResponseDto
  - `id` string, required
  - `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
  - `scene` V2SceneDto
    - `id` string, required
    - `name` string, required
    - `description` string, required
    - `coverImage` string
    - `mood` string
    - `genre` string
    - `setting` string
    - `avatarUrl` string — CDN URL of the scene avatar icon
    - `category` string
  - `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
  - `suggestionsEnabled` boolean, required — Whether suggestions are enabled for this chat
  - `mode` 'ROLEPLAY' | 'REALISTIC', required — Mode this chat runs in (GEN-1386). Part of the chat identity — the same user can hold one chat per mode with the same model.
  - `unreadMessageCount` number, required — Number of unread non-user messages in this chat (character / assistant)
  - `isOnboarding` boolean — Whether this chat is in onboarding mode
  - `onboardingStep` number — Current onboarding step (1-6) if in onboarding mode
  - `onboardingScenarioId` string — Onboarding scenario ID if in onboarding mode
  - `onboardingAskSuggestions` string[] — Localized prompt suggestions for the Ask feature during onboarding
  - `isDemo` boolean
  - `demoMessageCount` number
  - `demoStockPhotosDelivered` boolean
  - `demoAssistantTextTurns` number

## Other responses

- `404` — Chat 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)
