---
title: "quote_generation: Quote a generation"
description: "Price a request exactly, and compare it to the balance, without creating anything."
canonical_url: "https://meetkuro.com/agents/tools/quote_generation/"
updated: 2026-11-03
locale: "en"
tool: "quote_generation"
scopes: ["generation.write"]
---

# quote_generation

**Quote a generation**

Price a request exactly, and compare it to the balance, without creating anything. `target` picks the room: image, clip, voice (the generate_voiceover arguments), music (the generate_music brief) or guided (a guided recipe). Takes the same arguments as the matching generate tool.
To price a whole plan — a voice-over and the clips it drives, say — pass `requests` instead: up to 20 of the same objects, each with its own target. The answer is one line per request, the total and whether the balance covers it; a line that cannot run says why and the rest still price.
An avatar clip whose reference audio already exists is priced at that audio's length. Use only the account's existing entitlements: when a plan does not fit, explain it without offering purchases.

## Scope

- `generation.write` — Makes, edits, imports, shares and deletes media in the account.

## Behaviour

- **Read-only**: Reads the caller's own account and changes nothing.
- **Stays in the account**: Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.
- **Idempotent**: Calling it again with the same arguments has no further effect.

## Inputs

| Name | Type | Required | Details |
| --- | --- | --- | --- |
| `target` | string | no | one of "image", "clip", "voice", "music", "guided" |
| `prompt` | string | no | at most 4000 characters |
| `idempotency_key` | string | no | Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused. — at least 1 character; at most 128 characters |
| `model` | string | no | one of "seedream-5-lite", "nano-banana-2.1", "nano-banana-2", "gpt-image-2.5-flare", "gpt-image-2.5-sunburst", "gpt-image-2", "nano-banana-2-lite", "seedream-5-pro", "flux-schnell", "flux-2-flex", "flux-2-pro", "flux-2-max", "recraft-v4.1-svg", "recraft-v4.1-pro-svg", "p-image", "grok-imagine-image", "grok-imagine-image-quality", "krea-3", "qwen-image-3-pro", "soul-2", "seedance-2.5", "seedance-2.0", "seedance-2.0-fast", "seedance-2.0-mini", "grok-imagine-video-1.5", "veo-3.1", "veo-3.1-fast", "veo-3.1-lite", "gemini-omni-1.1", "kling-v3-omni-video", "kling-v3-video", "happyhorse-1.0", "wan-3", "wan-3-prime", "gen-4.5", "p-video", "p-video-2", "flux-3", "minimax-h3-max", "p-video-avatar", "p-video-animate", "p-video-replace", "omni-human-1.5", "kling-avatar-v2", "kling-v3-motion-control", "sync-lipsync-2", "kling-lip-sync", "genjutsu-motion-transfer", "genjutsu-object-swap", "elevenlabs-tts", "eleven-v4", "gemini-3.1-flash-tts", "kokoro-82m", "minimax-speech-2.8-hd", "inworld-tts-2", "minimax-music-2.6", "eleven-music" |
| `aspect_ratio` | string | no | one of "1:1", "1:2", "1:4", "1:8", "2:1", "2:3", "3:2", "3:4", "4:1", "4:3", "4:5", "5:4", "8:1", "9:16", "16:9", "21:9", "adaptive" |
| `setting` | string | no | — |
| `presets` | object | no | fields: style, motion, lighting, framing |
| `recreate_of` | string | no | uuid |
| `references` | array of object (type: "upload") or object (type: "generation") | no | The pictures this generation can see — uploads and generations alike, in the shape list_media returns. This is the only field that carries image data into the model. The selected model’s reference capacity applies (list_models). |
| `subjects` | array of string | no | Names or ids of the account's Subjects (list_subjects). The server supplies each one's face and description — seated against the model's capacity — so do not also attach pictures of them. — at most 4 items |
| `refined_from` | string | no | Lineage only — this records that the new image is the next version of that one, and carries NO pixels. Put the same generation in `references` or the model sees no picture. Prefer edit_image, which sets both from one id; reach for this only to hand-assemble a refine edit_image cannot express. — uuid |
| `runs_on` | string | no | Who pays: "credits", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose. — one of "credits", "replicate", "fal", "siray", "runware", "higgsfield", "sunra", "comfy" |
| `duration_seconds` | -1 or integer | no | — |
| `resolution` | string | no | one of "360p", "480p", "720p", "768p", "1080p", "4K" |
| `generate_audio` | boolean | no | — |
| `first_frame` | object (type: "upload") or object (type: "generation") | no | — |
| `last_frame` | object (type: "upload") or object (type: "generation") | no | — |
| `reference_images` | array of object (type: "upload") or object (type: "generation") | no | at most 30 items |
| `reference_videos` | array of object (type: "upload") or object (type: "generation") | no | The video this clip is driven by — a source performance to copy, or the take a mouth is re-synced in. Uploads and clips you generated alike, in the shape list_media returns. — at most 10 items |
| `reference_audios` | array of object (type: "upload") or object (type: "generation") | no | at most 10 items |
| `recipe_id` | string | no | uuid |
| `creative_prompt` | string | no | at most 4000 characters |
| `inputs` | array of object | no | at most 6 items |
| `choices` | object | no | — |
| `model_id` | string | no | one of "seedream-5-lite", "nano-banana-2.1", "nano-banana-2", "gpt-image-2.5-flare", "gpt-image-2.5-sunburst", "gpt-image-2", "nano-banana-2-lite", "seedream-5-pro", "flux-schnell", "flux-2-flex", "flux-2-pro", "flux-2-max", "recraft-v4.1-svg", "recraft-v4.1-pro-svg", "p-image", "grok-imagine-image", "grok-imagine-image-quality", "krea-3", "qwen-image-3-pro", "soul-2", "seedance-2.5", "seedance-2.0", "seedance-2.0-mini", "seedance-2.0-fast", "grok-imagine-video-1.5", "veo-3.1", "veo-3.1-fast", "veo-3.1-lite", "gemini-omni-1.1", "kling-v3-omni-video", "kling-v3-video", "happyhorse-1.0", "wan-3", "wan-3-prime", "gen-4.5", "p-video", "p-video-2", "flux-3", "minimax-h3-max", "p-video-avatar", "p-video-animate", "p-video-replace", "omni-human-1.5", "kling-avatar-v2", "kling-v3-motion-control", "kling-lip-sync", "sync-lipsync-2", "genjutsu-motion-transfer", "genjutsu-object-swap", "elevenlabs-tts", "eleven-v4", "gemini-3.1-flash-tts", "kokoro-82m", "minimax-speech-2.8-hd", "inworld-tts-2", "reel-music-1", "minimax-music-2.6", "eleven-music" |
| `text` | string | no | at least 1 character; at most 4000 characters |
| `subject` | string | no | at least 1 character; at most 120 characters |
| `voice` | string | no | at least 1 character; at most 120 characters |
| `style_prompt` | string | no | at most 4000 characters |
| `language_code` | string | no | at least 2 characters; at most 35 characters |
| `speed` | number | no | ≥ 0.1; ≤ 5 |
| `emotion` | string | no | one of "auto", "neutral", "happy", "sad", "angry", "fearful", "disgusted", "surprised", "calm" |
| `lyrics` | string | no | at least 1 character; at most 3500 characters |
| `is_instrumental` | boolean | no | — |
| `requests` | array of object | no | at least 1 item; at most 20 items |

