{"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.ru/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/heygen/avatar5/digital-twin":{"post":{"operationId":"runHeygenAvatar5DigitalTwin","tags":["Run"],"summary":"Run Heygen v5 Digital Twin","description":"Avatar V digital twin with 4k output, transparent WebM, background, watermark and SRT captions Price: $0.10 / second of input audio.","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/HeygenAvatar5DigitalTwinInput"}}}},"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/HeygenAvatar5DigitalTwinOutput"},{"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/HeygenAvatar5DigitalTwinOutput"},{"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/heygen/avatar5/digital-twin":{"post":{"operationId":"quoteHeygenAvatar5DigitalTwin","tags":["Run"],"summary":"Quote Heygen v5 Digital Twin","description":"Price: $0.10 / second of input audio.","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeygenAvatar5DigitalTwinInput"}}}},"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"}}},"HeygenAvatar5DigitalTwinInput":{"description":"Request for HeyGen Avatar V digital-twin video generation.\n\nPass either ``avatar`` (a name from the ``/v2/avatars`` catalog) or\n``avatar_id`` (a raw HeyGen avatar ID); the avatar must be Avatar\nV-eligible (HeyGen returns 400 otherwise).","properties":{"aspect_ratio":{"default":"16:9","description":"Video aspect-ratio selection: 'auto' asks HeyGen to read and retain the source ratio, using '16:9' if it cannot. Explicit ratio choices are '16:9', '9:16', '4:5', '5:4', and '1:1'.","enum":["16:9","9:16","4:5","5:4","1:1","auto"],"title":"Aspect Ratio","type":"string"},"audio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Lip-sync source supplied as an HTTP(S) audio file URL, replacing text-to-speech when present. Neither `prompt` nor `voice` is used in that case.","title":"Audio Url","x-doitong-alias":"audio"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Abigail Sofa Front","description":"Name identifying an avatar eligible for Avatar V.","examples":["Abigail Office Front","Abigail Office Side","Abigail Sofa Front","Abigail Sofa Side","Amelia Business Training Front 2","Amelia Business Training Front","Amelia Business Training Side 2","Amelia Business Training Side","Amelia Lounge Front 2","Amelia Lounge Front","Amelia Lounge Side 2","Amelia Lounge Side","Amelia Yoga Front 2","Amelia Yoga Front","Amelia Yoga Side 2","Amelia Yoga Side","Anja Office Front","Anja Office Side ","Anja Sofa Front","Anja Sofa Side ","Ann Doctor Sitting","Ann Doctor Standing","Ann Therapist","Annie Bar Sitting Front","Annie Bar Sitting Side","Annie Bar Standing Front 2","Annie Bar Standing Front 3","Annie Bar Standing Front","Annie Bar Standing Side 2","Annie Bar Standing Side 3","Annie Bar Standing Side","Annie Business Casual Standing Front 2","Annie Business Casual Standing Front","Annie Business Casual Standing Side 2","Annie Business Casual Standing Side","Annie Casual Sitting Front 2","Annie Casual Sitting Front","Annie Casual Sitting Side 2","Annie Casual Sitting Side","Annie Casual Standing Front 2","Annie Casual Standing Front","Annie Casual Standing Side 2","Annie Casual Standing Side","Annie Desk Sitting Front 2","Annie Desk Sitting Front","Annie Desk Sitting Side 2","Annie Desk Sitting Side","Annie Lounge Standing Front","Annie Lounge Standing Side","Annie Office Sitting Front 2","Annie Office Sitting Front","Annie Office Sitting Side 2","Annie Office Sitting Side","Annie Office Standing Front","Annie Office Standing Side","Annie Sofa Sitting Front 3","Annie Sofa Sitting Front","Annie Sofa Sitting Side 2","Annie Sofa Sitting Side 3","Annie Sofa Sitting Side","Annie Sofa Sitting Front 2","Annie Studio Pink Sitting Front","Annie Studio Pink Sitting Side","Annie Studio Pink Standing Front","Annie Studio Pink Standing Side","Artur Office Front 2","Artur Office Front","Artur Office Side 2","Artur Office Side","Artur Sofa Casual Front 2","Artur Sofa Casual Front","Artur Sofa Casual Side 2","Artur Sofa Causal Side","Aubrey Sofa Side","Aubrey Night Scene Front","Aubrey Outdoor Sport Front","Aubrey Outdoor Sport Side","Aubrey Sofa Front","Blanka Lounge Front","Blanka Lounge Side","Blanka Outdoor Business Front","Blanka Outdoor Business Side","Blanka Outdoor Reading Front","Blanka Outdoor Reading Side","Blanka Picnic Front","Blanka Picnic Side","Bojan Business Training Front 2","Bojan Business Training Front","Bojan Business Training Side 2","Bojan Business Training Side","Bojan Lounge Front 2","Bojan Lounge Front","Bojan Lounge Side 2","Bojan Lounge Side","Bojan Sport Front 2","Bojan Sport Front","Bojan Sport Side 2","Bojan Sport Side","Brandon Business Sitting Front","Brandon Business Sitting Side","Brandon Business Standing Front","Brandon Business Standing Side","Brandon Casual Sitting Front","Brandon Casual Sitting Side","Brandon Kitchen Standing Front","Brandon Kitchen Standing Side","Brandon Lobby Sitting Front","Brandon Lobby Sitting Side","Brandon Lobby Standing Front","Brandon Lobby Standing Side","Brandon Office Sitting Front","Brandon Office Sitting Side","Brandon Office Standing Front","Brandon Office Standing Side","Brandon Sofa Sitting Front","Brandon Sofa Sitting Side","Brent Office Front 2","Brent Office Front","Brent Office Side 2","Brent Office Side","Brent Sofa Front 2","Brent Sofa Front","Brent Sofa Side 2","Brent Sofa Side","Bryan Fitness Coach","Bryan Tech Expert","Caroline Business Sitting Front","Caroline Business Sitting Side","Caroline Business Standing Front","Caroline Business Standing Side","Caroline Casual Sitting Front","Caroline Casual Sitting Side","Caroline Kitchen Standing Front","Caroline Kitchen Standing Side","Caroline Lobby Sitting Front","Caroline Lobby Sitting Side","Caroline Lobby Standing Front","Caroline Lobby Standing Side","Caroline Office Sitting Front","Caroline Office Sitting Side","Caroline Office Standing Front","Caroline Office Standing Side","Caroline Sofa Sitting Front","Caroline Sofa Sitting Side","Chloe Lounge Front","Chloe Lounge Side","Chloe Outdoor Side","Conrad House Front","Conrad House Side","Conrad Sofa Front","Conrad Sofa Side","Derya Indoor Front 2","Derya Indoor Front","Derya Indoor Side 2","Derya Indoor Side","Derya Office Front 2","Derya Office Front","Derya Office Side 2","Derya Office Side","Dexter Doctor Sitting","Dexter Doctor Standing","Dexter Lawyer","Elenora Fitness Coach","Elenora Fitness Coach 2","Elenora Tech Expert","Emanuel Office Front","Emanuel Office Side","Emanuel Sofa Front","Emanuel Sofa Side","Emilia Outdoor Business Front","Emilia Outdoor Business Side","Emilia Outdoor Yoga Front 2","Emilia Outdoor Yoga Front","Emilia Outdoor Yoga Side","Emilia Picnic Front","Emilia Picnic Side","Fernando Business Indoor Front","Fernando Business Indoor Side","Fernando OutdoorChair Front 2","Fernando Outdoor Chair Front","Fernando Outdoor Chair Side","Fernando Outdoor Front","Fernando Outdoor Side","Fernando Outdoor Table Front","Fernando Outdoor Table Side","Gala Bedroom Front","Gala Business Sofa Front 2","Gala Business Sofa Front 3","Gala Business Sofa Front","Gala Business Sofa Side 2","Gala Business Sofa Side 3","Gala Business Sofa Side","Gala Casual Sofa with iPad Front","Gala Casual Sofa with iPad Side 2","Gala Casual Sofa with iPad Side","Gala Office Front","Gala Office Side","Gala Sofa Front 2","Gala Sofa Front 3","Gala Sofa Front","Gala Sofa Side 2","Gala Sofa Side 3","Gala Sofa Side","Georgia Casual Front","Georgia Casual Side","Georgia Office Front","Georgia Office Side","Gerardo Sofa Side","Gerardo Indoor Front","Gerardo Indoor Side","Gerardo Night Scene Front 2","Gerardo Night Scene Front","Gerardo Outdoor Sport Front","Gerardo Outdoor Sport Side","Gerardo Sofa Front","Giulia Office Front 2","Giulia Office Front","Giulia Office Side 2","Giulia Office Side","Giulia Sofa Front","Giulia Sofa Side","Giulia Sofa  Front 2","Giulia Sofa  Side 3","Ida Lounge Front 2","Ida Lounge Front","Ida Lounge Side 2","Ida Lounge Side","Ida Sofa Front 2","Ida Sofa Front","Ida Sofa Side 2","Ida Sofa Side","Jocelyn Office Front 2","Jocelyn Office Front","Jocelyn Office Side 2","Jocelyn Office Side","Jocelyn Sofa Front 2","Jocelyn Sofa Front","Jocelyn Sofa Side 2","Jocelyn Sofa Side","Joel Couch Front","Joel Couch Side","Joel Gym Front","Joel Gym Side","Joel Mountain Front","Joel Mountain Side","Jonas Gym Front 2","Jonas Gym Front","Jonas Gym Side 2","Jonas Gym Side ","June Office Front 2","Juan Office Front","Juan Office Side 2","Juan Office Side","Juan Sofa Front 2","Juan Sofa Front","Juan Sofa Side 2","Juan Sofa Side","Judita Yoga Front 2","Judita Yoga Front","Judita Yoga Side 2","Judita Yoga Side","Judy Doctor Sitting","Judy Doctor Standing","Judy Lawyer","Judy Teacher Sitting","Judy HR","Judy Teacher Standing","June HR","June Office Front","June Office Side 2","June Office Side","June Sofa Casual Front 2","June Sofa Casual Front","June Sofa Casual Side 2","June Sofa Casual Side","Kavya Indoor Front","Kavya Indoor Side","Kavya Outdoor Side","Kavya Outdoor Sport Front","Kavya Outdoor Sport Side","Kavya Sofa Front","Kavya Sofa Side","Leos Office Front 2","Leos Office Front","Leos Office Side 2","Leos Office Side","Leos Sofa Front 2","Leos Sofa Front","Leos Sofa Side 2","Leos Sofa Side","Leszek Lounge Front","Leszek Lounge Side","Leszek Outdoor Business Front","Leszek Outdoor Business Side","Leszek Outdoor Casual Front","Leszek Outdoor Casual Side","Leszek Sofa Front","Leszek Sofa Side","Martina Office Front 2","Martina Office Front","Martina Office Side 2","Martina Office Side","Martina Sofa Front 2","Martina Sofa Front","Martina Sofa Side 2","Martina Sofa Side","Masha Office Front 2","Masha Office Front","Masha Office Side 2","Masha Office Side","Masha Sofa Casual Front 2","Masha Sofa Casual Front","Masha Sofa Casual Side 2","Masha Sofa Casual Side","Matteo Office Front 2","Matteo Office Front","Matteo Office Side 2","Matteo Office Side","Matteo Sofa Front 2","Matteo Sofa Front","Matteo Sofa Side 2","Matteo Sofa Side","Max Indoor Front","Max Indoor Side","Max Outdoor Sport Front","Max Outdoor Sport Side","Milena Office Front 2","Milena Office Front","Milena Office Side 2","Milena Office Side","Milena Sofa Front 2","Milena Sofa Front","Milena Sofa Side 2","Milena Sofa Side","Miles Outdoor Front","Miles Outdoor Side","Miles Sofa Front 2","Miles Sofa Front","Miles Sofa Side 2","Miles Sofa Side","Mireia Business Indoor Front","Mireia Business Indoor Side","Mireia Outdoor Chair Front","Mireia Outdoor Front","Mireia Outdoor Side","Mireia Outdoor Table Front","Mireia Outdoor Table Side","Miyu Office Front 2","Miyu Office Front","Miyu Office Side 2","Miyu Office Side","Miyu Sofa Business Front","Miyu Sofa Business Side","Miyu Sofa Casual Front 2","Miyu Sofa Casual Front","Miyu Sofa Casual Side 2 ","Miyu Sofa Casual Side","Noah Lobby Front 2","Noah Lobby Front","Noah Lobby Side 2","Noah Lobby Side","Noah Office Front 2","Noah Office Front","Noah Office Side 2","Noah Office Side","Noah Sofa Front 2","Noah Sofa Front ","Noah Sofa Side 2","Noah Sofa Side","Oxana Gym Front 2","Oxana Gym Front","Oxana Gym Side 2","Oxana Gym Side","Oxana Office Front 2","Oxana Office Front","Oxana Office Side 2","Oxana Office Side","Oxana Sofa Front 2","Oxana Sofa Front","Oxana Sofa Side 2","Oxana Sofa Side","Oxana Yoga Front 2","Oxana Yoga Front","Oxana Yoga Side 2","Oxana Yoga Side","Patrizio Business Training Front","Patrizio Business Training Side","Patrizio Office Front","Patrizio Office Side 2","Patrizio Office Side","Patrizio Sofa Front","Patrizio Sofa Side","Piper Business Sofa Front","Piper Business Sofa Side","Piper Education Front","Piper Education Side","Rasmus Lounge Front 2","Rasmus Lounge Front","Rasmus Lounge Side 2","Rasmus Lounge Side","Rasmus Sofa Front 2","Rasmus Sofa Front","Rasmus Sofa Side 2","Rasmus Sofa Side","Raul Business Sofa Front 2","Raul Business Sofa Front","Raul Business Sofa Side 2","Raul Business Sofa Side","Raul Casual Sofa Front 2","Raul Casual Sofa Front","Raul Casual Sofa Side 2","Raul Casual Sofa Side","Raul Casual Sofa no iPad Front","Raul Casual Sofa no iPad Side","Raul Casual Sofa with iPad Front","Raul Casual Sofa with iPad Side","Raul Office Front 2","Raul Office Front","Raul Office Side","Raul Sofa Front 2","Raul Sofa Front","Raul Sofa Side 2","Raul Sofa Side","Ren Office Front 2","Ren Office Front","Ren Office Side 2","Ren Office Side","Ren Sofa Business Front","Ren Sofa Business Side","Ren Sofa Casual Front 2","Ren Sofa Casual Front","Ren Sofa Casual Side 2 ","Ren Sofa Casual Side","Riley Casual Front","Riley Casual Side","Riley Office Front","Riley Office Side","Roman Outdoor Sport Front","Roman Outdoor Sport Side","Sabine Office Front 2","Sabine Office Front","Sabine Office Side","Sabine Sofa Side","Santa Fireplace Front","Santa Fireplace Side","Scarlett Couch Front 2","Scarlett Couch Front","Scarlett Couch Side 2","Scarlett Couch Side","Scarlett Fireplace Front","Scarlett Fireplace Side","Scarlett Hall Front","Scarlett Hall Side","Scarlett Yoga Front","Scarlett Yoga Side","Shawn Therapist","Silas Customer Support","Silas HR","Silas Lounge Front","Silas Lounge Side","Silas Sofa Side 2","Silas Sofa Side","Teodor Office Front 2","Teodor Office Front","Teodor Office Side 2","Teodor Office Side","Teodor Sofa Front 2","Teodor Sofa Front","Teodor Sofa Side 2","Teodor Sofa Side","Timothy Casual Front","Timothy Casual Side","Timothy Office Front","Timothy Office Side","Veit Office Front","Veit Office Side","Veit Sofa Front","Veit Sofa Side","Vernon Office Front 2","Vernon Office Front","Vernon Office Side 2","Vernon Office Side","Verena Office Front","Verena Office Side","Verena Sofa Front","Verena Sofa Side","Vernon Lounge Front 2","Vernon Lounge Side 2","Vernon Lounge Side","Vince Business Sofa Front","Vince Business Training Front","Vince Business Training Side 2","Vince Business Training Side","Vince Sofa Casual Front 2","Vince Sofa Casual Front","Vince Sofa Casual Side 2","Vince Sofa Casual Side"],"title":"Avatar"},"background":{"anyOf":[{"properties":{"type":{"default":"color","description":"Background kind: `color` specifies a solid hexadecimal color, while `image` specifies an image URL.","enum":["color","image"],"title":"Type","type":"string"},"value":{"default":"#FFFFFF","description":"Background content: a hexadecimal color when the type is `color`, or an HTTP(S) URL when the type is `image`.","examples":["#FFFFFF","https://example.com/background.jpg"],"title":"Value","type":"string"}},"title":"AvatarVBackground","type":"object","x-doitong-order":["type","value"]},{"type":"null"}],"description":"Background layer optionally placed behind the avatar, except with `output_format='webm'`: transparent webm output ignores this setting."},"caption":{"default":false,"description":"Controls generation of a separate SRT caption file accompanying the video.","title":"Caption","type":"boolean"},"enable_safety_checker":{"default":true,"description":"Screening can be relaxed by setting false, provided the caller is authorized.","title":"Enable Safety Checker","type":"boolean"},"fit":{"default":"cover","description":"Choose the avatar's framing: 'cover' fills the output frame but may crop the avatar, whereas 'contain' shows the entire avatar but may add letterboxing.","enum":["contain","cover"],"title":"Fit","type":"string"},"output_format":{"default":"mp4","description":"Video container selection, with `webm` enabling transparency through automatic background removal; in that mode, `background` has no effect.","enum":["mp4","webm"],"title":"Output Format","type":"string"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Speech text for the avatar; required if `audio_url` is omitted.","examples":["Hello and welcome to this demonstration of HeyGen Avatar V."],"title":"Prompt"},"remove_background":{"default":false,"description":"Background removal for the avatar; available only for avatars that support matting.","title":"Remove Background","type":"boolean"},"resolution":{"default":"720p","description":"Resolution preset for the generated output.","enum":["720p","1080p","4k"],"title":"Resolution","type":"string"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Warm Pro Narrator","description":"Avatar voice selection by name for text-to-speech; it applies only without an `audio_url`.","enum":["Warm Pro Narrator","Chill Brian","Ivy","John Doe","Monika Sogam","Hope ","Archer ","Brittney","Patrick","David Castlemore","Michael C","Adam Stone ","Juniper","Cassidy ","Jessica Anne Bogart","Arabella","Andrew","Spuds Oxley ","Grace Elder","Helen","Canyon Rivers","Derya - Lifelike - Excited 🤩","Mellow Marcus","Jack Sterling - Broadcaster 🎙️","Brenda - UGC - 1.mp4","Reid","Reagan","Terry","Jenny","Radio Rick","Denise","Tim in car - Excited 🤩","Iskander","Thompson","Delicate Daisy - Excited 🤩","Kingston","George UGC 1","Bold Blake","Jane","Expressive Evan","Marianne - IA","Aaron","Modern Recipe Host - Voice 1","Willow","Cute Chloe - Friendly 😊","Rafael","June - Lifelike","Crisp Chloe","Slick Simon","Nassim - Informative","Baritone Ben","Maxwell","Ellie Faye - Excited 🤩","Milani","Feisty Fiona - Excited 🤩","Professor Dean","Rose - UGC - 1.mp4","Shona","Hudson Wilder","Ann - IA","Alastair Kensington","Oxley","Christina","Andrew Rizz ","Peyton","Gerardo - Outdoor","Chloe - Lifelike","Stephanie","Anthony - IA","Signal - Voice 1","Luca","Lisa - Voice 1","T.W.Tucker","Jack Sullivan - Serious 😐","Winter","Mireia - Lifelike","Georgia","Stella","Masha - Lifelike","Charming Charles - Friendly 😊","Serenity","Annie - Excited","Ralph","Bethany","Dominic","Mason Finn","Leena","Veteran Victor","Tamara","Nik Public","Calm Chloe","Sevik","Reilly","Raul","Imposing Ian","Relaxed Ray","Dexter - Professional","Relaxed Rick","Edwin","Rupert Blackwood","Ginny","Hope"],"examples":["Warm Pro Narrator","Chill Brian","Ivy","John Doe","Monika Sogam","Hope ","Archer ","Brittney","Patrick","David Castlemore","Michael C","Adam Stone ","Juniper","Cassidy ","Jessica Anne Bogart","Arabella","Andrew","Spuds Oxley ","Grace Elder","Helen","Canyon Rivers","Derya - Lifelike - Excited 🤩","Mellow Marcus","Jack Sterling - Broadcaster 🎙️","Brenda - UGC - 1.mp4","Reid","Reagan","Terry","Jenny","Radio Rick","Denise","Tim in car - Excited 🤩","Iskander","Thompson","Delicate Daisy - Excited 🤩","Kingston","George UGC 1","Bold Blake","Jane","Expressive Evan","Marianne - IA","Aaron","Modern Recipe Host - Voice 1","Willow","Cute Chloe - Friendly 😊","Rafael","June - Lifelike","Crisp Chloe","Slick Simon","Nassim - Informative","Baritone Ben","Maxwell","Ellie Faye - Excited 🤩","Milani","Feisty Fiona - Excited 🤩","Professor Dean","Rose - UGC - 1.mp4","Shona","Hudson Wilder","Ann - IA","Alastair Kensington","Oxley","Christina","Andrew Rizz ","Peyton","Gerardo - Outdoor","Chloe - Lifelike","Stephanie","Anthony - IA","Signal - Voice 1","Luca","Lisa - Voice 1","T.W.Tucker","Jack Sullivan - Serious 😐","Winter","Mireia - Lifelike","Georgia","Stella","Masha - Lifelike","Charming Charles - Friendly 😊","Serenity","Annie - Excited","Ralph","Bethany","Dominic","Mason Finn","Leena","Veteran Victor","Tamara","Nik Public","Calm Chloe","Sevik","Reilly","Raul","Imposing Ian","Relaxed Ray","Dexter - Professional","Relaxed Rick","Edwin","Rupert Blackwood","Ginny","Hope"],"title":"Voice"},"watermark":{"anyOf":[{"properties":{"image_url":{"description":"Watermark image URL using HTTP(S), for overlaying onto the video.","title":"Image Url","type":"string"},"opacity":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"description":"Watermark transparency level: 0.0 is fully transparent and 1.0 is fully opaque.","title":"Opacity"},"placement":{"anyOf":[{"enum":["top-left","top-right","bottom-left","bottom-right"],"type":"string"},{"type":"null"}],"description":"Position of the watermark within the video.","title":"Placement"},"scale":{"anyOf":[{"exclusiveMinimum":0,"maximum":2,"type":"number"},{"type":"null"}],"description":"Watermark size relative to the video, greater than 0.0 and up to 2.0.","title":"Scale"}},"required":["image_url"],"title":"AvatarVWatermark","type":"object","x-doitong-order":["image_url","scale","opacity","placement"]},{"type":"null"}],"description":"Optional image used as a watermark overlay in the generated video."}},"title":"AvatarVRequest","type":"object","x-doitong-order":["avatar","prompt","voice","audio_url","fit","remove_background","background","watermark","caption","output_format","resolution","aspect_ratio","enable_safety_checker"]},"HeygenAvatar5DigitalTwinOutput":{"description":"Output from the Avatar V digital-twin endpoint.","properties":{"caption_file":{"anyOf":[{"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"},"url":{"description":"Download URL for the file.","title":"Url","type":"string"}},"required":["url"],"title":"File","type":"object","x-doitong-order":["url","content_type","file_name","file_size"]},{"type":"null"}],"description":"SRT caption file produced when `caption=True`, if the service supplies one."},"video":{"description":"Video file produced by Avatar V.","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"},"url":{"description":"Download URL for the file.","title":"Url","type":"string"}},"required":["url"],"title":"File","type":"object","x-doitong-order":["url","content_type","file_name","file_size"]}},"required":["video"],"title":"AvatarVOutput","type":"object","x-doitong-order":["video","caption_file"]}}}}