{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Doitong Models API","version":"2026-10-20","summary":"Image, video, audio and other AI models behind one REST interface, priced like the upstream in USD.","description":"One POST /run/{model} for every model (add ?wait= to get the result in the same call), one GET /requests/{id} for status, exact prices from POST /quote/{model}, output files on our storage (kept forever, paid per GB-month, or 7 days for free: the account setting or ?storage=) and signed webhooks. Model ids contain slashes; they are written as is in the path. Prices are API credits paid from the account's API balance: 1000 API credits = 1 USD, every price object carries the USD amount (add ?currency=rub for roubles). Typed per-model paths: this document carries the featured models by default; add ?category=<id>, ?model=<id> or ?models=all for others (the generic /run/{model_id} accepts every model of GET /models).","contact":{"name":"Doitong","url":"https://doitong.com/developers"}},"servers":[{"url":"https://api.doitong.com/v1","description":"Doitong API"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Models","description":"The model catalog."},{"name":"Run","description":"Quote and run models."},{"name":"Requests","description":"Status, results and cancellation of runs."},{"name":"Files","description":"Upload input files."},{"name":"Account","description":"API balance (API credits), key limits and file storage."},{"name":"MCP","description":"Model Context Protocol endpoint for AI agents."}],"paths":{"/models":{"get":{"operationId":"listModels","tags":["Models"],"summary":"List models","security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"Words that must all appear in the id, name, maker or tags.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Category id.","schema":{"type":"string","enum":["text-to-image","image-to-image","text-to-video","image-to-video","reference-to-video","video-to-video","lipsync","upscale","background-removal","text-to-speech","speech-to-text","text-to-music","audio","video-to-audio","image-to-3d","text-to-3d","3d","training","llm","vision","other"]}},{"name":"lab","in":"query","required":false,"description":"Model maker, by name or slug (any case).","schema":{"type":"string"}},{"name":"family","in":"query","required":false,"description":"Variants group id (the family field of a model).","schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"description":"Price mode.","schema":{"type":"string","enum":["exact","measured","estimate","metered"]}},{"$ref":"#/components/parameters/Limit"},{"name":"cursor","in":"query","required":false,"description":"next_cursor of the previous page.","schema":{"type":"string"}},{"$ref":"#/components/parameters/Currency"}],"responses":{"200":{"description":"A page of models.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelList"}}}},"400":{"$ref":"#/components/responses/Error"}}}},"/models/{model_id}":{"get":{"operationId":"getModel","tags":["Models"],"summary":"Get a model","security":[],"parameters":[{"$ref":"#/components/parameters/ModelId"},{"$ref":"#/components/parameters/Currency"}],"responses":{"200":{"description":"The model.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDetail"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/categories":{"get":{"operationId":"listCategories","tags":["Models"],"summary":"List categories","security":[],"responses":{"200":{"description":"Categories that have models.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryList"}}}}}}},"/quote/{model_id}":{"post":{"operationId":"quoteModel","tags":["Run"],"summary":"Quote a run of any model","description":"Same body as run; returns the exact API credits and USD. A key is optional; with one the answer also says whether the API balance and the key can pay.","security":[{},{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/ModelId"},{"$ref":"#/components/parameters/Currency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelInput"}}}},"responses":{"200":{"description":"The exact price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/run/{model_id}":{"post":{"operationId":"runModel","tags":["Run"],"summary":"Run any model","parameters":[{"$ref":"#/components/parameters/ModelId"},{"$ref":"#/components/parameters/Wait"},{"name":"webhook_url","in":"query","required":false,"description":"https URL that receives a signed POST when the request finishes.","schema":{"type":"string","format":"uri"}},{"name":"storage","in":"query","required":false,"description":"Where the output files go: permanent (kept until deleted, paid per GB-month) or temporary (free, deleted after 7 days). Default: the account setting (GET /account → storage.mode).","schema":{"$ref":"#/components/schemas/StorageMode"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Same key + same body returns the same request instead of a second charge.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelInput"}}}},"responses":{"200":{"description":"Finished within wait, or an idempotent replay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"202":{"description":"Accepted; poll GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"402":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/requests":{"get":{"operationId":"listRequests","tags":["Requests"],"summary":"List this account's requests","parameters":[{"$ref":"#/components/parameters/Limit"},{"name":"status","in":"query","required":false,"description":"Only this status.","schema":{"$ref":"#/components/schemas/RequestStatus"}},{"name":"model","in":"query","required":false,"description":"Only this model id.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"next_cursor of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestList"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/requests/{request_id}":{"get":{"operationId":"getRequest","tags":["Requests"],"summary":"Get a request","parameters":[{"$ref":"#/components/parameters/RequestId"},{"$ref":"#/components/parameters/Wait"},{"name":"logs","in":"query","required":false,"description":"Set to 1 to include the latest log lines.","schema":{"type":"string","enum":["0","1"]}}],"responses":{"200":{"description":"The request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"404":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/requests/{request_id}/cancel":{"post":{"operationId":"cancelRequest","tags":["Requests"],"summary":"Cancel a request","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Canceled (refunded), or already canceled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelResult"}}}},"202":{"description":"The model is already working; cancellation was requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelResult"}}}},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/requests/{request_id}/files":{"delete":{"operationId":"deleteRequestFiles","tags":["Requests"],"summary":"Delete a request's output files","description":"Deletes our copies of the output files now and stops their storage charge. The request keeps its URLs with storage.expired = true. Idempotent; a request still running is a 409.","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"The request, files deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/files":{"post":{"operationId":"createUpload","tags":["Files"],"summary":"Create an upload URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadRequest"}}}},"responses":{"201":{"description":"Upload with PUT, then pass file_url as a model input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"422":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/account":{"get":{"operationId":"getAccount","tags":["Account"],"summary":"API balance and key limits","parameters":[{"$ref":"#/components/parameters/Currency"}],"responses":{"200":{"description":"The account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/account/storage":{"patch":{"operationId":"updateStorageSettings","tags":["Account"],"summary":"Set the default file storage","description":"permanent (default): output files are kept until you delete them, 100 API credits per GB per month from the API balance. temporary: free, deleted after 7 days. Applies to new requests; ?storage= on a run overrides it.","parameters":[{"$ref":"#/components/parameters/Currency"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageSettingsUpdate"}}}},"responses":{"200":{"description":"The storage settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageSettings"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/mcp":{"post":{"operationId":"mcp","tags":["MCP"],"summary":"MCP endpoint (JSON-RPC 2.0, Streamable HTTP)","description":"Tools: search_models, get_model, quote, run, get_request, cancel_request, list_requests, create_upload, get_account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"JSON-RPC response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"202":{"description":"Notification accepted (no body)."},"401":{"description":"No API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}}}}},"/run/bria/fibo-lite/generate":{"post":{"operationId":"runBriaFiboLiteGenerate","tags":["Run"],"summary":"Run Fibo Lite","description":"Fast lightweight text-to-image model with structured prompt support and an optional reference image Price: $0.036 / image.","parameters":[{"$ref":"#/components/parameters/Wait"},{"name":"webhook_url","in":"query","required":false,"description":"https URL that receives a signed POST when the request finishes.","schema":{"type":"string","format":"uri"}},{"name":"storage","in":"query","required":false,"description":"Where the output files go: permanent (kept until deleted, paid per GB-month) or temporary (free, deleted after 7 days). Default: the account setting (GET /account → storage.mode).","schema":{"$ref":"#/components/schemas/StorageMode"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Same key + same body returns the same request instead of a second charge.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaFiboLiteGenerateInput"}}}},"responses":{"200":{"description":"Finished within wait, or an idempotent replay.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Request"},{"type":"object","properties":{"output":{"anyOf":[{"$ref":"#/components/schemas/BriaFiboLiteGenerateOutput"},{"type":"null"}]}}}]}}}},"202":{"description":"Accepted; poll GET /requests/{id}.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Request"},{"type":"object","properties":{"output":{"anyOf":[{"$ref":"#/components/schemas/BriaFiboLiteGenerateOutput"},{"type":"null"}]}}}]}}}},"402":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}}},"/quote/bria/fibo-lite/generate":{"post":{"operationId":"quoteBriaFiboLiteGenerate","tags":["Run"],"summary":"Quote Fibo Lite","description":"Price: $0.036 / image.","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaFiboLiteGenerateInput"}}}},"responses":{"200":{"description":"The exact price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key (doitong_…) as \"Authorization: Bearer <key>\". \"X-API-Key: <key>\" also works."}},"parameters":{"ModelId":{"name":"model_id","in":"path","required":true,"description":"Model id; may contain slashes (e.g. flux/schnell), written as is.","schema":{"type":"string"}},"RequestId":{"name":"request_id","in":"path","required":true,"schema":{"type":"string","pattern":"^req_[a-z0-9]+$"}},"Limit":{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},"Currency":{"name":"currency","in":"query","required":false,"description":"rub adds rouble amounts (rate × 1.3) next to USD; usd leaves them out. Default: rub on api.doitong.ru and doitong.ru, usd elsewhere.","schema":{"type":"string","enum":["usd","rub"]}},"Wait":{"name":"wait","in":"query","required":false,"description":"Hold the call up to this many seconds (max 20) and return the finished request if it completes in time.","schema":{"type":"number","minimum":0,"maximum":20}}},"responses":{"Error":{"description":"Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"ModelInput":{"type":"object","additionalProperties":true,"description":"The model's parameters. See GET /models/{model_id} for its input_schema."},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","permission_error","not_found","insufficient_credits","budget_exceeded","conflict","rate_limited","upstream_error","service_unavailable","internal_error"]},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":["string","null"]},"details":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}}}},"request_id":{"type":["string","null"]},"doc_url":{"type":"string","format":"uri"}}}}},"Price":{"type":"object","description":"Unit price. 1000 API credits = 1 USD (the upstream price).","properties":{"credits":{"type":["number","null"],"description":"API credits per unit (exact prices may have decimals)."},"usd":{"type":["string","null"],"description":"USD per unit, e.g. \"0.112\"."},"rub":{"type":"string","description":"RUB per unit, only with currency=rub or on the RU hosts."},"unit":{"type":"string"},"from_credits":{"type":["integer","null"],"description":"Cheapest plausible single run, in API credits. For a metered model (charged by usage): the typical run, never above hold_credits; a run can settle lower."},"from_usd":{"type":["string","null"]},"from_rub":{"type":"string"},"display":{"type":["string","null"],"description":"e.g. \"$0.112 / second\"."},"credits_display":{"type":["string","null"],"description":"e.g. \"112 API credits / second\"."},"rub_display":{"type":"string","description":"e.g. \"≈ 14.56 ₽ / секунду\" (RU only)."},"mode":{"type":["string","null"],"enum":["exact","measured","estimate","metered",null],"description":"exact: the price is computed from the input; measured: from the length / size of the input files, read before the run; estimate: a flat price per run. All are what a run charges (POST /quote returns the exact amount). metered: charged by actual usage (tokens, seconds of generated speech, processing time) at this unit price — a run holds hold_credits at most and the rest is refunded after it."},"hold_credits":{"type":"integer","description":"metered only: the most a run with the default input can cost (POST /quote gives it for your input)."},"hold_usd":{"type":"string"},"typical_credits":{"type":"integer","description":"metered only: a typical run."},"typical_usd":{"type":"string"},"per":{"type":"string","description":"measured only: what the unit is counted on, e.g. input_video, input_audio, output_video, output_image."},"label":{"type":"string","description":"measured: e.g. \"Price per second of your input video\"; metered: \"Charged by usage\"."}}},"Model":{"type":"object","required":["id","name","category"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"lab":{"type":"string"},"category":{"type":"string"},"summary":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"output_kind":{"type":"string"},"thumbnail_url":{"type":["string","null"]},"price":{"$ref":"#/components/schemas/Price"},"docs_url":{"type":"string","format":"uri"},"family":{"type":["string","null"],"description":"Variants group (GET /models?family=)."}}},"ModelDetail":{"allOf":[{"$ref":"#/components/schemas/Model"},{"type":"object","properties":{"description":{"type":"string"},"family":{"type":["string","null"]},"input_schema":{"type":"object"},"output_schema":{"type":"object"},"required_params":{"type":"array","items":{"type":"string"}},"aliases":{"type":"object","additionalProperties":{"type":"string"}},"pricing":{"type":"object"},"example_input":{"type":"object"},"family_ids":{"type":"array","items":{"type":"string"}},"markdown_url":{"type":"string","format":"uri"}}}]},"ModelList":{"type":"object","required":["object","data"],"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"Category":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"count":{"type":"integer"}}},"CategoryList":{"type":"object","required":["object","data"],"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Category"}}}},"Quote":{"type":"object","required":["object","model","credits"],"properties":{"object":{"const":"quote"},"model":{"type":"string"},"credits":{"type":"integer","description":"API credits this run charges (1000 = 1 USD)."},"usd":{"type":"string","description":"The same amount in USD, e.g. \"0.56\"."},"rub":{"type":"string","description":"In roubles (rate × 1.3), only with currency=rub or on the RU hosts."},"unit":{"type":"string"},"quantity":{"type":"number"},"unit_credits":{"type":"number"},"mode":{"enum":["exact","measured","estimate","metered"],"description":"exact: priced from the input. measured: priced from the length / size of the input files, which were measured for this quote (see measurements; a run with the same files within an hour charges this). estimate: a flat price per run from the typical cost of this model. All are exactly what the run charges. metered: credits is the HOLD — the most this run can cost, debited when it starts; after the run it is settled to the actual usage and the rest is refunded automatically (see hold, typical, and the request's cost.settled)."},"hold":{"type":"object","description":"metered only: { credits, usd (, rub) } — the most the run can cost."},"typical":{"type":["object","null"],"description":"metered only: { credits, usd (, rub) } of a typical run."},"settlement":{"const":"usage","description":"metered only: the run is charged its actual usage."},"label":{"type":"string","description":"\"Price per run\", \"Estimated price per run\" or, measured, e.g. \"Price per second of your input video\"."},"measurements":{"type":"object","description":"measured only: per input param what was measured ({ seconds, width, height, fps, frames, kind })."},"display":{"type":["string","null"]},"breakdown":{"type":["string","null"]},"input":{"type":"object","description":"The normalized input that was priced."},"warnings":{"type":"array","items":{"type":"string"}},"balance_credits":{"type":"integer","description":"API balance in API credits. Only with an API key."},"balance_usd":{"type":"string","description":"Only with an API key."},"affordable":{"type":"boolean","description":"Only with an API key."},"key_budget_remaining":{"type":["integer","null"],"description":"Only with an API key; API credits; null when the key has no cap."},"top_up_url":{"type":"string","format":"uri","description":"Present when the API balance is too low."}}},"RequestStatus":{"type":"string","enum":["queued","running","succeeded","failed","canceled"]},"Output":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","enum":["image","video","audio","file","3d"]},"url":{"type":"string","format":"uri"},"content_type":{"type":["string","null"]},"file_size":{"type":["integer","null"]},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"duration":{"type":["number","null"]},"stored":{"type":"boolean"},"expired":{"type":"boolean","description":"Present (true) once our copy was deleted; the URL no longer works."}}},"StorageMode":{"type":"string","enum":["permanent","temporary"]},"StorageSettingsUpdate":{"type":"object","required":["mode"],"additionalProperties":false,"properties":{"mode":{"$ref":"#/components/schemas/StorageMode"}}},"RequestStorage":{"type":"object","description":"Where the output files are kept (DESIGN.md §17).","properties":{"mode":{"$ref":"#/components/schemas/StorageMode"},"bytes":{"type":"integer","description":"Bytes of our copies of the output files."},"expires_at":{"type":["string","null"],"format":"date-time","description":"When the files are deleted (temporary); null when kept until you delete them."},"expired":{"type":"boolean","description":"true once the files were deleted."}}},"StorageSettings":{"type":"object","properties":{"object":{"type":"string","description":"\"storage_settings\" from PATCH /account/storage."},"mode":{"$ref":"#/components/schemas/StorageMode"},"price_credits_per_gb_month":{"type":"integer","description":"API credits per GB (1024^3 bytes) per month of permanent storage."},"price_usd_per_gb_month":{"type":"string"},"price_rub_per_gb_month":{"type":"string","description":"Only with currency=rub or on the RU hosts."},"temporary_retention_days":{"type":"integer"},"used_bytes":{"type":"integer","description":"Bytes kept permanently (billed)."},"used_gb":{"type":"string"},"expiring_bytes":{"type":"integer","description":"Bytes waiting to be deleted."},"monthly_estimate_credits":{"type":"integer"},"monthly_estimate_usd":{"type":"string"},"grace_started_at":{"type":["string","null"],"format":"date-time","description":"The API balance stopped covering storage at this time."},"grace_until":{"type":["string","null"],"format":"date-time","description":"Top up before this time, or the permanent files become temporary."}}},"Request":{"type":"object","required":["id","object","model","status"],"properties":{"id":{"type":"string"},"object":{"const":"request"},"model":{"type":"string"},"status":{"$ref":"#/components/schemas/RequestStatus"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"},"queue_position":{"type":["integer","null"]},"cost":{"type":"object","description":"API credits (1000 = 1 USD).","properties":{"credits":{"type":"integer","description":"The quoted price (metered: the hold)."},"usd":{"type":"string","description":"The quoted price in USD."},"charged":{"type":"integer","description":"Debited from the API balance."},"refunded":{"type":"integer","description":"Given back (failure, cancel, or the unused part of a metered hold)."},"mode":{"const":"metered","description":"Only on metered requests."},"held":{"type":"integer","description":"metered only: the hold debited at the start."},"typical":{"type":"integer","description":"metered only: a typical run, API credits."},"settled":{"type":["object","null"],"description":"metered only, once the request succeeded: status settled (credits = what the usage cost = charged − refunded), pending, or no_usage (the model reported no usage: the hold stands).","properties":{"status":{"enum":["settled","pending","no_usage"]},"credits":{"type":"integer"},"usd":{"type":"string"},"quantity":{"type":"number","description":"Usage units billed."},"unit":{"type":"string","description":"e.g. 1000_tokens, audio_second, compute_second."},"unit_usd":{"type":"string"},"source":{"enum":["billed_usage","processing_time"]},"approximate":{"type":"boolean","description":"true when measured from the processing time."}}}}},"input":{"type":"object"},"output":{"type":["object","null"]},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/Output"}},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}},{"type":"null"}]},"metrics":{"type":["object","null"]},"storage":{"$ref":"#/components/schemas/RequestStorage"},"logs":{"type":"array","items":{"type":"object"}},"urls":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"cancel":{"type":"string","format":"uri"}}}}},"RequestList":{"type":"object","required":["object","data"],"properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Request"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"CancelResult":{"allOf":[{"$ref":"#/components/schemas/Request"},{"type":"object","properties":{"cancel_requested":{"type":"boolean"}}}]},"UploadRequest":{"type":"object","required":["filename"],"properties":{"filename":{"type":"string","description":"The extension decides the type (jpg, png, webp, mp4, mov, webm)."},"content_type":{"type":"string"},"size":{"type":"integer","minimum":1,"description":"Bytes."}}},"Upload":{"type":"object","properties":{"object":{"const":"upload"},"upload_url":{"type":"string","format":"uri"},"file_url":{"type":"string","format":"uri"},"method":{"const":"PUT"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"content_type":{"type":"string"},"expires_in":{"type":"integer"},"max_bytes":{"type":"integer"}}},"Account":{"type":"object","properties":{"object":{"const":"account"},"credits":{"type":"integer","description":"API balance in API credits (1000 = 1 USD). Separate from the Doitong app credits."},"balance":{"type":"object","properties":{"credits":{"type":"integer"},"usd":{"type":"string"},"rub":{"type":"string","description":"Only with currency=rub or on the RU hosts."}}},"top_up_url":{"type":"string","format":"uri"},"key":{"type":"object","properties":{"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"budget_remaining":{"type":["integer","null"],"description":"API credits; null: no cap on the key, the API balance is the limit."},"rate_limit":{"type":"integer"},"rate_limit_remaining":{"type":"integer"}}},"webhook_signing_secret":{"type":"string","description":"HMAC-SHA256 secret of the Doitong-Signature header."},"storage":{"$ref":"#/components/schemas/StorageSettings"}}},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","null"]},"method":{"type":"string"},"params":{"type":"object"}}},"JsonRpcResponse":{"type":"object","required":["jsonrpc"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","null"]},"result":{"type":"object"},"error":{"type":"object"}}},"BriaFiboLiteGenerateInput":{"properties":{"aspect_ratio":{"default":"1:1","description":"Image aspect ratio; available values are 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9.","enum":["1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9"],"title":"Aspect Ratio","type":"string"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL of the input image.","title":"Image Url","x-doitong-alias":"image"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Prompt used for generation.","examples":["Oil painting of a fluffy, wide-eyed cat sitting upright, holding a small wooden sign reading \"Feed Me.\" Rich textures, dramatic brushstrokes, warm tones, and vintage charm."],"title":"Prompt"},"seed":{"default":7,"description":"Seed used by the random-number generator.","title":"Seed","type":"integer"},"structured_prompt":{"anyOf":[{"properties":{"aesthetics":{"description":"Information describing the image's aesthetics.","properties":{"aesthetic_score":{"description":"Score description, for example medium, very low, low, very high, or high.","title":"Aesthetic Score","type":"string"},"color_scheme":{"description":"Color scheme; examples include 'monochromatic blue', 'warm complementary colors', and 'high contrast'.","title":"Color Scheme","type":"string"},"composition":{"description":"Composition style; examples include 'rule of thirds', 'symmetrical', 'centered', and 'leading lines'.","title":"Composition","type":"string"},"mood_atmosphere":{"description":"Mood or atmosphere, for example `joyful`, `serene`, `mysterious`, or `energetic`.","title":"Mood Atmosphere","type":"string"},"preference_score":{"description":"Score description, for example medium, very low, low, very high, or high.","title":"Preference Score","type":"string"}},"required":["composition","color_scheme","mood_atmosphere","aesthetic_score","preference_score"],"title":"AestheticsDetails","type":"object","x-doitong-order":["composition","color_scheme","mood_atmosphere","aesthetic_score","preference_score"]},"artistic_style":{"description":"Specific artistic traits, expressed in at most 3 words.","title":"Artistic Style","type":"string"},"background_setting":{"description":"Description of the scene as a whole: where it takes place, its surroundings or backdrop, and any background features worth noting.","title":"Background Setting","type":"string"},"context":{"description":"Additional context to aid interpretation of the image.","title":"Context","type":"string"},"lighting":{"description":"Information describing the lighting.","properties":{"conditions":{"description":"Lighting examples include 'bright daylight', 'dim indoor', 'studio lighting', and 'golden hour'.","title":"Conditions","type":"string"},"direction":{"description":"Lighting direction; examples include 'front-lit', 'backlit', and 'side-lit from left'.","title":"Direction","type":"string"},"shadows":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Description of any shadows present.","title":"Shadows"}},"required":["conditions","direction"],"title":"LightingDetails","type":"object","x-doitong-order":["conditions","direction","shadows"]},"objects":{"description":"List of notable objects in the foreground or midground.","items":{"description":"Detailed object description with all attributes.","properties":{"action":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Action performed by the person.","title":"Action"},"appearance_details":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Additional visual features worth noting.","title":"Appearance Details"},"clothing":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Clothing worn.","title":"Clothing"},"description":{"description":"Brief summary describing the object.","title":"Description","type":"string"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Expression shown on the face.","title":"Expression"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gender of the person.","title":"Gender"},"location":{"description":"Location, for example: 'center', 'top-left', or 'bottom-right foreground'.","title":"Location","type":"string"},"number_of_objects":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Count of objects within the cluster.","title":"Number Of Objects"},"orientation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Orientation of the person.","title":"Orientation"},"pose":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Position of the body.","title":"Pose"},"relationship":{"description":"Describe how this object relates to others within the image.","title":"Relationship","type":"string"},"relative_size":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Size, for example: 'small', 'medium', or 'large within frame'.","title":"Relative Size"},"shape_and_color":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic form and main color of the object.","title":"Shape And Color"},"skin_tone_and_texture":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tone and texture of the skin.","title":"Skin Tone And Texture"},"texture":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Texture, for example: 'smooth', 'rough', 'metallic', or 'furry'.","title":"Texture"}},"required":["description","location","relationship"],"title":"ObjectDescription","type":"object","x-doitong-order":["description","location","relationship","relative_size","shape_and_color","texture","appearance_details","number_of_objects","pose","expression","clothing","action","gender","skin_tone_and_texture","orientation"]},"title":"Objects","type":"array"},"photographic_characteristics":{"anyOf":[{"properties":{"camera_angle":{"description":"Camera angle; examples include 'eye-level', 'low angle', 'high angle', and 'dutch angle'.","title":"Camera Angle","type":"string"},"depth_of_field":{"description":"Depth of field; examples include 'shallow', 'deep', and 'bokeh background'.","title":"Depth Of Field","type":"string"},"focus":{"description":"Focus characteristics; examples include 'sharp focus on subject', 'soft focus', and 'motion blur'.","title":"Focus","type":"string"},"lens_focal_length":{"description":"Lens type or focal length, for example `macro`, `fisheye`, `wide-angle`, or `telephoto`.","title":"Lens Focal Length","type":"string"}},"required":["depth_of_field","focus","camera_angle","lens_focal_length"],"title":"PhotographicCharacteristicsDetails","type":"object","x-doitong-order":["depth_of_field","focus","camera_angle","lens_focal_length"]},{"type":"null"}],"description":"Information describing the photographic qualities."},"short_description":{"description":"Brief overview of what the image contains, limited to 200 words.","title":"Short Description","type":"string"},"style_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Artistic medium or style used.","title":"Style Medium"},"subject_emotions":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Explicit description of the subjects' visible expressions or emotions.","title":"Subject Emotions"},"text_render":{"anyOf":[{"items":{"description":"Text rendering information in the image.","properties":{"appearance_details":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Additional visual features worth noting.","title":"Appearance Details"},"color":{"description":"Color, for example `green`, `red`, or `blue`.","title":"Color","type":"string"},"font":{"description":"Font style, for example `minimalist`, `realistic`, or `cartoonish`.","title":"Font","type":"string"},"location":{"description":"Location, for example: 'center', 'top-left', or 'bottom-right foreground'.","title":"Location","type":"string"},"size":{"description":"Size, for example: 'small', 'medium', or 'large within frame'.","title":"Size","type":"string"},"text":{"description":"Content of the text.","title":"Text","type":"string"}},"required":["text","location","size","color","font"],"title":"TextRender","type":"object","x-doitong-order":["text","location","size","color","font","appearance_details"]},"type":"array"},{"type":"null"}],"description":"List of text elements rendered within the image.","title":"Text Render"}},"required":["short_description","objects","background_setting","lighting","aesthetics","context","artistic_style"],"title":"StructuredPrompt","type":"object","x-doitong-order":["short_description","objects","background_setting","lighting","aesthetics","photographic_characteristics","style_medium","text_render","context","artistic_style","subject_emotions"]},{"type":"null"}],"description":"Structured prompt used for generation."}},"title":"FiboLiteImageGenerationInput","type":"object","x-doitong-order":["prompt","structured_prompt","image_url","seed","aspect_ratio"]},"BriaFiboLiteGenerateOutput":{"properties":{"image":{"description":"Image produced by the model.","properties":{"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"MIME type identifying the file's content.","examples":["image/png"],"title":"Content Type"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name, generated automatically when omitted.","examples":["z9RV14K95DvU.png"],"title":"File Name"},"file_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"File size measured in bytes.","examples":[4404019],"title":"File Size"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The height of the image in pixels.","examples":[1024],"title":"Height"},"url":{"description":"Download URL for the file.","title":"Url","type":"string"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The width of the image in pixels.","examples":[1024],"title":"Width"}},"required":["url"],"title":"Image","type":"object","x-doitong-order":["url","content_type","file_name","file_size","width","height"]},"images":{"description":"Images produced by generation.","items":{"additionalProperties":true,"type":"object"},"title":"Images","type":"array"},"structured_prompt":{"description":"Prompt currently in use.","properties":{"aesthetics":{"description":"Information describing the image's aesthetics.","properties":{"aesthetic_score":{"description":"Score description, for example medium, very low, low, very high, or high.","title":"Aesthetic Score","type":"string"},"color_scheme":{"description":"Color scheme; examples include 'monochromatic blue', 'warm complementary colors', and 'high contrast'.","title":"Color Scheme","type":"string"},"composition":{"description":"Composition style; examples include 'rule of thirds', 'symmetrical', 'centered', and 'leading lines'.","title":"Composition","type":"string"},"mood_atmosphere":{"description":"Mood or atmosphere, for example `joyful`, `serene`, `mysterious`, or `energetic`.","title":"Mood Atmosphere","type":"string"},"preference_score":{"description":"Score description, for example medium, very low, low, very high, or high.","title":"Preference Score","type":"string"}},"required":["composition","color_scheme","mood_atmosphere","aesthetic_score","preference_score"],"title":"AestheticsDetails","type":"object","x-doitong-order":["composition","color_scheme","mood_atmosphere","aesthetic_score","preference_score"]},"artistic_style":{"description":"Specific artistic traits, expressed in at most 3 words.","title":"Artistic Style","type":"string"},"background_setting":{"description":"Description of the scene as a whole: where it takes place, its surroundings or backdrop, and any background features worth noting.","title":"Background Setting","type":"string"},"context":{"description":"Additional context to aid interpretation of the image.","title":"Context","type":"string"},"lighting":{"description":"Information describing the lighting.","properties":{"conditions":{"description":"Lighting examples include 'bright daylight', 'dim indoor', 'studio lighting', and 'golden hour'.","title":"Conditions","type":"string"},"direction":{"description":"Lighting direction; examples include 'front-lit', 'backlit', and 'side-lit from left'.","title":"Direction","type":"string"},"shadows":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Description of any shadows present.","title":"Shadows"}},"required":["conditions","direction"],"title":"LightingDetails","type":"object","x-doitong-order":["conditions","direction","shadows"]},"objects":{"description":"List of notable objects in the foreground or midground.","items":{"description":"Detailed object description with all attributes.","properties":{"action":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Action performed by the person.","title":"Action"},"appearance_details":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Additional visual features worth noting.","title":"Appearance Details"},"clothing":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Clothing worn.","title":"Clothing"},"description":{"description":"Brief summary describing the object.","title":"Description","type":"string"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Expression shown on the face.","title":"Expression"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gender of the person.","title":"Gender"},"location":{"description":"Location, for example: 'center', 'top-left', or 'bottom-right foreground'.","title":"Location","type":"string"},"number_of_objects":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Count of objects within the cluster.","title":"Number Of Objects"},"orientation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Orientation of the person.","title":"Orientation"},"pose":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Position of the body.","title":"Pose"},"relationship":{"description":"Describe how this object relates to others within the image.","title":"Relationship","type":"string"},"relative_size":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Size, for example: 'small', 'medium', or 'large within frame'.","title":"Relative Size"},"shape_and_color":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic form and main color of the object.","title":"Shape And Color"},"skin_tone_and_texture":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tone and texture of the skin.","title":"Skin Tone And Texture"},"texture":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Texture, for example: 'smooth', 'rough', 'metallic', or 'furry'.","title":"Texture"}},"required":["description","location","relationship"],"title":"ObjectDescription","type":"object","x-doitong-order":["description","location","relationship","relative_size","shape_and_color","texture","appearance_details","number_of_objects","pose","expression","clothing","action","gender","skin_tone_and_texture","orientation"]},"title":"Objects","type":"array"},"photographic_characteristics":{"anyOf":[{"properties":{"camera_angle":{"description":"Camera angle; examples include 'eye-level', 'low angle', 'high angle', and 'dutch angle'.","title":"Camera Angle","type":"string"},"depth_of_field":{"description":"Depth of field; examples include 'shallow', 'deep', and 'bokeh background'.","title":"Depth Of Field","type":"string"},"focus":{"description":"Focus characteristics; examples include 'sharp focus on subject', 'soft focus', and 'motion blur'.","title":"Focus","type":"string"},"lens_focal_length":{"description":"Lens type or focal length, for example `macro`, `fisheye`, `wide-angle`, or `telephoto`.","title":"Lens Focal Length","type":"string"}},"required":["depth_of_field","focus","camera_angle","lens_focal_length"],"title":"PhotographicCharacteristicsDetails","type":"object","x-doitong-order":["depth_of_field","focus","camera_angle","lens_focal_length"]},{"type":"null"}],"description":"Information describing the photographic qualities."},"short_description":{"description":"Brief overview of what the image contains, limited to 200 words.","title":"Short Description","type":"string"},"style_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Artistic medium or style used.","title":"Style Medium"},"subject_emotions":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Explicit description of the subjects' visible expressions or emotions.","title":"Subject Emotions"},"text_render":{"anyOf":[{"items":{"description":"Text rendering information in the image.","properties":{"appearance_details":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Additional visual features worth noting.","title":"Appearance Details"},"color":{"description":"Color, for example `green`, `red`, or `blue`.","title":"Color","type":"string"},"font":{"description":"Font style, for example `minimalist`, `realistic`, or `cartoonish`.","title":"Font","type":"string"},"location":{"description":"Location, for example: 'center', 'top-left', or 'bottom-right foreground'.","title":"Location","type":"string"},"size":{"description":"Size, for example: 'small', 'medium', or 'large within frame'.","title":"Size","type":"string"},"text":{"description":"Content of the text.","title":"Text","type":"string"}},"required":["text","location","size","color","font"],"title":"TextRender","type":"object","x-doitong-order":["text","location","size","color","font","appearance_details"]},"type":"array"},{"type":"null"}],"description":"List of text elements rendered within the image.","title":"Text Render"}},"required":["short_description","objects","background_setting","lighting","aesthetics","context","artistic_style"],"title":"StructuredPrompt","type":"object","x-doitong-order":["short_description","objects","background_setting","lighting","aesthetics","photographic_characteristics","style_medium","text_render","context","artistic_style","subject_emotions"]}},"required":["image","structured_prompt"],"title":"FiboLiteImageGenerationOutput","type":"object","x-doitong-order":["image","images","structured_prompt"]}}}}