{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/ditto-audio/json-schema/ditto-audio-update-voice-model-dto-schema.json",
  "title": "UpdateVoiceModelDto",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/ditto-audio-openapi.json#/components/schemas/UpdateVoiceModelDto",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "lowercase-kebab unique id"
    },
    "name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "engine": {
      "type": "string",
      "enum": [
        "piper",
        "xtts",
        "kokoro",
        "pocket",
        "rvc",
        "system",
        "morpho"
      ]
    },
    "language": {
      "type": "string"
    },
    "quality": {
      "type": "string"
    },
    "gender": {
      "type": "object",
      "description": "Who the voice sounds like: `female`, `male` or `neutral`. A label or alias (`woman`, `man`) is stored as its key; a word that names none is a 400 `VOICE_TAXONOMY`, like every word of the voice taxonomy."
    },
    "accent": {
      "type": "object",
      "description": "An accent of the voice taxonomy (GET /v1/models/taxonomy), when finer than what `language` says: `en-GB` is British already."
    },
    "age": {
      "type": "object",
      "description": "How old the voice sounds: `young`, `middle-aged` or `older` (a label is stored as its key)."
    },
    "styles": {
      "description": "How it sounds: style keys of the voice taxonomy.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "useCases": {
      "description": "What it suits: use-case keys of the voice taxonomy.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "taxonomySource": {
      "type": "string",
      "enum": [
        "curated",
        "measured",
        "import"
      ],
      "default": "curated",
      "description": "Who says the accent, styles and use cases of this request: the catalogue's record, a measurement of the audio, or the dataset the voice came from."
    },
    "version": {
      "type": "string"
    },
    "format": {
      "type": "string"
    },
    "sampleRate": {
      "type": "number"
    },
    "author": {
      "type": "string"
    },
    "license": {
      "type": "string"
    },
    "sourceUrl": {
      "type": "string"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "coverImageUrl": {
      "type": "string"
    },
    "isPublic": {
      "type": "boolean",
      "default": true
    },
    "isFeatured": {
      "type": "boolean",
      "default": false
    },
    "isPremium": {
      "type": "boolean",
      "default": false,
      "description": "Premium voice — access gated by the subscriber tier quota (premiumModels)."
    },
    "baseSlug": {
      "type": "string",
      "description": "For an overlay catalog voice (e.g. an XTTS studio speaker): the slug of the base XTTS voice whose heavy bundle this voice reuses. Only this voice’s latents are stored; the client loads the shared base and swaps them in."
    }
  }
}