AI3D Studio
Generate 3D models from images or text with AI, then retexture or convert them to STL, 3MF or OBJ.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"ai3d-studio": {
"url": "https://ai3d.studio/mcp"
}
}
}遠端端點
https://ai3d.studio/mcpstreamable-http它能做什麼
工具清單
工具(14)
🟢list_models(media_type, available_only, include_inputs)
List the models this account can generate with, grouped by what they make (3D, image, …): each with its id, the scenes (input modes such as text-to-3d or image-to-3d) it supports, and the credits it costs at default options. Call this first to choose a model id, then estimate_cost for an exact price. Set include_inputs to also get the option fields of each scene (names, allowed values, ranges). An account whose app has an Image Studio also gets presets: ready-made picture conversions (figurine, style, pose, …) to run with generate by passing options.preset. batches lists the scenes start_batch can run over several Library pictures at once, with the models each may use.
輸入結構描述
{
"type": "object",
"properties": {
"media_type": {
"description": "Only models of this kind, e.g. '3d' or 'image'.",
"type": "string",
"enum": [
"music",
"image",
"video",
"text",
"speech",
"3d"
]
},
"available_only": {
"default": true,
"description": "Leave out models that are listed but cannot be started.",
"type": "boolean"
},
"include_inputs": {
"default": false,
"description": "Include the option fields of every scene (larger result).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"app_id": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as model to estimate_cost and the generate tools."
},
"label": {
"type": "string"
},
"media_type": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"available": {
"type": "boolean",
"description": "False for a model that is listed but cannot be started yet."
},
"requires_subscription": {
"type": "boolean"
},
"required_right": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"credits_from": {
"type": "number",
"description": "The cheapest scene at default options; options can raise it — use estimate_cost for the real figure."
},
"family": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The product line this model is a release of, e.g. 'meshy'; null for a model with no sibling releases. Every release is a model id you can pass to generate."
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "This release's label within its family, e.g. 'v7.1'; null with family."
},
"latest": {
"type": "boolean",
"description": "True for a family's newest release (and for a model with no family). False marks an older release that a newer one replaced: pin it only to reproduce earlier work."
},
"retires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The UTC day (YYYY-MM-DD) the provider retires this model, when one is announced; null otherwise. After it, generate refuses the model."
},
"scenes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as scene, e.g. 'text-to-3d'."
},
"input_mode": {
"type": "string",
"description": "What the scene takes: 'text', 'image', 'multiview', …"
},
"credits": {
"type": "number",
"description": "Credits at default options."
}
},
"required": [
"id",
"input_mode",
"credits"
],
"additionalProperties": false
}
},
"inputs": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"scene": {
"type": "string"
},
"controls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The key to use in options; the scene's prompt field goes in prompt."
},
"kind": {
"type": "string",
"description": "text, long-text, choice, number, toggle, count, seed, media (upload URLs), song, library, timeline, elements or hidden."
},
"value_type": {
"type": "string",
"description": "The JSON shape to send: string, number, boolean, string[], object or object[]."
},
"label": {
"type": "string"
},
"help": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": {
"type": "boolean"
},
"default": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
]
},
{
"type": "null"
}
]
},
"options": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"value",
"label"
],
"additionalProperties": false
}
},
{
"type": "null"
}
],
"description": "The allowed values of a choice; null for other kinds."
},
"min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"max_length": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"kind",
"value_type",
"label",
"help",
"required",
"default",
"options",
"min",
"max",
"max_length"
],
"additionalProperties": false
}
}
},
"required": [
"scene",
"controls"
],
"additionalProperties": false
}
},
{
"type": "null"
}
],
"description": "Option fields per scene; null unless include_inputs is true."
}
},
"required": [
"id",
"label",
"media_type",
"recommended",
"available",
"requires_subscription",
"required_right",
"credits_from",
"family",
"version",
"latest",
"retires_at",
"scenes",
"inputs"
],
"additionalProperties": false
}
},
"presets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as options.preset to generate (mediaType 'image', scene 'image-to-image')."
},
"family": {
"type": "string",
"description": "figurine, style, pose or convert: the kind of conversion."
},
"label": {
"type": "string"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "object",
"properties": {
"min": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"min",
"max"
],
"additionalProperties": false,
"description": "How many pictures a run takes in options.image: the subject first, then an optional reference."
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"label"
],
"additionalProperties": false
},
"description": "Ids for options.preset_addons; empty when the preset has none."
},
"background": {
"type": "string",
"enum": [
"fixed",
"choice"
],
"description": "'choice': options.preset_background may be 'plain' (default) or 'keep'."
},
"instructions_required": {
"type": "boolean"
},
"instructions_max_length": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "prompt on a preset run is only your additional instructions, at most this long."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The frame the preset is tuned for; options.aspect_ratio overrides."
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"description": "Image models it can run on in this account’s app."
}
},
"required": [
"id",
"family",
"label",
"group",
"images",
"addons",
"background",
"instructions_required",
"instructions_max_length",
"aspect_ratio",
"models"
],
"additionalProperties": false
},
"description": "Image presets this app offers; empty when it has none or media_type is not image."
},
"batches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scene": {
"type": "string"
},
"media_type": {
"type": "string"
},
"models": {
"type": "array",
"items": {
"type": "string"
}
},
"max_items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Most pictures any plan may batch; list_batches gives the account’s own allowance."
}
},
"required": [
"scene",
"media_type",
"models",
"max_items"
],
"additionalProperties": false
},
"description": "Scenes start_batch can run over several pictures; empty when the app offers none."
}
},
"required": [
"app_id",
"count",
"models",
"presets",
"batches"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢estimate_cost(model, scene, prompt, options)
Price a generation before starting it: the credits this model would charge for these options, and whether the current balance covers it. Uses the same validation and price calculation as generate_3d and generate, so for a valid request the figure is exactly what is charged. Omit scene to price every scene of the model. Nothing is charged and nothing is started.
輸入結構描述
{
"type": "object",
"properties": {
"model": {
"type": "string",
"minLength": 1,
"description": "A model id from list_models."
},
"scene": {
"description": "A scene id from list_models, e.g. 'image-to-3d'.",
"type": "string"
},
"prompt": {
"type": "string"
},
"options": {
"description": "The options you intend to pass; they change the price.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
}
},
"required": [
"model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"model": {
"type": "string"
},
"media_type": {
"type": "string"
},
"available": {
"type": "boolean"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scene": {
"type": "string"
},
"credits": {
"type": "number",
"description": "The total this request would be charged: per output × outputs."
},
"credits_per_output": {
"type": "number"
},
"outputs": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"exact": {
"type": "boolean",
"description": "True when the request is valid as sent, so generate would charge exactly this. False when it would be refused (input_issue says why); the figure is then what it costs once fixed."
},
"input_issue": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"affordable": {
"type": "boolean",
"description": "Whether the current balance covers it."
}
},
"required": [
"scene",
"credits",
"credits_per_output",
"outputs",
"exact",
"input_issue",
"affordable"
],
"additionalProperties": false
}
},
"balance": {
"type": "number",
"description": "Credits the account holds now."
}
},
"required": [
"model",
"media_type",
"available",
"quotes",
"balance"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_balance
Get the credits this account can spend now (and how many of them come from the subscription or are permanent), the plan name when there is one, and — when you are connected with an API key that has a monthly credit limit — that limit, what the key has used this month, and when it resets. Read-only.
輸入結構描述
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"account": {
"type": "object",
"properties": {
"app_id": {
"type": "string"
},
"user_id": {
"type": "string"
},
"organization_id": {
"type": "string",
"description": "The billing account: credits are spent from this one."
}
},
"required": [
"app_id",
"user_id",
"organization_id"
],
"additionalProperties": false
},
"credits": {
"type": "object",
"properties": {
"remaining": {
"type": "number",
"description": "What can be spent now."
},
"from_subscription": {
"type": "number"
},
"permanent": {
"type": "number"
},
"subscription_expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"permanent_expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"remaining",
"from_subscription",
"permanent",
"subscription_expires_at",
"permanent_expires_at"
],
"additionalProperties": false
},
"plan": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The active subscription plan; null on pay-as-you-go."
},
"api_key_limit": {
"anyOf": [
{
"type": "object",
"properties": {
"monthly_limit": {
"type": "number"
},
"used_this_month": {
"type": "number"
},
"remaining": {
"type": "number"
},
"resets_at": {
"type": "string"
}
},
"required": [
"monthly_limit",
"used_this_month",
"remaining",
"resets_at"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Only for an API key with a monthly credit limit."
}
},
"required": [
"account",
"credits",
"plan",
"api_key_limit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢generate_3d(mode, model, prompt, options, idempotency_key)
Start a 3D generation and return its job id at once. mode picks the input: text (prompt), image (options with the image URL), multiview (several view images), sketch, or model (edit an existing 3D model). Take the model id and its option names from list_models, and check the price with estimate_cost first: this spends credits. Pass a stable idempotency_key when retrying so a retry replays the same job instead of billing twice. Then call get_job to follow it.
輸入結構描述
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"image",
"text",
"multiview",
"sketch",
"model"
],
"description": "Which input the model is given."
},
"model": {
"type": "string",
"minLength": 1,
"description": "A 3D model id from list_models."
},
"prompt": {
"type": "string"
},
"options": {
"description": "Model-specific options; take the field names from list_models with include_inputs, and price them with estimate_cost first.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"idempotency_key": {
"description": "Reuse the same value when retrying this exact request.",
"type": "string",
"maxLength": 191
}
},
"required": [
"mode",
"model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Pass to get_job to follow progress."
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
],
"description": "pending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded."
},
"media_type": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"outputs": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "How many results this job makes."
},
"credits_charged": {
"type": "number",
"description": "Credits taken from the balance."
},
"deduped": {
"type": "boolean",
"description": "True when an earlier call with the same idempotency key already started this job: nothing was charged again."
}
},
"required": [
"job_id",
"status",
"media_type",
"model",
"scene",
"outputs",
"credits_charged",
"deduped"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡generate(mediaType, model, prompt, options, scene, ...)
Start an async AI generation of any media type and return its job id. The input shape depends on the model (see list_models); for 3D prefer generate_3d. To run an image preset (list_models returns them: figurine, style, pose, convert), send mediaType "image", scene "image-to-image", options.image (the picture, or the subject then a reference), options.preset (its id) and optionally options.preset_addons and options.preset_background; the server composes the prompt, and prompt is then only your extra instructions. Bills credits: check the price with estimate_cost first. Pass a stable idempotencyKey when retrying — a retry with the same key replays the original job instead of billing twice. Then call get_job.
輸入結構描述
{
"type": "object",
"properties": {
"mediaType": {
"type": "string",
"minLength": 1,
"description": "Generation family, e.g. 'image' | 'video' | '3d' | 'music' — see list_models."
},
"model": {
"type": "string",
"minLength": 1
},
"prompt": {
"description": "The prompt; with options.preset, only your additional instructions.",
"type": "string"
},
"options": {
"description": "Model-specific options; derive from list_models (include_inputs). For an image preset: preset (its id), preset_addons, preset_background.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"scene": {
"type": "string"
},
"workflowType": {
"type": "string"
},
"idempotencyKey": {
"type": "string"
}
},
"required": [
"mediaType",
"model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": true
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Pass to get_job to follow progress."
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
],
"description": "pending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded."
},
"media_type": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"outputs": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "How many results this job makes."
},
"credits_charged": {
"type": "number",
"description": "Credits taken from the balance."
},
"deduped": {
"type": "boolean",
"description": "True when an earlier call with the same idempotency key already started this job: nothing was charged again."
}
},
"required": [
"job_id",
"status",
"media_type",
"model",
"scene",
"outputs",
"credits_charged",
"deduped"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_job(job_id)
Get a job started by generate_3d or generate: its status, progress, credits charged and refunded, and — when it has finished — the result files with their public download URLs, including other formats where the model returned them. Poll about every 5–10 seconds while status is pending or processing; stop when is_terminal is true.
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "The job id returned by generate_3d or generate."
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
],
"description": "pending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded."
},
"is_terminal": {
"type": "boolean",
"description": "True once the job is final and will not change again."
},
"progress": {
"type": "number",
"description": "0 to 1: finished outputs over expected outputs."
},
"media_type": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"outputs": {
"type": "object",
"properties": {
"expected": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"finished": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"expected",
"finished"
],
"additionalProperties": false
},
"credits": {
"type": "object",
"properties": {
"charged": {
"type": "number"
},
"refunded": {
"type": "number",
"description": "Returned to the balance for outputs that failed."
}
},
"required": [
"charged",
"refunded"
],
"additionalProperties": false
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"asset_id": {
"type": "string",
"description": "The output file id inside the job."
},
"media_type": {
"type": "string",
"description": "What the file is: '3d', 'image', 'video' or 'music'."
},
"format": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "File format, e.g. 'glb', 'fbx', 'png'; null if unknown."
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"thumbnail_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"content_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"size_bytes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duration_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What the output is within its job, e.g. 'normal' for a map."
},
"alternates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"format": {
"type": "string"
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"format",
"url",
"source"
],
"additionalProperties": false
},
"description": "The same model in other formats the provider returned."
}
},
"required": [
"asset_id",
"media_type",
"format",
"url",
"thumbnail_url",
"content_type",
"size_bytes",
"width",
"height",
"duration_seconds",
"role",
"alternates"
],
"additionalProperties": false
},
"description": "Result files with public download URLs; empty until ready."
}
},
"required": [
"job_id",
"status",
"is_terminal",
"progress",
"media_type",
"model",
"scene",
"outputs",
"credits",
"error",
"created_at",
"completed_at",
"files"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list_job_files(job_id, format)
List the files a finished job already has, one per format: the main result plus any alternate formats the model returned (for 3D models, for example glb with fbx or usdz), each with a public download URL. Pass format to find one format. This does not convert: if the format asked for is not there, available_formats says what is, and a model can be exported to other formats from the web app model viewer.
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "The job id returned by generate_3d or generate."
},
"format": {
"description": "A file format to look for, e.g. 'glb' or 'stl'.",
"type": "string",
"maxLength": 16
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
],
"description": "pending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded."
},
"requested_format": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"available_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"asset_id": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"primary",
"alternate"
],
"description": "primary is the main result; alternate is the same model in another format."
},
"format": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"content_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"size_bytes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"asset_id",
"kind",
"format",
"url",
"content_type",
"size_bytes",
"source"
],
"additionalProperties": false
}
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"job_id",
"status",
"requested_format",
"available_formats",
"files",
"note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢start_batch(model, scene, options, prompt, items, ...)
Run the same model, scene and options once for each of several pictures in the account’s Library — for example image to 3D for twelve product photos. Take the scenes and models from list_models (`batches`), and each picture’s asset_id from get_job or search_library on a finished image job. Nothing is charged now: each run is charged as it starts and refunded if it fails, but the balance must cover the whole quote, and for a key or connection with a monthly limit the whole quote is held against it until each picture runs (then its real cost counts) or is cancelled, refused or refunded (then nothing does). Returns a batch id at once; follow it with get_batch. Pass idempotency_key on retries so a repeat returns the same batch instead of queueing another.
輸入結構描述
{
"type": "object",
"properties": {
"model": {
"type": "string",
"minLength": 1,
"maxLength": 191
},
"scene": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"options": {
"description": "Options every run shares, as for generate; the picture field is filled per item.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"prompt": {
"type": "string",
"maxLength": 8000
},
"items": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"asset_id": {
"type": "string",
"minLength": 1,
"maxLength": 191
},
"name": {
"type": "string",
"maxLength": 400
}
},
"required": [
"asset_id"
]
},
"description": "One entry per picture: a Library image’s asset_id."
},
"project_id": {
"type": "string",
"minLength": 1,
"maxLength": 191
},
"notify_by_email": {
"type": "boolean"
},
"expected_credits": {
"description": "The quote you showed the person; a different price queues nothing.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128
}
},
"required": [
"model",
"scene",
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"batch_id": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"running",
"done",
"cancelled"
]
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"counts": {
"type": "object",
"properties": {
"queued": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"running": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"done": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"failed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"queued",
"running",
"done",
"failed",
"cancelled"
],
"additionalProperties": false
},
"per_item_credits": {
"type": "number"
},
"quoted_credits": {
"type": "number",
"description": "What the batch costs if every picture runs."
},
"charged_credits": {
"type": "number",
"description": "What its runs were charged so far."
},
"created_at": {
"type": "string"
},
"settled_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"position": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The picture’s place in the batch."
},
"name": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"queued",
"running",
"done",
"failed",
"cancelled"
]
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Its run once started: pass to get_job for the files."
},
"credits": {
"type": "number",
"description": "What its run was charged."
},
"error_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retryable": {
"type": "boolean",
"description": "retry_batch would run it again."
}
},
"required": [
"item_id",
"position",
"name",
"state",
"job_id",
"credits",
"error_code",
"retryable"
],
"additionalProperties": false
}
},
"reused": {
"type": "boolean",
"description": "An earlier call with this idempotency_key started it."
},
"balance": {
"type": "number",
"description": "Credits available when it was accepted."
}
},
"required": [
"batch_id",
"model",
"scene",
"status",
"item_count",
"counts",
"per_item_credits",
"quoted_credits",
"charged_credits",
"created_at",
"settled_at",
"items",
"reused",
"balance"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list_batches(scene, limit)
The account’s batches of one scene from the last 24 hours, newest first, with each picture’s progress — and how many pictures its plan lets one batch hold (allowance; 0 means the plan includes no batches).
輸入結構描述
{
"type": "object",
"properties": {
"scene": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"required": [
"scene"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"batches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"batch_id": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"running",
"done",
"cancelled"
]
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"counts": {
"type": "object",
"properties": {
"queued": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"running": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"done": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"failed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"queued",
"running",
"done",
"failed",
"cancelled"
],
"additionalProperties": false
},
"per_item_credits": {
"type": "number"
},
"quoted_credits": {
"type": "number",
"description": "What the batch costs if every picture runs."
},
"charged_credits": {
"type": "number",
"description": "What its runs were charged so far."
},
"created_at": {
"type": "string"
},
"settled_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"position": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The picture’s place in the batch."
},
"name": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"queued",
"running",
"done",
"failed",
"cancelled"
]
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Its run once started: pass to get_job for the files."
},
"credits": {
"type": "number",
"description": "What its run was charged."
},
"error_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retryable": {
"type": "boolean",
"description": "retry_batch would run it again."
}
},
"required": [
"item_id",
"position",
"name",
"state",
"job_id",
"credits",
"error_code",
"retryable"
],
"additionalProperties": false
}
}
},
"required": [
"batch_id",
"model",
"scene",
"status",
"item_count",
"counts",
"per_item_credits",
"quoted_credits",
"charged_credits",
"created_at",
"settled_at",
"items"
],
"additionalProperties": false
}
},
"allowance": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"batches",
"allowance"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_batch(batch_id)
The state of a batch and of each picture in it: queued, running, done, failed or cancelled, the job_id of its run once started (get_job gives the files), credits charged, and whether retry_batch can run it again.
輸入結構描述
{
"type": "object",
"properties": {
"batch_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "The batch id start_batch returned."
}
},
"required": [
"batch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"batch_id": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"running",
"done",
"cancelled"
]
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"counts": {
"type": "object",
"properties": {
"queued": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"running": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"done": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"failed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"queued",
"running",
"done",
"failed",
"cancelled"
],
"additionalProperties": false
},
"per_item_credits": {
"type": "number"
},
"quoted_credits": {
"type": "number",
"description": "What the batch costs if every picture runs."
},
"charged_credits": {
"type": "number",
"description": "What its runs were charged so far."
},
"created_at": {
"type": "string"
},
"settled_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"position": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The picture’s place in the batch."
},
"name": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"queued",
"running",
"done",
"failed",
"cancelled"
]
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Its run once started: pass to get_job for the files."
},
"credits": {
"type": "number",
"description": "What its run was charged."
},
"error_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retryable": {
"type": "boolean",
"description": "retry_batch would run it again."
}
},
"required": [
"item_id",
"position",
"name",
"state",
"job_id",
"credits",
"error_code",
"retryable"
],
"additionalProperties": false
}
}
},
"required": [
"batch_id",
"model",
"scene",
"status",
"item_count",
"counts",
"per_item_credits",
"quoted_credits",
"charged_credits",
"created_at",
"settled_at",
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢retry_batch(batch_id, item_ids)
Queue the batch’s failed pictures (and any stopped for want of credits) again as new runs, or only the item_ids given. Charged as each starts, like a new batch of that many pictures: the balance must cover them and they count against a monthly limit.
輸入結構描述
{
"type": "object",
"properties": {
"batch_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "The batch id start_batch returned."
},
"item_ids": {
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 191
}
}
},
"required": [
"batch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"batch_id": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"running",
"done",
"cancelled"
]
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"counts": {
"type": "object",
"properties": {
"queued": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"running": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"done": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"failed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"queued",
"running",
"done",
"failed",
"cancelled"
],
"additionalProperties": false
},
"per_item_credits": {
"type": "number"
},
"quoted_credits": {
"type": "number",
"description": "What the batch costs if every picture runs."
},
"charged_credits": {
"type": "number",
"description": "What its runs were charged so far."
},
"created_at": {
"type": "string"
},
"settled_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"position": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The picture’s place in the batch."
},
"name": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"queued",
"running",
"done",
"failed",
"cancelled"
]
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Its run once started: pass to get_job for the files."
},
"credits": {
"type": "number",
"description": "What its run was charged."
},
"error_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retryable": {
"type": "boolean",
"description": "retry_batch would run it again."
}
},
"required": [
"item_id",
"position",
"name",
"state",
"job_id",
"credits",
"error_code",
"retryable"
],
"additionalProperties": false
}
},
"requeued": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Pictures queued again."
}
},
"required": [
"batch_id",
"model",
"scene",
"status",
"item_count",
"counts",
"per_item_credits",
"quoted_credits",
"charged_credits",
"created_at",
"settled_at",
"items",
"requeued"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_library(query, media_type, limit, cursor)
Search the Library of past generations kept by this account, newest first: filter by words in the prompt or title and by kind (3d, image, …). Returns the job id, model, status and result file URLs of each run. Use next_cursor to page. Only runs of this account are ever searched. For the full detail of one run call get_job.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"description": "Words to look for in the prompt or title.",
"type": "string",
"maxLength": 200
},
"media_type": {
"description": "Only runs of this kind, e.g. '3d' or 'image'.",
"type": "string",
"enum": [
"music",
"image",
"video",
"text",
"speech",
"3d"
]
},
"limit": {
"default": 20,
"description": "How many to return, 1 to 50.",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"cursor": {
"description": "The next_cursor of the previous result.",
"type": "string",
"maxLength": 8
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Pass to get_job for the full result."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The start of the prompt."
},
"media_type": {
"type": "string"
},
"model": {
"type": "string"
},
"scene": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
]
},
"credits_charged": {
"type": "number"
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"asset_id": {
"type": "string",
"description": "The output file id inside the job."
},
"media_type": {
"type": "string",
"description": "What the file is: '3d', 'image', 'video' or 'music'."
},
"format": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "File format, e.g. 'glb', 'fbx', 'png'; null if unknown."
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"thumbnail_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"content_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"size_bytes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duration_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What the output is within its job, e.g. 'normal' for a map."
},
"alternates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"format": {
"type": "string"
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"format",
"url",
"source"
],
"additionalProperties": false
},
"description": "The same model in other formats the provider returned."
}
},
"required": [
"asset_id",
"media_type",
"format",
"url",
"thumbnail_url",
"content_type",
"size_bytes",
"width",
"height",
"duration_seconds",
"role",
"alternates"
],
"additionalProperties": false
},
"description": "Up to 4 result files with download URLs."
}
},
"required": [
"job_id",
"title",
"prompt",
"media_type",
"model",
"scene",
"status",
"credits_charged",
"created_at",
"files"
],
"additionalProperties": false
}
},
"total": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "How many runs match in all."
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Pass as cursor for the next page; null at the end."
}
},
"required": [
"items",
"total",
"next_cursor"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢convert_model(asset_id, format, compression, simplify, resize_height, ...)
Convert one of the account’s Library 3D models (a GLB) to GLB, STL, 3MF, OBJ or PLY on the server, optionally simplifying it, compressing its geometry, scaling it to a real-world size, moving its origin or repairing it for printing (holes, flipped faces, debris; STL, 3MF, OBJ or PLY), and file the result in the Library as a new creation made from it. Free (no credits) and answered at once. STL and 3MF are millimetres and Z-up for slicers; OBJ and PLY are geometry only, in metres; GLB keeps materials and textures and can be meshopt-compressed. Take asset_id from get_job or search_library (a file of a finished 3D job). Models over 50 MB or 2,000,000 triangles, and Draco-compressed GLBs, are refused. The same conversion run twice returns the same creation.
輸入結構描述
{
"type": "object",
"properties": {
"asset_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "A GLB file of one of your Library models."
},
"format": {
"description": "The file to make; glb when omitted.",
"type": "string",
"enum": [
"glb",
"stl",
"3mf",
"obj",
"ply"
]
},
"compression": {
"description": "GLB only: meshopt (default, smallest) or none.",
"type": "string",
"enum": [
"meshopt",
"none"
]
},
"simplify": {
"description": "Share of triangles to keep: 1 (default), 0.75, 0.5 or 0.25.",
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 0.75
},
{
"type": "number",
"const": 0.5
},
{
"type": "number",
"const": 0.25
}
]
},
"resize_height": {
"description": "Scale the model to this height, in metres.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
},
"resize_longest_side": {
"description": "Scale the model so its longest side is this long, in metres. Not with resize_height.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
},
"origin": {
"description": "Move the origin to the bottom centre (default when resizing) or the centre.",
"type": "string",
"enum": [
"bottom",
"center"
]
},
"repair": {
"description": "Repair for printing first: weld, drop broken and duplicate faces and loose debris, fix flipped faces, fill holes. stl, 3mf, obj, ply only; up to 200,000 triangles (simplify first for more).",
"type": "boolean"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"project_id": {
"type": "string",
"minLength": 1,
"maxLength": 191
}
},
"required": [
"asset_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The new Library creation: pass to get_job like any job."
},
"asset_id": {
"type": "string",
"description": "Its file, for another convert_model."
},
"created": {
"type": "boolean",
"description": "False when the same conversion was already in the Library: that creation is returned."
},
"format": {
"type": "string",
"enum": [
"glb",
"stl",
"3mf",
"obj",
"ply"
]
},
"url": {
"type": "string",
"description": "Public https download URL of the file."
},
"content_type": {
"type": "string"
},
"size_bytes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"triangles_before": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"triangles_after": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"repair": {
"description": "What repair found and fixed, when repair was asked for.",
"type": "object",
"properties": {
"watertight_before": {
"type": "boolean"
},
"watertight_after": {
"type": "boolean"
},
"holes_filled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"holes_left": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"faces_flipped": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"shells_removed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"non_manifold_edges_left": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"watertight_before",
"watertight_after",
"holes_filled",
"holes_left",
"faces_flipped",
"shells_removed",
"non_manifold_edges_left"
],
"additionalProperties": false
}
},
"required": [
"job_id",
"asset_id",
"created",
"format",
"url",
"content_type",
"size_bytes",
"triangles_before",
"triangles_after"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢viewer_job_state(job_id)
Used by the interactive 3D viewer shown next to a generation result, not for direct use: the state of one job and, once it has finished, the URL of the model file the viewer can draw plus the download links. Read-only; the conversation never needs to call it, get_job gives the same facts as text.
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 191,
"description": "The job id returned by generate_3d."
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}輸出結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"success",
"partial",
"failed",
"canceled"
],
"description": "pending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded."
},
"is_terminal": {
"type": "boolean"
},
"media_type": {
"type": "string"
},
"outputs": {
"type": "object",
"properties": {
"expected": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"finished": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"expected",
"finished"
],
"additionalProperties": false
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"model": {
"anyOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Public https URL of a file the viewer can draw."
},
"format": {
"type": "string",
"enum": [
"glb"
]
},
"size_bytes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"url",
"format",
"size_bytes"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null until the job has produced a file in a viewable format."
},
"downloads": {
"type": "array",
"items": {
"type": "object",
"properties": {
"format": {
"type": "string"
},
"url": {
"type": "string",
"description": "Public https download URL."
},
"size_bytes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"format",
"url",
"size_bytes"
],
"additionalProperties": false
}
},
"library_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Where the job is kept in the web app."
}
},
"required": [
"job_id",
"status",
"is_terminal",
"media_type",
"outputs",
"error",
"model",
"downloads",
"library_url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}社群
證據