## Example call

A `tools/call` request with the required arguments only, each a placeholder read off the schema. Replace them before sending.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quote_generation",
    "arguments": {}
  }
}
```

## Input schema

As the server sends it in `tools/list`:

```json
{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "enum": [
        "image",
        "clip",
        "voice",
        "music",
        "guided"
      ]
    },
    "prompt": {
      "type": "string",
      "maxLength": 4000
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused."
    },
    "model": {
      "type": "string",
      "enum": [
        "seedream-5-lite",
        "nano-banana-2.1",
        "nano-banana-2",
        "gpt-image-2.5-flare",
        "gpt-image-2.5-sunburst",
        "gpt-image-2",
        "nano-banana-2-lite",
        "seedream-5-pro",
        "flux-schnell",
        "flux-2-flex",
        "flux-2-pro",
        "flux-2-max",
        "recraft-v4.1-svg",
        "recraft-v4.1-pro-svg",
        "p-image",
        "grok-imagine-image",
        "grok-imagine-image-quality",
        "krea-3",
        "qwen-image-3-pro",
        "soul-2",
        "seedance-2.5",
        "seedance-2.0",
        "seedance-2.0-fast",
        "seedance-2.0-mini",
        "grok-imagine-video-1.5",
        "veo-3.1",
        "veo-3.1-fast",
        "veo-3.1-lite",
        "gemini-omni-1.1",
        "kling-v3-omni-video",
        "kling-v3-video",
        "happyhorse-1.0",
        "wan-3",
        "wan-3-prime",
        "gen-4.5",
        "p-video",
        "p-video-2",
        "flux-3",
        "minimax-h3-max",
        "p-video-avatar",
        "p-video-animate",
        "p-video-replace",
        "omni-human-1.5",
        "kling-avatar-v2",
        "kling-v3-motion-control",
        "sync-lipsync-2",
        "kling-lip-sync",
        "genjutsu-motion-transfer",
        "genjutsu-object-swap",
        "elevenlabs-tts",
        "eleven-v4",
        "gemini-3.1-flash-tts",
        "kokoro-82m",
        "minimax-speech-2.8-hd",
        "inworld-tts-2",
        "minimax-music-2.6",
        "eleven-music"
      ]
    },
    "aspect_ratio": {
      "type": "string",
      "enum": [
        "1:1",
        "1:2",
        "1:4",
        "1:8",
        "2:1",
        "2:3",
        "3:2",
        "3:4",
        "4:1",
        "4:3",
        "4:5",
        "5:4",
        "8:1",
        "9:16",
        "16:9",
        "21:9",
        "adaptive"
      ]
    },
    "setting": {
      "type": "string"
    },
    "presets": {
      "type": "object",
      "properties": {
        "style": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            {
              "type": "null"
            }
          ]
        },
        "motion": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "lighting": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "framing": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "recreate_of": {
      "type": "string",
      "format": "uuid"
    },
    "references": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "upload"
              },
              "upload_id": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "type",
              "upload_id"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "generation"
              },
              "generation_id": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "type",
              "generation_id"
            ],
            "additionalProperties": false
          }
        ]
      },
      "description": "The pictures this generation can see — uploads and generations alike, in the shape list_media returns. This is the only field that carries image data into the model. The selected model’s reference capacity applies (list_models)."
    },
    "subjects": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "description": "Names or ids of the account's Subjects (list_subjects). The server supplies each one's face and description — seated against the model's capacity — so do not also attach pictures of them."
    },
    "refined_from": {
      "type": "string",
      "format": "uuid",
      "description": "Lineage only — this records that the new image is the next version of that one, and carries NO pixels. Put the same generation in `references` or the model sees no picture. Prefer edit_image, which sets both from one id; reach for this only to hand-assemble a refine edit_image cannot express."
    },
    "runs_on": {
      "type": "string",
      "enum": [
        "credits",
        "replicate",
        "fal",
        "siray",
        "runware",
        "higgsfield",
        "sunra",
        "comfy"
      ],
      "description": "Who pays: \"credits\", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose."
    },
    "duration_seconds": {
      "anyOf": [
        {
          "type": "number",
          "const": -1
        },
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 1800
        }
      ]
    },
    "resolution": {
      "type": "string",
      "enum": [
        "360p",
        "480p",
        "720p",
        "768p",
        "1080p",
        "4K"
      ]
    },
    "generate_audio": {
      "type": "boolean"
    },
    "first_frame": {
      "$ref": "#/properties/references/items"
    },
    "last_frame": {
      "$ref": "#/properties/references/items"
    },
    "reference_images": {
      "type": "array",
      "items": {
        "$ref": "#/properties/references/items"
      },
      "maxItems": 30
    },
    "reference_videos": {
      "type": "array",
      "items": {
        "$ref": "#/properties/references/items"
      },
      "maxItems": 10,
      "description": "The video this clip is driven by — a source performance to copy, or the take a mouth is re-synced in. Uploads and clips you generated alike, in the shape list_media returns."
    },
    "reference_audios": {
      "type": "array",
      "items": {
        "$ref": "#/properties/references/items"
      },
      "maxItems": 10
    },
    "recipe_id": {
      "type": "string",
      "format": "uuid"
    },
    "creative_prompt": {
      "type": "string",
      "maxLength": 4000
    },
    "inputs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slot_key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "sources": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "const": "upload"
                    },
                    "upload_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "type",
                    "upload_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "const": "generation"
                    },
                    "generation_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "type",
                    "generation_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "const": "subject"
                    },
                    "subject_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "type",
                    "subject_id"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "minItems": 1,
            "maxItems": 6
          }
        },
        "required": [
          "slot_key",
          "sources"
        ],
        "additionalProperties": false
      },
      "maxItems": 6
    },
    "choices": {
      "type": "object",
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 16
          }
        ]
      }
    },
    "model_id": {
      "type": "string",
      "enum": [
        "seedream-5-lite",
        "nano-banana-2.1",
        "nano-banana-2",
        "gpt-image-2.5-flare",
        "gpt-image-2.5-sunburst",
        "gpt-image-2",
        "nano-banana-2-lite",
        "seedream-5-pro",
        "flux-schnell",
        "flux-2-flex",
        "flux-2-pro",
        "flux-2-max",
        "recraft-v4.1-svg",
        "recraft-v4.1-pro-svg",
        "p-image",
        "grok-imagine-image",
        "grok-imagine-image-quality",
        "krea-3",
        "qwen-image-3-pro",
        "soul-2",
        "seedance-2.5",
        "seedance-2.0",
        "seedance-2.0-mini",
        "seedance-2.0-fast",
        "grok-imagine-video-1.5",
        "veo-3.1",
        "veo-3.1-fast",
        "veo-3.1-lite",
        "gemini-omni-1.1",
        "kling-v3-omni-video",
        "kling-v3-video",
        "happyhorse-1.0",
        "wan-3",
        "wan-3-prime",
        "gen-4.5",
        "p-video",
        "p-video-2",
        "flux-3",
        "minimax-h3-max",
        "p-video-avatar",
        "p-video-animate",
        "p-video-replace",
        "omni-human-1.5",
        "kling-avatar-v2",
        "kling-v3-motion-control",
        "kling-lip-sync",
        "sync-lipsync-2",
        "genjutsu-motion-transfer",
        "genjutsu-object-swap",
        "elevenlabs-tts",
        "eleven-v4",
        "gemini-3.1-flash-tts",
        "kokoro-82m",
        "minimax-speech-2.8-hd",
        "inworld-tts-2",
        "reel-music-1",
        "minimax-music-2.6",
        "eleven-music"
      ]
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000
    },
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "voice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "style_prompt": {
      "type": "string",
      "maxLength": 4000
    },
    "language_code": {
      "type": "string",
      "minLength": 2,
      "maxLength": 35
    },
    "speed": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 5
    },
    "emotion": {
      "type": "string",
      "enum": [
        "auto",
        "neutral",
        "happy",
        "sad",
        "angry",
        "fearful",
        "disgusted",
        "surprised",
        "calm"
      ]
    },
    "lyrics": {
      "type": "string",
      "minLength": 1,
      "maxLength": 3500
    },
    "is_instrumental": {
      "type": "boolean"
    },
    "requests": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "target": {
            "$ref": "#/properties/target"
          },
          "prompt": {
            "$ref": "#/properties/prompt"
          },
          "idempotency_key": {
            "$ref": "#/properties/idempotency_key"
          },
          "model": {
            "$ref": "#/properties/model"
          },
          "aspect_ratio": {
            "$ref": "#/properties/aspect_ratio"
          },
          "setting": {
            "$ref": "#/properties/setting"
          },
          "presets": {
            "$ref": "#/properties/presets"
          },
          "recreate_of": {
            "$ref": "#/properties/recreate_of"
          },
          "references": {
            "$ref": "#/properties/references"
          },
          "subjects": {
            "$ref": "#/properties/subjects"
          },
          "refined_from": {
            "$ref": "#/properties/refined_from"
          },
          "runs_on": {
            "$ref": "#/properties/runs_on"
          },
          "duration_seconds": {
            "$ref": "#/properties/duration_seconds"
          },
          "resolution": {
            "$ref": "#/properties/resolution"
          },
          "generate_audio": {
            "$ref": "#/properties/generate_audio"
          },
          "first_frame": {
            "$ref": "#/properties/first_frame"
          },
          "last_frame": {
            "$ref": "#/properties/last_frame"
          },
          "reference_images": {
            "$ref": "#/properties/reference_images"
          },
          "reference_videos": {
            "$ref": "#/properties/reference_videos"
          },
          "reference_audios": {
            "$ref": "#/properties/reference_audios"
          },
          "recipe_id": {
            "$ref": "#/properties/recipe_id"
          },
          "creative_prompt": {
            "$ref": "#/properties/creative_prompt"
          },
          "inputs": {
            "$ref": "#/properties/inputs"
          },
          "choices": {
            "$ref": "#/properties/choices"
          },
          "model_id": {
            "$ref": "#/properties/model_id"
          },
          "text": {
            "$ref": "#/properties/text"
          },
          "subject": {
            "$ref": "#/properties/subject"
          },
          "voice": {
            "$ref": "#/properties/voice"
          },
          "style_prompt": {
            "$ref": "#/properties/style_prompt"
          },
          "language_code": {
            "$ref": "#/properties/language_code"
          },
          "speed": {
            "$ref": "#/properties/speed"
          },
          "emotion": {
            "$ref": "#/properties/emotion"
          },
          "lyrics": {
            "$ref": "#/properties/lyrics"
          },
          "is_instrumental": {
            "$ref": "#/properties/is_instrumental"
          }
        },
        "required": [
          "target"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20
    }
  },
  "additionalProperties": false
}
```

## Related tools

- [`generate_voiceover`](https://meetkuro.com/agents/tools/generate_voiceover.md): Start a voice-over generation from text.
- [`generate_music`](https://meetkuro.com/agents/tools/generate_music.md): Start a music generation from a creative brief.

---

## About Kuro

Kuro is an AI picture studio: prompt-driven images, clips, voice-overs and music, and storyboard-backed films with consistent characters across every scene.

Agents connect over MCP and can generate directly:

```
claude mcp add kuro https://api.meetkuro.com/mcp --transport http
```

The app is at https://app.meetkuro.com and requires an account.

Each guide, model page, comparison and free tool page on this site (not a tool's variants, and not the index pages) has a Markdown twin at its own URL plus `.md`, and so do /benchmarks/, the English /agents/ page (as /agents.md) and the MCP tool reference. Every tool: https://meetkuro.com/agents/tools/
