{"openapi":"3.1.0","info":{"title":"Blankground API","version":"2.0.0","description":"Background removal and reference-guided catalog image generation."},"servers":[{"url":"https://api.blankground.ru","description":"Production"},{"url":"http://localhost:3001","description":"Local development"}],"security":[{"bearerApiKey":[]}],"tags":[{"name":"Processing"},{"name":"Catalog images"},{"name":"Uploads"},{"name":"Batches"},{"name":"Usage"},{"name":"Webhooks"},{"name":"Credentials"},{"name":"Projects"},{"name":"Auth"}],"paths":{"/v1/removals":{"post":{"operationId":"createRemoval","tags":["Processing"],"summary":"Remove an image background","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"Unique key retained for at least 24 hours. Reuse with different input returns 409.","schema":{"maxLength":128,"type":"string"}},{"in":"header","name":"Prefer","schema":{"example":"wait=8","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemovalRequest"}},"multipart/form-data":{"schema":{"type":"object","required":["image","options"],"properties":{"image":{"description":"JPEG, PNG, WebP, AVIF, HEIC, or HEIF; up to 50 MB and 25 MP.","format":"binary","type":"string"},"options":{"contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/RemovalOptions"},"description":"JSON-encoded removal options.","type":"string"}}}}}},"responses":{"200":{"description":"Completed during the requested bounded wait","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"Accepted for asynchronous processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/virtual-try-ons":{"post":{"operationId":"createVirtualTryOn","tags":["Processing"],"summary":"Create an experimental internal virtual fitting job","description":"Experimental internal evaluation — non-commercial CatVTON license. Requires tryon:write and jobs:read.","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"Unique key retained for at least 24 hours. Reuse with different input returns 409.","schema":{"maxLength":128,"type":"string"}},{"in":"header","name":"Prefer","schema":{"example":"wait=8","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VirtualTryOnRequest"}},"multipart/form-data":{"schema":{"type":"object","required":["person","garment","options"],"properties":{"person":{"format":"binary","type":"string"},"garment":{"format":"binary","type":"string"},"options":{"contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/VirtualTryOnOptions"},"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Completed during the requested bounded wait","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"Accepted for asynchronous processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/catalog-images":{"post":{"operationId":"createCatalogImage","tags":["Catalog images"],"summary":"Generate and persist a catalog product image","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["references"],"properties":{"references":{"type":"array","minItems":1,"maxItems":4,"items":{"format":"binary","type":"string"},"description":"Ordered front, back, side, and detail views of the same product."},"prompt":{"type":"string","maxLength":4000}}}}}},"responses":{"201":{"description":"Generated PNG; Location identifies the persisted result","headers":{"Location":{"schema":{"type":"string"}},"X-Catalog-Image-Id":{"schema":{"format":"uuid","type":"string"}}},"content":{"image/png":{"schema":{"format":"binary","type":"string"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/catalog-images/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"getCatalogImage","tags":["Catalog images"],"summary":"Download a persisted catalog image","responses":{"200":{"description":"Catalog PNG","content":{"image/png":{"schema":{"format":"binary","type":"string"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs":{"get":{"operationId":"listJobs","tags":["Processing"],"summary":"List jobs","responses":{"200":{"description":"Jobs","content":{"application/json":{"schema":{"type":"object","required":["jobs"],"properties":{"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"getJob","tags":["Processing"],"summary":"Get job state","responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"cancelJob","tags":["Processing"],"summary":"Cancel a queued or active job","responses":{"200":{"description":"Canceled or cancellation requested","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/events":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"getJobEvents","tags":["Processing"],"summary":"Observe canonical job events","responses":{"200":{"description":"Server-sent event stream","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/result":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"downloadJobResult","tags":["Processing"],"summary":"Download a completed result","responses":{"200":{"description":"Result bytes; inspect Content-Type for the requested format","content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"Result expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/uploads":{"post":{"operationId":"createUpload","tags":["Uploads"],"summary":"Create a durable, short-lived upload","responses":{"201":{"description":"Upload created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/uploads/{id}/content":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"put":{"operationId":"putUploadContent","tags":["Uploads"],"summary":"Store validated image bytes","description":"Accepts JPEG, PNG, WebP, AVIF, HEIC, or HEIF up to 50 MB and 25 MP.","requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}}},"responses":{"204":{"description":"Stored"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/uploads/{id}/complete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"post":{"operationId":"completeUpload","tags":["Uploads"],"summary":"Mark an upload ready","responses":{"200":{"description":"Upload ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/batches":{"post":{"operationId":"createBatch","tags":["Batches"],"summary":"Atomically queue up to 100 images","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"Unique key retained for at least 24 hours. Reuse with different input returns 409.","schema":{"maxLength":128,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"202":{"description":"Batch accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/batches/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"getBatch","tags":["Batches"],"summary":"Get batch and child job states","responses":{"200":{"description":"Batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/usage":{"get":{"operationId":"getUsage","tags":["Usage"],"summary":"Get usage, holds, and remaining capacity","responses":{"200":{"description":"Usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks":{"get":{"operationId":"listWebhooks","tags":["Webhooks"],"summary":"List webhook endpoints","responses":{"200":{"description":"Endpoints","content":{"application/json":{"schema":{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createWebhook","tags":["Webhooks"],"summary":"Create a signed webhook endpoint","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"format":"uri","type":"string"},"events":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"201":{"description":"Endpoint and one-time secret","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","required":["secret"],"properties":{"secret":{"type":"string"}}}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"delete":{"operationId":"deleteWebhook","tags":["Webhooks"],"summary":"Disable a webhook endpoint","responses":{"204":{"description":"Disabled"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/{id}/deliveries":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"get":{"operationId":"listWebhookDeliveries","tags":["Webhooks"],"summary":"Inspect the latest 100 delivery attempts","responses":{"200":{"description":"Deliveries","content":{"application/json":{"schema":{"type":"object","properties":{"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/{endpointId}/deliveries/{deliveryId}/replay":{"parameters":[{"in":"path","name":"endpointId","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"deliveryId","required":true,"schema":{"format":"uuid","type":"string"}}],"post":{"operationId":"replayWebhookDelivery","tags":["Webhooks"],"summary":"Replay a webhook delivery","responses":{"202":{"description":"Replay queued","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"const":"pending"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listApiKeys","tags":["Credentials"],"summary":"List API key metadata","responses":{"200":{"description":"API keys","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createApiKey","tags":["Credentials"],"summary":"Create an API key with one-time secret display","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"maxLength":80,"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresAt":{"format":"date-time","type":"string"}}}}}},"responses":{"201":{"description":"API key and one-time value","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiKey"},{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api-keys/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"delete":{"operationId":"revokeApiKey","tags":["Credentials"],"summary":"Revoke an API key","responses":{"204":{"description":"Revoked"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Usage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Resource state or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Image exceeds the byte or pixel limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Unsupported image media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Semantically invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or quota limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"securitySchemes":{"bearerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"bg_live_…"}},"schemas":{"ImageFormat":{"type":"string","enum":["png","webp","jpeg","zip","psd"],"default":"png"},"Recipe":{"type":"object","required":["version"],"properties":{"version":{"const":1},"background":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"const":"transparent"}}},{"type":"object","required":["type","color"],"properties":{"type":{"const":"color"},"color":{"pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","type":"string"}}}]},"crop":{"type":"boolean","default":false},"margin":{"type":"number","minimum":0,"maximum":5000},"width":{"type":"integer","minimum":1,"maximum":10000},"height":{"type":"integer","minimum":1,"maximum":10000}},"additionalProperties":false},"RemovalRequest":{"type":"object","required":["options"],"oneOf":[{"required":["sourceUrl"]},{"required":["uploadId"]}],"properties":{"sourceUrl":{"format":"uri","type":"string"},"uploadId":{"format":"uuid","type":"string"},"options":{"$ref":"#/components/schemas/RemovalOptions"}},"additionalProperties":false},"RemovalOptions":{"type":"object","required":["quality","alpha","output"],"properties":{"quality":{"enum":["fast","balanced","high"],"type":"string"},"alpha":{"oneOf":[{"type":"object","required":["mode","feather"],"properties":{"mode":{"const":"raw"},"feather":{"maximum":4,"minimum":0,"type":"number"}},"additionalProperties":false},{"type":"object","required":["mode","threshold","feather"],"properties":{"mode":{"const":"binary"},"threshold":{"maximum":1,"minimum":0,"type":"number"},"feather":{"maximum":4,"minimum":0,"type":"number"}},"additionalProperties":false}]},"output":{"enum":["mask","cutout"],"type":"string"}},"additionalProperties":false},"VirtualTryOnSource":{"type":"object","oneOf":[{"required":["sourceUrl"]},{"required":["uploadId"]}],"properties":{"sourceUrl":{"format":"uri","type":"string"},"uploadId":{"format":"uuid","type":"string"}},"additionalProperties":false},"VirtualTryOnOptions":{"type":"object","required":["category"],"properties":{"category":{"enum":["upper_body","lower_body","dress"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"additionalProperties":false},"VirtualTryOnRequest":{"type":"object","required":["person","garment","options"],"properties":{"person":{"$ref":"#/components/schemas/VirtualTryOnSource"},"garment":{"$ref":"#/components/schemas/VirtualTryOnSource"},"options":{"$ref":"#/components/schemas/VirtualTryOnOptions"}},"additionalProperties":false},"Job":{"type":"object","required":["id","kind","status","stage","createdAt","result","error","warnings","links"],"properties":{"id":{"format":"uuid","type":"string"},"kind":{"enum":["remove_background","virtual_try_on"],"type":"string"},"projectId":{"format":"uuid","type":"string"},"status":{"enum":["queued","processing","succeeded","failed","canceled"],"type":"string"},"stage":{"enum":["queued","preparing","segmenting","refining","rendering","storing","complete"],"type":"string"},"format":{"$ref":"#/components/schemas/ImageFormat"},"createdAt":{"format":"date-time","type":"string"},"startedAt":{"type":["string","null"],"format":"date-time"},"completedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"result":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Result"}]},"error":{"oneOf":[{"type":"null"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}]},"warnings":{"type":"array","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}},"links":{"type":"object","required":["self","events","result","cancel"],"properties":{"self":{"type":"string"},"events":{"type":"string"},"result":{"type":"string"},"cancel":{"type":"string"}}}}},"Result":{"type":"object","required":["url","contentType","expiresAt"],"properties":{"url":{"type":"string"},"contentType":{"type":"string"},"expiresAt":{"type":["string","null"],"format":"date-time"}}},"Problem":{"type":"object","required":["type","status","code","title","detail","retryable","requestId"],"properties":{"type":{"format":"uri","type":"string"},"status":{"type":"integer"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"field":{"type":"string"},"retryable":{"type":"boolean"},"requestId":{"type":"string"}}},"Upload":{"type":"object","required":["id","status","expiresAt","uploadUrl"],"properties":{"id":{"format":"uuid","type":"string"},"status":{"enum":["pending","ready"],"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"uploadUrl":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"mimeType":{"type":"string"}}},"BatchRequest":{"type":"object","required":["uploadIds","options"],"properties":{"uploadIds":{"type":"array","minItems":1,"maxItems":100,"items":{"format":"uuid","type":"string"}},"options":{"$ref":"#/components/schemas/RemovalOptions"}},"additionalProperties":false},"Batch":{"type":"object","required":["id","status","total","jobs"],"properties":{"id":{"format":"uuid","type":"string"},"status":{"enum":["processing","complete"],"type":"string"},"total":{"type":"integer"},"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}},"Usage":{"type":"object","properties":{"kind":{"enum":["workspace","anonymous"],"type":"string"},"available":{"type":"integer"},"held":{"type":"integer"},"used":{"type":"integer"},"limit":{"type":"integer"},"periodEndsAt":{"format":"date-time","type":"string"},"accepted":{"type":"integer"},"remaining":{"type":"integer"}}},"WebhookEndpoint":{"type":"object","required":["id","url","events"],"properties":{"id":{"format":"uuid","type":"string"},"url":{"format":"uri","type":"string"},"events":{"type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"}}},"WebhookDelivery":{"type":"object","required":["id","eventId","status","attempts"],"properties":{"id":{"format":"uuid","type":"string"},"eventId":{"format":"uuid","type":"string"},"status":{"enum":["pending","retrying","delivered","failed"],"type":"string"},"attempts":{"type":"integer"},"responseStatus":{"type":["integer","null"]},"lastError":{"type":["string","null"]},"createdAt":{"format":"date-time","type":"string"},"deliveredAt":{"type":["string","null"],"format":"date-time"}}},"ApiKey":{"type":"object","required":["id","name","prefix","scopes","createdAt"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"},"expiresAt":{"type":["string","null"],"format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"}}}}}}