{"openapi":"3.1.0","info":{"title":"Halloween Buddies","version":"2","description":"Run the \"Halloween Buddies\" style (video) on the Wandura API. Priority finishes within 840 s or the run is free; Relax waits in line with no deadline and is never priced above Priority. Failed and blocked runs are free."},"servers":[{"url":"https://api.wandura.ai"}],"security":[{"bearer":[]}],"x-wandura":{"style":"sty_G6vyNtJokcyT","output":"video","priority_promise_s":840,"lanes":{"priority":{"credits":225,"usd":2.25},"relax":{"credits":225,"usd":2.25}},"resolutions":{"default":"480p","options":["480p","720p","1080p"],"prices":{"480p":{"priority":{"credits":225,"usd":2.25},"relax":{"credits":225,"usd":2.25}},"720p":{"priority":{"credits":425,"usd":4.25},"relax":{"credits":425,"usd":4.25}},"1080p":{"priority":{"credits":825,"usd":8.25},"relax":{"credits":825,"usd":8.25}}}},"jobs":{"model":"wandura-video-v1"}},"paths":{"/v2/jobs":{"post":{"operationId":"createJob","summary":"Run Halloween Buddies as a job (recommended)","description":"Validated at once (422 INVALID_INPUT with details). The job runs in the background; the answer comes in well under 3 s.","parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Same key + same body = the same job (200, Idempotent-Replayed: true); same key + other body = 409. Without it, Wandura derives one from your key and the body: the same body within 10 minutes is the same job."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","style","image_urls"],"additionalProperties":false,"properties":{"model":{"const":"wandura-video-v1"},"style":{"type":"string","enum":["sty_G6vyNtJokcyT","halloween-buddies"]},"image_urls":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","format":"uri","pattern":"^https://","maxLength":8192},"description":"Several input images, in order. Only for styles that list it."},"resolution":{"type":"string","pattern":"^[0-9]{3,4}p$","description":"Output resolution, for example \"720p\". Only for styles that list it (see x-wandura.styles[].resolutions and GET /v2/styles); otherwise the style fixes it. Omitted = the style's default. The price depends on it.","enum":["480p","720p","1080p"],"default":"480p"},"lane":{"type":"string","enum":["priority","relax"],"default":"priority","description":"priority (default): done within the style's max_job_seconds, or the job ends timeout and is not charged. relax: waits in line with no deadline, never priced above priority."},"webhook_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048,"description":"Public https URL that gets the final job body, signed (X-Signature, X-Timestamp) with the product's Jobs API signing secret or, when it has none, its Webhook endpoint's signing secret. Needs one of the two."},"end_user_id":{"type":"string","minLength":1,"maxLength":255,"description":"Your id of the person this job is for. Optional; when sent, the per-end-user daily cap applies."}}},"example":{"model":"wandura-video-v1","style":"halloween-buddies","image_urls":["https://example.com/photo.jpg"],"end_user_id":"user_123"}}}},"responses":{"200":{"description":"Replay of an earlier submit (header Idempotent-Replayed: true); status is the job's current one.","headers":{"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Submitted"}}}},"202":{"description":"Accepted.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Job submits allowed per minute for this product (per key mode)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Submits left in the current minute."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the current minute window ends."},"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Submitted"}}}},"401":{"$ref":"#/components/responses/JobsApiErrorResponse"},"402":{"$ref":"#/components/responses/JobsApiErrorResponse"},"409":{"$ref":"#/components/responses/JobsApiErrorResponse"},"422":{"$ref":"#/components/responses/JobsApiErrorResponse"},"429":{"description":"RATE_LIMITED, PRODUCT_BUSY or END_USER_LIMIT_REACHED (retry after Retry-After), or DAILY_CAP_REACHED (not retryable: ask your org admin to raise the product's daily spend cap).","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Job submits allowed per minute for this product (per key mode)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Submits left in the current minute."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the current minute window ends."},"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."},"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsApiError"}}}},"500":{"$ref":"#/components/responses/JobsApiErrorResponse"},"503":{"$ref":"#/components/responses/JobsApiErrorResponse"}}}},"/v2/jobs/{job_id}":{"get":{"operationId":"getJob","summary":"Job status and output (same body as the webhook)","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"},"description":"job_id from the submit response."}],"responses":{"200":{"description":"The job. Works for as long as the job exists (kept well past 7 days).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"$ref":"#/components/responses/JobsApiErrorResponse"},"404":{"$ref":"#/components/responses/JobsApiErrorResponse"}}}},"/v2/jobs/{job_id}/cancel":{"post":{"operationId":"cancelJob","summary":"Cancel a queued job","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"},"description":"job_id from the submit response."}],"responses":{"200":{"description":"Cancelled (status cancelled, not charged); the webhook fires too.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"$ref":"#/components/responses/JobsApiErrorResponse"},"404":{"$ref":"#/components/responses/JobsApiErrorResponse"},"409":{"description":"JOB_NOT_CANCELLABLE: the job is already processing or has ended.","headers":{"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsApiError"}}}}}}},"/v2/styles/halloween-buddies":{"post":{"operationId":"runStyle","summary":"Run Halloween Buddies","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Any unique string per logical request. A retry with the same key and body replays the first run instead of running twice."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRequest"},"example":{"lane":"priority","end_user_id":"user_123","inputs":{"image_urls":["https://example.com/photo.jpg"]}}}}},"responses":{"200":{"description":"Replay of an earlier request with the same Idempotency-Key (header Idempotent-Replayed: true).","headers":{"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"202":{"description":"Accepted: the run is queued. Poll status_url or wait for your webhook.","headers":{"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"This end user reached the daily cap (end_user_cap_reached): retry after the Retry-After header (seconds). Or daily_cap_reached: your product reached its daily spend cap; ask your org admin to raise it (no Retry-After).","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the cap resets."},"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."},"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/runs":{"post":{"operationId":"createRun","summary":"Run any style (style in the body)","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Any unique string per logical request. A retry with the same key and body replays the first run instead of running twice."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RunRequest"},{"type":"object","required":["style"],"properties":{"style":{"const":"sty_G6vyNtJokcyT"}}}]},"example":{"style":"sty_G6vyNtJokcyT","lane":"priority","end_user_id":"user_123","inputs":{"image_urls":["https://example.com/photo.jpg"]}}}}},"responses":{"200":{"description":"Replay of an earlier request with the same Idempotency-Key (header Idempotent-Replayed: true).","headers":{"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"202":{"description":"Accepted: the run is queued. Poll status_url or wait for your webhook.","headers":{"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"This end user reached the daily cap (end_user_cap_reached): retry after the Retry-After header (seconds). Or daily_cap_reached: your product reached its daily spend cap; ask your org admin to raise it (no Retry-After).","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the cap resets."},"X-Concurrency-Limit":{"schema":{"type":"integer"},"description":"Your product's concurrency slots (runs at once). Its queue holds as many again."},"X-Concurrency-Running":{"schema":{"type":"integer"},"description":"Runs of your product using a slot right now."},"X-Concurrency-Waiting":{"schema":{"type":"integer"},"description":"Priority runs of your product queued for a slot. When Running and Waiting both reach Limit, new priority runs are refused (429 product_busy)."},"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/quote":{"post":{"operationId":"quote","summary":"Price and ETA before running (same body as a run, nothing is charged)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"example":{"style":"sty_G6vyNtJokcyT","lane":"priority","end_user_id":"user_123","inputs":{"image_urls":["https://example.com/photo.jpg"]}}}}},"responses":{"200":{"description":"Price for this lane.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}}}},"/v2/runs/{id}":{"get":{"operationId":"getRun","summary":"Run status and output (the status_url)","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The request_id from the submit response."}],"responses":{"200":{"description":"The run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}}}},"/v2/runs/{id}/cancel":{"post":{"operationId":"cancelRun","summary":"Cancel a queued run (the cancel_url)","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The request_id from the submit response."}],"responses":{"200":{"description":"Canceled; the hold is released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}}}},"/v2/uploads":{"post":{"operationId":"createUpload","summary":"Presigned URL for one input file","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content_type","size_bytes"],"properties":{"content_type":{"type":"string","enum":["image/jpeg","image/png","image/webp","video/mp4","video/quicktime","video/webm"]},"size_bytes":{"type":"integer","minimum":1}}}}}},"responses":{"201":{"description":"PUT the bytes to upload_url with the given headers, then pass file_url in inputs.","content":{"application/json":{"schema":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri"},"file_url":{"type":"string","format":"uri"},"method":{"const":"PUT"},"headers":{"type":"object"},"expires_at":{"type":"string","format":"date-time"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your API key (wdr_test_… returns a sample for $0, wdr_live_… runs for real). Keep it on your server."}},"responses":{"Error":{"description":"Error.","headers":{"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"JobsApiErrorResponse":{"description":"Error. Branch on error.code; X-Request-Id identifies the request.","headers":{"Wandura-Error-Code":{"schema":{"type":"string"},"description":"The same value as error.code."},"Wandura-Should-Retry":{"schema":{"type":"string","enum":["true","false"]},"description":"The same value as error.retryable: retry the same request later (with the same Idempotency-Key) only when true."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsApiError"}}}}},"schemas":{"Inputs":{"type":"object","required":["image_urls"],"properties":{"image_urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":1,"description":"Public https URLs of the input images (JPEG, PNG or WEBP, up to 20 MB). No storage of your own? Get a URL from POST /v2/uploads. Exactly 1: one per subject."},"resolution":{"type":"string","enum":["480p","720p","1080p"],"default":"480p","description":"Output resolution. Default 480p. The price depends on it: see price_by_resolution on the style, or POST /v2/quote with this input."}}},"RunRequest":{"type":"object","required":["lane","end_user_id","inputs"],"properties":{"lane":{"type":"string","enum":["priority","relax"],"description":"priority: done within 840 s or free. relax: waits in line with no deadline, one active run per end user; never priced above priority."},"end_user_id":{"type":"string","maxLength":255,"description":"The id of the person in your app this run is for (daily caps are per end user)."},"inputs":{"$ref":"#/components/schemas/Inputs"}}},"QuoteRequest":{"allOf":[{"$ref":"#/components/schemas/RunRequest"},{"type":"object","required":["style"],"properties":{"style":{"const":"sty_G6vyNtJokcyT"}}}]},"Price":{"type":"object","required":["credits","usd"],"properties":{"credits":{"type":"number","description":"1 credit = $0.01"},"usd":{"type":"number"}}},"Quote":{"type":"object","properties":{"style":{"type":"string"},"lane":{"$ref":"#/components/schemas/Lane"},"price":{"$ref":"#/components/schemas/Price"},"resolution":{"type":"string","description":"The output resolution this price is for (only styles that offer a choice)."},"eta_s":{"type":["integer","null"]},"promise":{"type":"string"},"livemode":{"type":"boolean"}}},"Lane":{"type":"string","enum":["priority","relax"],"description":"priority: done within the style's promise or free. relax: waits in line with no deadline, one active run per end user; never priced above priority."},"Run":{"type":"object","required":["id","object","status","style","lane","end_user_id","livemode","price","charge","created_at"],"properties":{"id":{"type":"string"},"request_id":{"type":"string","description":"Same as id."},"object":{"const":"run"},"status":{"type":"string","enum":["queued","running","completed","failed","nsfw","canceled"],"description":"completed, failed, nsfw and canceled are final."},"state":{"type":"string","enum":["queued","processing","succeeded","failed","cancelled","timeout"],"description":"The same status in the words the Jobs API uses (one vocabulary for both): running = processing, completed = succeeded, nsfw = failed (error CONTENT_MODERATION_BLOCKED), canceled = cancelled, failed past the promise = timeout."},"status_url":{"type":"string","format":"uri"},"cancel_url":{"type":"string","format":"uri"},"style":{"type":"string"},"lane":{"$ref":"#/components/schemas/Lane"},"end_user_id":{"type":["string","null"],"description":"Null only for a run made with a gateway key that sent none."},"product":{"type":"string"},"livemode":{"type":"boolean"},"price":{"$ref":"#/components/schemas/Price"},"charge":{"type":"string","enum":["held","charged","released","none"],"description":"held while running; charged on completed; released when free; none for test keys."},"queue_position":{"type":"integer"},"output":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string","format":"uri","description":"A Wandura storage link (or, if the copy failed, a 24 h Wandura link): download it directly."},"content_type":{"type":["string","null"],"description":"MIME type read from the file, e.g. image/png, video/mp4."},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"duration":{"type":["number","null"],"description":"Seconds (video, audio)."},"fps":{"type":["number","null"]},"size_bytes":{"type":["integer","null"]},"expires_at":{"type":"string","format":"date-time","description":"The link works at least until this (7 days after the run ends; 24 h for a fallback link). Keep a copy if you need the file longer."}}},"description":"Files in order. Each link works at least 7 days (`expires_at`); copy what you need longer. Metadata is null when it could not be read."},"share_url":{"type":"string","format":"uri"},"path":{"type":"string","enum":["gateway","direct","jobs"],"description":"How the run came in: gateway (a gateway key), direct (the Lensie-compatible endpoints) or jobs (the /v1 Jobs API). Absent on ordinary calls."},"moderation":{"type":"string","enum":["on","off"],"description":"Whether the product's content filters were on or off when this run was created."},"free_run":{"type":"object","properties":{"reason":{"type":"string","enum":["priority_late","provider_error","bad_input","content_blocked"]}}},"error":{"type":"object","required":["code","message","retryable"],"description":"Only when state is failed or timeout: why, in the Jobs API words. The request itself succeeded; this is not an HTTP error.","properties":{"code":{"type":"string","enum":["CONTENT_MODERATION_BLOCKED","INPUT_UNUSABLE","TIMEOUT","GENERATION_FAILED"]},"message":{"type":"string"},"retryable":{"type":"boolean","description":"Submitting the same request again may work."}}},"created_at":{"type":"string","format":"date-time"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_request","idempotency_key_required","end_user_id_required","invalid_api_key","api_key_expired","wallet_empty","style_not_found","run_not_found","not_found","idempotency_key_reused","run_not_cancelable","file_too_large","unsupported_content_type","end_user_cap_reached","gateway_rate_limited","uploads_rate_limited","daily_cap_reached","product_busy","internal_error","style_unavailable","uploads_unavailable","service_unavailable"]},"message":{"type":"string","description":"For people; branch on code, never on the message."},"cap":{"type":"integer","description":"end_user_cap_reached: the daily cap."},"cap_usd":{"type":"number","description":"daily_cap_reached: the product's daily spend cap in USD."},"limit":{"type":"integer","description":"gateway_rate_limited: the product's runs per minute."},"retry_after_s":{"type":"integer"},"retryable":{"type":"boolean","description":"True when the same request can succeed later unchanged (every 429 and 5xx). Retry only these, with the same Idempotency-Key."},"docs_url":{"type":"string","format":"uri","description":"This code's section of https://docs.wandura.ai/developers/api-v2/errors (the page itself for a code without its own section)."}}}}},"Submitted":{"type":"object","required":["job_id","status","model","created_at"],"properties":{"job_id":{"type":"string"},"status":{"$ref":"#/components/schemas/Status"},"model":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}},"Status":{"type":"string","enum":["queued","processing","succeeded","failed","cancelled","timeout"],"description":"queued -> processing -> succeeded | failed | cancelled | timeout. The last four are final and never change."},"Job":{"type":"object","required":["job_id","status","model","style","output","error","created_at","completed_at"],"properties":{"job_id":{"type":"string"},"status":{"$ref":"#/components/schemas/Status"},"model":{"type":"string"},"style":{"type":"string"},"output":{"type":["array","null"],"items":{"$ref":"#/components/schemas/JobFile"},"description":"succeeded: one file (one output per job). null otherwise."},"error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/JobError"}],"description":"failed / timeout: why. null otherwise (cancelled included)."},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time","description":"When it reached its final status."},"notes":{"type":"array","items":{"$ref":"#/components/schemas/JobNote"},"description":"Present only when there is something to tell the end user about their inputs (absent otherwise)."}}},"JobFile":{"type":"object","required":["url","type"],"properties":{"url":{"type":"string","format":"uri","description":"HTTPS, direct download. Copy it to your storage before expires_at."},"type":{"type":["string","null"],"description":"MIME type, e.g. video/mp4."},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"duration":{"type":["number","null"],"description":"Seconds (video)."},"fps":{"type":["number","null"]},"size_bytes":{"type":["integer","null"]},"seed":{"type":["integer","null"]},"expires_at":{"type":["string","null"],"format":"date-time"}}},"JobError":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","enum":["CONTENT_MODERATION_BLOCKED","INPUT_UNUSABLE","TIMEOUT","GENERATION_FAILED"]},"message":{"type":"string"},"retryable":{"type":"boolean"}}},"JobsApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","enum":["INVALID_INPUT","UNAUTHORIZED","INSUFFICIENT_CREDITS","FORBIDDEN","NOT_FOUND","IDEMPOTENCY_KEY_REUSED","JOB_NOT_CANCELLABLE","RATE_LIMITED","PRODUCT_BUSY","END_USER_LIMIT_REACHED","DAILY_CAP_REACHED","INTERNAL_ERROR","SERVICE_UNAVAILABLE"]},"message":{"type":"string","description":"For people; branch on code."},"retryable":{"type":"boolean"},"details":{"type":"array","items":{"type":"object","required":["field","reason"],"properties":{"field":{"type":"string"},"reason":{"type":"string"}}},"description":"INVALID_INPUT only."},"docs_url":{"type":"string","format":"uri","description":"This code's section of https://docs.wandura.ai/developers/api-v2/errors (the page itself for a code without its own section)."}}}}}}}}