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

# Generate AI Character

`POST /api/v2/characters/generate`

Creates a new AI character with async profile generation. Returns immediately with 'generating' status. Poll the status endpoint until status is 'ready'.

## Request body

- GenerateCharacterRequest
  - `nationality` string, required — Character nationality. Use GET /api/v1/characters/nationalities for valid values
  - `ethnicity` string, required — Character ethnicity. Use GET /api/v1/characters/ethnicities for valid values
  - `firstName` string, required — Character first name
  - `lastName` string, required — Character last name
  - `biography` string, required — Character biography/bio text. Auto-generated if missing
  - `dateOfBirth` string, date — Date of birth (ISO format). Must be 21+. Defaults to age 27 if not provided
  - `alias` string — Character alias/nickname
  - `job` string — Character occupation
  - `whereYouLive` string — Location where character lives
  - `gender` 'Female' | 'Male', required — Character gender
  - `penisSize` 'Small' | 'Huge' | 'Enormous' — Penis size (male only)
  - `vaginaHair` 'Bald' | 'Designer' | 'Diamond shape' | 'French wax' | 'Full bush' | 'Heart shape' | 'Landing strip' | 'Lightning bolt' | 'Long' | 'Natural' | 'Neat triangle' | 'Partially shaved sides' | 'Shaved' | 'Small trimmed patch' | 'Smooth wax' | 'Thin landing strip' | 'Thin vertical strip' | 'Tiny Brazilian' | 'Trimmed' | 'Trimmed short' | 'V shaped' | 'Wild' — Pubic hair style (female only). Use GET /api/v1/characters/vagina-hair for valid values
  - `vaginaSize` 'Accommodating' | 'Average' | 'Extremely tight' | 'Gilf' | 'Gripping' | 'Incredibly tight' | 'Loose & wet' | 'Milf' | 'Normal' | 'Perfectly snug' | 'Petite tight' | 'Post-baby looser' | 'Relaxed' | 'Slightly looser' | 'Snug' | 'Super tight' | 'Tight' | 'Very Accommodating' | 'Very tight' | 'Well-used' | 'Youthfully tight' — Vagina size (female only). Use GET /api/v1/characters/vagina-sizes for valid values
  - `physicalCharacteristics` string[] — Array of additional physical features not covered by other fields (e.g., glasses, freckles, pregnancy, piercings)
  - `orientation` '90/10' | 'Asexual' | 'Bi-curious' | 'Bicurious' | 'Bisexual' | 'Demisexual' | 'Experimenting' | 'Fluid' | 'Gay' | 'Heteroflexible' | 'Homoflexible' | 'Lesbian' | 'Mostly straight' | 'Open to anything' | 'Pansexual' | 'Queer' | 'Sapiosexual' | 'Straight' | 'Straight but plays with girls' — Character's sexual orientation. Affects who the character is attracted to in text conversations.
  - `personality` string[] — Character's personality archetype. Shapes the character's overall behavior and tone in text conversations.
  - `interests` string[] — Character interests. Values must match valid terms — use GET /api/v1/characters/interests for the full list. Auto-generated if missing
  - `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.
  - `hairLength` string — Hair length. Use GET /api/v1/characters/hair-lengths for valid values
  - `hairColour` string — Hair colour. Use GET /api/v1/characters/hair-colours for valid values
  - `eyeColour` string — Eye colour. Use GET /api/v1/characters/eye-colours for valid values
  - `breastSize` string — Breast size (female only). Use GET /api/v1/characters/breast-sizes for valid values. Auto-generated if missing
  - `bodyBuild` string — Body build type. Use GET /api/v1/characters/body-builds for valid values
  - `backstory` string — Character backstory. Auto-generated if missing
  - `textingStyle` string — texting/communication style description. Auto-generated if missing
  - `tattoos` string — tattoo description. Auto-generated if missing
  - `profileImageUrl` string, uri — URL to profile image (downloaded and saved automatically)
  - `coverVideoUrl` string, uri — URL to cover video (downloaded and saved automatically)
  - `voiceUrl` string, uri — HTTP URL to voice audio file (downloaded automatically)
  - `audioSpeed` number, float — Audio playback speed multiplier
  - `socialHandleInstagram` string — Instagram handle
  - `socialHandleTiktok` string — TikTok handle
  - `socialHandleTwitter` string — X/Twitter handle
  - `height` string — Character height
  - `bodyShape` 'Apple' | 'Athletic' | 'Balanced' | 'Bottom-heavy pear' | 'Busty rectangle' | 'Chubby' | 'Hourglass' | 'Inverted triangle' | 'Pear' | 'Petite hourglass' | 'Rectangle' | 'Slim hourglass' | 'Soft pear' | 'Thick hourglass' | 'Top-heavy' | 'Voluptuous hourglass' — Body shape. Use GET /api/v1/characters/body-shapes for valid values
  - `buttSize` 'Average' | 'Big' | 'Bubble Butt' | 'Firm & round' | 'Flat' | 'Heart-shaped' | 'Huge' | 'Jiggly' | 'Juicy' | 'Massive' | 'Peach' | 'Perky' | 'Phat' | 'Round & Full' | 'Shelf' | 'Small' | 'Thick' | 'Wide' — Butt size. Use GET /api/v1/characters/butt-sizes for valid values
  - `skinTone` 'Alabaster' | 'Beige' | 'Caramel' | 'Deep Brown' | 'Deep Tan' | 'Ebony' | 'Espresso' | 'Golden' | 'Golden Olive' | 'Honey' | 'Latte' | 'Light' | 'Light Caramel' | 'Light Olive' | 'Mahogany' | 'Medium Brown' | 'Mocha' | 'Olive' | 'Pale Ivory' | 'Rich Brown' | 'Sun-Kissed' | 'Tan' | 'Tawny' | 'Very Pale' | 'Warm Honey' | 'Warm Ivory' — Skin tone. Use GET /api/v1/characters/skin-tones for valid values
  - `breastPertness` string — Breast pertness (female only). Use GET /api/v1/characters/breast-pertness for valid values
  - `nippleColour` 'Almost black' | 'Caramel brown' | 'Dark brown' | 'Dark pink' | 'Deep brown' | 'Dusky rose' | 'Light brown' | 'Light pink' | 'Mauve' | 'Medium brown' | 'Medium pink' | 'Peachy pink' | 'Pink' | 'Puffy dark pink' | 'Puffy light pink' | 'Reddish-pink' | 'Rosy brown' | 'Tan brown' — Nipple colour (female only). Use GET /api/v1/characters/nipple-colours for valid values
  - `relationshipStatus` string — Relationship status
  - `imageModel` string — Image model for generation
  - `contentLevel` 'Sexy' | 'Topless' | 'Nudes' | 'Sex' — Maximum content level the character will engage with. Determines what the character is willing to do in both text conversations and media generation. Sexy = suggestive/clothed, Topless = partial nudity, Nudes = full nudity, Sex = explicit sexual content.
  - `bodyType` string — Body type (valid value from lookup endpoint)
  - `eyeColor` string — Eye color (valid value from lookup endpoint)
  - `hairColor` string — Hair color (valid value from lookup endpoint)
  - `socialHandleYoutube` string — YouTube handle
  - `socialHandleTwitch` string — Twitch handle
  - `socialHandleTelegram` string — Telegram handle
  - `earlyAccessEmail` integer — Early access email entity reference
  - `weight` integer — Character weight/ordering
  - `priorityPrice` number, float — Priority subscription price (field_sub_a)
  - `platinumPrice` number, float — Platinum subscription price (field_sub_b)
  - `vipPrice` number, float — VIP subscription price (field_sub_c)
  - `priorityListPrice` number, float — Priority list price (field_list_price_a)
  - `sexDrive` 'Always horny' | 'Asexual but enjoys pleasing' | 'Average' | 'High' | 'High but shy' | 'Hypersexual nympho' | 'Insatiable' | 'Low' | 'Low until aroused then wild' | 'Moderate' | 'Morning sex addict' | 'Needs it to fall asleep' | 'Night owl horny' | 'Once a day minimum' | 'Only horny when ovulating' | 'Permanently in heat' | 'Switches normal to crazy' | 'Touch-starved' | 'Very high' | 'Very low cuddly' — Character's sex drive level. Affects the character's eagerness and initiative in text conversations.
  - `conversationStyle` 'Baby-talk / little space' | 'Bratty & sassy' | 'Bubbly & giggly' | 'Constant compliments & praise' | 'Country / southern drawl' | 'Dirty talk queen' | 'Dominant & commanding' | 'Flirty & teasing' | 'Foul-mouthed & trashy' | 'High-maintenance princess' | 'Low-key & chill' | 'Nerdy & rambling' | 'Proper & polite' | 'Sarcastic & witty' | 'Shy & soft-spoken' | 'Submissive & obedient' | 'Sweet & innocent' | 'Tsundere' | 'Valley girl' | 'Weeb / anime speech' — Character's conversation style. Controls the tone and manner of the character's text responses.
  - `sexualExperience` '100+ partners' | 'Almost virgin' | 'Always slutty' | 'Experienced' | 'Former escort' | 'Highly experienced' | 'Innocent but curious' | 'Lots of threesomes' | 'Moderate' | 'Mostly one-night stands' | 'Nymphomaniac' | 'Only relationships' | 'Porn-level' | 'Recently awakened' | 'Reformed good girl' | 'Sheltered then wild' | 'Swinger' | 'Very experienced' | 'Very limited' | 'Virgin' — Character's sexual experience level. Affects the character's personality and how they discuss sexual topics in text conversations.
  - `additionalDescription` string — Free-text traits added to the reference image that the structured fields can't express. Examples: `nose piercing`, `hooped earrings`, `cherry blossom sleeve tattoo`, `wire-frame glasses`, `thin scar above the left eyebrow`.

## Response `202`

Character generation started. Poll status endpoint for completion.

- object
  - `success` boolean
  - `characterGuid` string, uuid — Character GUID for status polling and save operation
  - `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)
  - `character` object — Initial character data
  - `images` object
    - `nsfw_image` string, uri
    - `sfw_image` string, uri
  - `message` string

## Other responses

- `400` — Validation error - missing required fields, character under 21, or `additionalDescription` blocked by moderation (response body: `{"message": "Additional details blocked by moderation"}`).
- `401` — Unauthorized - invalid or missing API key

---

[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)
