{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Anycon Reels public API","version":"1.0.0","description":"Process photos and videos programmatically. Authenticate with Authorization: Bearer <API key> (create keys in «Профиль → Для разработчиков»). Pay from the prepaid balance (RUB, top-up in the cabinet). All amounts are integer kopecks in decimal strings."},"servers":[{"url":"https://anycon.online"}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"uk_live_<prefix>_<secret>","description":"API key from «Профиль → Для разработчиков». Shown once when created; revoke it in the cabinet if it leaks."}},"schemas":{"PublicJobOptions":{"type":"object","additionalProperties":false,"properties":{"mode":{"enum":["clean","version"],"default":"clean","description":"Defaults to clean when omitted by the client."},"substitute":{"type":"object","additionalProperties":false,"properties":{"camera":{"type":"boolean"},"lens":{"type":"boolean"},"date":{"type":"boolean"},"gps":{"type":"boolean"},"author":{"type":"boolean"},"software":{"type":"boolean"}},"required":[],"minProperties":1},"variation":{"type":"object","additionalProperties":false,"properties":{"geometry":{"type":"boolean"},"color":{"type":"boolean"},"audio":{"type":"boolean"},"overlay":{"type":"boolean"},"audioTone":{"type":"boolean"},"pulse":{"type":"boolean"}},"required":[],"minProperties":1,"description":"pulse: video only, default false; slow centered breathing, randomized 0.3–1.2% amplitude, 4–12 second segments and 0–6 second pauses; up to 8 segments fitted to clip duration, amplitude capped at 0.25%/s and total crop at 3% where legacy geometry permits; independently randomized per copy; size and timestamps unchanged."},"encoding":{"type":"object","additionalProperties":false,"properties":{"randomize":{"type":"boolean"}},"required":[],"minProperties":1},"video":{"type":"object","additionalProperties":false,"properties":{"durationDeltaMs":{"type":"integer","minimum":-5000,"maximum":5000},"videoBitrateKbps":{"type":"integer","minimum":150,"maximum":100000},"replaceCover":{"type":"boolean"}},"required":[],"minProperties":1}},"required":[],"allOf":[{"if":{"anyOf":[{"not":{"required":["mode"]}},{"properties":{"mode":{"const":"clean"}},"required":["mode"]}]},"then":{"properties":{"substitute":false,"variation":false,"video":false,"encoding":false}}}]},"PublicCopyMetrics":{"type":"object","additionalProperties":false,"properties":{"v":{"const":1},"differs":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"boolean","description":"the copy file differs from your original (hash)"},"clean":{"type":"boolean"}},"required":["source","clean"]},"phash":{"type":"object","additionalProperties":false,"properties":{"frames":{"type":"integer"},"avgDistance":{"type":"number","description":"mean Hamming distance (of 64 bits) between perceptual hashes of sampled frames of the clean original and the copy"},"maxDistance":{"type":"integer"}},"required":["frames","avgDistance","maxDistance"]},"dhash":{"type":"object","additionalProperties":false,"properties":{"avgDistance":{"type":"number"},"maxDistance":{"type":"integer"}},"required":["avgDistance","maxDistance"]},"hashes":{"type":"object","additionalProperties":false,"properties":{"p":{"type":"array","items":{"type":"string","pattern":"^[0-9a-f]{16}$"}},"d":{"type":"array","items":{"type":"string","pattern":"^[0-9a-f]{16}$"}}},"required":["p","d"]},"quality":{"type":"object","additionalProperties":false,"properties":{"ssim":{"type":"number"},"psnr":{"type":"number"},"minSsim":{"type":"number","description":"the quality floor of this order; a copy below it is rebuilt or rejected"},"passed":{"type":"boolean"},"scope":{"enum":["full","before-speed-change"]},"reference":{"const":"reframed","description":"compared with the original after the intended re-framing and tone change, so only the other losses count"}},"required":["ssim","psnr","minSsim","passed","scope","reference"]},"audio":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"spectralDiffDb":{"type":"number"},"loudnessDeltaLu":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["spectralDiffDb","loudnessDeltaLu"]},{"type":"null"}]}},"required":["v","differs","phash","dhash","hashes","quality","audio"]},"PublicCopyFacts":{"type":"object","additionalProperties":false,"properties":{"before":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"v":{"const":1},"container":{"anyOf":[{"type":"string","pattern":"^[a-z0-9]{1,12}$"},{"type":"null"}]},"make":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"model":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"lens":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"software":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"author":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"string","maxLength":40,"pattern":"^[0-9]{4}[:\\-](?:(?:0[13578]|1[02])[:\\-](?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)[:\\-](?:0[1-9]|[12][0-9]|30)|02[:\\-](?:0[1-9]|[12][0-9]))(?:[T ](?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9](?:\\.[0-9]{1,6})?)?)?(?:Z|[+\\-](?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:?00))?$"},{"type":"null"}]},"gps":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["lat","lon"]},{"type":"null"}]},"width":{"anyOf":[{"type":"integer","minimum":1,"maximum":65535},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":1,"maximum":65535},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":0,"maximum":86400000},{"type":"null"}]},"fps":{"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"overallKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"videoCodec":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_.-]{1,32}$"},{"type":"null"}]},"videoKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"audioCodec":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_.-]{1,32}$"},{"type":"null"}]},"audioKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"audioRate":{"anyOf":[{"type":"integer","minimum":1,"maximum":768000},{"type":"null"}]},"audioChannels":{"anyOf":[{"type":"integer","minimum":1,"maximum":64},{"type":"null"}]}},"required":["v","container","make","model","lens","software","author","createdAt","gps","width","height","durationMs","fps","overallKbps","videoCodec","videoKbps","audioCodec","audioKbps","audioRate","audioChannels"]},{"type":"null"}]},"after":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"v":{"const":1},"container":{"anyOf":[{"type":"string","pattern":"^[a-z0-9]{1,12}$"},{"type":"null"}]},"make":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"model":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"lens":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"software":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"author":{"anyOf":[{"type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]+$"},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"string","maxLength":40,"pattern":"^[0-9]{4}[:\\-](?:(?:0[13578]|1[02])[:\\-](?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)[:\\-](?:0[1-9]|[12][0-9]|30)|02[:\\-](?:0[1-9]|[12][0-9]))(?:[T ](?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9](?:\\.[0-9]{1,6})?)?)?(?:Z|[+\\-](?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:?00))?$"},{"type":"null"}]},"gps":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["lat","lon"]},{"type":"null"}]},"width":{"anyOf":[{"type":"integer","minimum":1,"maximum":65535},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":1,"maximum":65535},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":0,"maximum":86400000},{"type":"null"}]},"fps":{"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"overallKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"videoCodec":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_.-]{1,32}$"},{"type":"null"}]},"videoKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"audioCodec":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_.-]{1,32}$"},{"type":"null"}]},"audioKbps":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000},{"type":"null"}]},"audioRate":{"anyOf":[{"type":"integer","minimum":1,"maximum":768000},{"type":"null"}]},"audioChannels":{"anyOf":[{"type":"integer","minimum":1,"maximum":64},{"type":"null"}]}},"required":["v","container","make","model","lens","software","author","createdAt","gps","width","height","durationMs","fps","overallKbps","videoCodec","videoKbps","audioCodec","audioKbps","audioRate","audioChannels"]},{"type":"null"}]}},"required":["before","after"]},"PublicError":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","pattern":"^E_[A-Z0-9_]{2,60}$"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}}}},"required":["error"]},"PublicBalance":{"type":"object","additionalProperties":false,"properties":{"balance_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"currency":{"const":"RUB"}},"required":["balance_minor","currency"]},"PublicPricing":{"type":"object","additionalProperties":false,"properties":{"currency":{"const":"RUB"},"photo":{"type":"object","additionalProperties":false,"properties":{"base_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"per_copy_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"}},"required":["base_minor","per_copy_minor"]},"video":{"type":"object","additionalProperties":false,"properties":{"base_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"per_copy_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"per_started_minute_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"}},"required":["base_minor","per_copy_minor","per_started_minute_minor"]},"formula":{"type":"string"},"limits":{"type":"object","additionalProperties":false,"properties":{"max_copies":{"type":"integer","minimum":1,"maximum":10},"max_file_bytes":{"type":"integer"},"max_video_seconds":{"type":"integer"}},"required":["max_copies","max_file_bytes","max_video_seconds"]},"payment":{"type":"string"}},"required":["currency","photo","video","formula","limits","payment"]},"PublicAccountPlan":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"title":{"type":"string"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"quota_left":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"api_access":{"type":"boolean"},"max_copies":{"type":"integer","minimum":1,"maximum":10},"max_video_seconds":{"type":"integer"},"max_file_bytes":{"type":"integer"},"max_active_orders":{"type":"integer"},"storage_days":{"type":"integer"}},"required":["code","title","ends_at","quota_left","api_access","max_copies","max_video_seconds","max_file_bytes","max_active_orders","storage_days"]},"PublicAccount":{"type":"object","additionalProperties":false,"properties":{"balance_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"plan":{"anyOf":[{"$ref":"#/components/schemas/PublicAccountPlan"},{"type":"null"}],"description":"null when the account has no running tariff (including the free tier: it is not shown as a plan)"},"limits":{"type":"object","additionalProperties":false,"properties":{"rate_per_minute":{"type":"integer","minimum":1},"max_active_orders_balance":{"type":"integer","minimum":1},"max_uploads_in_progress":{"type":"integer","minimum":1},"download_link_seconds":{"type":"integer","minimum":1}},"required":["rate_per_minute","max_active_orders_balance","max_uploads_in_progress","download_link_seconds"]},"key":{"type":"object","additionalProperties":false,"properties":{"prefix":{"type":"string","pattern":"^[a-z0-9]{8}$"},"scope":{"const":"full","description":"API keys currently grant the full public API scope."}},"required":["prefix","scope"]}},"required":["balance_minor","plan","limits","key"]},"PublicQuoteRequest":{"type":"object","additionalProperties":false,"properties":{"media_kind":{"enum":["image","video"]},"duration_seconds":{"type":"number","exclusiveMinimum":0,"maximum":86400,"description":"required for video"},"copies":{"type":"integer","minimum":1,"maximum":10}},"required":["media_kind","copies"]},"PublicQuote":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"currency":{"const":"RUB"}},"required":["amount_minor","currency"]},"PublicUpload":{"type":"object","additionalProperties":false,"properties":{"upload_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"kind":{"enum":["image","video"]},"content_type":{"enum":["image/jpeg","image/png","image/webp","image/gif","image/tiff","image/bmp","image/heif","image/heic","image/avif","video/mp4","video/quicktime","video/3gpp","video/x-matroska","video/webm"]},"size_bytes":{"type":"integer"},"sha256":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{64}$"},{"type":"null"}]},"status":{"const":"stored"}},"required":["upload_id","kind","content_type","size_bytes","sha256","status"]},"PublicOrderRequest":{"type":"object","additionalProperties":false,"properties":{"upload_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"copies":{"type":"integer","minimum":1,"maximum":10},"options":{"$ref":"#/components/schemas/PublicJobOptions","description":"Canonical JobOptions without copies. Default {\"mode\":\"clean\"}; mode and each optional group are validated exactly as in JobOptions."},"webhook_url":{"type":"string","format":"uri","pattern":"^https://[^\\s]{1,500}$","minLength":12,"maxLength":500,"description":"Optional destination for this order's callbacks (https, a public host, port 80 or 443 only). Callbacks are at-least-once: deduplicate by the X-Anycon-Delivery header. A new URL does not help for an event that was already delivered (sent). It is deliberately excluded from the idempotency hash: a replay with the same order body and a valid new URL updates this order's destination to the last supplied URL."}},"required":["upload_id","copies"]},"PublicOrder":{"type":"object","additionalProperties":false,"properties":{"order_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"status":{"enum":["pending","queued","processing","completed","failed","cancelled","review"]},"media_kind":{"enum":["image","video"]},"copies":{"type":"integer","minimum":1,"maximum":10},"options":{"$ref":"#/components/schemas/PublicJobOptions"},"amount_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"currency":{"const":"RUB"},"progress_percent":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}]},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"refunded":{"type":"boolean","description":"the amount was returned to the balance, or the source was returned to the tariff quota (failed or cancelled before the result was ready)"},"paid_with":{"enum":["balance","plan","complimentary"],"description":"plan = one source of the quota of the active tariff (amount_minor is then the per-piece price it replaced, nothing was debited); complimentary = free access granted by the service (nothing was debited, no quota was used); balance = debited from the prepaid balance"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"ready_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"download_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["order_id","status","media_kind","copies","options","amount_minor","currency","progress_percent","failure_code","refunded","paid_with","plan","created_at","ready_at","download_until"]},"PublicOrderPage":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicOrder"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","next_cursor"]},"PublicCancel":{"type":"object","additionalProperties":false,"properties":{"cancelled":{"type":"boolean"},"order":{"$ref":"#/components/schemas/PublicOrder"}},"required":["cancelled","order"]},"PublicResults":{"type":"object","additionalProperties":false,"properties":{"order_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"download_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"link_expires_at":{"type":"string","format":"date-time"},"files":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"file_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"kind":{"enum":["media","report"]},"copy_index":{"type":"integer"},"name":{"type":"string"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"sha256":{"type":"string"},"download_url":{"type":"string"},"metrics":{"anyOf":[{"$ref":"#/components/schemas/PublicCopyMetrics"},{"type":"null"}]},"facts":{"anyOf":[{"$ref":"#/components/schemas/PublicCopyFacts"},{"type":"null"}]}},"required":["file_id","kind","copy_index","name","mime_type","size_bytes","sha256","download_url","metrics","facts"]}}},"required":["order_id","download_until","link_expires_at","files"]},"PublicReferral":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"code":{"type":"string","pattern":"^[A-Z2-9]{8}$"},"links":{"type":"object","additionalProperties":false,"properties":{"site":{"type":"string"},"bot":{"type":"string"},"mini_app":{"type":"string"}},"required":["site","bot","mini_app"]},"terms":{"type":"object","additionalProperties":false,"properties":{"discount_percent":{"type":"integer"},"reward_percent":{"type":"integer"},"reward_months":{"type":"integer"}},"required":["discount_percent","reward_percent","reward_months"]},"stats":{"type":"object","additionalProperties":false,"properties":{"clicks":{"type":"integer"},"registrations":{"type":"integer"},"paying":{"type":"integer"},"bonus_accrued_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"bonus_spent_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"bonus_available_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"}},"required":["clicks","registrations","paying","bonus_accrued_minor","bonus_spent_minor","bonus_available_minor"]},"currency":{"const":"RUB"}},"required":["enabled"]},"PublicWebhookEvent":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"event":{"enum":["order.completed","order.failed","order.cancelled","order.review","ping"]},"created_at":{"type":"string","format":"date-time"},"data":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"order":{"$ref":"#/components/schemas/PublicWebhookOrder"}},"required":["order"]},{"type":"object","additionalProperties":false,"properties":{"test":{"const":true}},"required":["test"]}]}},"required":["id","event","created_at","data"]},"PublicWebhookTestRequest":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","pattern":"^https://[^\\s]{1,500}$","minLength":12,"maxLength":500}},"required":[]},"PublicWebhookTest":{"type":"object","additionalProperties":false,"properties":{"accepted":{"const":true}},"required":["accepted"]},"OwnUsage":{"type":"object","additionalProperties":false,"properties":{"period":{"type":"object","additionalProperties":false,"properties":{"kind":{"enum":["current","30d","all"]},"startsAt":{"type":["string","null"],"format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["kind","startsAt","endsAt","timezone"]},"usage":{"type":"object","additionalProperties":false,"properties":{"createdOrders":{"type":"integer","minimum":0},"completedOrders":{"type":"integer","minimum":0},"failedOrders":{"type":"integer","minimum":0},"processedSources":{"type":"integer","minimum":0},"generatedCopies":{"type":"integer","minimum":0},"spentMinor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"currency":{"const":"RUB"}},"required":["createdOrders","completedOrders","failedOrders","processedSources","generatedCopies","spentMinor","currency"]},"files":{"type":"object","additionalProperties":false,"properties":{"uploadedCount":{"type":"integer","minimum":0},"availableResultCount":{"type":"integer","minimum":0}},"required":["uploadedCount","availableResultCount"]},"plan":{"type":"object","additionalProperties":false,"properties":{"quotaUsed":{"type":"integer","minimum":0},"quotaLeft":{"type":"integer","minimum":0}},"required":["quotaUsed","quotaLeft"]}},"required":["period","usage","files","plan"]},"PublicWebhookOrder":{"type":"object","additionalProperties":false,"properties":{"order_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"status":{"enum":["pending","queued","processing","completed","failed","cancelled","review"]},"media_kind":{"enum":["image","video"]},"copies":{"type":"integer","minimum":1,"maximum":10},"options":{"$ref":"#/components/schemas/PublicJobOptions"},"amount_minor":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,18})$","description":"kopecks (RUB), decimal string"},"currency":{"const":"RUB"},"progress_percent":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}]},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"refunded":{"type":"boolean","description":"the amount was returned to the balance, or the source was returned to the tariff quota (failed or cancelled before the result was ready)"},"paid_with":{"enum":["balance","plan","complimentary"],"description":"plan = one source of the quota of the active tariff (amount_minor is then the per-piece price it replaced, nothing was debited); complimentary = free access granted by the service (nothing was debited, no quota was used); balance = debited from the prepaid balance"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"ready_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"download_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"results_url":{"type":"string","format":"uri-reference"}},"required":["order_id","status","media_kind","copies","options","amount_minor","currency","progress_percent","failure_code","refunded","paid_with","plan","created_at","ready_at","download_until","results_url"]}}},"security":[{"apiKey":[]}],"x-error-codes":{"E_VALIDATION":{"status":400,"retryable":false},"E_BODY_TOO_LARGE":{"status":413,"retryable":false},"E_UNSUPPORTED_MEDIA_TYPE":{"status":415,"retryable":false},"E_IDEMPOTENCY_KEY_REQUIRED":{"status":400,"retryable":false},"E_IDEMPOTENCY_CONFLICT":{"status":409,"retryable":false},"E_OPTION_NOT_APPLICABLE":{"status":400,"retryable":false},"E_COVER_NOT_APPLICABLE":{"status":400,"retryable":false},"E_COPIES_INVALID":{"status":400,"retryable":false},"E_AUTH_REQUIRED":{"status":401,"retryable":false},"E_AUTH_INVALID_CREDENTIALS":{"status":401,"retryable":false},"E_SESSION_EXPIRED":{"status":401,"retryable":false},"E_CSRF":{"status":403,"retryable":false},"E_ORIGIN":{"status":403,"retryable":false},"E_FORBIDDEN":{"status":403,"retryable":false},"E_TOTP_REQUIRED":{"status":401,"retryable":false},"E_TOTP_INVALID":{"status":401,"retryable":false},"E_REAUTH_REQUIRED":{"status":403,"retryable":false},"E_PHONE_VERIFICATION_REQUIRED":{"status":403,"retryable":false},"E_REGISTRATION_REQUIRED":{"status":403,"retryable":false},"E_ACCOUNT_SUSPENDED":{"status":403,"retryable":false},"E_NEW_PASSWORD_REQUIRED":{"status":409,"retryable":false},"E_REGISTRATION_REJECTED":{"status":400,"retryable":false},"E_RATE_LIMITED":{"status":429,"retryable":true},"E_LAST_OWNER":{"status":409,"retryable":false},"E_TELEGRAM_LINK_INVALID":{"status":400,"retryable":false},"E_API_KEY_INVALID":{"status":401,"retryable":false},"E_API_KEY_LIMIT":{"status":409,"retryable":false},"E_INSUFFICIENT_FUNDS":{"status":402,"retryable":false},"E_TOPUP_AMOUNT_INVALID":{"status":400,"retryable":false},"E_PLAN_UNAVAILABLE":{"status":409,"retryable":false},"E_PLAN_DOWNGRADE":{"status":409,"retryable":false},"E_TARIFFS_DISABLED":{"status":503,"retryable":false},"E_WEBHOOK_URL_INVALID":{"status":400,"retryable":false},"E_ORDER_NOT_READY":{"status":409,"retryable":true},"E_TELEGRAM_IDENTITY_IN_USE":{"status":409,"retryable":false},"E_NOT_FOUND":{"status":404,"retryable":false},"E_CONFLICT":{"status":409,"retryable":false},"E_UPLOAD_TOO_LARGE":{"status":413,"retryable":false},"E_FORMAT_PENDING":{"status":422,"retryable":true},"E_MEDIA_UNSUPPORTED":{"status":422,"retryable":false},"E_QUOTA_EXCEEDED":{"status":429,"retryable":true},"E_ADMISSION_REJECTED":{"status":409,"retryable":true},"E_QUOTE_EXPIRED":{"status":409,"retryable":false},"E_TERMS_NOT_ACCEPTED":{"status":400,"retryable":false},"E_CONSENT_REQUIRED":{"status":403,"retryable":false},"E_ACCOUNT_BUSY":{"status":409,"retryable":false},"E_ORDER_NOT_PAYABLE":{"status":409,"retryable":false},"E_ORDER_EXPIRED":{"status":409,"retryable":false},"E_CHANNEL_MISMATCH":{"status":409,"retryable":false},"E_PAYMENT_PROVIDER_DISABLED":{"status":503,"retryable":false},"E_PAYMENT_PROVIDER_UNAVAILABLE":{"status":502,"retryable":true},"E_PAYMENT_UNKNOWN_OUTCOME":{"status":409,"retryable":false},"E_MODE_MISMATCH":{"status":409,"retryable":false},"E_CANCEL_TOO_LATE":{"status":409,"retryable":false},"E_ORDER_REFUND_PENDING":{"status":409,"retryable":false},"E_REFUND_PARTIAL_UNSUPPORTED":{"status":400,"retryable":false},"E_REFUND_EXCEEDS_BALANCE":{"status":409,"retryable":false},"E_REFUND_NOT_ALLOWED":{"status":409,"retryable":false},"E_DOWNLOAD_EXPIRED":{"status":410,"retryable":false},"E_ARTIFACT_UNAVAILABLE":{"status":409,"retryable":false},"E_WORKER_UNAUTHORIZED":{"status":401,"retryable":false},"E_LEASE_STALE":{"status":409,"retryable":false},"E_FENCE_MISMATCH":{"status":409,"retryable":false},"E_ATTEMPT_MISMATCH":{"status":409,"retryable":false},"E_PUBLISH_REJECTED":{"status":409,"retryable":false},"E_ILLEGAL_TRANSITION":{"status":409,"retryable":false},"E_IMMUTABLE":{"status":500,"retryable":false},"E_APPEND_ONLY":{"status":500,"retryable":false},"E_INTERNAL":{"status":500,"retryable":true},"E_SERVICE_UNAVAILABLE":{"status":503,"retryable":true}},"x-polling":{"initialSeconds":5,"laterSeconds":15},"webhooks":{"orderCompleted":{"post":{"summary":"Webhook order.completed","description":"The payload is signed as `HMAC-SHA256(secret, \"<t>.<raw body>\")`; verify the `v1` value from `X-Anycon-Signature` against the exact raw JSON body.","security":[],"parameters":[{"name":"X-Anycon-Event","in":"header","required":true,"schema":{"const":"order.completed"}},{"name":"X-Anycon-Delivery","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"description":"Unique webhook delivery identifier."},{"name":"X-Anycon-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^t=[0-9]{1,16},v1=[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex digest>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicWebhookEvent"},{"properties":{"event":{"const":"order.completed"},"data":{"type":"object","additionalProperties":false,"properties":{"order":{"$ref":"#/components/schemas/PublicWebhookOrder"}},"required":["order"]}}}]}}}},"responses":{"204":{"description":"Accepted"}}}},"orderFailed":{"post":{"summary":"Webhook order.failed","description":"The payload is signed as `HMAC-SHA256(secret, \"<t>.<raw body>\")`; verify the `v1` value from `X-Anycon-Signature` against the exact raw JSON body.","security":[],"parameters":[{"name":"X-Anycon-Event","in":"header","required":true,"schema":{"const":"order.failed"}},{"name":"X-Anycon-Delivery","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"description":"Unique webhook delivery identifier."},{"name":"X-Anycon-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^t=[0-9]{1,16},v1=[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex digest>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicWebhookEvent"},{"properties":{"event":{"const":"order.failed"},"data":{"type":"object","additionalProperties":false,"properties":{"order":{"$ref":"#/components/schemas/PublicWebhookOrder"}},"required":["order"]}}}]}}}},"responses":{"204":{"description":"Accepted"}}}},"orderCancelled":{"post":{"summary":"Webhook order.cancelled","description":"The payload is signed as `HMAC-SHA256(secret, \"<t>.<raw body>\")`; verify the `v1` value from `X-Anycon-Signature` against the exact raw JSON body.","security":[],"parameters":[{"name":"X-Anycon-Event","in":"header","required":true,"schema":{"const":"order.cancelled"}},{"name":"X-Anycon-Delivery","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"description":"Unique webhook delivery identifier."},{"name":"X-Anycon-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^t=[0-9]{1,16},v1=[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex digest>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicWebhookEvent"},{"properties":{"event":{"const":"order.cancelled"},"data":{"type":"object","additionalProperties":false,"properties":{"order":{"$ref":"#/components/schemas/PublicWebhookOrder"}},"required":["order"]}}}]}}}},"responses":{"204":{"description":"Accepted"}}}},"orderReview":{"post":{"summary":"Webhook order.review","description":"The payload is signed as `HMAC-SHA256(secret, \"<t>.<raw body>\")`; verify the `v1` value from `X-Anycon-Signature` against the exact raw JSON body.","security":[],"parameters":[{"name":"X-Anycon-Event","in":"header","required":true,"schema":{"const":"order.review"}},{"name":"X-Anycon-Delivery","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"description":"Unique webhook delivery identifier."},{"name":"X-Anycon-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^t=[0-9]{1,16},v1=[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex digest>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicWebhookEvent"},{"properties":{"event":{"const":"order.review"},"data":{"type":"object","additionalProperties":false,"properties":{"order":{"$ref":"#/components/schemas/PublicWebhookOrder"}},"required":["order"]}}}]}}}},"responses":{"204":{"description":"Accepted"}}}},"ping":{"post":{"summary":"Webhook ping","description":"The payload is signed as `HMAC-SHA256(secret, \"<t>.<raw body>\")`; verify the `v1` value from `X-Anycon-Signature` against the exact raw JSON body.","security":[],"parameters":[{"name":"X-Anycon-Event","in":"header","required":true,"schema":{"const":"ping"}},{"name":"X-Anycon-Delivery","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"description":"Unique webhook delivery identifier."},{"name":"X-Anycon-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^t=[0-9]{1,16},v1=[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex digest>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicWebhookEvent"},{"properties":{"event":{"const":"ping"},"data":{"type":"object","additionalProperties":false,"properties":{"test":{"const":true}},"required":["test"]}}}]}}}},"responses":{"204":{"description":"Accepted"}}}}},"paths":{"/api/public/v1/me/usage":{"get":{"operationId":"getOwnUsage","summary":"Own usage and available files; database payments only","security":[{"apiKey":[]}],"parameters":[{"name":"period","in":"query","schema":{"type":"string","enum":["current","30d","all"],"default":"current"}}],"responses":{"200":{"description":"Own period summary; quota is always the current plan quota","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnUsage"}}}},"400":{"description":"E_VALIDATION","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/account":{"get":{"operationId":"getAccount","summary":"Authenticated API account, active plan and public API limits","security":[{"apiKey":[]}],"responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAccount"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/balance":{"get":{"operationId":"getBalance","summary":"Prepaid balance","security":[{"apiKey":[]}],"responses":{"200":{"description":"Balance in kopecks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBalance"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/referral":{"get":{"operationId":"getReferral","summary":"Your invitation code, the three links (site, bot, Mini App) and the programme statistics. Bonus money is spent on orders only and can not be withdrawn.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Referral programme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicReferral"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/pricing":{"get":{"operationId":"getPricing","summary":"Price table and limits","security":[{"apiKey":[]}],"responses":{"200":{"description":"Pricing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPricing"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/quote":{"post":{"operationId":"createQuote","summary":"Price of a job: media kind, video length, copies -> kopecks (no upload needed)","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicQuoteRequest"}}}},"responses":{"200":{"description":"Price","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicQuote"}}}},"400":{"description":"E_VALIDATION","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/uploads":{"post":{"operationId":"uploadFile","summary":"Upload one photo or video (raw body). Declare the type in Content-Type and the exact size in Content-Length; the same media checks and limits as the cabinet apply.","security":[{"apiKey":[]}],"parameters":[{"name":"file_name","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"image/jpeg":{"schema":{"type":"string","contentEncoding":"binary"}},"image/png":{"schema":{"type":"string","contentEncoding":"binary"}},"image/webp":{"schema":{"type":"string","contentEncoding":"binary"}},"image/gif":{"schema":{"type":"string","contentEncoding":"binary"}},"image/tiff":{"schema":{"type":"string","contentEncoding":"binary"}},"image/bmp":{"schema":{"type":"string","contentEncoding":"binary"}},"image/heif":{"schema":{"type":"string","contentEncoding":"binary"}},"image/heic":{"schema":{"type":"string","contentEncoding":"binary"}},"image/avif":{"schema":{"type":"string","contentEncoding":"binary"}},"video/mp4":{"schema":{"type":"string","contentEncoding":"binary"}},"video/quicktime":{"schema":{"type":"string","contentEncoding":"binary"}},"video/3gpp":{"schema":{"type":"string","contentEncoding":"binary"}},"video/x-matroska":{"schema":{"type":"string","contentEncoding":"binary"}},"video/webm":{"schema":{"type":"string","contentEncoding":"binary"}}}},"responses":{"201":{"description":"Stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicUpload"}}}},"400":{"description":"E_VALIDATION","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"413":{"description":"E_UPLOAD_TOO_LARGE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"422":{"description":"E_MEDIA_UNSUPPORTED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/uploads/{uploadId}":{"get":{"operationId":"getUpload","summary":"One uploaded source file","security":[{"apiKey":[]}],"parameters":[{"name":"uploadId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"Upload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicUpload"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/orders":{"post":{"operationId":"createOrder","summary":"Create an order and pay it from the balance. Idempotency-Key is required: the same key and hashed order body return the same order (200, Idempotent-Replay: true) and never charge twice. webhook_url is not part of that hash; on a replay, a valid new URL updates the order callback destination to the last supplied URL.","security":[{"apiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{8,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrderRequest"}}}},"responses":{"200":{"description":"Replay of an earlier request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrder"}}},"headers":{"Idempotent-Replay":{"description":"true when the existing idempotent order is returned","schema":{"const":"true"}},"X-Anycon-Webhook-Url-Ignored":{"description":"true when a replay carried a webhook_url whose host name could not be resolved right now: the order is returned unchanged and its callback address was NOT updated; repeat the request later to update it","schema":{"const":"true"}}}},"201":{"description":"Created and paid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrder"}}}},"400":{"description":"E_VALIDATION (also copies outside 1..10), E_IDEMPOTENCY_KEY_REQUIRED, E_OPTION_NOT_APPLICABLE, E_WEBHOOK_URL_INVALID (webhook_url is not https / not public / has a port other than 80 and 443 / does not resolve; a replay of an already paid order tolerates a temporary DNS failure)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"402":{"description":"E_INSUFFICIENT_FUNDS: the balance is too small; top up in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND (upload)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"E_IDEMPOTENCY_CONFLICT (same key, other body) / E_CONFLICT (the same request is still being processed; Retry-After says when to repeat it with the same key)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"description":"seconds; present for E_CONFLICT","schema":{"type":"integer"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"get":{"operationId":"listOrders","summary":"Your API orders, newest first","security":[{"apiKey":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrderPage"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/orders/{orderId}":{"delete":{"operationId":"deleteOrder","summary":"Hide own terminal order; schedule files for retention cleanup, preserving payments and receipts. Idempotent.","security":[{"apiKey":[]}],"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"Deletion scheduled","content":{"application/json":{"schema":{"type":"object","required":["deleted","cleanup"],"properties":{"deleted":{"const":true},"cleanup":{"const":"scheduled"}}}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"E_CONFLICT: processing or awaiting payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"get":{"operationId":"getOrder","summary":"One order","security":[{"apiKey":[]}],"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"x-polling":{"initialSeconds":5,"laterSeconds":15},"responses":{"200":{"description":"Order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrder"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND (also for another customer's order)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/orders/{orderId}/cancel":{"post":{"operationId":"cancelOrder","summary":"Cancel before processing started; the amount returns to the balance. Later: E_CANCEL_TOO_LATE.","security":[{"apiKey":[]}],"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"Cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCancel"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"E_CANCEL_TOO_LATE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/orders/{orderId}/results":{"get":{"operationId":"getOrderResults","summary":"Result files of a completed order with temporary download links (E_ORDER_NOT_READY before that)","security":[{"apiKey":[]}],"parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"Files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicResults"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"E_ORDER_NOT_READY","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/public/v1/downloads/{token}":{"get":{"operationId":"downloadFile","summary":"Temporary download link from /results (the token is the credential; no Authorization header)","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Stored artifact bytes; Content-Type is the file mime_type returned by /results.","content":{"image/jpeg":{"schema":{"type":"string","contentEncoding":"binary"}},"image/png":{"schema":{"type":"string","contentEncoding":"binary"}},"image/webp":{"schema":{"type":"string","contentEncoding":"binary"}},"image/gif":{"schema":{"type":"string","contentEncoding":"binary"}},"image/tiff":{"schema":{"type":"string","contentEncoding":"binary"}},"image/bmp":{"schema":{"type":"string","contentEncoding":"binary"}},"image/heif":{"schema":{"type":"string","contentEncoding":"binary"}},"image/heic":{"schema":{"type":"string","contentEncoding":"binary"}},"image/avif":{"schema":{"type":"string","contentEncoding":"binary"}},"video/mp4":{"schema":{"type":"string","contentEncoding":"binary"}},"video/quicktime":{"schema":{"type":"string","contentEncoding":"binary"}},"video/3gpp":{"schema":{"type":"string","contentEncoding":"binary"}},"video/x-matroska":{"schema":{"type":"string","contentEncoding":"binary"}},"video/webm":{"schema":{"type":"string","contentEncoding":"binary"}},"application/json":{"schema":{"type":"string","contentEncoding":"binary"}}},"headers":{"X-Artifact-SHA256":{"description":"SHA-256 hex digest of the downloaded artifact","schema":{"type":"string","pattern":"^[0-9a-f]{64}$"}}}},"404":{"description":"E_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"410":{"description":"E_DOWNLOAD_EXPIRED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}}}},"/api/public/v1/webhooks/test":{"post":{"operationId":"sendTestWebhook","summary":"Deliver a signed ping synchronously to the supplied URL, or to the account webhook when url is omitted","description":"The JSON body is required; use `{}` to test the account webhook. The response is returned only after the recipient answers 2xx.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWebhookTestRequest"}}}},"responses":{"202":{"description":"The recipient answered 2xx and the ping was delivered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWebhookTest"}}}},"400":{"description":"E_WEBHOOK_URL_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"E_API_KEY_INVALID: missing, malformed, revoked key or a blocked account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"E_REGISTRATION_REQUIRED: the account behind the key has not confirmed its e-mail and phone yet (only while the operator enables the registration gate); finish the registration in the cabinet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"E_NOT_FOUND (no account webhook URL when `url` is omitted)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"429":{"description":"E_RATE_LIMITED (60 requests per minute per key) or E_QUOTA_EXCEEDED; Retry-After says when to retry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"E_SERVICE_UNAVAILABLE (recipient delivery failed or did not answer 2xx)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}}}},"/api/public/v1/openapi.json":{"get":{"summary":"This document","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document"}}}}}}