POST /v1/quotes
Price a request
What a generation or a recipe run would cost and who would pay, compared with the balance. Creates nothing.
Permission
A key with chosen permissions needs generation.write. A key made with every permission may always call it.
Body: type: "image"
type"image" · requiredpromptstring · optionalup to 2000 characters
modelstring · optionalDefaults to the server's default image model.
up to 80 characters
aspect_ratiostring · optionalSuch as "9:16", "1:1" or "16:9". Defaults to 9:16, snapped to what the model offers.
up to 12 characters
settingstring · optionalThe model's one extra setting (`setting` on `GET /v1/models/{id}`), such as its quality.
up to 40 characters
referencesMediaReference[] · optionalPictures the model can see. The model's `max_reference_images` applies.
up to 16 items
subjectsstring[] · optionalNames or ids of your Subjects. Kuro brings each one's face and description, so do not also attach pictures of them.
up to 4 items
runs_onstring · optionalWho pays: "credits", or the vendor of one of your own keys ("replicate", "fal", …). Leave out to follow the payer order set in Settings → Agents.
up to 40 characters
Body: type: "clip"
type"clip" · requiredpromptstring · optionalup to 4000 characters
modelstring · optionalDefaults to the server's default clip model.
up to 80 characters
duration_secondsinteger · optionalOne of the model's `duration.values`; -1 lets a model that supports it choose.
min -1 · max 60
resolutionstring · optionalup to 12 characters
aspect_ratiostring · optionalDefaults to 9:16. Leave out with a `first_frame`: the clip takes the frame's shape.
up to 12 characters
generate_audioboolean · optionalfirst_frameMediaReference · optionalA picture, clip or sound you already have in Kuro.
last_frameMediaReference · optionalA picture, clip or sound you already have in Kuro.
reference_imagesMediaReference[] · optionalup to 9 items
reference_videosMediaReference[] · optionalA take to copy motion from, or to re-sync a mouth in.
up to 3 items
reference_audiosMediaReference[] · optionalup to 3 items
subjectsstring[] · optionalNames or ids of your Subjects. Kuro brings each one's face and description, so do not also attach pictures of them.
up to 4 items
runs_onstring · optionalWho pays: "credits", or the vendor of one of your own keys ("replicate", "fal", …). Leave out to follow the payer order set in Settings → Agents.
up to 40 characters
Body: type: "voiceover"
type"voiceover" · requiredtextstring · requiredThe words to speak.
up to 4000 characters
subjectstring · optionalA Subject whose bound voice reads it. Then leave out model, voice, style_prompt and language_code.
up to 120 characters
modelstring · optionalup to 80 characters
voicestring · optionalA voice id from the model's `voices`.
up to 120 characters
style_promptstring · optionalHow to say it, on models that take one.
up to 4000 characters
language_codestring · optionalup to 35 characters
speednumber · optionalmin 0.1 · max 5
emotionstring · optionalup to 40 characters
runs_onstring · optionalWho pays: "credits", or the vendor of one of your own keys ("replicate", "fal", …). Leave out to follow the payer order set in Settings → Agents.
up to 40 characters
Body: type: "music"
type"music" · requiredpromptstring · requiredThe brief: genre, mood, instruments, tempo.
up to 4000 characters
modelstring · optionalup to 80 characters
lyricsstring · optionalup to 3500 characters
instrumentalboolean · optionalDefaults to true when there are no lyrics.
runs_onstring · optionalWho pays: "credits", or the vendor of one of your own keys ("replicate", "fal", …). Leave out to follow the payer order set in Settings → Agents.
up to 40 characters
Body: type: "recipe"
promptstring · optionalThe idea, in the words the recipe's `prompt` asks for.
up to 4000 characters
inputsobject · optionalBy key. On an `arm` or `reprompt` recipe, each of its `inputs` takes a list of media (`{ "type": "upload", "upload_id" }`, `{ "type": "generation", "generation_id" }`) or one Subject (`{ "type": "subject", "subject_id" }`). On a `run` recipe, each of its `run_inputs` takes the value its type asks for.
choicesobject · optionalOne option `value` per choice, by key; a list where `max_picks` is above one.
modelstring · optionalAnother model of the recipe's medium. Not for `run` recipes.
up to 80 characters
runs_onstring · optionalWho pays: "credits", or the vendor of one of your own keys ("replicate", "fal", …). Leave out to follow the payer order set in Settings → Agents.
up to 40 characters
type"recipe" · requiredrecipe_idstring · requireduuid
Response: Quote
200 · A price, before anything is spent.
object"quote"creditsnumberWhat it would cost, in credits.
paid_bystring | nullWho would pay: "credits", "house", "server", or the vendor of your own key.
estimated_cost_usdnumber | nullWhat your own provider account would be charged, when your key pays.
available_creditsnumberaffordablebooleanWhether it can run now.
aspect_ratiostring | nullblockedobject | nullWhy the payer named in `runs_on` cannot take it.
Example
The required fields only, each a placeholder. Replace them before sending.
curl -X POST "https://api.meetkuro.com/v1/quotes" \
-H "Authorization: Bearer $KURO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"image","prompt":"<prompt>"}'import { Kuro } from "@meetkuro/sdk";
const kuro = new Kuro(); // reads KURO_API_KEY
await kuro.quotes.create({ type: "image", prompt: "A lighthouse at dawn" });