AI3D Studio
Generate 3D models from images or text with AI, then retexture or convert them to STL, 3MF or OBJ.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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
}커뮤니티
증거