---
title: "Save AI Character"
method: POST
path: "/api/v2/characters/save"
tags: ["Characters V2"]
---

# Save AI Character

`POST /api/v2/characters/save`

Saves a generated character. Returns immediately with 'saving' status. Poll status endpoint until status is 'saved'. Any fields provided here override what was generated.

## Request body

- SaveCharacterRequest
  - `characterGuid` string, uuid, required — Character GUID from the generate step
  - `firstName` string — Override first name
  - `lastName` string — Override last name
  - `biography` string — Override biography
  - `dateOfBirth` string, date — Override date of birth (must be 21+)
  - `personality` string[] — Override personality traits. Values must match valid terms — use GET /api/v1/characters/personalities for the full list
  - `interests` string[] — Override interests. Values must match valid terms — use GET /api/v1/characters/interests for the full list
  - `kinks` string[] — Character's sexual preferences and kinks. Used to shape the character's personality and behavior in text conversations only — they do not control image or video generation capabilities.
  - `backstory` string — Override backstory
  - `tattoos` string — Override tattoo description
  - `textingStyle` string — Override texting/communication style
  - `physicalCharacteristics` string[] — Override physical characteristics (array of strings)
  - `penisSize` string — Override penis size (male only)
  - `breastSize` string — Override breast size (female only)
  - `ethnicity` string — Override ethnicity
  - `hairLength` string — Override hair length
  - `voiceUrl` string, uri — HTTP URL to voice reference audio file (.wav). Overrides any voice set at generate time
  - `alias` string — Override alias/nickname
  - `job` string — Override job title
  - `whereYouLive` string — Override location
  - `gender` string — Override gender
  - `orientation` string — Override sexual orientation
  - `relationshipStatus` string — Override relationship status
  - `profileImageUrl` string, uri — URL to profile image (downloaded, cropped to 1:1, saved to S3)
  - `coverVideoUrl` string, uri — URL to cover video (downloaded and saved to S3)
  - `imageModel` string — Image model for generation
  - `audioSpeed` number, float — Audio playback speed multiplier
  - `socialHandleInstagram` string — Instagram handle
  - `socialHandleTiktok` string — TikTok handle
  - `socialHandleTwitter` string — X/Twitter handle
  - `socialHandleYoutube` string — YouTube handle
  - `socialHandleTwitch` string — Twitch handle
  - `socialHandleTelegram` string — Telegram handle
  - `contentLevel` ContentLevel — unresolved $ref
  - `bodyType` string — Override body type (valid value from lookup endpoint)
  - `eyeColor` string — Override eye color (valid value from lookup endpoint)
  - `hairColor` string — Override hair color (valid value from lookup endpoint)
  - `earlyAccessEmail` integer — Early access email entity reference
  - `weight` integer — Character weight/ordering
  - `uid` integer — User ID in OhChat system
  - `priorityPrice` number, float — Override priority subscription price (field_sub_a)
  - `platinumPrice` number, float — Override platinum subscription price (field_sub_b)
  - `vipPrice` number, float — Override vIP subscription price (field_sub_c)
  - `priorityListPrice` number, float — Override priority list price (field_list_price_a)
  - `platinumListPrice` number, float — Override platinum list price (field_list_price_b)

## Response `202`

Character save started. Poll status endpoint for completion.

- object
  - `success` boolean
  - `characterGuid` string, uuid
  - `status` 'draft' | 'generating' | 'ready' | 'saving' | 'saved' | 'failed' — V2 character processing status: - **draft**: Initial state - **generating**: AI generation in progress - **ready**: Generation complete, ready to save - **saving**: Save in progress - **saved**: Fully saved and ready to use - **failed**: Processing failed (check errorMessage)
  - `message` string

## Other responses

- `400` — Validation error - missing characterGuid, character under 21, or already saved
- `401` — Unauthorized - invalid or missing API key
- `404` — Character not found

---

[API](https://skmtc.dev/oh/apis/ohapi-documentation.md) · [All operations](https://skmtc.dev/oh/apis/ohapi-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/oh/ohapi-documentation/revisions/b623c2e9cb65/schema)
