{
  "description": "Generates a piece of music from a prompt and optional lyrics, genres and vocal gender. Fields the model does not support are rejected; the model catalog says which it supports.",
  "type": "object",
  "required": [
    "model"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "Model identifier from the model catalog (query-models). An unknown model is rejected."
    },
    "prompt": {
      "type": "string",
      "description": "Describes the music: mood, instrumentation, tempo and, for models without a lyrics field, the lyrics. Required unless the model takes lyrics and they are given."
    },
    "lyrics": {
      "type": "string",
      "description": "Lyrics to sing, for models whose catalog entry supports a separate lyrics field"
    },
    "genres": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Genres from the model catalog list"
    },
    "vocalGender": {
      "type": "string",
      "description": "Preferred gender of the singing voice for generated music.",
      "enum": [
        "FEMALE",
        "MALE"
      ]
    },
    "durationSeconds": {
      "type": "integer",
      "minimum": 1,
      "description": "Target length in seconds, for models whose catalog entry supports a duration"
    },
    "responseFormat": {
      "type": "string",
      "description": "How a request wants binary media (audio or image) returned. URL returns a short-lived signed URL hosted by Port OS (at most 10 minutes), never the vendor's own link. BASE64 returns the bytes inline as base64 and fails with a typed error above 10 MiB, in which case use URL.",
      "enum": [
        "URL",
        "BASE64"
      ],
      "default": "URL"
    }
  },
  "additionalProperties": false
}
