{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
{
"error": {
"code": "invalid_workflow",
"message": "Node 12 (KSampler): required input 'model' is not connected",
"organization_id": "org_01HXYZEXAMPLE",
"details": {
"node_errors": {
"12": {
"class_type": "SomeCustomNode",
"errors": [
{
"type": "unknown_node_class",
"message": "this deployment's build does not contain the node class SomeCustomNode."
}
]
}
},
"unknown_node_classes": [
"SomeCustomNode"
]
}
}
}
jobs
Submit a workflow for execution
Accepts the API-format workflow graph verbatim. Validation is
synchronous: graph structure, unknown node classes, and asset
references (core/ASSET objects — every referenced id must exist
and be owned by the caller). A 201 means the job is durably
recorded and queued.
UI-format workflow JSON (the export with nodes/links) is
rejected with workflow_format_ui.
Idempotency-Key is single-use (reject-on-duplicate, NOT
record-and-replay): the first request to present a given key is
processed normally; ANY later request presenting the same key — a
retry, a concurrent duplicate, or a same-key request with a different
body — is rejected 422idempotency_key_reuse and is never
re-executed. The key is claimed only for a request that actually
reaches submission and is released if that submission definitively
fails without creating a job (a validation error, or an upstream
reject such as out-of-credits or queue-full), so a legitimate retry
with the same key can proceed. If a submission’s outcome is unknown
(an upstream timeout or 5xx where the job may or may not have been
created), the key stays claimed and the retry is rejected: poll or
list your jobs to find the possibly-created job rather than
resubmitting. Keys expire after 24h. There is no response replay and
no Idempotency-Replayed header.
Reserved for post-MVP and rejected if present today: webhook_url,
inputs.
Authorization: Bearer <credential>. The credential is one of: an account-scoped API key (comfyui-…), accepted on Cloud and serverless; a Comfy Cloud session JWT; or an OAuth access token issued for the Comfy Cloud resource. Which kinds a given deployment accepts is deployment configuration — an API key always works on Cloud and serverless, and a deployment that does not accept JWT bearers answers 401 with a message saying so. Self-hosted accepts unauthenticated requests by default and can be configured with a static bearer token.
Client-generated UUID (recommended). Single-use: the first request to present a key is processed; any later request with the same key is rejected 422idempotency_key_reuse (reject-on-duplicate, no response replay). Keys expire after 24h.
Per-prompt ComfyUI extra_data, same shape as Comfy Cloud and local ComfyUI. Closed object: only the enumerated keys are accepted, keeping the contract fully typed. Forwarded to the worker per-prompt and excluded from idempotency comparison. On a deployment it is dispatch-only and never stored; on Comfy Cloud it is persisted with the prompt, because the worker needs it, and redacted on every path that returns a workflow to a caller.
Send the one credential you hold: an API key as api_key_comfy_org, or the session token an interactively signed-in client has instead as auth_token_comfy_org. Sending both is accepted and both are forwarded, but it is not a supported combination and which one a node uses is not defined here. Note a session token is short-lived and is not re-minted for you, so one submitted long before it executes may expire in the queue.
Your own labels for the job, such as which of your customers it ran for. At most 16 pairs. A key is 1 to 40 characters from A-Z a-z 0-9 _ - .; a value is a string of at most 256 bytes in UTF-8 (bytes, not characters: 200 é is 400 bytes) with no control character (U+0000 to U+001F, tab and newline included, and U+007F to U+009F) and no bidirectional embedding, override or isolate (U+202A to U+202E, U+2066 to U+2069). Anything else is refused 422metadata_invalid and no job is created: a bad key or value is named in the message and in details.key, while more than 16 pairs is refused with the count and no details. A metadata that is not an object is refused 400invalid_request; null is the same as none. Stored with the job, returned on it, and filterable on GET /api/v2/jobs. Set once, here: nothing changes it later. Only jobs sent to a deployment keep it today: Comfy Cloud refuses a non-empty metadata with 422metadata_not_supported, and runs a job with empty or absent metadata as before.
Show child attributes
Example:
{ "client": "acme", "batch": "2026-10-05" }
Response
Job created and queued.
One execution of a workflow. Durable from creation until expires_at; outputs populates incrementally during execution.
Lifecycle: queued → running → succeeded | failed | expired;
a cancel request, or the deletion of the deployment the job is running
on, moves running → canceling → canceled.
Terminal states: succeeded, canceled, failed, expired.
Embedded follow-up links — follow these, don't build URLs. A link is either an absolute URL or a host-relative reference (leading /) that already includes any prefix the serving surface is mounted under (e.g. a serverless gateway's /deployment/{deployment_id}/api/v2). Clients MUST resolve a host-relative link against the request origin (scheme + authority), never against a configured base URL — joining it to a base URL that carries the same mount prefix duplicates the prefix.
Values are nullable (a metric not yet available — e.g. execution_ms before a job starts running — is null, not omitted); the example below is deliberately all-non-null purely to work around a Spectral/nimma lint-tooling crash on a literal null inside a schema example combined with additionalProperties.nullable: true — the schema itself is unchanged and still allows null values at runtime.
The deployment the job was sent to: the id in the address it was posted at, which stays the same when the deployment moves to another release. Absent on a surface that runs jobs on no deployment.
The release of the deployment's build that ran the job, which can differ from the release the deployment runs now. Absent where the serving surface does not report it.
The version of the release in release_id, the number its build cut it as. Absent where the serving surface does not report it or could not look it up at the time of the answer.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ComfyUI","colors":{"primary":"#49378B","light":"#F2FF59","dark":"#F2FF59"},"logo":{"light":"https://mintcdn.com/dripart/WCFdTagRdhtvk9-o/logo/light.svg?fit=max\u0026auto=format\u0026n=WCFdTagRdhtvk9-o\u0026q=85\u0026s=ec112de87239058f5a931a7e4b594965","dark":"https://mintcdn.com/dripart/QzWbjSCBG7w61rR3/logo/dark.svg?fit=max\u0026auto=format\u0026n=QzWbjSCBG7w61rR3\u0026q=85\u0026s=62b4d879fb3aadbd7a468d1539032d6f","href":"/"},"favicon":"https://mintcdn.com/dripart/maKDA164-rrTfyxY/favicon.ico?fit=max\u0026auto=format\u0026n=maKDA164-rrTfyxY\u0026q=85\u0026s=94f3a697cf4c9a1ee3961b69219d0942","appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://blog.comfy.org/?utm_source=docs","label":"Blog"},{"href":"/tutorials/partner-nodes/pricing","label":"Pricing"},{"href":"https://platform.comfy.org/?utm_source=docs","label":"Platform"},{"href":"https://comfy.org/download?utm_source=docs","label":"Download"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"Resources","items":[{"label":"installation","href":"/installation/system_requirements"},{"label":"Tutorials","href":"/tutorials/basic/text-to-image"},{"label":"Development","href":"/development/overview"}]},{"header":"Products","items":[{"label":"Features","href":"https://www.comfy.org/?utm_source=docs"},{"label":"Gallery","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"Download","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"Company","items":[{"label":"About","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"Careers","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"Terms of Service","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"Privacy Policy","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"search":{"prompt":"Search Comfy documentation..."},"seo":{"metatags":{"googlebot":"max-video-preview:0"}},"icons":{"library":"fontawesome"},"integrations":{"ga4":{"measurementId":"G-MXC01ZDDHQ"},"posthog":{"apiKey":"phc_iKfK86id4xVYws9LybMje0h44eGtfwFgRPIBehmy8rO"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"zh","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"资源","items":[{"label":"安装","href":"/zh/installation/system_requirements"},{"label":"教程","href":"/zh/tutorials/basic/text-to-image"},{"label":"开发","href":"/zh/development/overview"}]},{"header":"产品","items":[{"label":"功能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"画廊","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"下载","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"公司","items":[{"label":"关于","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"招聘","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"服务条款","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"隐私政策","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"href":"zh"},{"language":"ja","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"リソース","items":[{"label":"インストール","href":"/ja/installation/system_requirements"},{"label":"チュートリアル","href":"/ja/tutorials/basic/text-to-image"},{"label":"開発","href":"/ja/development/overview"}]},{"header":"プロダクト","items":[{"label":"機能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"ギャラリー","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"ダウンロード","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"会社情報","items":[{"label":"概要","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"採用情報","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"利用規約","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"プライバシーポリシー","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ja/tutorials/partner-nodes/pricing","label":"料金"},{"href":"https://comfy.org/download?utm_source=docs","label":"ダウンロード"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"href":"ja"},{"language":"ko","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"리소스","items":[{"label":"설치","href":"/ko/installation/system_requirements"},{"label":"튜토리얼","href":"/ko/tutorials/basic/text-to-image"},{"label":"개발","href":"/ko/development/overview"}]},{"header":"제품","items":[{"label":"기능","href":"https://www.comfy.org/?utm_source=docs"},{"label":"갤러리","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"다운로드","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"회사 정보","items":[{"label":"소개","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"채용","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"이용약관","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"개인정보 처리방침","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ko/tutorials/partner-nodes/pricing","label":"가격 정책"},{"href":"https://comfy.org/download?utm_source=docs","label":"다운로드"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"href":"ko"},{"language":"es","href":"es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dripart","hasAudioNarration":false,"actualSubdomain":"dripart","customDomains":["docs.comfy.org"],"gitSource":{"type":"github","owner":"comfy-org","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af13acd3de17d5f9fbbbbc7","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"en","tag":"Built-in Nodes","count":1166},{"language":"ja","tag":"組み込みノード","count":1166},{"language":"zh","tag":"内置节点","count":1166},{"language":"en","tag":"Nodes","count":1165},{"language":"ja","tag":"ノード","count":1165},{"language":"zh","tag":"节点","count":1165},{"language":"ko","tag":"내장 노드 (Built-in Nodes)","count":1124},{"language":"ko","tag":"노드","count":1123},{"language":"es","tag":"Nodos integrados","count":1058},{"language":"es","tag":"Nodos","count":1057},{"language":"en","tag":"Tutorials","count":414},{"language":"es","tag":"Tutoriales","count":414},{"language":"en","tag":"Model","count":381},{"language":"ja","tag":"Model","count":381},{"language":"ko","tag":"Model","count":381},{"language":"zh","tag":"Model","count":381},{"language":"es","tag":"Modelo","count":378},{"language":"en","tag":"Image","count":353},{"language":"en","tag":"Partner","count":348},{"language":"ja","tag":"Partner","count":348},{"language":"ko","tag":"Partner","count":348},{"language":"zh","tag":"Partner","count":348},{"language":"es","tag":"Partner","count":346},{"language":"es","tag":"Imagen","count":323},{"language":"ja","tag":"はじめに","count":308},{"language":"ko","tag":"시작하기","count":308},{"language":"zh","tag":"开始使用","count":308},{"language":"ja","tag":"API 開発","count":295},{"language":"ko","tag":"API 개발","count":295},{"language":"zh","tag":"API 开发","count":295},{"language":"en","tag":"Video","count":289},{"language":"en","tag":"Comfy Router","count":287},{"language":"es","tag":"Comfy Router","count":267},{"language":"es","tag":"Video","count":264},{"language":"ja","tag":"Comfy Router","count":258},{"language":"ko","tag":"Comfy Router","count":258},{"language":"zh","tag":"Comfy Router","count":258},{"language":"en","tag":"Models","count":257},{"language":"en","tag":"All Models","count":254},{"language":"es","tag":"Models","count":228},{"language":"ja","tag":"Models","count":228},{"language":"ko","tag":"Models","count":228},{"language":"zh","tag":"Models","count":228},{"language":"es","tag":"All Models","count":225},{"language":"ja","tag":"画像","count":205},{"language":"ko","tag":"이미지","count":205},{"language":"zh","tag":"图像","count":205},{"language":"ja","tag":"Video","count":193},{"language":"zh","tag":"Video","count":193},{"language":"ko","tag":"Video","count":176}],"searchSettings":{"maxResults":10}},"assistantConfig":{"enableStarterQuestions":false},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":":root{--ink-900: #151417;--hub-shell-light: #f7f6f9;--accent-purple: #49378b;--accent-yellow: #f2ff59;--primary: 73 55 139 !important;--primary-light: 242 255 89 !important;--primary-dark: 242 255 89 !important}html.dark{--primary: 242 255 89 !important;--background-dark: 14 14 13 !important}html.dark body{background-color:#0e0e0d!important}html.dark #navbar,html.dark #navbar-transition{background-color:var(--ink-900)!important}html.dark #sidebar,html.dark #sidebar-content{background-color:rgb(var(--background-dark))!important}html.dark #navbar,html.dark #navbar-transition{box-shadow:none!important;filter:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}html.dark #navbar-transition{border-bottom:1px solid rgba(255, 255, 255, 0.08)!important;opacity:1!important}html.dark img.nav-logo{filter:none}html.dark #sidebar-content a:not([aria-current=\"page\"]){color:rgba(255, 255, 255, 0.72)!important}html.dark #sidebar-content a:not([aria-current=\"page\"]) *{color:inherit!important}html.dark #sidebar-content a[aria-current=\"page\"]{color:var(--accent-yellow)!important;background-color:rgba(242, 255, 89, 0.10)!important}html.dark #sidebar-content a[aria-current=\"page\"] *{color:inherit!important}html.dark .nav-tabs-item[data-active],html.dark mobile-nav-tabs-item[data-active]{color:var(--accent-yellow)!important}html.dark #navbar a[href*=\"comfy.org/cloud\"] span.absolute{background-color:var(--accent-yellow)!important}html.dark #navbar a[href*=\"comfy.org/cloud\"] span.text-white{color:#151417!important}html:not(.dark) #background-color,html:not(.dark) #navbar,html:not(.dark) #navbar-transition,html:not(.dark) #sidebar,html:not(.dark) #sidebar-content{background-color:var(--hub-shell-light)!important}html:not(.dark) .nav-tabs-item[data-active],html:not(.dark) mobile-nav-tabs-item[data-active],html:not(.dark) nav-dropdown-item[data-active]{background-color:transparent!important;box-shadow:none!important;color:var(--accent-purple)!important;font-weight:600!important}html:not(.dark) .nav-tabs-item[data-active] *,html:not(.dark) mobile-nav-tabs-item[data-active] *,html:not(.dark) nav-dropdown-item[data-active] *{color:inherit!important}html:not(.dark) #sidebar-content li:has(>a[aria-current=\"page\"]){background-color:transparent!important;box-shadow:none!important}html:not(.dark) #sidebar-content a[aria-current=\"page\"]{color:var(--accent-purple)!important;background-color:rgba(73, 55, 139, 0.1)!important;font-weight:600!important}html:not(.dark) #sidebar-content a[aria-current=\"page\"] *{color:inherit!important}html:not(.dark) toc-item[data-active],html:not(.dark) toc-item[data-active-deepest],html:not(.dark) toc-item[data-active] a,html:not(.dark) toc-item[data-active-deepest] a{background-color:transparent!important;color:var(--accent-purple)!important;font-weight:600!important}html:not(.dark) #header :where(h1,h2,h3,h4,h5,h6),html:not(.dark) #content-area :where(h1,h2,h3,h4,h5,h6){color:#151417!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"]{background-color:transparent!important;color:var(--accent-purple)!important;border-radius:0.75rem;box-shadow:inset 0 0 0 1px var(--accent-purple)!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"] span.absolute{background-color:transparent!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"] *{color:inherit!important}#sidebar .sticky.top-0.pointer-events-none.bg-linear-to-b{background-image:none!important}@media (min-width: 1024px){#navbar.is-not-custom.is-not-center+div:has(>#sidebar),.max-w-8xl.mx-auto.relative,.max-w-8xl.mx-auto{max-width:none!important;width:100%!important;margin-left:0!important;margin-right:0!important;padding-left:0!important;padding-right:0!important}#navbar [class*=\"px-12\"],#navbar [class*=\"mx-4\"]{padding-left:0!important;padding-right:1.5rem!important;margin-left:0!important;margin-right:0!important}#navbar a.select-none,#navbar .nav-logo{margin-left:1rem!important}#navbar .nav-tabs{padding-left:2rem!important}#sidebar{left:0!important;margin-left:0!important;box-shadow:none!important}#sidebar-content{margin-left:0!important;padding-left:1rem!important;box-sizing:border-box!important}#navbar,#navbar-transition{left:0!important;right:0!important;width:100%!important;max-width:none!important}#content-area{margin-left:0!important;max-width:none!important;width:100%!important;padding-left:18rem!important}#sidebar.sticky~#content-container #content-area{padding-left:2rem!important;padding-right:2rem!important}#content-container,#body-content{max-width:none!important;width:100%!important}:root{--content-width: 100%;--sidebar-width: 18rem}}@media (min-width: 1024px){nav#sidebar,#sidebar[style]{left:0!important;right:auto!important;margin-left:0!important;transform:none!important}#navbar li.navbar-link:has(a[href*=\"comfy.org/download\"]){margin-right:0!important}#navbar a[href*=\"comfy.org/download\"]{box-sizing:border-box;border:1px solid rgb(255 255 255 / 0.22);border-radius:0.75rem;padding:7px 0.875rem!important;color:#fff!important;font-size:0.875rem;line-height:1.25rem}html:not(.dark) #navbar a[href*=\"comfy.org/download\"]{border-color:rgb(0 0 0 / 0.16);color:#151417!important}#navbar a[href*=\"comfy.org/download\"]:hover{background:rgb(255 255 255 / 0.06)}html:not(.dark) #navbar a[href*=\"comfy.org/download\"]:hover{background:rgb(0 0 0 / 0.04)}#navbar li.navbar-link:has(a[href*=\"comfy.org/download\"])+.whitespace-nowrap,#navbar .flex.space-x-6>.whitespace-nowrap.hidden{margin-left:0.5rem!important}}body:has(.router-api-reference-marker) #content,body:has(.router-api-reference-marker) #header{max-width:48rem}body:has(.router-api-reference-marker) #content-area table{width:100%;table-layout:auto}body:has(.router-api-reference-marker) #content-area th,body:has(.router-api-reference-marker) #content-area td{min-width:4rem!important;overflow-wrap:anywhere}body:has(.router-api-reference-marker) #content-area table:has(th:nth-child(6)) th:nth-child(3),body:has(.router-api-reference-marker) #content-area table:has(th:nth-child(6)) td:nth-child(3){min-width:5rem!important}@media (max-width: 1535px){body:has(.router-api-reference-marker) #content-side-layout{display:none!important}}body:has(.router-provider-coverage-marker) #content,body:has(.router-provider-coverage-marker) #header{max-width:64rem}body:has(.router-provider-coverage-marker) #content-area table{width:100%;table-layout:auto}body:has(.router-provider-coverage-marker) #content-area th,body:has(.router-provider-coverage-marker) #content-area td{min-width:5rem!important;overflow-wrap:anywhere}body:has(.router-provider-coverage-marker) #content-area th:first-child,body:has(.router-provider-coverage-marker) #content-area td:first-child{min-width:12rem!important}body:has(.router-quickstart-marker) [data-component-part=\"card-content\"] [data-component-part=\"code-block-root\"][style*=\"height:190px\"],body:has(.router-quickstart-marker) [data-component-part=\"card-content\"] [data-component-part=\"code-block-root\"][style*=\"height: 190px\"]{height:86px!important}"},{"filePath":"samples-cards.css","content":".sample-card-grid{display:grid;gap:20px;grid-template-columns:repeat(2, minmax(0, 1fr));margin-top:28px}.sample-card{min-width:0;perspective:1200px}.sample-card-inner{height:565px;position:relative;transform-style:preserve-3d;transition:transform 560ms cubic-bezier(.2, .75, .3, 1)}.sample-card[data-flipped=\"true\"] .sample-card-inner{transform:rotateY(180deg)}.sample-card-face{backface-visibility:hidden;background:#fff;border:1px solid #e5e1eb;border-radius:12px;box-sizing:border-box;height:100%;inset:0;overflow:hidden;position:absolute;width:100%}.sample-card-front{display:flex;flex-direction:column}.sample-card-back{opacity:0;pointer-events:none;transform:rotateY(180deg);visibility:hidden}.sample-card[data-flipped=\"true\"] .sample-card-front{pointer-events:none;transition:visibility 0s linear 280ms;visibility:hidden}.sample-card[data-flipped=\"true\"][data-active-path=\"api\"] .sample-card-back[data-sample-path=\"api\"],.sample-card[data-flipped=\"true\"][data-active-path=\"endpoint\"] .sample-card-back[data-sample-path=\"endpoint\"]{opacity:1;pointer-events:auto;visibility:visible}.sample-card-preview{border-bottom:1px solid #e5e1eb;cursor:pointer;display:block;width:100%}.sample-card-body{display:flex;flex:1;flex-direction:column;padding:20px}.sample-card-body h2,.sample-path-body h2{color:#49378b;font-size:18px;font-weight:700;letter-spacing:-.02em;margin:0 0 8px}.sample-path-body h2{text-align:center}.sample-card-body>p{color:#5f5966;font-size:14px;line-height:1.55;margin:0;min-height:66px}.sample-card-actions{display:flex;gap:8px;margin-top:20px}.sample-card-actions button{background:#fff;border:1px solid #cfc8de;border-radius:6px;color:#49378b;cursor:pointer;flex:1;font-size:13px;font-weight:700;padding:10px 12px}.sample-card-links{border-top:1px solid #eeeaf1;display:flex;gap:8px;margin-top:16px;padding-top:12px}.sample-card-links a{color:#625b6c;font-size:12px;font-weight:650;text-decoration:none}.sample-card-links span{color:#b3adba}.sample-path-body{padding:20px}.sample-path-body>button{background:transparent;border:0;color:#625b6c;cursor:pointer;font-size:12px;font-weight:700;padding:0}.sample-path-eyebrow{color:#857a9e;font-size:10px;font-weight:700;letter-spacing:.08em;margin:19px 0 5px;text-align:center;text-transform:uppercase}.sample-path-body>p:not(.sample-path-eyebrow){color:#5f5966;font-size:12px;line-height:1.5;margin:0 0 15px}.sample-path-steps{display:grid;gap:8px}.sample-path-step{align-items:center;background:#faf9fc;border:1px solid #e5e1ea;border-radius:8px;display:flex;gap:10px;padding:10px 11px}.sample-path-number{align-items:center;background:#49378b;border-radius:999px;color:#fff;display:inline-flex;flex:0 0 21px;font-size:11px;font-weight:700;height:21px;justify-content:center}.sample-path-copy{flex:1;min-width:0}.sample-path-copy strong{color:#312c36;display:block;font-size:12px}.sample-path-copy span{color:#706a75;display:block;font-size:11px;line-height:1.35;margin-top:2px}.sample-path-step a{color:#49378b;flex:0 0 auto;font-size:11px;font-weight:700;text-decoration:none}@media (max-width: 768px){.sample-card-grid{grid-template-columns:1fr}.sample-card-inner{height:clamp(620px, 180vw, 760px)}}"}],"page":{"pagePath":"api-reference/v2/jobs/submit-a-workflow-for-execution","slug":"/api-reference/v2/jobs/submit-a-workflow-for-execution","pageMetadata":{"title":"Submit a workflow for execution","description":"Accepts the API-format workflow graph verbatim. Validation is\nsynchronous: graph structure, unknown node classes, and asset\nreferences (`core/ASSET` objects — every referenced `id` must exist\nand be owned by the caller). A `201` means the job is durably\nrecorded and queued.\n\nUI-format workflow JSON (the export with `nodes`/`links`) is\nrejected with `workflow_format_ui`.\n\n`Idempotency-Key` is single-use (reject-on-duplicate, NOT\nrecord-and-replay): the first request to present a given key is\nprocessed normally; ANY later request presenting the same key — a\nretry, a concurrent duplicate, or a same-key request with a different\nbody — is rejected `422` `idempotency_key_reuse` and is never\nre-executed. The key is claimed only for a request that actually\nreaches submission and is released if that submission definitively\nfails without creating a job (a validation error, or an upstream\nreject such as out-of-credits or queue-full), so a legitimate retry\nwith the same key can proceed. If a submission's outcome is unknown\n(an upstream timeout or 5xx where the job may or may not have been\ncreated), the key stays claimed and the retry is rejected: poll or\nlist your jobs to find the possibly-created job rather than\nresubmitting. Keys expire after 24h. There is no response replay and\nno `Idempotency-Replayed` header.\n\nReserved for post-MVP and rejected if present today: `webhook_url`,\n`inputs`.\n","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs","href":"/api-reference/v2/jobs/submit-a-workflow-for-execution","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Accepts the API-format workflow graph verbatim. Validation is\\nsynchronous: graph structure, unknown node classes, and asset\\nreferences (\", _jsx(_components.code, {\n children: \"core/ASSET\"\n }), \" objects — every referenced \", _jsx(_components.code, {\n children: \"id\"\n }), \" must exist\\nand be owned by the caller). A \", _jsx(_components.code, {\n children: \"201\"\n }), \" means the job is durably\\nrecorded and queued.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"UI-format workflow JSON (the export with \", _jsx(_components.code, {\n children: \"nodes\"\n }), \"/\", _jsx(_components.code, {\n children: \"links\"\n }), \") is\\nrejected with \", _jsx(_components.code, {\n children: \"workflow_format_ui\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" is single-use (reject-on-duplicate, NOT\\nrecord-and-replay): the first request to present a given key is\\nprocessed normally; ANY later request presenting the same key — a\\nretry, a concurrent duplicate, or a same-key request with a different\\nbody — is rejected \", _jsx(_components.code, {\n children: \"422\"\n }), \" \", _jsx(_components.code, {\n children: \"idempotency_key_reuse\"\n }), \" and is never\\nre-executed. The key is claimed only for a request that actually\\nreaches submission and is released if that submission definitively\\nfails without creating a job (a validation error, or an upstream\\nreject such as out-of-credits or queue-full), so a legitimate retry\\nwith the same key can proceed. If a submission’s outcome is unknown\\n(an upstream timeout or 5xx where the job may or may not have been\\ncreated), the key stays claimed and the retry is rejected: poll or\\nlist your jobs to find the possibly-created job rather than\\nresubmitting. Keys expire after 24h. There is no response replay and\\nno \", _jsx(_components.code, {\n children: \"Idempotency-Replayed\"\n }), \" header.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Reserved for post-MVP and rejected if present today: \", _jsx(_components.code, {\n children: \"webhook_url\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"inputs\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Submit a workflow for execution","description":"Accepts the API-format workflow graph verbatim. Validation is\nsynchronous: graph structure, unknown node classes, and asset\nreferences (`core/ASSET` objects — every referenced `id` must exist\nand be owned by the caller). A `201` means the job is durably\nrecorded and queued.\n\nUI-format workflow JSON (the export with `nodes`/`links`) is\nrejected with `workflow_format_ui`.\n\n`Idempotency-Key` is single-use (reject-on-duplicate, NOT\nrecord-and-replay): the first request to present a given key is\nprocessed normally; ANY later request presenting the same key — a\nretry, a concurrent duplicate, or a same-key request with a different\nbody — is rejected `422` `idempotency_key_reuse` and is never\nre-executed. The key is claimed only for a request that actually\nreaches submission and is released if that submission definitively\nfails without creating a job (a validation error, or an upstream\nreject such as out-of-credits or queue-full), so a legitimate retry\nwith the same key can proceed. If a submission's outcome is unknown\n(an upstream timeout or 5xx where the job may or may not have been\ncreated), the key stays claimed and the retry is rejected: poll or\nlist your jobs to find the possibly-created job rather than\nresubmitting. Keys expire after 24h. There is no response replay and\nno `Idempotency-Replayed` header.\n\nReserved for post-MVP and rejected if present today: `webhook_url`,\n`inputs`.\n","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs","href":"/api-reference/v2/jobs/submit-a-workflow-for-execution","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dripart/9d6bf2b2531e904c/giscus-comments.js","/_mintlify/custom/dripart/bd0341946f3c75a6/syft.js","/_mintlify/custom/dripart/042392a43b5e681e/samples-cards.js"],"openApiReferenceData":{"operation":{"operationId":"postJobs","tags":["jobs"],"summary":"Submit a workflow for execution","description":"Accepts the API-format workflow graph verbatim. Validation is\nsynchronous: graph structure, unknown node classes, and asset\nreferences (`core/ASSET` objects — every referenced `id` must exist\nand be owned by the caller). A `201` means the job is durably\nrecorded and queued.\n\nUI-format workflow JSON (the export with `nodes`/`links`) is\nrejected with `workflow_format_ui`.\n\n`Idempotency-Key` is single-use (reject-on-duplicate, NOT\nrecord-and-replay): the first request to present a given key is\nprocessed normally; ANY later request presenting the same key — a\nretry, a concurrent duplicate, or a same-key request with a different\nbody — is rejected `422` `idempotency_key_reuse` and is never\nre-executed. The key is claimed only for a request that actually\nreaches submission and is released if that submission definitively\nfails without creating a job (a validation error, or an upstream\nreject such as out-of-credits or queue-full), so a legitimate retry\nwith the same key can proceed. If a submission's outcome is unknown\n(an upstream timeout or 5xx where the job may or may not have been\ncreated), the key stays claimed and the retry is rejected: poll or\nlist your jobs to find the possibly-created job rather than\nresubmitting. Keys expire after 24h. There is no response replay and\nno `Idempotency-Replayed` header.\n\nReserved for post-MVP and rejected if present today: `webhook_url`,\n`inputs`.\n","x-idempotency-key":"recommended","parameters":["bbed5bac-191f-4558-ac5e-5ce25eb21c77"],"requestBody":"279f6bec-8e40-451f-a128-e4d180ecfd8b","responses":{"201":"fce6942e-2f68-44f4-ad78-56add909ab0c","400":"e963cf95-5231-4eec-8893-173ac5b19c5b","401":"ab4ab979-d60f-4fd8-afe2-eecacbebaaf1","402":"aa25fc11-3193-44b4-a90b-409e37a381a8","403":"5f24f60f-47f4-4cad-ad64-2c871aa0eae0","404":"30f40b67-0d90-4cae-859d-89ebd304fdf0","422":"79c85371-9d21-4eae-9385-9c51a1ddd032","429":"34dabe40-6a97-4758-bc4c-6de596c9fa7b","500":"c3dc6d02-c84c-446f-9b98-bd929be1c6d0","503":"47a47311-79b4-4d58-b33c-5e5695b5e8b6"},"method":"post","type":"path","servers":["ddabda62-d3c9-40f8-881d-a751e619aff3","62680931-7b02-4daf-b27f-819e4c14ed64","0a142380-c92c-4874-83af-7dc79bfcdc68"],"security":["e83e9dfc-ebdf-4caa-994b-25be4bb53550","78687c62-3745-43d4-a655-7ff88a24d9ae"],"path":"/api/v2/jobs","baseUrlOptions":["http://127.0.0.1:8189","https://cloud.comfy.org","https://{deployment}.run.comfy.app"],"title":"Submit a workflow for execution","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"bbed5bac-191f-4558-ac5e-5ce25eb21c77":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","isRequired":false,"description":"Client-generated UUID (recommended). Single-use: the first request to present a key is processed; any later request with the same key is rejected `422` `idempotency_key_reuse` (reject-on-duplicate, no response replay). Keys expire after 24h.","uniqueKey":"","typeLabel":"string"},"description":"Client-generated UUID (recommended). Single-use: the first request to present a key is processed; any later request with the same key is rejected `422` `idempotency_key_reuse` (reject-on-duplicate, no response replay). Keys expire after 24h."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["workflow"],"properties":{"workflow":{"type":"object","description":"API-format workflow graph, verbatim.","additionalProperties":true,"isRequired":true,"uniqueKey":"workflow","typeLabel":"object"},"extra_data":{"type":"object","description":"Per-prompt ComfyUI `extra_data`, same shape as Comfy Cloud and local ComfyUI. Closed object: only the enumerated keys are accepted, keeping the contract fully typed. Forwarded to the worker per-prompt and excluded from idempotency comparison. On a deployment it is dispatch-only and never stored; on Comfy Cloud it is persisted with the prompt, because the worker needs it, and redacted on every path that returns a workflow to a caller.\n\nSend the one credential you hold: an API key as `api_key_comfy_org`, or the session token an interactively signed-in client has instead as `auth_token_comfy_org`. Sending both is accepted and both are forwarded, but it is not a supported combination and which one a node uses is not defined here. Note a session token is short-lived and is not re-minted for you, so one submitted long before it executes may expire in the queue.","additionalProperties":false,"properties":{"api_key_comfy_org":{"type":"string","description":"API key for partner (API) nodes.","uniqueKey":"extra_data.api_key_comfy_org","typeLabel":"string"},"auth_token_comfy_org":{"type":"string","description":"Session bearer token for partner (API) nodes — the equivalent of `api_key_comfy_org` for a caller authenticated by session rather than by key.","uniqueKey":"extra_data.auth_token_comfy_org","typeLabel":"string"},"preview_method":{"type":"string","description":"ComfyUI's preview method for this prompt, passed to ComfyUI as sent, which validates it. Used only for jobs sent by Comfy Cloud's editor; ignored for other callers.","uniqueKey":"extra_data.preview_method","typeLabel":"string"},"extra_pnginfo":{"type":"object","description":"ComfyUI's `extra_pnginfo` for this prompt, which carries the editor's workflow into saved outputs. Used only for jobs sent by Comfy Cloud's editor; ignored for other callers.","additionalProperties":true,"uniqueKey":"extra_data.extra_pnginfo","typeLabel":"object"}},"uniqueKey":"extra_data","typeLabel":"object"},"metadata":{"type":"object","description":"Your own labels for the job, such as which of your customers it ran for. At most 16 pairs. A key is 1 to 40 characters from `A-Z a-z 0-9 _ - .`; a value is a string of at most 256 bytes in UTF-8 (bytes, not characters: 200 `é` is 400 bytes) with no control character (U+0000 to U+001F, tab and newline included, and U+007F to U+009F) and no bidirectional embedding, override or isolate (U+202A to U+202E, U+2066 to U+2069). Anything else is refused `422` `metadata_invalid` and no job is created: a bad key or value is named in the message and in `details.key`, while more than 16 pairs is refused with the count and no `details`. A `metadata` that is not an object is refused `400` `invalid_request`; `null` is the same as none. Stored with the job, returned on it, and filterable on `GET /api/v2/jobs`. Set once, here: nothing changes it later. Only jobs sent to a deployment keep it today: Comfy Cloud refuses a non-empty `metadata` with `422` `metadata_not_supported`, and runs a job with empty or absent `metadata` as before.","maxProperties":16,"additionalProperties":{"type":"string","description":"At most 256 bytes in UTF-8, which is what the server counts. `maxLength` counts characters, so it is only an upper bound: a shorter value with multi-byte characters can still be refused.","maxLength":256,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"x-go-type":"interface{}","example":{"client":"acme","batch":"2026-10-05"},"uniqueKey":"metadata","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"workflow":{},"extra_data":{"api_key_comfy_org":"\u003cstring>","auth_token_comfy_org":"\u003cstring>","preview_method":"\u003cstring>","extra_pnginfo":{}},"metadata":{"client":"acme","batch":"2026-10-05"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"fce6942e-2f68-44f4-ad78-56add909ab0c":{"description":"Job created and queued.","content":{"application/json":{"schema":{"type":"object","description":"One execution of a workflow. Durable from creation until `expires_at`; `outputs` populates incrementally during execution.","required":["id","status","created_at","started_at","completed_at","expires_at","queue_position","progress","outputs","error","urls"],"properties":{"id":{"type":"string","example":"7f3d2c1b-9a8e-4d6f-b012-3c4d5e6f7a8b","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"status":{"type":"string","enum":["queued","running","succeeded","canceling","canceled","failed","expired"],"description":"Lifecycle: queued → running → succeeded | failed | expired;\na cancel request, or the deletion of the deployment the job is running\non, moves running → canceling → canceled.\nTerminal states: succeeded, canceled, failed, expired.\n","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"started_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completed_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"type":"string","format":"date-time","description":"Retention deadline — a platform property, not an API constant.","isRequired":true,"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time>"},"queue_position":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"queue_position.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"queue_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"queue_position","typeLabel":"integer | null"},"progress":{"oneOf":[{"type":"object","description":"The latest progress snapshot; same data the SSE stream pushes.","required":["value","nodes_done","nodes_total"],"properties":{"value":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Overall fraction, server-computed.","example":0.42,"isRequired":true,"uniqueKey":"progress.oneOf.0.value","typeLabel":"number\u003cdouble>"},"nodes_done":{"type":"integer","example":11,"isRequired":true,"uniqueKey":"progress.oneOf.0.nodes_done","typeLabel":"integer"},"nodes_total":{"type":"integer","example":31,"isRequired":true,"uniqueKey":"progress.oneOf.0.nodes_total","typeLabel":"integer"},"current_node":{"oneOf":[{"type":"string","example":"12","uniqueKey":"progress.oneOf.0.current_node.oneOf.0","typeLabel":"string"},{"type":"null","example":"12","uniqueKey":"progress.oneOf.0.current_node.oneOf.1","typeLabel":"null"}],"uniqueKey":"progress.oneOf.0.current_node","typeLabel":"string | null"},"current_node_class":{"oneOf":[{"type":"string","example":"KSampler","uniqueKey":"progress.oneOf.0.current_node_class.oneOf.0","typeLabel":"string"},{"type":"null","example":"KSampler","uniqueKey":"progress.oneOf.0.current_node_class.oneOf.1","typeLabel":"null"}],"uniqueKey":"progress.oneOf.0.current_node_class","typeLabel":"string | null"},"step":{"oneOf":[{"type":"integer","example":21,"uniqueKey":"progress.oneOf.0.step.oneOf.0","typeLabel":"integer"},{"type":"null","example":21,"uniqueKey":"progress.oneOf.0.step.oneOf.1","typeLabel":"null"}],"uniqueKey":"progress.oneOf.0.step","typeLabel":"integer | null"},"steps":{"oneOf":[{"type":"integer","example":50,"uniqueKey":"progress.oneOf.0.steps.oneOf.0","typeLabel":"integer"},{"type":"null","example":50,"uniqueKey":"progress.oneOf.0.steps.oneOf.1","typeLabel":"null"}],"uniqueKey":"progress.oneOf.0.steps","typeLabel":"integer | null"},"message":{"oneOf":[{"type":"string","example":"KSampler 21/50","uniqueKey":"progress.oneOf.0.message.oneOf.0","typeLabel":"string"},{"type":"null","example":"KSampler 21/50","uniqueKey":"progress.oneOf.0.message.oneOf.1","typeLabel":"null"}],"uniqueKey":"progress.oneOf.0.message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"progress.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"progress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"progress","typeLabel":"object | null"},"outputs":{"type":"array","items":{"type":"object","description":"A committed job output. Outputs are assets: `id` is the asset UUID, retrievable via GET /api/v2/assets/{id} for as long as the job is retained. `hash` is lazily computed and may be null on the retrieval hot path.","required":["node_id","name","type","content_type","size_bytes","id","hash","url","url_expires_at"],"properties":{"node_id":{"type":"string","description":"The workflow node that reported this file; empty when the worker named none.","example":"9","isRequired":true,"uniqueKey":"outputs.items.[INDEX].node_id","typeLabel":"string"},"name":{"type":"string","example":"ComfyUI_00001_.png","isRequired":true,"uniqueKey":"outputs.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","enum":["image","video","audio","text","file","latent"],"description":"Normalized output kind — nothing silently dropped.","isRequired":true,"uniqueKey":"outputs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"content_type":{"type":"string","example":"image/png","isRequired":true,"uniqueKey":"outputs.items.[INDEX].content_type","typeLabel":"string"},"size_bytes":{"type":"integer","format":"int64","example":1848320,"isRequired":true,"uniqueKey":"outputs.items.[INDEX].size_bytes","typeLabel":"integer\u003cint64>"},"id":{"type":"string","description":"Asset UUID.","example":"9f8a1c0d-2b3e-4f56-...","isRequired":true,"uniqueKey":"outputs.items.[INDEX].id","typeLabel":"string"},"hash":{"oneOf":[{"type":"string","description":"`blake3:\u003chex>`; null until lazily computed.","isRequired":true,"uniqueKey":"outputs.items.[INDEX].hash.oneOf.0","typeLabel":"string"},{"type":"null","description":"`blake3:\u003chex>`; null until lazily computed.","isRequired":true,"uniqueKey":"outputs.items.[INDEX].hash.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outputs.items.[INDEX].hash","typeLabel":"string | null"},"url":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"outputs.items.[INDEX].url","typeLabel":"string\u003curi>"},"url_expires_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"outputs.items.[INDEX].url_expires_at","typeLabel":"string\u003cdate-time>"},"job_id":{"oneOf":[{"type":"string","description":"ID of the job that produced this output.","uniqueKey":"outputs.items.[INDEX].job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"ID of the job that produced this output.","uniqueKey":"outputs.items.[INDEX].job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"outputs.items.[INDEX].job_id","typeLabel":"string | null"}},"uniqueKey":"outputs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outputs","typeLabel":"object[]"},"error":{"oneOf":[{"type":"object","description":"Execution failure detail, carried in `job.error` (not an HTTP error).","required":["code","message"],"properties":{"code":{"type":"string","example":"node_execution_error","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"message":{"type":"string","description":"Why the job failed, written for a person to read. On a serverless deployment, where ComfyUI refused the workflow, it names the rejected nodes it has room for and their reasons, which `node_errors` carries in full. Its wording may change; read `code` and `node_errors` rather than matching this text.","isRequired":true,"uniqueKey":"error.oneOf.0.message","typeLabel":"string"},"node_id":{"oneOf":[{"type":"string","uniqueKey":"error.oneOf.0.node_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.oneOf.0.node_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.oneOf.0.node_id","typeLabel":"string | null"},"class_type":{"oneOf":[{"type":"string","uniqueKey":"error.oneOf.0.class_type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.oneOf.0.class_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.oneOf.0.class_type","typeLabel":"string | null"},"traceback":{"oneOf":[{"type":"string","uniqueKey":"error.oneOf.0.traceback.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.oneOf.0.traceback.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.oneOf.0.traceback","typeLabel":"string | null"},"node_errors":{"type":"object","description":"Every node ComfyUI rejected when it refused the workflow before running any of it (a value outside its allowed range, a model the deployment does not contain, a graph that loops back on itself), keyed by node id, under the names ComfyUI gave them. Absent when the workflow ran and a node raised: `node_id`, `class_type` and `traceback` describe that failure instead.","additionalProperties":{"type":"object","description":"One node that was rejected, and why: by ComfyUI when it refused the workflow after dispatch, or by the gateway when it refused the workflow at submit.","required":["errors"],"properties":{"errors":{"type":"array","items":{"type":"object","description":"One problem found with a node. `type` is the code for it: ComfyUI's (for example `value_not_in_list`, `value_bigger_than_max`, `dependency_cycle`), or one of the gateway's, sent where its submit checks are switched on: `unknown_node_class` (a node class the deployment's build does not contain), `waits_for_browser` (a node the workflow would run whose class waits for a browser tab to answer while the job runs, which a deployment never has), `invalid_node` (the node is not a JSON object), `invalid_inputs` (its `inputs` is present but not an object, refused only where the deployment's ComfyUI would fail such a node anyway, so no workflow that runs today is refused), or `invalid_class_type` (its `class_type` is missing or is not a non-empty string). ComfyUI's `missing_node_type` means the same as `unknown_node_class`, found after dispatch rather than at submit. For either, `message` ends naming the node pack that provides the class where the Comfy node registry knows one. `details` usually starts with the input it is about.","required":["type","message"],"properties":{"type":{"type":"string","example":"value_not_in_list","isRequired":true,"uniqueKey":"error.oneOf.0.node_errors.additionalProperties.errors.items.[INDEX].type","typeLabel":"string"},"message":{"type":"string","example":"Value not in list","isRequired":true,"uniqueKey":"error.oneOf.0.node_errors.additionalProperties.errors.items.[INDEX].message","typeLabel":"string"},"details":{"type":"string","uniqueKey":"error.oneOf.0.node_errors.additionalProperties.errors.items.[INDEX].details","typeLabel":"string"}},"uniqueKey":"error.oneOf.0.node_errors.additionalProperties.errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.oneOf.0.node_errors.additionalProperties.errors","typeLabel":"object[]"},"class_type":{"type":"string","uniqueKey":"error.oneOf.0.node_errors.additionalProperties.class_type","typeLabel":"string"}},"uniqueKey":"error.oneOf.0.node_errors.additionalProperties","typeLabel":"object"},"example":{"22":{"class_type":"LoraLoader","errors":[{"type":"value_not_in_list","message":"Value not in list","details":"lora_name: 'sdxl\\Hyper-SDXL-8steps-lora.safetensors' not in (list of length 40)"}]}},"uniqueKey":"error.oneOf.0.node_errors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"urls":{"type":"object","description":"Embedded follow-up links — follow these, don't build URLs. A link is either an absolute URL or a host-relative reference (leading `/`) that already includes any prefix the serving surface is mounted under (e.g. a serverless gateway's `/deployment/{deployment_id}/api/v2`). Clients MUST resolve a host-relative link against the request origin (scheme + authority), never against a configured base URL — joining it to a base URL that carries the same mount prefix duplicates the prefix.","required":["self","events","cancel"],"properties":{"self":{"type":"string","format":"uri-reference","isRequired":true,"uniqueKey":"urls.self","typeLabel":"string\u003curi-reference>"},"events":{"type":"string","format":"uri-reference","isRequired":true,"uniqueKey":"urls.events","typeLabel":"string\u003curi-reference>"},"cancel":{"type":"string","format":"uri-reference","isRequired":true,"uniqueKey":"urls.cancel","typeLabel":"string\u003curi-reference>"},"logs":{"type":"string","format":"uri-reference","description":"Where to read what this run printed. Present on any surface that captures execution logs, which is why it is the one link here that is optional: absent means this surface captures none, for any job, so a client can stop looking without spending a request on an answer it already has.\nFollow this link rather than building the path from the job id. The two are not interchangeable: a surface may be mounted under a prefix this link already carries and a hand-built path would not, and a surface that does not implement the operation at all answers a routing `404` — indistinguishable, to the client, from the `404` that means the job itself is gone. Present does NOT mean this job has a log, and it is deliberately not a signal about one: a surface that captures logs offers the link on every job, including those it will answer `204` for and those whose log it withholds. Read the log, not the link.","uniqueKey":"urls.logs","typeLabel":"string\u003curi-reference>"}},"isRequired":true,"uniqueKey":"urls","typeLabel":"object"},"metrics":{"type":"object","description":"Values are nullable (a metric not yet available — e.g. `execution_ms` before a job starts running — is `null`, not omitted); the example below is deliberately all-non-null purely to work around a Spectral/nimma lint-tooling crash on a literal `null` inside a schema `example` combined with `additionalProperties.nullable: true` — the schema itself is unchanged and still allows null values at runtime.","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"metrics.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"metrics.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"metrics.additionalProperties","typeLabel":"integer | null"},"example":{"queue_ms":9000,"execution_ms":42000},"uniqueKey":"metrics","typeLabel":"object"},"deployment_id":{"type":"string","description":"The deployment the job was sent to: the id in the address it was posted at, which stays the same when the deployment moves to another release. Absent on a surface that runs jobs on no deployment.","example":"dep-0f19a2b3c4d5","uniqueKey":"deployment_id","typeLabel":"string"},"release_id":{"type":"string","description":"The release of the deployment's build that ran the job, which can differ from the release the deployment runs now. Absent where the serving surface does not report it.","example":"7c1e9a40-3b2d-4f6a-9e81-0c5d2a7b4f13","uniqueKey":"release_id","typeLabel":"string"},"release_version":{"type":"integer","minimum":1,"description":"The version of the release in `release_id`, the number its build cut it as. Absent where the serving surface does not report it or could not look it up at the time of the answer.","example":3,"uniqueKey":"release_version","typeLabel":"integer"},"metadata":{"type":"object","description":"The labels the job was submitted with, exactly as sent. Absent when it was sent with none.","additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"example":{"client":"acme"},"uniqueKey":"metadata","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"7f3d2c1b-9a8e-4d6f-b012-3c4d5e6f7a8b","status":"queued","created_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","expires_at":"2023-11-07T05:31:56Z","queue_position":123,"progress":{"value":0.42,"nodes_done":11,"nodes_total":31,"current_node":"12","current_node_class":"KSampler","step":21,"steps":50,"message":"KSampler 21/50"},"outputs":[{"node_id":"9","name":"ComfyUI_00001_.png","type":"image","content_type":"image/png","size_bytes":1848320,"id":"9f8a1c0d-2b3e-4f56-...","hash":"\u003cstring>","url":"\u003cstring>","url_expires_at":"2023-11-07T05:31:56Z","job_id":"\u003cstring>"}],"error":{"code":"node_execution_error","message":"\u003cstring>","node_id":"\u003cstring>","class_type":"\u003cstring>","traceback":"\u003cstring>","node_errors":{"22":{"class_type":"LoraLoader","errors":[{"type":"value_not_in_list","message":"Value not in list","details":"lora_name: 'sdxl\\Hyper-SDXL-8steps-lora.safetensors' not in (list of length 40)"}]}}},"urls":{"self":"\u003cstring>","events":"\u003cstring>","cancel":"\u003cstring>","logs":"\u003cstring>"},"metrics":{"queue_ms":9000,"execution_ms":42000},"deployment_id":"dep-0f19a2b3c4d5","release_id":"7c1e9a40-3b2d-4f6a-9e81-0c5d2a7b4f13","release_version":3,"metadata":{"client":"acme"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e963cf95-5231-4eec-8893-173ac5b19c5b":{"description":"`invalid_request`: `metadata` is not an object. A body that is not JSON at all, or whose `workflow` or `extra_data` is not an object, is a `400` too, answered by the request decoder before any of these checks, with a bare `message` body rather than this envelope.","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ab4ab979-d60f-4fd8-afe2-eecacbebaaf1":{"description":"`unauthorized`: missing or invalid credentials. A credential that could not be checked answers `auth_unavailable` (503) instead.","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"aa25fc11-3193-44b4-a90b-409e37a381a8":{"description":"`insufficient_credits` (Cloud / serverless only).","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"5f24f60f-47f4-4cad-ad64-2c871aa0eae0":{"description":"`forbidden` — authenticated but not allowed. On a serverless deployment, also `sso_required` — the key is valid, but the account must sign in through its organization's single sign-on, which does not accept this key; it can come back on any operation.","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"30f40b67-0d90-4cae-859d-89ebd304fdf0":{"description":"`not_found`: on a deployment's address, no deployment there that the caller's workspace owns.","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"79c85371-9d21-4eae-9385-9c51a1ddd032":{"description":"`invalid_workflow` (with per-node details), `workflow_format_ui`, `missing_asset`, `idempotency_key_reuse`, `metadata_invalid` (for a bad key or value, the message and `details.key` name the key; for more than 16 pairs, the message gives the count and there are no `details`), or `metadata_not_supported` (a surface that keeps no job labels yet).","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"34dabe40-6a97-4758-bc4c-6de596c9fa7b":{"description":"`queue_full` (bounded queue depth reached) or, on deployment-scoped surfaces, `deployment_not_ready` (deployment still provisioning/starting) or `deployment_unavailable` (the deployment is ready but its GPU provider is not taking work on it yet), or `rate_limited` (the caller is past a request rate limit). Disambiguate by `error.code`; all four mean back off and retry after `Retry-After`.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c3dc6d02-c84c-446f-9b98-bd929be1c6d0":{"description":"`upstream_error` — an unexpected failure reaching or processing the request in this implementation's backing services. The message is always a generic, safe-to-display string; implementation detail (the specific upstream, its error text, transport failures) is never included here — see each implementation's own error-mapping notes. Every operation in this contract can fail this way.","content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"47a47311-79b4-4d58-b33c-5e5695b5e8b6":{"description":"On deployment-scoped surfaces, `deployment_lookup_unavailable`: the deployment this address names could not be looked up just now. The request was refused before it did anything (nothing was created, read, changed or canceled), so the same request can be sent again after `Retry-After`. Every operation at a deployment's address can answer this way. A job submit can also answer this 503 with `database_unavailable`: the job could not be saved just now and nothing was started, so the same request can be sent again after `Retry-After`. No other operation answers `database_unavailable`. On Comfy Cloud an asset upload can also answer this 503 with `upload_busy`: the server is busy with other uploads and nothing was stored, so the same upload can be sent again after `Retry-After`. Any operation can also answer this 503 with `auth_unavailable`: the credential could not be checked just now, so the same request can be sent again after `Retry-After`. A job status read can also answer it with `output_unavailable`: an output of the job could not be prepared just now, and the job is unchanged. A transient storage failure clears on a later read after `Retry-After`; an output whose stored address is broken answers it on every read until the platform repairs the output.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","description":"Shared error envelope with machine-readable codes. Core codes (v1):\n`invalid_workflow` (422), `workflow_format_ui` (422),\n`missing_asset` (422), `hash_mismatch` (409), `blob_not_found`\n(404), `idempotency_key_reuse` (422), `upload_timed_out` (422: an\nasset upload stopped sending or was too slow; retry from a faster\nconnection),\n`queue_full` (429 + Retry-After), `rate_limited` (429 + Retry-After:\nthe caller is past a request rate limit; retry), `insufficient_credits`\n(402), `not_found` (404), `unauthorized` (401), `forbidden` (403).\nDeployment-scoped surfaces add: `deployment_not_ready` (429 +\nRetry-After — the deployment can still reach ready; retry),\n`deployment_unavailable` (429 + Retry-After: the deployment is ready\nbut its GPU provider is not taking work on it yet; retry),\n`deployment_lookup_unavailable` (503 + Retry-After, on any\noperation: the deployment the address names could not be looked up\njust now; nothing was done, so retry), `database_unavailable` (503 +\nRetry-After, only on a job submit: the job could not be saved just\nnow and nothing was started, so retry), `auth_unavailable` (503 +\nRetry-After, on any operation: the credential could not be checked\njust now, which says nothing about the credential, so retry),\n`output_unavailable` (503 + Retry-After, only on a job status read: an\noutput of the job could not be prepared just now; the job is\nunchanged, so retry after `Retry-After`, and report the job if it\nkeeps answering),\n`deployment_stopped` (422 — terminal deployment state; a retry\ncannot succeed without operator action), `invalid_request` (422:\na malformed asset upload or asset-from-hash field, or a jobs-list\n`limit` that is not a positive integer), `validation_error` (422,\nCloud: an asset upload or asset-from-hash field was refused, e.g. a\ntag over the tag limits), `content_blocked` (451:\ncontent moderation flagged the asset's bytes) and `sso_required` (403:\nthe key is valid, but the account must sign in through its\norganization's single sign-on, which does not accept this key).\nComfy Cloud's asset upload adds `invalid_content_type` (422: the\nrequest is not `multipart/form-data` with a boundary),\n`invalid_body` (422: a malformed multipart body or upload field),\n`validation_error` (422: the platform refused the upload, for example\nan image over the size cap or a disallowed tag) and `upload_busy`\n(503 + Retry-After: the server is busy with other uploads and nothing\nwas stored, so retry).\nJob labels add: `metadata_invalid` (422: a submitted `metadata` breaks a\nlimit; `details.key` names the key, except for too many pairs, which\nhas no `details`), `metadata_not_supported` (422:\nthis surface keeps no job labels yet), `invalid_metadata_filter` (400)\nand `invalid_cursor` (400). A surface that does not list jobs yet\nanswers `not_implemented` (501). A 429 is disambiguated\nby `error.code` alone; clients should treat any 429 + Retry-After\nas \"back off and retry\".\n","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_workflow","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Node 12 (KSampler): required input 'model' is not connected","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"organization_id":{"type":"string","description":"On `sso_required`: the organization whose single sign-on governs this key, the one that holds the account, else the one that holds the key's workspace. It is the `organization` query parameter of Comfy Cloud's single sign-on start; treat it as opaque. Absent when the organization is unknown, and on every other code.","example":"org_01HXYZEXAMPLE","uniqueKey":"error.organization_id","typeLabel":"string"},"details":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Machine-readable detail for the code. When it carries `node_errors`, that is keyed by node id and each value is a `JobNodeError`, the same shape as a job's `error.node_errors`, whether the refusal came at submit (for example `unknown_node_class`, a node class the deployment's build does not contain) or from ComfyUI after dispatch. With `unknown_node_class` errors it carries `unknown_node_classes`, the missing classes; with `waits_for_browser` errors, `browser_wait_node_classes`, the classes that wait for a browser. A submit refusal names at most fifty nodes. For `invalid_node`, `invalid_inputs` and `invalid_class_type`, when it found more than fifty, `node_errors_truncated` is true and `malformed_node_count` carries the full count; for `waits_for_browser`, `browser_wait_node_count` does. For `unknown_node_class` it names only nodes whose class is one of the at most ten listed in `unknown_node_classes`; when those nodes number more than fifty, `node_errors_truncated` is true and `unknown_node_count` is how many nodes have a listed class. Nodes whose class is past those ten are neither named nor counted.","example":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]},"uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_workflow","message":"Node 12 (KSampler): required input 'model' is not connected","organization_id":"org_01HXYZEXAMPLE","details":{"node_errors":{"12":{"class_type":"SomeCustomNode","errors":[{"type":"unknown_node_class","message":"this deployment's build does not contain the node class SomeCustomNode."}]}},"unknown_node_classes":["SomeCustomNode"]}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e83e9dfc-ebdf-4caa-994b-25be4bb53550":{"bearerAuth":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer \u003ccredential>`. The credential is one of: an account-scoped API key (`comfyui-…`), accepted on Cloud and serverless; a Comfy Cloud session JWT; or an OAuth access token issued for the Comfy Cloud resource. Which kinds a given deployment accepts is deployment configuration — an API key always works on Cloud and serverless, and a deployment that does not accept JWT bearers answers `401` with a message saying so. Self-hosted accepts unauthenticated requests by default and can be configured with a static bearer token.","scopes":[],"schemeName":"bearerAuth"}},"78687c62-3745-43d4-a655-7ff88a24d9ae":{}},"servers":{"ddabda62-d3c9-40f8-881d-a751e619aff3":{"url":"http://127.0.0.1:8189","description":"Self-hosted (comfy-api-proxy)"},"62680931-7b02-4daf-b27f-819e4c14ed64":{"url":"https://cloud.comfy.org","description":"Comfy Cloud"},"0a142380-c92c-4874-83af-7dc79bfcdc68":{"url":"https://{deployment}.run.comfy.app","description":"Serverless deployment","variables":{"deployment":{"description":"DNS-safe deployment id (subdomain label). Staging uses {deployment}.stg.run.comfy.app.","default":"dep-1234abcd-56ef-7890-abcd-ef1234567890"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer \u003ccredential>`. The credential is one of: an account-scoped API key (`comfyui-…`), accepted on Cloud and serverless; a Comfy Cloud session JWT; or an OAuth access token issued for the Comfy Cloud resource. Which kinds a given deployment accepts is deployment configuration — an API key always works on Cloud and serverless, and a deployment that does not accept JWT bearers answers `401` with a message saying so. Self-hosted accepts unauthenticated requests by default and can be configured with a static bearer token.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"`Authorization: Bearer \u003ccredential>`. The credential is one of: an account-scoped API key (`comfyui-…`), accepted on Cloud and serverless; a Comfy Cloud session JWT; or an OAuth access token issued for the Comfy Cloud resource. Which kinds a given deployment accepts is deployment configuration — an API key always works on Cloud and serverless, and a deployment that does not accept JWT bearers answers `401` with a message saying so. Self-hosted accepts unauthenticated requests by default and can be configured with a static bearer token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi-v2.yaml"},"subdomain":"dripart","siteName":"ComfyUI","title":"Submit a workflow for execution - ComfyUI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/v2/jobs/submit-a-workflow-for-execution","matchLevel":0},"zh":{"href":"/zh/api-reference/v2/jobs/submit-a-workflow-for-execution","matchLevel":1},"ja":{"href":"/ja/api-reference/v2/jobs/submit-a-workflow-for-execution","matchLevel":1},"ko":{"href":"/ko/api-reference/v2/jobs/submit-a-workflow-for-execution","matchLevel":1},"es":{"href":"/es/api-reference/v2/jobs/submit-a-workflow-for-execution","matchLevel":1}}},"lastModified":"2026-11-08T23:54:12.037Z","originalFileLocation":"api-reference/v2/jobs/submit-a-workflow-for-execution.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Accepts the API-format workflow graph verbatim. Validation is synchronous: graph structure, unknown node classes, and asset references (core/ASSET objects — every referenced id must exist and be owned by the caller). A 201 means the job is durably recorded and queued. UI-format workflow JSON (the export with nodes/links) is rejected with workflow_format_ui. Idempotency-Key is single-use (reject-on-duplicate, NOT record-and-replay): the first request to present a given key is processed normally; ANY later request presenting the same key — a retry, a concurrent duplicate, or a same-key request with a different body — is rejected 422 idempotency_key_reuse and is never re-executed. The key is claimed only for a request that actually reaches submission and is released if that submission definitively fails without creating a job (a validation error, or an upstream reject such as out-of-credits or queue-full), so a legitimate retry with the same key can proceed. If a submission\u0026#x27;s outcome is unknown (an upstream timeout or 5xx where the job may or may not have been created), the key stays claimed and the retry is rejected: poll or list your jobs to find the possibly-created job rather than resubmitting. Keys expire after 24h. There is no response replay and no Idempotency-Replayed header. Reserved for post-MVP and rejected if present today: webhook_url, inputs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ComfyUI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Submit a workflow for execution - ComfyUI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Accepts the API-format workflow graph verbatim. Validation is synchronous: graph structure, unknown node classes, and asset references (core/ASSET objects — every referenced id must exist and be owned by the caller). A 201 means the job is durably recorded and queued. UI-format workflow JSON (the export with nodes/links) is rejected with workflow_format_ui. Idempotency-Key is single-use (reject-on-duplicate, NOT record-and-replay): the first request to present a given key is processed normally; ANY later request presenting the same key — a retry, a concurrent duplicate, or a same-key request with a different body — is rejected 422 idempotency_key_reuse and is never re-executed. The key is claimed only for a request that actually reaches submission and is released if that submission definitively fails without creating a job (a validation error, or an upstream reject such as out-of-credits or queue-full), so a legitimate retry with the same key can proceed. If a submission\u0026#x27;s outcome is unknown (an upstream timeout or 5xx where the job may or may not have been created), the key stays claimed and the retry is rejected: poll or list your jobs to find the possibly-created job rather than resubmitting. Keys expire after 24h. There is no response replay and no Idempotency-Replayed header. Reserved for post-MVP and rejected if present today: webhook_url, inputs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ComfyUI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dripart.mintlify.site/_mintlify/api/og/v2?division=jobs\u0026amp;title=Submit+a+workflow+for+execution\u0026amp;description=Accepts+the+API-format+workflow+graph+verbatim.+Validation+is%0Asynchronous%3A+graph+structure%2C+unknown+node+classes%2C+and+asset%0Areferences+%28%60core%2FASSET%60+objects+%E2%80%94+e\u0026amp;theme=a03fed56f9a178c9b893031e\u0026amp;signature=061c8b142c18553040e8c3575d4e3c34644ea30b792489a65a899ea85b8c71b7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Submit a workflow for execution - ComfyUI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Accepts the API-format workflow graph verbatim. Validation is synchronous: graph structure, unknown node classes, and asset references (core/ASSET objects — every referenced id must exist and be owned by the caller). A 201 means the job is durably recorded and queued. UI-format workflow JSON (the export with nodes/links) is rejected with workflow_format_ui. Idempotency-Key is single-use (reject-on-duplicate, NOT record-and-replay): the first request to present a given key is processed normally; ANY later request presenting the same key — a retry, a concurrent duplicate, or a same-key request with a different body — is rejected 422 idempotency_key_reuse and is never re-executed. The key is claimed only for a request that actually reaches submission and is released if that submission definitively fails without creating a job (a validation error, or an upstream reject such as out-of-credits or queue-full), so a legitimate retry with the same key can proceed. If a submission\u0026#x27;s outcome is unknown (an upstream timeout or 5xx where the job may or may not have been created), the key stays claimed and the retry is rejected: poll or list your jobs to find the possibly-created job rather than resubmitting. Keys expire after 24h. There is no response replay and no Idempotency-Replayed header. Reserved for post-MVP and rejected if present today: webhook_url, inputs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dripart.mintlify.site/_mintlify/api/og/v2?division=jobs\u0026amp;title=Submit+a+workflow+for+execution\u0026amp;description=Accepts+the+API-format+workflow+graph+verbatim.+Validation+is%0Asynchronous%3A+graph+structure%2C+unknown+node+classes%2C+and+asset%0Areferences+%28%60core%2FASSET%60+objects+%E2%80%94+e\u0026amp;theme=a03fed56f9a178c9b893031e\u0026amp;signature=061c8b142c18553040e8c3575d4e3c34644ea30b792489a65a899ea85b8c71b7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ComfyUI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#49378B\">\u003cmeta data-mint-head name=\"googlebot\" content=\"max-video-preview:0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v2/jobs/submit-a-workflow-for-execution.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.comfy.org/zh/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.comfy.org/ja/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.comfy.org/ko/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.comfy.org/es/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.comfy.org/#organization\",\"name\":\"ComfyUI\",\"url\":\"https://docs.comfy.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dripart/WCFdTagRdhtvk9-o/logo/light.svg?fit=max\u0026auto=format\u0026n=WCFdTagRdhtvk9-o\u0026q=85\u0026s=ec112de87239058f5a931a7e4b594965\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.comfy.org#website\",\"name\":\"ComfyUI\",\"url\":\"https://docs.comfy.org\",\"publisher\":{\"@id\":\"https://docs.comfy.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution#webpage\",\"url\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\",\"name\":\"Submit a workflow for execution\",\"description\":\"Accepts the API-format workflow graph verbatim. Validation is synchronous: graph structure, unknown node classes, and asset references (core/ASSET objects — every referenced id must exist and be owned by the caller). A 201 means the job is durably recorded and queued. UI-format workflow JSON (the export with nodes/links) is rejected with workflow_format_ui. Idempotency-Key is single-use (reject-on-duplicate, NOT record-and-replay): the first request to present a given key is processed normally; ANY later request presenting the same key — a retry, a concurrent duplicate, or a same-key request with a different body — is rejected 422 idempotency_key_reuse and is never re-executed. The key is claimed only for a request that actually reaches submission and is released if that submission definitively fails without creating a job (a validation error, or an upstream reject such as out-of-credits or queue-full), so a legitimate retry with the same key can proceed. If a submission's outcome is unknown (an upstream timeout or 5xx where the job may or may not have been created), the key stays claimed and the retry is rejected: poll or list your jobs to find the possibly-created job rather than resubmitting. Keys expire after 24h. There is no response replay and no Idempotency-Replayed header. Reserved for post-MVP and rejected if present today: webhook_url, inputs.\",\"dateModified\":\"2026-11-08T23:54:12.037Z\",\"isPartOf\":{\"@id\":\"https://docs.comfy.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy ComfyUI\",\"item\":\"https://docs.comfy.org/development/deploy/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run Workflows\",\"item\":\"https://docs.comfy.org/development/run-workflows/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comfy API Reference\",\"item\":\"https://docs.comfy.org/development/comfy-api/overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"v2\",\"item\":\"https://docs.comfy.org/api-reference/v2/overview\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"API Reference\",\"item\":\"https://docs.comfy.org/api-reference/v2/assets/upload-an-asset-single-call-multipart\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"jobs\",\"item\":\"https://docs.comfy.org/api-reference/v2/jobs/list-jobs-newest-first\"},{\"@type\":\"ListItem\",\"position\":7,\"name\":\"Submit a workflow for execution\",\"item\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution#apireference\",\"headline\":\"Submit a workflow for execution\",\"name\":\"Submit a workflow for execution\",\"description\":\"Accepts the API-format workflow graph verbatim. Validation is synchronous: graph structure, unknown node classes, and asset references (core/ASSET objects — every referenced id must exist and be owned by the caller). A 201 means the job is durably recorded and queued. UI-format workflow JSON (the export with nodes/links) is rejected with workflow_format_ui. Idempotency-Key is single-use (reject-on-duplicate, NOT record-and-replay): the first request to present a given key is processed normally; ANY later request presenting the same key — a retry, a concurrent duplicate, or a same-key request with a different body — is rejected 422 idempotency_key_reuse and is never re-executed. The key is claimed only for a request that actually reaches submission and is released if that submission definitively fails without creating a job (a validation error, or an upstream reject such as out-of-credits or queue-full), so a legitimate retry with the same key can proceed. If a submission's outcome is unknown (an upstream timeout or 5xx where the job may or may not have been created), the key stays claimed and the retry is rejected: poll or list your jobs to find the possibly-created job rather than resubmitting. Keys expire after 24h. There is no response replay and no Idempotency-Replayed header. Reserved for post-MVP and rejected if present today: webhook_url, inputs.\",\"url\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution\",\"mainEntityOfPage\":{\"@id\":\"https://docs.comfy.org/api-reference/v2/jobs/submit-a-workflow-for-execution#webpage\"},\"dateModified\":\"2026-11-08T23:54:12.037Z\",\"publisher\":{\"@id\":\"https://docs.comfy.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.comfy.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ComfyUI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ComfyUI","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Getting started","pages":[{"title":"Getting started","href":""}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/basic-concepts/workflow"}]},{"tab":"Comfy Router","pages":[{"title":"Comfy Router","href":"/development/comfy-router/quickstart"}]},{"tab":"Agent tools","pages":[{"title":"Agent tools","href":"/agent-tools"}]},{"tab":"Built-in Nodes","pages":[{"title":"Built-in Nodes","href":"/built-in-nodes/overview"}]},{"tab":"Developer","pages":[{"group":"Develop with Comfy","pages":[{"title":"ComfyUI for Developers: SDKs, Server API, and Cloud","sidebarTitle":"Developer overview","href":"/development/overview"},{"title":"Getting an API Key","sidebarTitle":"API keys","icon":"key","href":"/development/api-development/getting-an-api-key"},{"title":"Comfy API and Router examples","sidebarTitle":"Examples","icon":"code","mode":"wide","href":"/development/examples"}]},{"group":"Deploy ComfyUI","pages":[{"title":"Deploying ComfyUI","sidebarTitle":"Overview","icon":"map","href":"/development/deploy/overview"},{"group":"Comfy API","pages":[{"title":"Comfy API Quickstart","sidebarTitle":"Quickstart","icon":"cloud-arrow-up","href":"/development/serverless/quickstart"},{"title":"Other Ways to Create a Comfy API Build","sidebarTitle":"Build Sources","icon":"layer-group","href":"/development/serverless/build-sources"},{"title":"Comfy API Deployment: Builds, Releases, and Endpoints","sidebarTitle":"Deployment Guide","icon":"cloud-arrow-up","href":"/development/serverless/overview"}]},{"group":"Comfy Cloud","pages":[{"title":"Comfy Cloud Quickstart","sidebarTitle":"Quickstart","icon":"cloud","href":"/development/deploy/cloud"},{"title":"Usage and Limits","sidebarTitle":"Usage and Limits","icon":"gauge","href":"/development/deploy/cloud-usage"}]},{"group":"Self-Hosting Options","pages":[{"title":"Self-Hosting Options","sidebarTitle":"Hosting options","icon":"server","href":"/development/deploy/self-hosting"},{"group":"Self-Hosted Server API","pages":[{"title":"Server Overview","sidebarTitle":"Server overview","href":"/development/comfyui-server/comms_overview"},{"title":"ComfyUI Server API Examples: HTTP, WebSocket, History","sidebarTitle":"API examples","href":"/development/comfyui-server/api-examples"},{"title":"ComfyUI Server Routes (HTTP and WebSocket API)","sidebarTitle":"HTTP \u0026 WebSocket routes","icon":"route","href":"/development/comfyui-server/comms_routes"},{"title":"ComfyUI Server Messages (WebSocket API)","sidebarTitle":"WebSocket messages","icon":"comment","href":"/development/comfyui-server/comms_messages"},{"title":"ComfyUI Startup Flags: Command-Line Reference","sidebarTitle":"Startup Flags","icon":"terminal","href":"/development/comfyui-server/startup-flags"},{"title":"ComfyUI Account API Key Integration","sidebarTitle":"API Key Integration","icon":"puzzle-piece","href":"/development/comfyui-server/api-key-integration"}]}]},{"group":"Run Workflows","pages":[{"title":"Running Workflows","sidebarTitle":"Overview","icon":"play","href":"/development/run-workflows/overview"},{"title":"Run your first workflow","sidebarTitle":"First workflow","href":"/development/api-development/quickstart"},{"title":"Comfy SDKs: Python and TypeScript Clients for ComfyUI","sidebarTitle":"SDKs","icon":"code","href":"/development/api-development/sdks"},{"title":"API Proxy for Self-Hosted ComfyUI","sidebarTitle":"API Proxy","icon":"plug","href":"/development/comfyui-server/api-proxy"},{"title":"Workflow API Format","icon":"file-code","href":"/development/api-development/workflow-api-format"},{"title":"ComfyUI Workflow Metadata in Output Files","sidebarTitle":"Workflow Metadata","icon":"file-code","href":"/development/api-development/workflow-metadata"},{"group":"Comfy API Reference","boost":10,"pages":[{"title":"Comfy API Versions: v2 and the Deprecated v1 Cloud API","sidebarTitle":"Overview","href":"/development/comfy-api/overview"},{"group":"v2","pages":[{"title":"Comfy API v2 Overview","sidebarTitle":"Overview","href":"/api-reference/v2/overview"},{"title":"Design Notes","sidebarTitle":"Design Notes","icon":"compass","href":"/development/api-development/sdks-design"},{"group":"API Reference","pages":[{"group":"assets","pages":[{"title":"Upload an asset (single-call multipart)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/assets","href":"/api-reference/v2/assets/upload-an-asset-single-call-multipart"},{"title":"Create or reuse an asset over existing bytes","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/assets/from-hash","href":"/api-reference/v2/assets/create-or-reuse-an-asset-over-existing-bytes"},{"title":"Existence check for a blob by blake3 hash","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml head /api/v2/assets/by-hash/{hash}","href":"/api-reference/v2/assets/existence-check-for-a-blob-by-blake3-hash"},{"title":"Asset metadata","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/assets/{id}","href":"/api-reference/v2/assets/asset-metadata"},{"title":"Delete an asset record","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml delete /api/v2/assets/{id}","href":"/api-reference/v2/assets/delete-an-asset-record"},{"title":"Asset bytes","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/assets/{id}/content","href":"/api-reference/v2/assets/asset-bytes"}]},{"group":"jobs","pages":[{"title":"List jobs, newest first","description":"Lists jobs newest first. At a deployment's address, the jobs sent to\nthat deployment; at the workspace address, every job in the\ncaller's workspace. A caller never sees another workspace's jobs.\n\nFilter by your own labels with `metadata[\u003ckey>]=\u003cvalue>`, up to 3\ntimes; a job is listed only when every pair matches exactly. A 4th\nfilter, a repeated key, a key outside the key rule, or a value with a\ncharacter no label may hold (a control character or a bidirectional\nembedding, override or isolate, as on submit) is refused `400`\n`invalid_metadata_filter`. A filter value must be URL-encoded; a raw\n`;` or a bad `%` escape answers `400` `invalid_metadata_filter`.\n\nPages: pass the response's `next_cursor` back as `cursor`, with the\nsame filters, to read the next page. `next_cursor` is absent on the\nlast page. Each job appears once across the pages.\n\nList items are a job's stored record, not the `Job` object: they\ncarry no `outputs` and no `urls`. Read a job with\n`GET /api/v2/jobs/{id}` for its outputs.\n\nOnly the serverless platform lists jobs today. Comfy Cloud answers\n`501` `not_implemented`.\n","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs","href":"/api-reference/v2/jobs/list-jobs-newest-first"},{"title":"Submit a workflow for execution","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs","href":"/api-reference/v2/jobs/submit-a-workflow-for-execution"},{"title":"Job status (the polling workhorse)","description":"Returns the full job object: current status, the latest progress\nsnapshot, and every output committed so far (`outputs` populates\nincrementally while the job runs). This is the authoritative,\nresumable view of a job; everything on the SSE stream is derived\nfrom it.\n","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}","href":"/api-reference/v2/jobs/job-status-the-polling-workhorse"},{"title":"The workflow behind a job — authoring version if pinned, executed graph otherwise","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/workflow","href":"/api-reference/v2/jobs/the-workflow-behind-a-job-—-authoring-version-if-pinned-executed-graph-otherwise"},{"title":"What the run printed","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/logs","href":"/api-reference/v2/jobs/what-the-run-printed"},{"title":"Live event stream (SSE)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/events","href":"/api-reference/v2/jobs/live-event-stream-sse"},{"title":"Request cancellation","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs/{id}/cancel","href":"/api-reference/v2/jobs/request-cancellation"}]}]}]},{"group":"v1 Cloud API (deprecated)","pages":[{"title":"v1 Cloud API Overview","sidebarTitle":"Overview","href":"/development/cloud/overview"},{"title":"Cloud API Reference","sidebarTitle":"Code Examples","icon":"book-open","href":"/development/cloud/api-reference"},{"title":"OpenAPI Specification","icon":"file-lines","openapi":"/openapi-cloud.yaml","href":"/development/cloud/openapi"},{"group":"Cloud API Reference","pages":[{"group":"workflow","pages":[{"title":"Get information about current prompt executions","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/prompt","href":"/api-reference/cloud/workflow/get-information-about-current-prompt-executions"},{"title":"Submit a workflow for execution","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/prompt","href":"/api-reference/cloud/workflow/submit-a-workflow-for-execution"},{"title":"Get available workflow templates","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/workflow_templates","href":"/api-reference/cloud/workflow/get-available-workflow-templates"},{"title":"Get available subgraph blueprints","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/global_subgraphs","href":"/api-reference/cloud/workflow/get-available-subgraph-blueprints"},{"title":"Get a specific subgraph blueprint","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/global_subgraphs/{id}","href":"/api-reference/cloud/workflow/get-a-specific-subgraph-blueprint"}]},{"group":"node","pages":[{"title":"Get all node information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/object_info","href":"/api-reference/cloud/node/get-all-node-information"},{"title":"Get server feature flags","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/features","href":"/api-reference/cloud/node/get-server-feature-flags"}]},{"group":"model","pages":[{"title":"Get available model folders","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models","href":"/api-reference/cloud/model/get-available-model-folders"},{"title":"Get models in a specific folder","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models/{folder}","href":"/api-reference/cloud/model/get-models-in-a-specific-folder"},{"title":"Get model preview image","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models/preview/{folder}/{path_index}/{filename}","href":"/api-reference/cloud/model/get-model-preview-image"}]},{"group":"job","pages":[{"title":"Manage execution history","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/history","href":"/api-reference/cloud/job/manage-execution-history"},{"title":"Get execution history (v2)","deprecated":true,"version":null,"openapi":"/openapi-cloud.yaml get /api/history_v2","href":"/api-reference/cloud/job/get-execution-history-v2"},{"title":"Get history for specific prompt","deprecated":true,"version":null,"openapi":"/openapi-cloud.yaml get /api/history_v2/{prompt_id}","href":"/api-reference/cloud/job/get-history-for-specific-prompt"},{"title":"List jobs with pagination and filtering","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/jobs","href":"/api-reference/cloud/job/list-jobs-with-pagination-and-filtering"},{"title":"Get full job details","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/jobs/{job_id}","href":"/api-reference/cloud/job/get-full-job-details"},{"title":"Get queue information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/queue","href":"/api-reference/cloud/job/get-queue-information"},{"title":"Manage queue operations","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/queue","href":"/api-reference/cloud/job/manage-queue-operations"},{"title":"Interrupt currently running jobs","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/interrupt","href":"/api-reference/cloud/job/interrupt-currently-running-jobs"},{"title":"Get job status","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/job/{job_id}/status","href":"/api-reference/cloud/job/get-job-status"}]},{"group":"file","pages":[{"title":"View a file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/view","href":"/api-reference/cloud/file/view-a-file"},{"title":"Get related mask layer files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/files/mask-layers","href":"/api-reference/cloud/file/get-related-mask-layer-files"},{"title":"Upload an image file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/upload/image","href":"/api-reference/cloud/file/upload-an-image-file"},{"title":"Upload a mask image","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/upload/mask","href":"/api-reference/cloud/file/upload-a-mask-image"}]},{"group":"asset","pages":[{"title":"List user assets","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets","href":"/api-reference/cloud/asset/list-user-assets"},{"title":"Upload a new asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets","href":"/api-reference/cloud/asset/upload-a-new-asset"},{"title":"Create asset reference from existing hash","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/from-hash","href":"/api-reference/cloud/asset/create-asset-reference-from-existing-hash"},{"title":"Get asset metadata from remote URL","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/remote-metadata","href":"/api-reference/cloud/asset/get-asset-metadata-from-remote-url"},{"title":"Initiate background download for large files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/download","href":"/api-reference/cloud/asset/initiate-background-download-for-large-files"},{"title":"Get asset details","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/{id}","href":"/api-reference/cloud/asset/get-asset-details"},{"title":"Update asset metadata","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml put /api/assets/{id}","href":"/api-reference/cloud/asset/update-asset-metadata"},{"title":"Delete asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/assets/{id}","href":"/api-reference/cloud/asset/delete-asset"},{"title":"Add tags to asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/{id}/tags","href":"/api-reference/cloud/asset/add-tags-to-asset"},{"title":"Remove tags from asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/assets/{id}/tags","href":"/api-reference/cloud/asset/remove-tags-from-asset"},{"title":"List all tags","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/tags","href":"/api-reference/cloud/asset/list-all-tags"},{"title":"Get tag histogram for filtered assets","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/tags/refine","href":"/api-reference/cloud/asset/get-tag-histogram-for-filtered-assets"},{"title":"Check if asset exists by hash","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml head /api/assets/hash/{hash}","href":"/api-reference/cloud/asset/check-if-asset-exists-by-hash"}]},{"group":"user","pages":[{"title":"List user data files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/userdata","href":"/api-reference/cloud/user/list-user-data-files"},{"title":"Get user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/userdata/{file}","href":"/api-reference/cloud/user/get-user-data-file"},{"title":"Upload or update a user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/userdata/{file}","href":"/api-reference/cloud/user/upload-or-update-a-user-data-file"},{"title":"Delete a user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/userdata/{file}","href":"/api-reference/cloud/user/delete-a-user-data-file"},{"title":"Get current user information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/user","href":"/api-reference/cloud/user/get-current-user-information"}]},{"group":"system","pages":[{"title":"Get system statistics","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/system_stats","href":"/api-reference/cloud/system/get-system-statistics"}]},{"group":"billing","pages":[{"title":"Get workspace usage over time","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/billing/usage/timeseries","href":"/api-reference/cloud/billing/get-workspace-usage-over-time"}]}]}]}]}]}]},{"group":"Comfy CLI","pages":[{"title":"Get Started with Comfy CLI","sidebarTitle":"Get started","href":"/comfy-cli/getting-started"},{"title":"Comfy CLI Command Reference","sidebarTitle":"Command reference","href":"/comfy-cli/reference"},{"title":"Comfy CLI Troubleshooting: Setup and Install Fixes","sidebarTitle":"Troubleshooting","href":"/comfy-cli/troubleshooting"}]},{"group":"Specifications","pages":[{"group":"Workflow JSON","pages":[{"title":"Workflow JSON","href":"/specs/workflow_json"},{"title":"Workflow JSON 0.4","href":"/specs/workflow_json_0.4"}]},{"group":"Node Definitions","pages":[{"title":"Node Definition JSON","href":"/specs/nodedef_json"},{"title":"Node Definition JSON 1.0","href":"/specs/nodedef_json_1_0"}]}]},{"group":"Custom Nodes","pages":[{"title":"Custom Nodes","sidebarTitle":"Overview","href":"/custom-nodes/intro"},{"group":"Build Custom Nodes","pages":[{"title":"ComfyUI Custom Node Types and Architecture","sidebarTitle":"Node types","href":"/custom-nodes/overview"},{"title":"Creating Custom Nodes in ComfyUI","sidebarTitle":"Create your first node","href":"/custom-nodes/walkthrough"},{"group":"Python (Backend)","pages":[{"title":"Custom Node Properties","sidebarTitle":"Node properties","href":"/custom-nodes/backend/server_overview"},{"title":"ComfyUI Custom Node Lifecycle","sidebarTitle":"Node lifecycle","href":"/custom-nodes/backend/lifecycle"},{"title":"ComfyUI Custom Node Datatypes","sidebarTitle":"Data types","href":"/custom-nodes/backend/datatypes"},{"title":"Images, Latents, and Masks","sidebarTitle":"Images, latents, masks","href":"/custom-nodes/backend/images_and_masks"},{"title":"Hidden and Flexible inputs","sidebarTitle":"Hidden \u0026 flexible inputs","href":"/custom-nodes/backend/more_on_inputs"},{"title":"ComfyUI Lazy Evaluation for Custom Nodes","sidebarTitle":"Lazy Evaluation","href":"/custom-nodes/backend/lazy_evaluation"},{"title":"Node Expansion","href":"/custom-nodes/backend/expansion"},{"title":"ComfyUI Data Lists and List Processing","sidebarTitle":"Lists \u0026 list processing","href":"/custom-nodes/backend/lists"},{"title":"Working with torch.Tensor","sidebarTitle":"Tensors","href":"/custom-nodes/backend/tensors"},{"title":"ComfyUI Custom Node Python Snippets","sidebarTitle":"Python snippets","href":"/custom-nodes/backend/snippets"},{"title":"Execution Model Inversion Guide","sidebarTitle":"Execution model","icon":"code-branch","href":"/development/comfyui-server/execution_model_inversion_guide"}]},{"group":"JavaScript (UI)","pages":[{"title":"Javascript Extensions","sidebarTitle":"JavaScript extensions","href":"/custom-nodes/js/javascript_overview"},{"title":"ComfyUI JavaScript Hooks","sidebarTitle":"Hooks","href":"/custom-nodes/js/javascript_hooks"},{"title":"Comfy Objects","href":"/custom-nodes/js/javascript_objects_and_hijacking"},{"title":"Settings API","href":"/custom-nodes/js/javascript_settings"},{"title":"ComfyUI Dialog API","sidebarTitle":"Dialog API","href":"/custom-nodes/js/javascript_dialog"},{"title":"ComfyUI Toast API","sidebarTitle":"Toast API","href":"/custom-nodes/js/javascript_toast"},{"title":"About Panel Badges","href":"/custom-nodes/js/javascript_about_panel_badges"},{"title":"Bottom Panel Tabs","href":"/custom-nodes/js/javascript_bottom_panel_tabs"},{"title":"Sidebar Tabs","href":"/custom-nodes/js/javascript_sidebar_tabs"},{"title":"Selection Toolbox","href":"/custom-nodes/js/javascript_selection_toolbox"},{"title":"Commands and Keybindings","href":"/custom-nodes/js/javascript_commands_keybindings"},{"title":"ComfyUI Topbar Menu API","sidebarTitle":"Topbar menu API","href":"/custom-nodes/js/javascript_topbar_menu"},{"title":"ComfyUI Subgraphs","sidebarTitle":"Subgraphs","href":"/custom-nodes/js/subgraphs"},{"title":"Canvas Pointer API for Widgets and Cursors","sidebarTitle":"Canvas pointer API","href":"/custom-nodes/js/canvas-pointer-api"},{"title":"ComfyUI JavaScript Extension Examples","sidebarTitle":"JavaScript examples","href":"/custom-nodes/js/javascript_examples"}]},{"title":"ComfyUI Custom Nodes i18n Support","sidebarTitle":"i18n Support","href":"/custom-nodes/i18n"},{"group":"Migration Guides","pages":[{"title":"V3 Migration","href":"/custom-nodes/v3_migration"},{"title":"ComfyUI Context Menu API Migration: Canvas and Node Menus","sidebarTitle":"Context menu migration","href":"/custom-nodes/js/context-menu-migration"},{"title":"Node ID Migration for Frontend Extensions","sidebarTitle":"Node ID migration","href":"/custom-nodes/js/node-id-migration"},{"title":"Link Registration Migration for Frontend Extensions","sidebarTitle":"Link registration","href":"/custom-nodes/js/link-registration-migration"},{"title":"Widget System Migration for Frontend Extensions","sidebarTitle":"Widget system migration","href":"/custom-nodes/js/widgets-migration"},{"title":"Connection Callback Migration for Frontend Extensions","sidebarTitle":"Connection callbacks","href":"/custom-nodes/js/connection-callbacks-migration"},{"title":"Serialization Callback Migration for Frontend Extensions","sidebarTitle":"Serialization callbacks","href":"/custom-nodes/js/serialization-callbacks-migration"},{"title":"Node Geometry Migration for Frontend Extensions","sidebarTitle":"Node geometry migration","href":"/custom-nodes/js/node-geometry-migration"},{"title":"PrimeVue Removal Migration for Frontend Extensions","sidebarTitle":"PrimeVue removal","href":"/custom-nodes/js/primevue-removal-migration"},{"title":"Node replacement","href":"/custom-nodes/backend/node-replacement"}]}]},{"group":"Package \u0026 Publish","pages":[{"title":"Add node docs for your ComfyUI custom node","sidebarTitle":"Node docs","href":"/custom-nodes/help_page"},{"title":"Workflow templates","href":"/custom-nodes/workflow_templates"},{"title":"Subgraph blueprints","href":"/custom-nodes/subgraph_blueprints"},{"title":"Comfy Registry: publish and version custom nodes","sidebarTitle":"Registry Overview","href":"/registry/overview"},{"title":"Publish Custom Nodes to the Comfy Registry","sidebarTitle":"Publishing nodes","href":"/registry/publishing"},{"title":"Claim a Custom Node on the Comfy Registry","sidebarTitle":"Claim a Node","href":"/registry/claim-my-node"},{"title":"Comfy Registry Node Quality and Security Standards","sidebarTitle":"Quality \u0026 security","href":"/registry/standards"},{"title":"Custom Node CI/CD","sidebarTitle":"CI/CD","href":"/registry/cicd"},{"title":"pyproject.toml","href":"/registry/specifications"},{"title":"API Overview","href":"/registry/api-reference/overview"},{"group":"Registry API Reference","pages":[{"title":"Get information about the calling user.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /users","href":"/registry/api-reference/registry/get-information-about-the-calling-user"},{"title":"Retrieve all publishers for a given user","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /users/publishers/","href":"/registry/api-reference/registry/retrieve-all-publishers-for-a-given-user"},{"title":"Validate if a publisher username is available","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/validate","href":"/registry/api-reference/registry/validate-if-a-publisher-username-is-available"},{"title":"Create a new publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers","href":"/registry/api-reference/registry/create-a-new-publisher"},{"title":"Retrieve all publishers","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers","href":"/registry/api-reference/registry/retrieve-all-publishers"},{"title":"Retrieve a publisher by ID","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}","href":"/registry/api-reference/registry/retrieve-a-publisher-by-id"},{"title":"Update a publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}","href":"/registry/api-reference/registry/update-a-publisher"},{"title":"Delete a publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}","href":"/registry/api-reference/registry/delete-a-publisher"},{"title":"Retrieve permissions the user has for a given publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/{nodeId}/permissions","href":"/registry/api-reference/registry/retrieve-permissions-the-user-has-for-a-given-publisher"},{"title":"Create a new personal access token","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/tokens","href":"/registry/api-reference/registry/create-a-new-personal-access-token"},{"title":"Delete a specific personal access token","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/tokens/{tokenId}","href":"/registry/api-reference/registry/delete-a-specific-personal-access-token"},{"title":"Retrieve all nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/v2","href":"/registry/api-reference/registry/retrieve-all-nodes"},{"title":"Retrieve all nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/v2","href":"/registry/api-reference/registry/retrieve-all-nodes"},{"title":"Create a new custom node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes","href":"/registry/api-reference/registry/create-a-new-custom-node"},{"title":"Update a specific node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}/nodes/{nodeId}","href":"/registry/api-reference/registry/update-a-specific-node"},{"title":"Delete a specific node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/nodes/{nodeId}","href":"/registry/api-reference/registry/delete-a-specific-node"},{"title":"Retrieve permissions the user has for a given publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/{nodeId}/permissions","href":"/registry/api-reference/registry/retrieve-permissions-the-user-has-for-a-given-publisher"},{"title":"Claim nodeId into publisherId for the authenticated publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes/{nodeId}/claim-my-node","href":"/registry/api-reference/registry/claim-nodeid-into-publisherid-for-the-authenticated-publisher"},{"title":"Publish a new version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes/{nodeId}/versions","href":"/registry/api-reference/registry/publish-a-new-version-of-a-node"},{"title":"Update changelog and deprecation status of a node version","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/update-changelog-and-deprecation-status-of-a-node-version"},{"title":"Unpublish (delete) a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/unpublish-delete-a-specific-version-of-a-node"},{"title":"Retrieves a list of nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/search","href":"/registry/api-reference/registry/retrieves-a-list-of-nodes"},{"title":"Retrieves a list of nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/search","href":"/registry/api-reference/registry/retrieves-a-list-of-nodes"},{"title":"Retrieve a specific node by ID","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}","href":"/registry/api-reference/registry/retrieve-a-specific-node-by-id"},{"title":"Returns a node version to be installed.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/install","href":"/registry/api-reference/registry/returns-a-node-version-to-be-installed"},{"title":"Add review to a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/reviews","href":"/registry/api-reference/registry/add-review-to-a-specific-version-of-a-node"},{"title":"Create Node Translations","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/translations","href":"/registry/api-reference/registry/create-node-translations"},{"title":"List all versions of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions","href":"/registry/api-reference/registry/list-all-versions-of-a-node"},{"title":"Retrieve a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/retrieve-a-specific-version-of-a-node"},{"title":"Retrieve multiple node versions in a single request","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /bulk/nodes/versions","href":"/registry/api-reference/registry/retrieve-multiple-node-versions-in-a-single-request"},{"title":"List all node versions given some filters.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /versions","href":"/registry/api-reference/registry/list-all-node-versions-given-some-filters"},{"title":"list all comfy-nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /comfy-nodes","href":"/registry/api-reference/registry/list-all-comfy-nodes"},{"title":"Retrieve a node by ComfyUI node name","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /comfy-nodes/{comfyNodeName}/node","href":"/registry/api-reference/registry/retrieve-a-node-by-comfyui-node-name"},{"title":"create comfy-nodes for certain node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/versions/{version}/comfy-nodes","href":"/registry/api-reference/registry/create-comfy-nodes-for-certain-node"},{"title":"list comfy-nodes for node version","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{version}/comfy-nodes","href":"/registry/api-reference/registry/list-comfy-nodes-for-node-version"},{"title":"get specify comfy-node based on its id","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}","href":"/registry/api-reference/registry/get-specify-comfy-node-based-on-its-id"},{"title":"Update a specific comfy-node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}","href":"/registry/api-reference/registry/update-a-specific-comfy-node"},{"title":"Get server feature flags","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /features","href":"/registry/api-reference/registry/get-server-feature-flags"},{"title":"Get release notes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /releases","href":"/registry/api-reference/releases/get-release-notes"}]}]}]}]},{"tab":"Support","pages":[{"title":"Support","href":"/support/contact-support"}]}]},{"language":"zh","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"资源","items":[{"label":"安装","href":"/zh/installation/system_requirements"},{"label":"教程","href":"/zh/tutorials/basic/text-to-image"},{"label":"开发","href":"/zh/development/overview"}]},{"header":"产品","items":[{"label":"功能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"画廊","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"下载","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"公司","items":[{"label":"关于","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"招聘","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"服务条款","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"隐私政策","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"pages":[{"title":"zh","href":"/zh/api-reference/v2/jobs/submit-a-workflow-for-execution"}]},{"language":"ja","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"リソース","items":[{"label":"インストール","href":"/ja/installation/system_requirements"},{"label":"チュートリアル","href":"/ja/tutorials/basic/text-to-image"},{"label":"開発","href":"/ja/development/overview"}]},{"header":"プロダクト","items":[{"label":"機能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"ギャラリー","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"ダウンロード","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"会社情報","items":[{"label":"概要","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"採用情報","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"利用規約","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"プライバシーポリシー","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ja/tutorials/partner-nodes/pricing","label":"料金"},{"href":"https://comfy.org/download?utm_source=docs","label":"ダウンロード"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"pages":[{"title":"ja","href":"/ja/api-reference/v2/jobs/submit-a-workflow-for-execution"}]},{"language":"ko","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"리소스","items":[{"label":"설치","href":"/ko/installation/system_requirements"},{"label":"튜토리얼","href":"/ko/tutorials/basic/text-to-image"},{"label":"개발","href":"/ko/development/overview"}]},{"header":"제품","items":[{"label":"기능","href":"https://www.comfy.org/?utm_source=docs"},{"label":"갤러리","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"다운로드","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"회사 정보","items":[{"label":"소개","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"채용","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"이용약관","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"개인정보 처리방침","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ko/tutorials/partner-nodes/pricing","label":"가격 정책"},{"href":"https://comfy.org/download?utm_source=docs","label":"다운로드"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"pages":[{"title":"ko","href":"/ko/api-reference/v2/jobs/submit-a-workflow-for-execution"}]},{"language":"es","pages":[{"title":"es","href":"/es/api-reference/v2/jobs/submit-a-workflow-for-execution"}]}]},"basePath":"","title":"Submit a workflow for execution - ComfyUI","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}