{"components":{"schemas":{"Activation":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"device_id":{"type":"string"},"device_name":{"type":"string"},"generation":{"type":"integer"},"id":{"format":"uuid","type":"string"},"last_seen_at":{"format":"date-time","type":"string"},"license_id":{"format":"uuid","type":"string"},"product_id":{"format":"uuid","type":"string"},"released_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"status":{"enum":["active","released"],"type":"string"}},"required":["id","product_id","license_id","device_id","status"],"type":"object"},"ActivationList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Activation"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"AdminPlanList":{"additionalProperties":false,"properties":{"currencies":{"items":{"pattern":"^[A-Z]{3}$","type":"string"},"type":"array"},"items":{"items":{"$ref":"#/components/schemas/Price"},"type":"array"},"settings":{"$ref":"#/components/schemas/DefaultPlan"}},"required":[],"type":"object"},"AttemptList":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":[],"type":"object"},"Audit":{"additionalProperties":false,"properties":{"action":{"type":"string"},"actor_id":{"format":"uuid","type":"string"},"actor_kind":{"enum":["session","api_key","system"],"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"request_id":{"type":"string"},"resource_id":{"maxLength":36,"type":"string"}},"required":["id","action","resource_id","created_at"],"type":"object"},"AuditList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Audit"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"AutoRenewal":{"additionalProperties":false,"properties":{"amount_cents":{"minimum":0,"type":"integer"},"currency":{"type":"string"},"enabled":{"type":"boolean"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"price_version":{"type":"string"},"status":{"enum":["disabled","enabled","insufficient_balance","price_changed","plan_changed","plan_unavailable","account_unavailable"],"type":"string"},"term_months":{"enum":[1,3,6,12],"type":"integer"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"string"}},"required":["mode","enabled","plan","plan_name","currency","price_version","term_months","amount_cents","status","version","updated_at"],"type":"object"},"AutoRenewalInput":{"additionalProperties":false,"properties":{"currency":{"type":"string"},"enabled":{"type":"boolean"},"expected_version":{"type":"string"},"plan":{"type":"string"},"price_version":{"type":"string"},"term_months":{"enum":[1,3,6,12],"type":"integer"}},"required":["enabled","expected_version"],"type":"object"},"AutoRenewalResult":{"additionalProperties":false,"properties":{"next_renewal_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"setting":{"$ref":"#/components/schemas/AutoRenewal"}},"required":["setting","next_renewal_at"],"type":"object"},"BatchInput":{"additionalProperties":false,"properties":{"days":{"maximum":36500,"minimum":1,"type":"integer"},"entries":{"items":{"additionalProperties":false,"properties":{"customer":{"maxLength":120,"type":"string"},"customer_email":{"maxLength":254,"type":"string"}},"required":[],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"ids":{"items":{"format":"uuid","type":"string"},"maxItems":100,"minItems":1,"type":"array","uniqueItems":true},"operation":{"enum":["create","renew","revoke","apply_policy"],"type":"string"},"policy_id":{"format":"uuid","type":"string"},"preview_token":{"type":"string","writeOnly":true},"product_id":{"format":"uuid","type":"string"},"request_id":{"format":"uuid","type":"string"}},"required":["request_id","operation"],"type":"object"},"BatchResult":{"additionalProperties":true,"description":"Atomic batch count and items; creation includes once-issued secrets and idempotent recovery.","type":"object"},"BillingJob":{"additionalProperties":false,"properties":{"attempts":{"type":"integer"},"available_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"last_error":{"type":"string"},"month":{"type":"string"},"status":{"enum":["pending","running","done","failed"],"type":"string"}},"required":["id","month","status"],"type":"object"},"BillingJobList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/BillingJob"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"BundleInput":{"additionalProperties":false,"properties":{"app_version":{"pattern":"^(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})$","type":"string"},"language":{"enum":["go","java","c","cpp","csharp","python","javascript"],"type":"string"},"license_key":{"type":"string","writeOnly":true}},"required":["language","license_key"],"type":"object"},"BuyPlan":{"additionalProperties":false,"properties":{"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"price_version":{"type":"string"},"renewal":{"default":false,"description":"Explicit advance renewal. Payment is collected now and prepaid coverage is extended immediately. The next quota cycle follows existing paid or gifted coverage. No reset of current use. Renew the latest paid plan and currency; expired customers may also buy normally.","type":"boolean"},"request_id":{"maxLength":80,"type":"string"},"term_months":{"default":1,"description":"Contract duration. Omission defaults to one month. Changing duration on a reused request_id returns 409.","enum":[1,3,6,12],"type":"integer"}},"required":["plan","currency","price_version","request_id"],"type":"object"},"CSRF":{"additionalProperties":false,"properties":{"csrf_token":{"type":"string"}},"required":["csrf_token"],"type":"object"},"ChangePassword":{"additionalProperties":false,"properties":{"current_password":{"description":"12–128 UTF-8 bytes, not characters","type":"string","writeOnly":true},"password":{"description":"12–128 UTF-8 bytes, not characters","type":"string","writeOnly":true},"password_confirmation":{"description":"Required and must match password exactly","type":"string","writeOnly":true}},"required":["current_password","password","password_confirmation"],"type":"object"},"Consumption":{"additionalProperties":false,"properties":{"feature":{"description":"本次消耗的功能标识。","type":"string"},"limit":{"description":"本周期套餐内的功能次数上限。","type":"integer"},"overage":{"description":"本周期累计超过 limit 的次数，不是金额；功能超额上限由授权策略决定。","type":"integer"},"period":{"description":"计次周期的标识：按月为 YYYY-MM，按日为 YYYY-MM-DD，终身为 lifetime。日/月边界按 UTC。","type":"string"},"quantity":{"description":"本次业务申请的次数，整数 1–1000000000。","type":"integer"},"remaining":{"description":"remaining = max(0, limit - used - reserved)，不含超额次数。","type":"integer"},"reserved":{"description":"本周期仍有效的预留次数，尚未扣除。","type":"integer"},"reset_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"description":"下次重置时间，UTC ISO 8601 日期；终身计次为 null。"},"used":{"description":"本周期已确认扣除的次数，不包含预留。","type":"integer"}},"required":[],"type":"object"},"ConsumptionResult":{"additionalProperties":false,"properties":{"activation_id":{"description":"设备绑定或运行会话 UUID。保存后用于后续授权请求，不是许可证密钥。","format":"uuid","type":"string"},"consumption":{"$ref":"#/components/schemas/Consumption"},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"当前心跳间隔，单位秒；计次不更新签名或心跳调度。","type":"integer"}},"required":["activation_id","consumption"],"type":"object"},"CustomerAssignment":{"additionalProperties":false,"properties":{"email":{"description":"Blank removes portal linkage","type":"string"},"name":{"maxLength":120,"type":"string"}},"required":["email"],"type":"object"},"CustomerControlsInput":{"additionalProperties":false,"anyOf":[{"required":["device_enabled"]},{"required":["api_enabled"]}],"properties":{"api_enabled":{"type":"boolean"},"device_enabled":{"type":"boolean"}},"required":[],"type":"object"},"CustomerControlsResult":{"additionalProperties":false,"properties":{"api_enabled":{"type":"boolean"},"device_enabled":{"type":"boolean"}},"required":["device_enabled","api_enabled"],"type":"object"},"CustomerLicenses":{"additionalProperties":false,"properties":{"email":{"type":"string"},"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["email","items"],"type":"object"},"CustomerReleaseInput":{"additionalProperties":false,"description":"Confirm release before submitting. send_email optionally queues the temporary code to the verified customer address; generation guards a stale device view.","properties":{"generation":{"minimum":1,"type":"integer"},"send_email":{"type":"boolean"}},"required":[],"type":"object"},"CustomerReleaseResult":{"additionalProperties":false,"properties":{"email_queued":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"status":{"const":"released","type":"string"},"transfer":{"anyOf":[{"$ref":"#/components/schemas/TransferCode"},{"type":"null"}]}},"required":["id","status","transfer","email_queued"],"type":"object"},"CustomerSession":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"}},"required":[],"type":"object"},"DatabaseStatus":{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"database":{"type":"string"},"host":{"type":"string"},"open_connections":{"type":"integer"},"version":{"type":"string"}},"required":["connected","host","database"],"type":"object"},"DefaultPlan":{"additionalProperties":false,"properties":{"allow_customer_api_overage":{"default":false,"description":"Allows customer API overage choices only. Independent of the device permission. When false, API usage follows administrator rules. Unlimited API remains unlimited.","type":"boolean"},"allow_customer_device_overage":{"default":false,"description":"Allows customer device overage choices only. When false, device usage follows administrator rules and saved customer device choices are ignored until re-enabled.","type":"boolean"},"default_currency":{"pattern":"^[A-Z]{3}$","type":"string"},"default_plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"}},"required":["default_plan","default_currency"],"type":"object"},"DeliveryList":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":[],"type":"object"},"DeviceProfile":{"additionalProperties":false,"properties":{"hardware_id":{"description":"基于产品和硬件身份的 SHA-256；无法取得时为空字符串，要求硬件的策略将拒绝。","type":"string"},"platform":{"description":"本机操作系统：windows、linux 或 darwin（macOS）。","enum":["windows","linux","darwin"],"type":"string"},"system_id":{"description":"基于产品和系统身份的 SHA-256，小写十六进制 64 字符。","pattern":"^[0-9a-f]{64}$","type":"string"},"version":{"const":3,"description":"设备指纹协议版本，当前固定为 3。","type":"integer"},"virtual_machine":{"description":"SDK 检测到是否在虚拟机中运行，布尔值。","type":"boolean"}},"required":["version","system_id","hardware_id","virtual_machine","platform"],"type":"object"},"EligibleReleases":{"additionalProperties":false,"properties":{"authorization":{"additionalProperties":true,"type":"object"},"items":{"items":{"$ref":"#/components/schemas/Release"},"type":"array"}},"required":[],"type":"object"},"Email":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"}},"required":["email"],"type":"object"},"Empty":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"Error":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"request_id":{"description":"服务器为本次 HTTP 请求生成的 UUID，用于查日志。不是许可证 ID，也不是幂等请求编号。","format":"uuid","type":"string"}},"required":["error","request_id"],"type":"object"},"FeatureReservation":{"additionalProperties":false,"properties":{"consumption":{"$ref":"#/components/schemas/Consumption","description":"这次功能计次的回执，包含本次扣除、累计用量、剩余额度和下次重置时间。"},"expires_at":{"description":"预留的截止时间，UTC；必须在此之前确认。","format":"date-time","type":"string"},"operation_id":{"description":"最初预留时使用的业务编号，重试保持不变。","type":"string"},"reservation_id":{"description":"预留编号，确认或取消时传入此值。","format":"uuid","type":"string"},"status":{"description":"pending 可执行业务；committed 已扣次；canceled 和 expired 已关闭且未扣次。","enum":["pending","committed","canceled","expired"],"type":"string"}},"required":["reservation_id","operation_id","status","expires_at","consumption"],"type":"object"},"ForumAuthor":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"ForumImage":{"additionalProperties":false,"properties":{"height":{"type":"integer"},"id":{"format":"uuid","type":"string"},"size":{"type":"integer"},"url":{"type":"string"},"width":{"type":"integer"}},"required":["id","url","width","height","size"],"type":"object"},"ForumReply":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/ForumAuthor"},"body":{"type":"string"},"can_edit":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"$ref":"#/components/schemas/ForumImage"},"type":"array"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","body","author","images","created_at","updated_at","can_edit"],"type":"object"},"ForumReplyInput":{"additionalProperties":false,"properties":{"body":{"maxLength":12000,"minLength":1,"type":"string"},"image_ids":{"items":{"format":"uuid","type":"string"},"maxItems":6,"type":"array","uniqueItems":true}},"required":["body"],"type":"object"},"ForumTopic":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/ForumAuthor"},"body":{"type":"string"},"can_edit":{"type":"boolean"},"can_moderate":{"type":"boolean"},"category":{"enum":["integration","help","ideas","showcase"],"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"$ref":"#/components/schemas/ForumImage"},"type":"array"},"language":{"enum":["en","zh","zh-hant","hi","es","ar","fr","bn","pt","id","ur"],"type":"string"},"last_reply_at":{"format":"date-time","type":"string"},"locked":{"type":"boolean"},"reply_count":{"type":"integer"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","title","body","category","language","locked","author","images","reply_count","created_at","updated_at","last_reply_at","can_edit","can_moderate"],"type":"object"},"ForumTopicDetail":{"additionalProperties":false,"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"replies":{"items":{"$ref":"#/components/schemas/ForumReply"},"type":"array"},"topic":{"$ref":"#/components/schemas/ForumTopic"},"total":{"type":"integer"}},"required":["topic","replies","total","limit","offset"],"type":"object"},"ForumTopicInput":{"additionalProperties":false,"properties":{"body":{"maxLength":12000,"minLength":1,"type":"string"},"category":{"enum":["integration","help","ideas","showcase"],"type":"string"},"image_ids":{"items":{"format":"uuid","type":"string"},"maxItems":6,"type":"array","uniqueItems":true},"language":{"enum":["en","zh","zh-hant","hi","es","ar","fr","bn","pt","id","ur"],"type":"string"},"title":{"maxLength":180,"minLength":2,"type":"string"}},"required":["title","body","category","language"],"type":"object"},"ForumTopicList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/ForumTopic"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","limit","offset"],"type":"object"},"ForumTranslationInput":{"additionalProperties":false,"properties":{"reply_id":{"format":"uuid","type":"string"},"target_language":{"description":"Select a language returned by GET /forum/translation.","type":"string"}},"required":["target_language"],"type":"object"},"ForumTranslationResult":{"additionalProperties":false,"properties":{"body":{"description":"Translated plain text. Render with textContent, never as HTML.","type":"string"},"cached":{"type":"boolean"},"provider":{"type":"string"},"source_language":{"description":"Detected source language reported by DeepL.","type":"string"},"target_language":{"description":"Chosen provider target language.","type":"string"},"title":{"description":"Translated topic title; empty for replies.","type":"string"}},"required":["title","body","source_language","target_language","cached","provider"],"type":"object"},"Health":{"additionalProperties":false,"properties":{"status":{"enum":["ok","ready"],"type":"string"}},"required":["status"],"type":"object"},"ID":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"Invite":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"role":{"enum":["owner","read_only"],"type":"string"}},"required":["email","name","role"],"type":"object"},"Invited":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"message":{"type":"string"}},"required":["id","message"],"type":"object"},"Invoice":{"additionalProperties":false,"properties":{"active_devices":{"type":"integer"},"base_covered":{"type":"boolean"},"base_micros":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"finalized_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"included_devices":{"type":"integer"},"month":{"type":"string"},"overage_devices":{"type":"integer"},"paid_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"payment_mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"price_version":{"type":"string"},"refunded_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"status":{"enum":["draft","finalized","void"],"type":"string"},"total_cents":{"type":"integer"},"total_micros":{"type":"integer"},"unit_micros":{"type":"integer"},"voided_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["id","month","currency","status","total_cents"],"type":"object"},"InvoiceList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Invoice"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"Key":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"revoked":{"type":"boolean"},"scope":{"enum":["read","write"],"type":"string"}},"required":["id","prefix","scope","revoked"],"type":"object"},"KeyBundle":{"additionalProperties":false,"properties":{"keys":{"items":{"$ref":"#/components/schemas/SigningKey"},"type":"array"},"product_id":{"format":"uuid","type":"string"},"protocol":{"type":"string"},"runtime_policy_source":{"const":"current_license_policy","type":"string"}},"required":["product_id","keys"],"type":"object"},"KeyCreate":{"additionalProperties":false,"properties":{"expires_days":{"maximum":365,"minimum":1,"type":"integer"},"name":{"maxLength":120,"minLength":1,"type":"string"},"scope":{"enum":["read","write"],"type":"string"}},"required":["name","scope","expires_days"],"type":"object"},"KeyList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Key"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"KeySecret":{"additionalProperties":false,"properties":{"expires_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"key":{"description":"Shown only at creation/rotation","type":"string"},"prefix":{"type":"string"}},"required":["id","key","prefix"],"type":"object"},"Lease":{"additionalProperties":false,"properties":{"key_id":{"description":"签名公钥的 UUID，必须存在于产品的 trusted_keys 中。","format":"uuid","type":"string"},"payload":{"description":"原始授权 JSON 字节的 Base64URL 编码（不带填充）。解码仅用于阅读；必须验证签名。","type":"string"},"signature":{"description":"Ed25519 签名的 Base64URL 编码。验签使用 LicenovaLease/v1\\n 前缀与 payload 原始字节，不能重新序列化 JSON。","type":"string"},"version":{"const":1,"description":"签名封装协议版本，当前固定为 1。","type":"integer"}},"required":["version","key_id","payload","signature"],"type":"object"},"LeaseClaims":{"additionalProperties":false,"description":"Decode the original signed payload bytes. Legacy absent runtime_policy is capped at 86400 seconds; new leases carry signed policy. Never trust payload without signature/context verification.","properties":{"activation_id":{"format":"uuid","type":"string"},"capabilities":{"$ref":"#/components/schemas/SignedCapabilities"},"device_id":{"pattern":"^[0-9a-f]{64}$","type":"string"},"expires_at":{"maximum":253402300799,"type":"integer"},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"issued_at":{"type":"integer"},"key_id":{"format":"uuid","type":"string"},"license_id":{"format":"uuid","type":"string"},"max_devices":{"maximum":10000,"minimum":1,"type":"integer"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"offline_request_id":{"format":"uuid","type":"string"},"product_id":{"format":"uuid","type":"string"},"runtime_policy":{"$ref":"#/components/schemas/RuntimePolicy"},"tenant_id":{"format":"uuid","type":"string"},"version":{"const":1,"type":"integer"}},"required":[],"type":"object"},"License":{"additionalProperties":false,"description":"Expiry is null until first successful activation. Duration is snapshotted at issuance; reactivation never resets it.","properties":{"created_at":{"format":"date-time","type":"string"},"customer":{"type":"string"},"duration_days":{"type":["integer","null"]},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"first_activated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"key_prefix":{"type":"string"},"max_devices":{"type":"integer"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"policy_id":{"format":"uuid","type":"string"},"policy_version":{"type":"integer"},"product_id":{"format":"uuid","type":"string"},"status":{"enum":["active","expired","suspended","revoked"],"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","product_id","key_prefix","mode","status"],"type":"object"},"LicenseCapabilities":{"additionalProperties":true,"description":"Snapshot of model, metered features, maintenance and version entitlements. Secrets omitted.","type":"object"},"LicenseCapabilityResult":{"additionalProperties":false,"properties":{"customer_email":{"type":"string"},"license":{"$ref":"#/components/schemas/LicenseCapabilities"},"meter_rules":{"items":{"additionalProperties":false,"properties":{"allow_overage":{"type":"boolean"},"feature":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"limit":{"maximum":1000000000000,"minimum":0,"type":"integer"},"max_overage":{"maximum":1000000000000,"minimum":0,"type":"integer"},"period":{"enum":["month","day","lifetime"],"type":"string"}},"required":["feature","limit","period"],"type":"object"},"type":"array"},"usage":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":[],"type":"object"},"LicenseCreate":{"additionalProperties":false,"properties":{"customer":{"description":"客户名称或订单标识，用于后台检索，最多 254 字符。","maxLength":254,"type":"string"},"customer_email":{"format":"email","maxLength":254,"type":"string"},"policy_id":{"description":"该产品下的授权策略 UUID。","format":"uuid","type":"string"},"product_id":{"description":"产品 UUID。","format":"uuid","type":"string"}},"required":["product_id","policy_id"],"type":"object"},"LicenseList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/License"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"LicenseSecret":{"additionalProperties":false,"properties":{"duration_days":{"description":"首次激活后享有的有效天数。永久许可证为 null。","type":["integer","null"]},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"description":"许可证最终到期时间，UTC ISO 8601；首次激活前为 null，永久许可证也为 null。"},"first_activated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"description":"首次成功激活时间，UTC ISO 8601；尚未激活为 null。换机不重置。"},"id":{"description":"许可证记录 UUID，管理查询、续期或吊销时使用。不是激活码。","format":"uuid","type":"string"},"key":{"description":"完整许可证密钥，以 lv_lic_ 开头，只在签发时显示一次，厂商需要私密保存并交给对应客户。","type":"string"},"key_prefix":{"description":"完整密钥的前缀，供后台识别，不能用于激活。","type":"string"}},"required":["id","key","key_prefix"],"type":"object"},"LicenseUpdate":{"additionalProperties":false,"properties":{"customer":{"maxLength":254,"type":"string"},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"max_devices":{"maximum":10000,"minimum":1,"type":"integer"},"status":{"enum":["active","suspended","revoked"],"type":"string"}},"required":[],"type":"object"},"LicensingWebhookInput":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"events":{"items":{"enum":["license.created","license.updated","license.renewed","license.revoked","license.activate","license.deactivate","license.consume","license.expiring","license.expired","license.maintenance_expiring","license.maintenance_expired"],"type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"name":{"maxLength":120,"type":"string"},"secret":{"type":"string","writeOnly":true},"url":{"format":"uri","maxLength":2000,"type":"string"}},"required":["name","url","events","enabled"],"type":"object"},"LicensingWebhookList":{"additionalProperties":false,"properties":{"event_types":{"items":{"enum":["license.created","license.updated","license.renewed","license.revoked","license.activate","license.deactivate","license.consume","license.expiring","license.expired","license.maintenance_expiring","license.maintenance_expired"],"type":"string"},"type":"array"},"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":[],"type":"object"},"LicensingWebhookSecret":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"secret":{"description":"Returned once for new endpoints; empty when preserved","type":"string"}},"required":[],"type":"object"},"LoggedOut":{"additionalProperties":false,"properties":{"logged_out":{"type":"boolean"}},"required":["logged_out"],"type":"object"},"Login":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"},"password":{"description":"12–128 UTF-8 bytes, not characters","type":"string","writeOnly":true}},"required":["email","password"],"type":"object"},"MailConnection":{"additionalProperties":false,"properties":{"mode":{"enum":["file","smtp"],"type":"string"},"status":{"enum":["connected"],"type":"string"}},"required":["status","mode"],"type":"object"},"MailInput":{"additionalProperties":false,"properties":{"from":{"type":"string"},"host":{"maxLength":253,"type":"string"},"mode":{"enum":["file","smtp"],"type":"string"},"password":{"description":"Omit to preserve existing password","maxLength":1000,"type":"string","writeOnly":true},"port":{"maximum":65535,"minimum":1,"type":"integer"},"tls_mode":{"enum":["starttls","implicit"],"type":"string"},"username":{"maxLength":254,"type":"string"}},"required":["mode","port","tls_mode"],"type":"object"},"MailJob":{"additionalProperties":false,"properties":{"attempts":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"delivered_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"status":{"enum":["pending","running","delivered","failed"],"type":"string"}},"required":["id","status","attempts"],"type":"object"},"MailJobList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/MailJob"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"MailQueued":{"additionalProperties":false,"properties":{"job_id":{"format":"uuid","type":"string"},"status":{"enum":["pending"],"type":"string"}},"required":["job_id","status"],"type":"object"},"MailSettings":{"additionalProperties":false,"properties":{"from":{"type":"string"},"host":{"type":"string"},"mode":{"enum":["file","smtp"],"type":"string"},"password_configured":{"type":"boolean"},"port":{"type":"integer"},"tls_mode":{"enum":["starttls","implicit"],"type":"string"},"username":{"type":"string"}},"required":["mode","port","password_configured"],"type":"object"},"Me":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_platform_admin":{"type":"boolean"},"name":{"type":"string"},"role":{"enum":["owner","read_only"],"type":"string"},"tenant_id":{"format":"uuid","type":"string"},"tenant_name":{"type":"string"}},"required":["tenant_id","id","role","is_platform_admin"],"type":"object"},"Member":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_platform_admin":{"type":"boolean"},"name":{"type":"string"},"role":{"enum":["owner","read_only"],"type":"string"},"status":{"enum":["active","disabled"],"type":"string"},"verified":{"type":"boolean"}},"required":["id","role","status","verified"],"type":"object"},"MemberList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Member"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"MemberUpdate":{"additionalProperties":false,"properties":{"role":{"enum":["owner","read_only"],"type":"string"},"status":{"enum":["active","disabled"],"type":"string"}},"required":[],"type":"object"},"MonthInput":{"additionalProperties":false,"properties":{"month":{"pattern":"^[0-9]{4}-[0-9]{2}$","type":"string"}},"required":["month"],"type":"object"},"Notice":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"type":"object"},"OfflineRequest":{"additionalProperties":false,"properties":{"activation_id":{"format":"uuid","type":"string"},"app_version":{"pattern":"^(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})$","type":"string"},"created_at":{"type":"integer"},"device_id":{"description":"SDK derives product-scoped OS and hardware identity using LicenovaDevice/v3. Configuration cannot override the current machine.","pattern":"^[0-9a-f]{64}$","type":"string"},"device_name":{"maxLength":120,"type":"string"},"device_profile":{"$ref":"#/components/schemas/DeviceProfile"},"license_key":{"description":"Original license key; one-use lv_tmp_ code for activate only; then a machine-bound lv_dev_ credential for runtime operations. SDK persists credentials separately from leases.","pattern":"^lv_(lic|tmp|dev)_[A-Za-z0-9_-]{43}$","type":"string","writeOnly":true},"operation":{"enum":["activate","deactivate"],"type":"string"},"product_id":{"format":"uuid","type":"string"},"request_id":{"format":"uuid","type":"string"},"session_id":{"format":"uuid","type":"string"},"version":{"const":1,"type":"integer"}},"required":["version","request_id","created_at","operation","product_id","license_key","device_id"],"type":"object"},"OfflineResponse":{"additionalProperties":false,"properties":{"operation":{"enum":["activate","deactivate"],"type":"string"},"request_id":{"format":"uuid","type":"string"},"result":{"additionalProperties":true,"type":"object"},"version":{"const":1,"type":"integer"}},"required":[],"type":"object"},"OnboardingInput":{"additionalProperties":false,"properties":{"allow_vm":{"type":"boolean"},"description":{"maxLength":1000,"type":"string"},"device_match":{"enum":["system","hardware"],"type":"string"},"duration_days":{"maximum":36500,"minimum":1,"type":["integer","null"]},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"0 explicitly disables periodic heartbeats; otherwise 600–86400 seconds (minimum 10 minutes). Independent of offline allowance.","type":"integer"},"license_model":{"enum":["node_locked","floating"],"type":"string"},"maintenance_days":{"maximum":36500,"minimum":0,"type":"integer"},"max_devices":{"maximum":10000,"minimum":1,"type":"integer"},"max_version":{"type":"string"},"meter_rules":{"items":{"additionalProperties":false,"properties":{"allow_overage":{"type":"boolean"},"feature":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"limit":{"maximum":1000000000000,"minimum":0,"type":"integer"},"max_overage":{"maximum":1000000000000,"minimum":0,"type":"integer"},"period":{"enum":["month","day","lifetime"],"type":"string"}},"required":["feature","limit","period"],"type":"object"},"maxItems":32,"type":"array"},"min_version":{"type":"string"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"offline_mode":{"enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"Limited: 1–31536000 seconds; none/permanent: 0. Independent of heartbeat interval","maximum":31536000,"minimum":0,"type":"integer"},"request_id":{"format":"uuid","type":"string"},"require_hardware":{"type":"boolean"},"self_release_limit":{"maximum":100,"minimum":0,"type":"integer"},"session_seconds":{"maximum":86400,"minimum":20,"type":"integer"}},"required":["request_id","name"],"type":"object"},"OnboardingResult":{"additionalProperties":true,"description":"Atomically created product, policy, test license, public keys and ready-to-use SDK config; encrypted result recovered by request_id.","type":"object"},"OveragePreference":{"additionalProperties":false,"properties":{"block_api_overage":{"type":"boolean"},"block_device_overage":{"type":"boolean"},"mode":{"enum":["sandbox","live"],"type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"string"}},"required":["mode","block_device_overage","block_api_overage","version","updated_at"],"type":"object"},"OverageSettings":{"additionalProperties":false,"properties":{"customer_api_settings_enabled":{"type":"boolean"},"customer_device_settings_enabled":{"type":"boolean"},"plan":{"anyOf":[{"$ref":"#/components/schemas/Price"},{"type":"null"}]},"preference":{"$ref":"#/components/schemas/OveragePreference"}},"required":["preference","plan","customer_device_settings_enabled","customer_api_settings_enabled"],"type":"object"},"OverageSettingsInput":{"additionalProperties":false,"properties":{"block_api_overage":{"type":"boolean"},"block_device_overage":{"type":"boolean"},"expected_version":{"description":"Use preference.version from GET. Empty for the first save. Changes from another tab return 409; at least one overage choice is required.","type":"string"}},"required":["expected_version"],"type":"object"},"PasswordSet":{"additionalProperties":false,"properties":{"password_set":{"type":"boolean"}},"required":["password_set"],"type":"object"},"PayPalCheck":{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"mode":{"enum":["sandbox","live"],"type":"string"}},"required":[],"type":"object"},"PayPalInput":{"additionalProperties":false,"properties":{"clear_secret":{"type":"boolean"},"client_id":{"maxLength":1000,"type":"string"},"client_secret":{"description":"Empty preserves saved Secret unless clear_secret=true","maxLength":1000,"type":"string","writeOnly":true},"currencies":{"items":{"pattern":"^[A-Z]{3}$","type":"string"},"type":"array"},"enabled":{"type":"boolean"},"expected_version":{"type":"string"},"maximum_cents":{"maximum":100000000,"type":"integer"},"merchant_id":{"maxLength":64,"type":"string"},"minimum_cents":{"minimum":1,"type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"webhook_id":{"maxLength":1000,"type":"string"}},"required":["enabled","mode","client_id","merchant_id","webhook_id","currencies","minimum_cents","maximum_cents","expected_version"],"type":"object"},"PayPalOrder":{"additionalProperties":false,"properties":{"amount_cents":{"type":"integer"},"approval_url":{"format":"uri","type":"string"},"capture_id":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"},"credited_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"id":{"format":"uuid","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"paypal_order_id":{"type":["string","null"]},"purchase_id":{"type":["string","null"]},"refunded_cents":{"type":"integer"},"request_id":{"type":"string"},"status":{"enum":["creating","created","credited","refunded"],"type":"string"},"upgrade_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]}},"required":[],"type":"object"},"PayPalOrderList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PayPalOrder"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":[],"type":"object"},"PayPalRefund":{"additionalProperties":false,"properties":{"amount_cents":{"description":"Requested original-route cash refund in cents.","type":"integer"},"attempts":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"order_id":{"format":"uuid","type":"string"},"paypal_refund_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string"},"request_id":{"type":"string"},"reserved":{"description":"True while the wallet amount is held. A transport timeout retains the hold until the same request is reconciled.","type":"boolean"},"status":{"enum":["pending","completed","failed"],"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","order_id","request_id","mode","currency","amount_cents","reason","status","reserved","attempts","paypal_refund_id","created_at","updated_at"],"type":"object"},"PayPalSettings":{"additionalProperties":false,"properties":{"client_id":{"maxLength":1000,"type":"string"},"currencies":{"items":{"pattern":"^[A-Z]{3}$","type":"string"},"type":"array"},"enabled":{"type":"boolean"},"maximum_cents":{"maximum":100000000,"type":"integer"},"merchant_id":{"maxLength":64,"type":"string"},"minimum_cents":{"minimum":1,"type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"secret_configured":{"type":"boolean"},"version":{"type":"string"},"webhook_id":{"maxLength":1000,"type":"string"},"webhook_url":{"format":"uri","type":"string"}},"required":[],"type":"object"},"PendingPlan":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"effective_month":{"type":"string"},"plan":{"type":"string"},"price_version":{"type":"string"}},"required":[],"type":"object"},"Period":{"additionalProperties":false,"properties":{"base_covered":{"type":"boolean"},"base_micros":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"hard_limit":{"type":"boolean"},"included_devices":{"type":"integer"},"month":{"type":"string"},"payment_mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"price_version":{"type":"string"},"unit_micros":{"type":"integer"}},"required":["month","plan","currency","price_version"],"type":"object"},"PlanChange":{"additionalProperties":false,"properties":{"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"price_version":{"type":"string"}},"required":["plan","currency"],"type":"object"},"PlanGift":{"additionalProperties":false,"properties":{"batch_id":{"format":"uuid","type":"string"},"cancel_reason":{"type":"string"},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"cancelled_by":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"purchase_id":{"format":"uuid","type":"string"},"starts_at":{"format":"date-time","type":"string"},"status":{"enum":["granted","cancelled"],"type":"string"},"tenant_id":{"format":"uuid","type":"string"},"user_id":{"format":"uuid","type":"string"},"value_cents":{"type":"integer"}},"required":["id","batch_id","tenant_id","user_id","purchase_id","value_cents","status","starts_at","ends_at","created_at","cancelled_at"],"type":"object"},"PlanGiftBatch":{"additionalProperties":false,"properties":{"actor_id":{"format":"uuid","type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"price_version":{"type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"request_id":{"type":"string"},"start_mode":{"type":"string"},"tenant_count":{"type":"integer"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"user_count":{"type":"integer"}},"required":["id","actor_id","request_id","plan","plan_name","currency","price_version","term_months","mode","start_mode","reason","user_count","tenant_count","created_at"],"type":"object"},"PlanGiftCancellation":{"additionalProperties":false,"properties":{"cancelled":{"type":"boolean"}},"required":["cancelled"],"type":"object"},"PlanGiftInput":{"additionalProperties":false,"properties":{"currency":{"maxLength":3,"minLength":3,"type":"string"},"fingerprint":{"maxLength":64,"minLength":64,"type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"price_version":{"type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"request_id":{"maxLength":80,"minLength":1,"type":"string"},"start_mode":{"default":"after_current","enum":["after_current","immediate"],"type":"string"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"user_ids":{"items":{"format":"uuid","type":"string"},"maxItems":100,"minItems":1,"type":"array","uniqueItems":true}},"required":["user_ids","term_months","mode","start_mode","reason","request_id","fingerprint"],"type":"object"},"PlanGiftList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PlanGiftRow"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"PlanGiftPreview":{"additionalProperties":false,"properties":{"fingerprint":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/PlanGiftTarget"},"type":"array"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan_name":{"type":"string"},"start_mode":{"default":"after_current","enum":["after_current","immediate"],"type":"string"},"tenant_count":{"type":"integer"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"user_count":{"type":"integer"},"value_cents":{"type":"integer"}},"required":["fingerprint","plan_name","value_cents","user_count","tenant_count","mode","term_months","start_mode","items"],"type":"object"},"PlanGiftPreviewInput":{"additionalProperties":false,"properties":{"currency":{"maxLength":3,"minLength":3,"type":"string"},"fingerprint":{"maxLength":64,"minLength":64,"type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"price_version":{"type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"request_id":{"maxLength":80,"minLength":1,"type":"string"},"start_mode":{"default":"after_current","enum":["after_current","immediate"],"type":"string"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"user_ids":{"items":{"format":"uuid","type":"string"},"maxItems":100,"minItems":1,"type":"array","uniqueItems":true}},"required":["user_ids","mode","reason"],"type":"object"},"PlanGiftResult":{"additionalProperties":false,"properties":{"batch":{"$ref":"#/components/schemas/PlanGiftBatch"},"items":{"items":{"$ref":"#/components/schemas/PlanGift"},"type":"array"}},"required":["batch","items"],"type":"object"},"PlanGiftRow":{"additionalProperties":false,"properties":{"actor_email":{"type":"string"},"batch_id":{"format":"uuid","type":"string"},"cancel_reason":{"type":"string"},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"cancelled_by":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"email":{"type":"string"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"purchase_id":{"format":"uuid","type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"starts_at":{"format":"date-time","type":"string"},"status":{"enum":["granted","cancelled"],"type":"string"},"tenant_id":{"format":"uuid","type":"string"},"tenant_name":{"type":"string"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"user_id":{"format":"uuid","type":"string"},"value_cents":{"type":"integer"}},"required":["id","batch_id","tenant_id","user_id","purchase_id","value_cents","status","starts_at","ends_at","created_at","cancelled_at"],"type":"object"},"PlanGiftTarget":{"additionalProperties":false,"properties":{"currency":{"type":"string"},"email":{"type":"string"},"ends_at":{"format":"date-time","type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"previous_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"price_version":{"type":"string"},"starts_at":{"format":"date-time","type":"string"},"tenant_id":{"format":"uuid","type":"string"},"tenant_name":{"type":"string"},"user_id":{"format":"uuid","type":"string"},"value_cents":{"type":"integer"}},"required":["user_id","email","tenant_id","tenant_name","starts_at","ends_at","previous_end","plan","plan_name","currency","price_version","value_cents"],"type":"object"},"PlanInput":{"additionalProperties":false,"properties":{"api_hard_limit":{"type":"boolean"},"api_unit_amount":{"description":"Nonnegative decimal per successful API call, six places maximum","type":"string"},"base_amount":{"description":"Nonnegative decimal; two places maximum","type":"string"},"currency":{"description":"Must be configured; EUR catalog offers are disabled","pattern":"^[A-Z]{3}$","type":"string"},"description":{"maxLength":1000,"type":"string"},"enabled":{"type":"boolean"},"expected_version":{"description":"Current version; empty when creating","type":"string"},"hard_limit":{"type":"boolean"},"included_api_calls":{"description":"null = unlimited; 0 = no included successful calls","maximum":1000000000000,"minimum":0,"type":["integer","null"]},"included_devices":{"maximum":1000000000,"minimum":0,"type":"integer"},"name":{"maxLength":120,"minLength":1,"type":"string"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"public":{"type":"boolean"},"renewal_only":{"description":"Existing paid or gifted customers may renew in advance or after expiry in the same environment and currency. Hidden from new public purchases.","type":"boolean"},"sort_order":{"maximum":10000,"minimum":0,"type":"integer"},"terms":{"description":"Exactly one entry for 1, 3, 6 and 12 months, each with its own availability and total price.","items":{"$ref":"#/components/schemas/PlanTermInput"},"maxItems":4,"minItems":4,"type":"array"},"unit_amount":{"description":"Nonnegative decimal; six places maximum","type":"string"}},"required":["plan","currency","name","base_amount","unit_amount"],"type":"object"},"PlanList":{"additionalProperties":false,"properties":{"billing_unit":{"type":"string"},"currencies":{"items":{"pattern":"^[A-Z]{3}$","type":"string"},"type":"array"},"default_plan":{"anyOf":[{"$ref":"#/components/schemas/Price"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/Price"},"type":"array"},"maximum_cents":{"type":"integer"},"minimum_cents":{"type":"integer"},"paypal_enabled":{"type":"boolean"},"sandbox":{"type":"boolean"},"timezone":{"type":"string"}},"required":[],"type":"object"},"PlanPurchase":{"additionalProperties":false,"properties":{"api_calls":{"description":"For PurchaseList.active: successful calls in the current quota month. Historical items contain lifetime totals.","type":"integer"},"api_hard_limit":{"type":"boolean"},"api_overage_cents":{"description":"Current quota month in the active view; lifetime API overage charges in historical items.","type":"integer"},"api_unit_micros":{"minimum":0,"type":"integer"},"base_cents":{"description":"Actual initial charge for the whole contract; zero for a gift. The active effective upgrade view contains the full matching-duration target price.","type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"current_cycle_index":{"maximum":11,"minimum":0,"type":"integer"},"current_upgrade_id":{"description":"Empty before an upgrade. Otherwise points to the latest applied PlanUpgrade. The active response includes its effective plan snapshot, while historical purchases retain their original sale price.","type":"string"},"cycle_ends_at":{"format":"date-time","type":"string"},"cycle_starts_at":{"format":"date-time","type":"string"},"effective_included_devices":{"description":"Device allowance after the applied upgrade. Original purchase snapshots remain unchanged.","minimum":0,"type":"integer"},"effective_plan":{"description":"Current entitlement after an explicit upgrade overlay. Purchase list keeps original plan/base_cents for cash history; use this field to show the currently effective tier.","type":"string"},"effective_plan_name":{"description":"Current entitlement after an explicit upgrade overlay. Purchase list keeps original plan/base_cents for cash history; use this field to show the currently effective tier.","type":"string"},"ends_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"entitlement_cents":{"description":"Benefit value of the current effective package for upgrade credit, in currency cents. A gifted 99 USD plan has 9900 benefit cents although its original base_cents payment is zero. This value is not refundable cash. Populated on active package views.","minimum":0,"type":"integer"},"gift_batch_id":{"type":"string"},"gift_follows_current":{"default":false,"description":"Marks new gifts issued using the customer’s current tier. Historical gifts default false. No automatic rewriting or backfill. Explicit whole-coverage upgrades apply separate entitlement overlays to every unexpired gift and retain the original cash-zero gift record.","type":"boolean"},"hard_limit":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"included_api_calls":{"description":"null = unlimited; 0 = no included successful calls","maximum":1000000000000,"minimum":0,"type":["integer","null"]},"included_devices":{"type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"overage_cents":{"description":"Current quota month in the active view; lifetime device overage charges in historical items.","type":"integer"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"plan_name":{"type":"string"},"price_version":{"type":"string"},"renewal":{"type":"boolean"},"renewal_of":{"description":"Previous paid or gifted package ID. Keeps the renewal chain and original purchase history.","type":"string"},"request_id":{"type":"string"},"source":{"enum":["purchase","gift","auto_renewal"],"type":"string"},"starts_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"status":{"enum":["pending","active","cancelled","expired"],"type":"string"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"},"total_api_calls":{"type":"integer"},"total_api_overage_cents":{"type":"integer"},"total_device_overage_cents":{"type":"integer"},"unit_micros":{"type":"integer"}},"required":[],"type":"object"},"PlanTermInput":{"additionalProperties":false,"properties":{"amount":{"description":"Nonnegative duration total; at most two decimal places. The one-month amount must equal base_amount.","type":"string"},"enabled":{"type":"boolean"},"months":{"default":1,"enum":[1,3,6,12],"type":"integer"}},"required":["months","enabled","amount"],"type":"object"},"PlanTermPrice":{"additionalProperties":false,"properties":{"base_cents":{"description":"Total charge for the selected duration, in currency cents. Monthly quotas are not multiplied by this duration.","minimum":0,"type":"integer"},"enabled":{"type":"boolean"},"months":{"default":1,"enum":[1,3,6,12],"type":"integer"}},"required":["months","enabled","base_cents"],"type":"object"},"PlanUpgrade":{"additionalProperties":false,"properties":{"amount_cents":{"description":"Combined payment for every item in parts. Charged once atomically. The parent’s other proration fields describe the current period only; inspect parts for each period’s original value, target value, remaining seconds and individual difference.","type":"integer"},"api_hard_limit":{"type":"boolean"},"api_unit_micros":{"description":"New API overage rate in millionths of currency.","type":"integer"},"applied_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"base_cents":{"description":"Target monthly price in cents, not the amount due now.","type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"description":"Same currency as the current package.","type":"string"},"cycle_seconds":{"description":"Length of the original purchased cycle in seconds.","type":"integer"},"ends_at":{"format":"date-time","type":"string"},"expires_at":{"description":"15 minutes after creation or original plan expiry, whichever comes first.","format":"date-time","type":"string"},"hard_limit":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"included_api_calls":{"anyOf":[{"description":"Total API allowance for the existing cycle. Null means unlimited. Prior calls still count.","type":"integer"},{"type":"null"}]},"included_devices":{"description":"Total allowance for the existing cycle; prior device use still counts.","type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"parent_id":{"description":"Internal applied entitlement overlays point to the single parent charge. These child records are excluded from customer upgrade history and sales counts.","format":"uuid","type":"string"},"parts":{"description":"All unexpired current and future paid/gifted periods, in date order. Mandatory whole-coverage upgrade; no selectable period subset.","items":{"$ref":"#/components/schemas/UpgradePart"},"type":"array"},"plan":{"type":"string"},"plan_name":{"type":"string"},"previous_base_cents":{"description":"Effective current monthly price in cents.","type":"integer"},"previous_plan_name":{"type":"string"},"previous_upgrade_id":{"description":"The preceding upgrade ID, or empty for the first upgrade. Used to reject stale quotes.","type":"string"},"price_version":{"description":"Frozen target price version.","type":"string"},"purchase_id":{"format":"uuid","type":"string"},"remaining_seconds":{"description":"Seconds remaining at quote creation, rounded up.","type":"integer"},"request_id":{"description":"Stable client-generated key. Reusing it with different quote parameters returns 409.","type":"string"},"status":{"enum":["pending","applied","expired"],"type":"string"},"unit_micros":{"description":"New per-device overage rate in millionths of currency.","type":"integer"}},"required":["id","request_id","mode","purchase_id","previous_upgrade_id","plan","plan_name","previous_plan_name","currency","price_version","previous_base_cents","base_cents","amount_cents","included_devices","unit_micros","hard_limit","included_api_calls","api_unit_micros","api_hard_limit","remaining_seconds","cycle_seconds","ends_at","expires_at","status","created_at","applied_at"],"type":"object"},"PlatformOperation":{"additionalProperties":false,"properties":{"action":{"type":"string"},"actor_email":{"type":"string"},"actor_id":{"format":"uuid","type":"string"},"created_at":{"format":"date-time","type":"string"},"details":{"description":"JSON string containing only explicit administrative changes; never passwords, tokens or payment credentials.","type":"string"},"id":{"format":"uuid","type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"request_id":{"type":"string"},"resource_id":{"type":"string"},"tenant_id":{"type":"string"},"user_email":{"type":"string"},"user_id":{"type":"string"}},"required":["id","actor_id","action","user_id","tenant_id","resource_id","reason","details","request_id","created_at","actor_email","user_email"],"type":"object"},"PlatformOperationList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PlatformOperation"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"PlatformOverview":{"additionalProperties":false,"properties":{"at":{"format":"date-time","type":"string"},"counts":{"additionalProperties":false,"properties":{"active_packages":{"type":"integer"},"active_workspaces":{"type":"integer"},"disabled_users":{"type":"integer"},"enabled_plans":{"type":"integer"},"expiring_packages":{"type":"integer"},"failed_mail":{"type":"integer"},"gift_packages":{"type":"integer"},"new_users":{"type":"integer"},"suspended_workspaces":{"type":"integer"},"users":{"type":"integer"},"verified_users":{"type":"integer"}},"required":["users","verified_users","disabled_users","new_users","active_workspaces","suspended_workspaces","active_packages","expiring_packages","gift_packages","failed_mail","enabled_plans"],"type":"object"},"mode":{"enum":["sandbox","live"],"type":"string"},"paypal_enabled":{"type":"boolean"}},"required":["counts","mode","paypal_enabled","at"],"type":"object"},"PlatformReason":{"additionalProperties":false,"properties":{"reason":{"maxLength":500,"minLength":1,"type":"string"}},"required":["reason"],"type":"object"},"PlatformRevocation":{"additionalProperties":false,"properties":{"revoked":{"type":"boolean"}},"required":["revoked"],"type":"object"},"PlatformUser":{"additionalProperties":false,"properties":{"admin_note":{"description":"Private platform note. Customer profile fields remain unchanged.","maxLength":2000,"type":"string"},"created_at":{"format":"date-time","type":"string"},"email":{"format":"email","type":"string"},"email_verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"is_platform_admin":{"type":"boolean"},"last_login_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"name":{"type":"string"},"note_version":{"type":"string"},"role":{"enum":["owner","read_only"],"type":"string"},"status":{"enum":["active","disabled"],"type":"string"},"tenant_id":{"format":"uuid","type":"string"},"tenant_name":{"type":"string"},"tenant_status":{"enum":["active","suspended"],"type":"string"},"tenant_updated_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","tenant_id","tenant_name","tenant_status","tenant_updated_at","email","name","role","status","is_platform_admin","email_verified_at","created_at","updated_at","last_login_at","admin_note","note_version"],"type":"object"},"PlatformUserDetail":{"additionalProperties":false,"properties":{"counts":{"additionalProperties":false,"properties":{"licenses":{"type":"integer"},"products":{"type":"integer"},"users":{"type":"integer"}},"required":["users","products","licenses"],"type":"object"},"payments":{"items":{"additionalProperties":false,"properties":{"currency":{"type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"paid_cents":{"type":"integer"},"refunded_cents":{"type":"integer"}},"required":["mode","currency","paid_cents","refunded_cents"],"type":"object"},"type":"array"},"purchases":{"items":{"$ref":"#/components/schemas/PlanPurchase"},"type":"array"},"user":{"$ref":"#/components/schemas/PlatformUser"},"wallets":{"items":{"$ref":"#/components/schemas/Wallet"},"type":"array"}},"required":["user","counts","wallets","purchases","payments"],"type":"object"},"PlatformUserList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PlatformUser"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"PlatformUserUpdate":{"additionalProperties":false,"anyOf":[{"required":["status","expected_updated_at"]},{"required":["admin_note","expected_note_version"]}],"properties":{"admin_note":{"maxLength":2000,"type":"string"},"expected_note_version":{"type":"string"},"expected_updated_at":{"format":"date-time","type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"status":{"enum":["active","disabled"],"type":"string"}},"required":["reason"],"type":"object"},"PlatformWorkspaceStatus":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"status":{"enum":["active","suspended"],"type":"string"}},"required":["id","status"],"type":"object"},"PlatformWorkspaceUpdate":{"additionalProperties":false,"properties":{"expected_updated_at":{"format":"date-time","type":"string"},"reason":{"maxLength":500,"minLength":1,"type":"string"},"status":{"enum":["active","suspended"],"type":"string"}},"required":["status","reason","expected_updated_at"],"type":"object"},"Policy":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"duration_days":{"type":["integer","null"]},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"联网时多久发送一次心跳，单位秒。0 关闭周期心跳，和允许离线时长分别设置。","type":"integer"},"id":{"description":"策略 UUID，签发许可证时作为 policy_id。","format":"uuid","type":"string"},"max_devices":{"type":"integer"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"offline_mode":{"description":"limited：有限离线；none：不允许离线；permanent：不另设离线时长上限，但仍受许可证有效期限制。","enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"允许离线的秒数。limited 时 1–31536000；none/permanent 时为 0。不是心跳间隔。","maximum":31536000,"minimum":0,"type":"integer"},"product_id":{"format":"uuid","type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"description":"策略版本号，每次修改递增。应用到旧许可证时用于核对预览是否仍有效。","type":"integer"}},"required":["id","product_id","mode","version"],"type":"object"},"PolicyCapabilities":{"additionalProperties":false,"properties":{"allow_vm":{"type":"boolean"},"device_match":{"enum":["system","hardware"],"type":"string"},"license_model":{"enum":["node_locked","floating"],"type":"string"},"maintenance_days":{"maximum":36500,"minimum":0,"type":"integer"},"max_version":{"type":"string"},"meter_rules":{"items":{"additionalProperties":false,"properties":{"allow_overage":{"type":"boolean"},"feature":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"limit":{"maximum":1000000000000,"minimum":0,"type":"integer"},"max_overage":{"maximum":1000000000000,"minimum":0,"type":"integer"},"period":{"enum":["month","day","lifetime"],"type":"string"}},"required":["feature","limit","period"],"type":"object"},"maxItems":32,"type":"array"},"min_version":{"type":"string"},"policy_id":{"format":"uuid","type":"string"},"policy_version":{"type":"integer"},"product_id":{"format":"uuid","type":"string"},"require_hardware":{"type":"boolean"},"self_release_limit":{"maximum":100,"minimum":0,"type":"integer"},"session_seconds":{"maximum":86400,"minimum":20,"type":"integer"},"updated_at":{"format":"date-time","type":"string"}},"required":[],"type":"object"},"PolicyCapabilitiesInput":{"additionalProperties":false,"properties":{"allow_vm":{"type":"boolean"},"device_match":{"enum":["system","hardware"],"type":"string"},"duration_days":{"maximum":36500,"minimum":1,"type":["integer","null"]},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"0 explicitly disables periodic heartbeats; otherwise 600–86400 seconds (minimum 10 minutes). Independent of offline allowance.","type":"integer"},"license_model":{"enum":["node_locked","floating"],"type":"string"},"maintenance_days":{"maximum":36500,"minimum":0,"type":"integer"},"max_devices":{"maximum":10000,"minimum":1,"type":"integer"},"max_version":{"type":"string"},"meter_rules":{"items":{"additionalProperties":false,"properties":{"allow_overage":{"type":"boolean"},"feature":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"limit":{"maximum":1000000000000,"minimum":0,"type":"integer"},"max_overage":{"maximum":1000000000000,"minimum":0,"type":"integer"},"period":{"enum":["month","day","lifetime"],"type":"string"}},"required":["feature","limit","period"],"type":"object"},"maxItems":32,"type":"array"},"min_version":{"type":"string"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"offline_mode":{"enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"Limited: 1–31536000 seconds; none/permanent: 0. Independent of heartbeat interval","maximum":31536000,"minimum":0,"type":"integer"},"policy_version":{"minimum":1,"type":"integer"},"require_hardware":{"type":"boolean"},"self_release_limit":{"maximum":100,"minimum":0,"type":"integer"},"session_seconds":{"maximum":86400,"minimum":20,"type":"integer"}},"required":["policy_version"],"type":"object"},"PolicyCreate":{"additionalProperties":false,"description":"Create a complete policy in one transaction. Optional capability fields use the same rules as PolicyCapabilitiesInput. Invalid feature quotas or floating-seat settings do not create a partial policy.","properties":{"allow_vm":{"type":"boolean"},"device_match":{"enum":["system","hardware"],"type":"string"},"duration_days":{"description":"有效天数，timed/trial 必填，1–36500；perpetual 时不要填写。有效期从首次激活计算。","maximum":36500,"minimum":1,"type":["integer","null"]},"features":{"description":"允许使用的功能标识数组，如 [\"export\"]。标识需与软件的 CheckFeature 参数一致。","items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"联网时多久发送一次心跳，单位秒。0 关闭周期心跳，和允许离线时长分别设置。","type":"integer"},"license_model":{"enum":["node_locked","floating"],"type":"string"},"maintenance_days":{"maximum":36500,"minimum":0,"type":"integer"},"max_devices":{"description":"同一许可证可绑定的设备数，1–10000；浮动模式下用作并发席位数。","maximum":10000,"minimum":1,"type":"integer"},"max_version":{"type":"string"},"meter_rules":{"items":{"additionalProperties":false,"properties":{"allow_overage":{"type":"boolean"},"feature":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"limit":{"maximum":1000000000000,"minimum":0,"type":"integer"},"max_overage":{"maximum":1000000000000,"minimum":0,"type":"integer"},"period":{"enum":["month","day","lifetime"],"type":"string"}},"required":["feature","limit","period"],"type":"object"},"maxItems":32,"type":"array"},"min_version":{"type":"string"},"mode":{"description":"perpetual 为永久许可证；timed 为限期；trial 为试用。不是计费套餐的订阅类型。","enum":["perpetual","timed","trial"],"type":"string"},"name":{"description":"策略名称，如 30 天专业版。","maxLength":120,"minLength":1,"type":"string"},"offline_mode":{"description":"limited：有限离线；none：不允许离线；permanent：不另设离线时长上限，但仍受许可证有效期限制。","enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"允许离线的秒数。limited 时 1–31536000；none/permanent 时为 0。不是心跳间隔。","maximum":31536000,"minimum":0,"type":"integer"},"product_id":{"description":"已创建产品的 UUID。","format":"uuid","type":"string"},"require_hardware":{"type":"boolean"},"self_release_limit":{"maximum":100,"minimum":0,"type":"integer"},"session_seconds":{"maximum":86400,"minimum":20,"type":"integer"}},"required":["product_id","name","mode","max_devices"],"type":"object"},"PolicyList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Policy"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"PolicyPreview":{"additionalProperties":true,"description":"Before/after rights, blocked reasons and encrypted 10-minute preview token; apply rejects stale changes.","type":"object"},"PolicyUpdate":{"additionalProperties":false,"properties":{"duration_days":{"maximum":36500,"minimum":1,"type":["integer","null"]},"features":{"items":{"pattern":"^[A-Za-z0-9_.-]{1,64}$","type":"string"},"maxItems":32,"type":"array","uniqueItems":true},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"0 explicitly disables periodic heartbeats; otherwise 600–86400 seconds (minimum 10 minutes). Independent of offline allowance.","type":"integer"},"max_devices":{"maximum":10000,"minimum":1,"type":"integer"},"mode":{"enum":["perpetual","timed","trial"],"type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"offline_mode":{"enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"Limited: 1–31536000 seconds; none/permanent: 0. Independent of heartbeat interval","maximum":31536000,"minimum":0,"type":"integer"}},"required":[],"type":"object"},"PreviewInput":{"additionalProperties":false,"properties":{"ids":{"items":{"format":"uuid","type":"string"},"maxItems":100,"minItems":1,"type":"array","uniqueItems":true},"policy_id":{"format":"uuid","type":"string"}},"required":["policy_id","ids"],"type":"object"},"Price":{"additionalProperties":false,"properties":{"api_hard_limit":{"type":"boolean"},"api_unit_micros":{"minimum":0,"type":"integer"},"base_micros":{"type":"integer"},"currency":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"hard_limit":{"type":"boolean"},"included_api_calls":{"description":"null = unlimited; 0 = no included successful calls","maximum":1000000000000,"minimum":0,"type":["integer","null"]},"included_devices":{"type":"integer"},"name":{"type":"string"},"plan":{"type":"string"},"price_version":{"type":"string"},"public":{"type":"boolean"},"renewal_only":{"description":"Existing paid or gifted customers may renew in advance or after expiry in the same environment and currency. Hidden from new public purchases.","type":"boolean"},"sort_order":{"type":"integer"},"terms":{"items":{"$ref":"#/components/schemas/PlanTermPrice"},"type":"array"},"unit_micros":{"type":"integer"},"updated_at":{"format":"date-time","type":"string"}},"required":[],"type":"object"},"Product":{"additionalProperties":false,"properties":{"created_at":{"description":"创建时间，UTC ISO 8601 日期。","format":"date-time","type":"string"},"description":{"description":"产品说明。","type":"string"},"id":{"description":"产品 UUID，SDK 配置和创建策略时使用。","format":"uuid","type":"string"},"name":{"description":"产品名称。","maxLength":120,"minLength":1,"type":"string"},"status":{"description":"active 可正常激活；disabled 会拒绝运行授权请求。","enum":["active","disabled"],"type":"string"},"updated_at":{"description":"最后修改时间，UTC ISO 8601 日期。","format":"date-time","type":"string"}},"required":["id","name","status"],"type":"object"},"ProductCreate":{"additionalProperties":false,"properties":{"description":{"description":"软件说明，可省略，最多 1000 字符。","maxLength":1000,"type":"string"},"name":{"description":"软件的名称，1–120 字符。","maxLength":120,"minLength":1,"type":"string"}},"required":["name"],"type":"object"},"ProductList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Product"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items"],"type":"object"},"ProductUpdate":{"additionalProperties":false,"properties":{"description":{"maxLength":1000,"type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"status":{"enum":["active","disabled"],"type":"string"}},"required":[],"type":"object"},"PurchaseList":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"$ref":"#/components/schemas/PlanPurchase"},{"type":"null"}]},"active_devices":{"type":"integer"},"coverage_ends_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"description":"Total prepaid coverage end, including paid advance renewals and scheduled gifts. The active package still reports its own current quota period."},"items":{"items":{"$ref":"#/components/schemas/PlanPurchase"},"type":"array"},"mode":{"enum":["sandbox","live"],"type":"string"},"renewal_package":{"anyOf":[{"$ref":"#/components/schemas/PlanPurchase"},{"type":"null"}],"description":"Latest paid or gifted coverage, including its applied upgrade. Use this effective plan and currency to select manual or automatic renewal. Null until a package has been opened."},"total":{"type":"integer"}},"required":[],"type":"object"},"RechargeInput":{"additionalProperties":false,"description":"Link purchase_id OR upgrade_id, never both. A confirmed payment credits the wallet and settles that purchase/upgrade when its quote is still valid. Late upgrade payments stay in the wallet.","properties":{"amount":{"description":"Decimal recharge value, two places maximum","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"purchase_id":{"format":"uuid","type":["string","null"]},"request_id":{"maxLength":80,"type":"string"},"upgrade_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]}},"required":["currency","amount","request_id"],"type":"object"},"RefundInput":{"additionalProperties":false,"properties":{"amount":{"description":"Positive refund amount in the capture currency; cannot exceed remaining captured funds or available unspent wallet credit.","pattern":"^[0-9]+(?:\\.[0-9]{1,2})?$","type":"string"},"reason":{"maxLength":255,"minLength":1,"type":"string"},"request_id":{"maxLength":80,"minLength":1,"type":"string"}},"required":["amount","reason","request_id"],"type":"object"},"RefundList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PayPalRefund"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"Register":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"},"name":{"maxLength":120,"minLength":1,"type":"string"},"password":{"description":"12–128 UTF-8 bytes, not characters","type":"string","writeOnly":true},"password_confirmation":{"description":"Required and must match password exactly","type":"string","writeOnly":true},"tenant_name":{"maxLength":120,"minLength":1,"type":"string"}},"required":["email","password","password_confirmation","name","tenant_name"],"type":"object"},"Release":{"additionalProperties":true,"description":"Immutable product version, publication time, notes and optional HTTPS download with checksum.","type":"object"},"ReleaseInput":{"additionalProperties":false,"properties":{"channel":{"enum":["stable","preview"],"type":"string"},"download_url":{"format":"uri","type":"string"},"notes":{"maxLength":10000,"type":"string"},"published_at":{"format":"date-time","type":"string"},"sha256":{"pattern":"^[0-9a-fA-F]{64}$","type":"string"},"version":{"pattern":"^(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})$","type":"string"}},"required":["version"],"type":"object"},"ReleaseList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Release"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":[],"type":"object"},"Renew":{"additionalProperties":false,"properties":{"days":{"maximum":36500,"minimum":1,"type":"integer"}},"required":["days"],"type":"object"},"RenewalPlans":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/Price"},"type":"array"},"mode":{"enum":["sandbox","live"],"type":"string"}},"required":["items","mode"],"type":"object"},"Renewed":{"additionalProperties":false,"properties":{"duration_days":{"type":["integer","null"]},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"first_activated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"}},"required":["id","expires_at"],"type":"object"},"ReservationResult":{"additionalProperties":false,"properties":{"activation_id":{"description":"设备绑定或运行会话 UUID。保存后用于后续授权请求，不是许可证密钥。","format":"uuid","type":"string"},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"当前心跳间隔，单位秒；计次不更新签名或心跳调度。","type":"integer"},"reservation":{"$ref":"#/components/schemas/FeatureReservation"}},"required":["activation_id","reservation"],"type":"object"},"Revenue":{"additionalProperties":false,"properties":{"invoices":{"items":{"additionalProperties":false,"properties":{"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"month":{"type":"string"},"paid_at":{"format":"date-time","type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"refunded_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"status":{"type":"string"},"tenant_name":{"type":"string"},"total_cents":{"type":"integer"}},"required":[],"type":"object"},"type":"array"},"limit":{"type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"month":{"type":"string"},"offset":{"type":"integer"},"paid_users":{"type":"integer"},"purchase_total":{"type":"integer"},"purchases":{"items":{"additionalProperties":false,"properties":{"api_calls":{"type":"integer"},"api_overage_cents":{"type":"integer"},"base_cents":{"type":"integer"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"email":{"type":"string"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"overage_cents":{"type":"integer"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"plan_name":{"type":"string"},"source":{"enum":["purchase","gift"],"type":"string"},"starts_at":{"format":"date-time","type":"string"},"status":{"enum":["pending","active","cancelled"],"type":"string"},"tenant_name":{"type":"string"},"term_months":{"default":1,"enum":[1,3,6,12],"type":"integer"}},"required":[],"type":"object"},"type":"array"},"recharged_users":{"type":"integer"},"registered_users":{"type":"integer"},"sales":{"items":{"additionalProperties":false,"properties":{"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"quantity":{"type":"integer"},"total_cents":{"type":"integer"}},"required":[],"type":"object"},"type":"array"},"sold_subscriptions":{"type":"integer"},"timezone":{"type":"string"},"topup_total":{"type":"integer"},"topups":{"items":{"additionalProperties":false,"properties":{"amount_cents":{"type":"integer"},"credited_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"refunded_cents":{"type":"integer"},"status":{"type":"string"},"tenant_name":{"type":"string"}},"required":[],"type":"object"},"type":"array"},"total":{"type":"integer"},"totals":{"items":{"additionalProperties":false,"properties":{"consumption_cents":{"type":"integer"},"consumption_refund_cents":{"type":"integer"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"paypal_refund_cents":{"type":"integer"},"recharge_cents":{"type":"integer"}},"required":[],"type":"object"},"type":"array"},"upgrade_total":{"description":"Number of applied upgrades in the selected environment and reporting period, including free upgrades. Counted separately from initial package sales.","type":"integer"},"upgrades":{"items":{"additionalProperties":false,"properties":{"amount_cents":{"description":"Prorated amount actually paid; not the new full monthly price.","type":"integer"},"applied_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"email":{"type":"string"},"ends_at":{"description":"Original package expiry, unchanged by the upgrade.","format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"plan_name":{"description":"Target package name.","type":"string"},"previous_plan_name":{"description":"Effective package before this upgrade.","type":"string"},"tenant_name":{"type":"string"}},"required":["id","email","tenant_name","plan_name","previous_plan_name","currency","amount_cents","applied_at","ends_at"],"type":"object"},"type":"array"}},"required":[],"type":"object"},"RuntimeAPIPeriod":{"additionalProperties":false,"properties":{"api_calls":{"type":"integer"},"api_hard_limit":{"type":"boolean"},"api_overage_cents":{"type":"integer"},"api_unit_micros":{"minimum":0,"type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"included_api_calls":{"description":"null = unlimited; 0 = no included successful calls","maximum":1000000000000,"minimum":0,"type":["integer","null"]},"mode":{"enum":["sandbox","live"],"type":"string"},"month":{"type":"string"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"price_version":{"type":"string"}},"required":[],"type":"object"},"RuntimeInput":{"additionalProperties":false,"properties":{"activation_id":{"description":"上次成功激活返回的 data.activation_id。除首次 activate 外，验证、心跳、计次、解绑必须填写。","format":"uuid","type":"string"},"app_version":{"description":"当前软件版本，格式为 major.minor.patch，如 1.0.0。有维护期或版本范围限制时必须填写，不能把版本冒充为旧版。","pattern":"^(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})$","type":"string"},"device_id":{"description":"SDK 根据产品和本机系统、硬件身份计算的 64 位小写十六进制 SHA-256。不能任意填写固定值。","pattern":"^[0-9a-f]{64}$","type":"string"},"device_name":{"description":"控制台显示的设备名称，最多 120 字符，不决定设备身份。","maxLength":120,"type":"string"},"device_profile":{"$ref":"#/components/schemas/DeviceProfile","description":"SDK 自动生成的本机身份资料。策略要求硬件、拒绝虚拟机或启用硬件迁移时按策略提供。"},"feature":{"description":"本次消耗的功能标识。","maxLength":64,"type":"string"},"license_key":{"description":"完整客户授权码。lv_lic_ 为普通许可证密钥；lv_tmp_ 仅用于首次兑换激活；成功后 SDK 使用机器绑定的 lv_dev_ 凭证。不是厂商管理 API Key。","pattern":"^lv_(lic|tmp|dev)_[A-Za-z0-9_-]{43}$","type":"string","writeOnly":true},"product_id":{"description":"产品 UUID，必须与许可证所属产品一致。","format":"uuid","type":"string"},"quantity":{"description":"本次业务申请的次数，整数 1–1000000000。","maximum":1000000000,"minimum":1,"type":"integer"},"reservation_id":{"description":"预留编号，确认或取消时传入此值。","format":"uuid","type":"string"},"reservation_seconds":{"default":900,"description":"可选预留有效秒数，30–3600；默认 900，周期重置时会提前结束。","maximum":3600,"minimum":30,"type":"integer"},"session_id":{"description":"浮动授权必填：每个运行实例新建一个 UUID，同一实例的后续请求沿用。绑定设备模式可省略。","format":"uuid","type":"string"}},"required":["product_id","license_key","device_id"],"type":"object"},"RuntimePolicy":{"additionalProperties":false,"properties":{"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"联网时多久发送一次心跳，单位秒。0 关闭周期心跳，和允许离线时长分别设置。","type":"integer"},"offline_mode":{"description":"limited：有限离线；none：不允许离线；permanent：不另设离线时长上限，但仍受许可证有效期限制。","enum":["limited","none","permanent"],"type":"string"},"offline_seconds":{"description":"允许离线的秒数。limited 时 1–31536000；none/permanent 时为 0。不是心跳间隔。","maximum":31536000,"minimum":0,"type":"integer"}},"required":["heartbeat_seconds","offline_mode","offline_seconds"],"type":"object"},"RuntimeResult":{"additionalProperties":false,"properties":{"activation_id":{"description":"设备绑定或运行会话 UUID。保存后用于后续授权请求，不是许可证密钥。","format":"uuid","type":"string"},"deactivated":{"description":"解绑成功时为 true。该接口释放绑定或会话，不删除许可证、不重置有效期。","type":"boolean"},"device_key":{"description":"普通授权码或换机码激活后都会取得本机凭证，SDK 私密保存；以后启动传空授权码即可恢复。","pattern":"^lv_dev_[A-Za-z0-9_-]{43}$","type":"string"},"heartbeat_seconds":{"anyOf":[{"const":0},{"maximum":86400,"minimum":600,"type":"integer"}],"description":"建议心跳间隔，单位秒。0 时顶层字段可能省略；签名中的 runtime_policy.heartbeat_seconds 才是完整策略值。","type":"integer"},"lease":{"$ref":"#/components/schemas/Lease","description":"服务器签名的授权缓存。使用固定受信公钥验签、核对产品和设备后再接受。解绑及功能计次不返回此项。"}},"required":["activation_id"],"type":"object"},"ScheduledPlan":{"additionalProperties":false,"properties":{"currency":{"type":"string"},"effective_month":{"type":"string"},"plan":{"type":"string"},"sandbox":{"type":"boolean"}},"required":[],"type":"object"},"SignedCapabilities":{"additionalProperties":false,"properties":{"app_version":{"pattern":"^(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})\\.(0|[1-9][0-9]{0,8})$","type":"string"},"license_model":{"enum":["node_locked","floating"],"type":"string"},"maintenance_until":{"type":"integer"},"session_expires_at":{"maximum":253402300799,"type":"integer"},"session_id":{"format":"uuid","type":"string"},"version_released_at":{"type":"integer"}},"required":["license_model"],"type":"object"},"SigningKey":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"algorithm":{"const":"Ed25519","type":"string"},"created_at":{"format":"date-time","type":"string"},"key_id":{"format":"uuid","type":"string"},"public_key":{"type":"string"},"retired_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["key_id","public_key","active"],"type":"object"},"StateResult":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"status":{"type":"string"}},"required":["id","status"],"type":"object"},"Subscription":{"additionalProperties":false,"properties":{"current":{"$ref":"#/components/schemas/Period"},"next":{"anyOf":[{"$ref":"#/components/schemas/PendingPlan"},{"type":"null"}]},"sandbox":{"type":"boolean"}},"required":[],"type":"object"},"Summary":{"additionalProperties":false,"properties":{"active_licenses":{"type":"integer"},"licenses":{"type":"integer"},"policies":{"type":"integer"},"products":{"type":"integer"}},"required":["products","policies","licenses","active_licenses"],"type":"object"},"SystemSettings":{"additionalProperties":false,"properties":{"database":{"$ref":"#/components/schemas/DatabaseStatus"},"environment":{"type":"string"},"mail":{"$ref":"#/components/schemas/MailSettings"},"public_url":{"format":"uri","type":"string"}},"required":["mail","database"],"type":"object"},"TLSCertificateInfo":{"additionalProperties":false,"properties":{"algorithm":{"type":"string"},"chain_length":{"maximum":10,"minimum":1,"type":"integer"},"domains":{"items":{"type":"string"},"type":"array"},"fingerprint_sha256":{"pattern":"^[0-9a-f]{64}$","type":"string"},"issuer":{"type":"string"},"not_after":{"format":"date-time","type":"string"},"not_before":{"format":"date-time","type":"string"},"self_signed":{"type":"boolean"},"serial_number":{"type":"string"},"subject":{"type":"string"}},"required":["domains","subject","issuer","not_before","not_after","fingerprint_sha256","serial_number","algorithm","chain_length","self_signed"],"type":"object"},"TLSCertificateInput":{"additionalProperties":false,"properties":{"certificate_pem":{"description":"PEM leaf certificate followed by its intermediate certificates, in order. Must match public_url. Only local development permits a self-signed certificate.","maxLength":32768,"type":"string","writeOnly":true},"expected_version":{"description":"Use version from GET /system/tls. Required for updates; concurrent replacement returns 409.","type":"string"},"private_key_pem":{"description":"Matching unencrypted PEM key (PKCS#8, RSA or EC). Never returned by any response.","maxLength":16384,"type":"string","writeOnly":true}},"required":["certificate_pem","private_key_pem"],"type":"object"},"TLSCertificateResult":{"additionalProperties":false,"properties":{"certificate":{"$ref":"#/components/schemas/TLSCertificateInfo"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"string"}},"required":["certificate","version","updated_at"],"type":"object"},"TLSCertificateUpdateInput":{"additionalProperties":false,"properties":{"certificate_pem":{"description":"PEM leaf certificate followed by its intermediate certificates, in order. Must match public_url. Only local development permits a self-signed certificate.","maxLength":32768,"type":"string","writeOnly":true},"expected_version":{"description":"Use version from GET /system/tls. Required for updates; concurrent replacement returns 409.","type":"string"},"private_key_pem":{"description":"Matching unencrypted PEM key (PKCS#8, RSA or EC). Never returned by any response.","maxLength":16384,"type":"string","writeOnly":true}},"required":["certificate_pem","private_key_pem","expected_version"],"type":"object"},"TLSStatus":{"additionalProperties":false,"properties":{"address":{"type":"string"},"certificate":{"anyOf":[{"$ref":"#/components/schemas/TLSCertificateInfo"},{"type":"null"}]},"enabled":{"type":"boolean"},"http_redirect_address":{"type":"string"},"public_url":{"type":"string"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"version":{"type":"string"}},"required":["enabled","public_url","address","http_redirect_address","certificate","version","updated_at"],"type":"object"},"TestMail":{"additionalProperties":false,"properties":{"to":{"format":"email","type":"string"}},"required":["to"],"type":"object"},"Token":{"additionalProperties":false,"properties":{"token":{"maxLength":100,"minLength":32,"type":"string","writeOnly":true}},"required":["token"],"type":"object"},"TokenPassword":{"additionalProperties":false,"properties":{"password":{"description":"12–128 UTF-8 bytes, not characters","type":"string","writeOnly":true},"password_confirmation":{"description":"Required and must match password exactly","type":"string","writeOnly":true},"token":{"maxLength":100,"minLength":32,"type":"string","writeOnly":true}},"required":["token","password","password_confirmation"],"type":"object"},"TransferCode":{"additionalProperties":false,"properties":{"activation_code":{"pattern":"^lv_tmp_[A-Za-z0-9_-]{43}$","type":"string"},"activation_id":{"format":"uuid","type":"string"},"expires_at":{"format":"date-time","type":"string"},"license_id":{"format":"uuid","type":"string"}},"required":["activation_id","activation_code","expires_at","license_id"],"type":"object"},"TranslationCheck":{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"languages":{"items":{"$ref":"#/components/schemas/TranslationLanguage"},"type":"array"},"provider_usage":{"additionalProperties":false,"properties":{"character_count":{"type":"integer"},"character_limit":{"type":"integer"}},"required":["character_count","character_limit"],"type":"object"}},"required":["connected","languages","provider_usage"],"type":"object"},"TranslationLanguage":{"additionalProperties":false,"properties":{"lang":{"description":"BCP 47 target code returned by DeepL v3, such as en-US or zh-Hant.","type":"string"},"name":{"type":"string"},"usable_as_target":{"type":"boolean"}},"required":["lang","name","usable_as_target"],"type":"object"},"TranslationOptions":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"languages":{"items":{"$ref":"#/components/schemas/TranslationLanguage"},"type":"array"},"provider":{"type":"string"}},"required":["enabled","languages","provider"],"type":"object"},"TranslationSettings":{"additionalProperties":false,"properties":{"checked_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"enabled":{"type":"boolean"},"key_configured":{"type":"boolean"},"languages":{"items":{"$ref":"#/components/schemas/TranslationLanguage"},"type":"array"},"local_usage":{"$ref":"#/components/schemas/TranslationUsage"},"monthly_limit":{"description":"Local monthly character budget, independent of DeepL account quota and billing dates.","type":"integer"},"requests_per_minute":{"type":"integer"},"tier":{"enum":["free","pro"],"type":"string"},"version":{"type":"string"}},"required":["enabled","tier","key_configured","monthly_limit","requests_per_minute","languages","checked_at","version","local_usage"],"type":"object"},"TranslationSettingsInput":{"additionalProperties":false,"properties":{"api_key":{"description":"Stored encrypted. Empty preserves the saved key unless clear_key is true. Changing key/tier requires another successful connection check.","maxLength":1000,"type":"string","writeOnly":true},"clear_key":{"type":"boolean"},"enabled":{"type":"boolean"},"expected_version":{"type":"string"},"monthly_limit":{"maximum":1000000000,"minimum":1,"type":"integer"},"requests_per_minute":{"maximum":60,"minimum":1,"type":"integer"},"tier":{"enum":["free","pro"],"type":"string"}},"required":["enabled","tier","monthly_limit","requests_per_minute","expected_version"],"type":"object"},"TranslationUsage":{"additionalProperties":false,"properties":{"characters":{"description":"Successful billed characters plus conservative reservations for requests with unknown results. Cache hits do not add usage.","type":"integer"},"month":{"description":"UTC calendar month YYYY-MM.","type":"string"}},"required":["month","characters"],"type":"object"},"Trial":{"additionalProperties":false,"properties":{"base_url":{"type":"string"},"duration_days":{"const":7,"type":"integer"},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"isolated":{"type":"boolean"},"key":{"type":"string","writeOnly":true},"license_id":{"format":"uuid","type":"string"},"product_id":{"format":"uuid","type":"string"},"trusted_keys":{"items":{"$ref":"#/components/schemas/SigningKey"},"type":"array"}},"required":["product_id","license_id","key","trusted_keys"],"type":"object"},"UpgradeList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/PlanUpgrade"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"UpgradePart":{"additionalProperties":false,"description":"A frozen upgrade calculation for one current or future prepaid period. change.amount_cents is this period’s difference; only the parent quote charges the combined sum.","properties":{"change":{"$ref":"#/components/schemas/PlanUpgrade"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"source":{"enum":["purchase","gift","auto_renewal"],"type":"string"},"starts_at":{"format":"date-time","type":"string"}},"required":["id","source","starts_at","ends_at","change"],"type":"object"},"UpgradeQuoteInput":{"additionalProperties":false,"properties":{"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"plan":{"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":"string"},"price_version":{"type":"string"},"request_id":{"maxLength":80,"type":"string"}},"required":["plan","currency","price_version","request_id"],"type":"object"},"Usage":{"additionalProperties":false,"properties":{"active_devices":{"type":"integer"},"api_calls":{"description":"Successful metered calls this UTC month in the current payment mode","type":"integer"},"api_period":{"anyOf":[{"$ref":"#/components/schemas/RuntimeAPIPeriod"},{"type":"null"}],"description":"Default UTC-month API allowance; null if unavailable. With a purchased package, use purchased.api_calls and purchased.included_api_calls for the current quota month."},"billable_devices":{"type":"integer"},"estimated_total_cents":{"type":"integer"},"estimated_total_micros":{"type":"integer"},"month":{"type":"string"},"operations":{"items":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"operation":{"type":"string"}},"required":[],"type":"object"},"type":"array"},"overage_devices":{"type":"integer"},"period":{"anyOf":[{"$ref":"#/components/schemas/Period"},{"type":"null"}],"description":"Frozen default/history UTC billing allowance. Null when no such period exists and the default offer is disabled; an active purchase remains usable."},"products":{"items":{"additionalProperties":false,"properties":{"active_devices":{"type":"integer"},"product_id":{"format":"uuid","type":"string"}},"required":[],"type":"object"},"type":"array"},"purchased":{"anyOf":[{"$ref":"#/components/schemas/PlanPurchase"},{"type":"null"}],"description":"Active package in the current payment environment, returned only for the current UTC month. Headline device quota must use purchased.included_devices, not period.included_devices."},"purchased_active_devices":{"description":"Distinct product/device count in the active package quota month, independent of UTC-month history.","type":"integer"},"sandbox":{"type":"boolean"},"timezone":{"type":"string"},"warning":{"type":"string"}},"required":[],"type":"object"},"UsageDevice":{"additionalProperties":false,"properties":{"device_id":{"type":"string"},"first_seen_at":{"format":"date-time","type":"string"},"last_seen_at":{"format":"date-time","type":"string"},"month":{"type":"string"},"product_id":{"format":"uuid","type":"string"}},"required":[],"type":"object"},"UsageDeviceList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/UsageDevice"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"Verified":{"additionalProperties":false,"properties":{"verified":{"type":"boolean"}},"required":["verified"],"type":"object"},"Wallet":{"additionalProperties":false,"properties":{"balance_cents":{"type":"integer"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"}},"required":[],"type":"object"},"WalletEntry":{"additionalProperties":false,"properties":{"amount_cents":{"type":"integer"},"balance_cents":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"description":"plan_upgrade records a paid upgrade. paypal_refund_reserve holds available wallet funds; paypal_refund_release removes that hold; paypal_refund records the confirmed cash refund. Reserve/release movements are not cash payments and cancel out when settlement completes.","type":"string"},"mode":{"enum":["sandbox","live"],"type":"string"},"reference":{"type":"string"}},"required":[],"type":"object"},"WalletEntryList":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/WalletEntry"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"required":[],"type":"object"},"WalletResult":{"additionalProperties":false,"properties":{"currencies":{"items":{"pattern":"^[A-Z]{3}$","type":"string"},"type":"array"},"items":{"items":{"$ref":"#/components/schemas/Wallet"},"type":"array"},"maximum_cents":{"type":"integer"},"minimum_cents":{"type":"integer"},"mode":{"enum":["sandbox","live"],"type":"string"},"paypal_enabled":{"type":"boolean"}},"required":[],"type":"object"},"WebhookEvent":{"description":"Exact signed PayPal event, verified with PayPal API","type":"object"},"WebhookReceived":{"additionalProperties":false,"properties":{"ignored":{"type":"boolean"},"received":{"type":"boolean"}},"required":[],"type":"object"}},"securitySchemes":{"customerSession":{"description":"Production uses __Host-licenova_customer; buyer identity is independent of the vendor session.","in":"cookie","name":"licenova_customer","type":"apiKey"},"managementKey":{"bearerFormat":"lv_api_...","scheme":"bearer","type":"http"},"session":{"description":"Production uses __Host-licenova_session","in":"cookie","name":"licenova_session","type":"apiKey"}}},"info":{"description":"Licentivo management and licensing API. Includes signed device-bound runtime leases, customer self-service, software feature quotas, public developer forums, administrator-configured DeepL translation, configurable plan pricing, prorated upgrades, PayPal wallet recharge and original-route refunds. Payment environments and currencies are isolated; secrets are encrypted and never returned. Platform customer operations, reviewed bulk gifts, independently priced 1/3/6/12 month contracts and monthly quota windows anchored to the contract start.","title":"Licentivo API","version":"0.12.0"},"openapi":"3.1.0","paths":{"/api/v1/activate":{"post":{"description":"Authenticated by product_id + license_key + device_id. No cookie/CSRF/vendor key. activation_id required except activate. Each successful request consumes one API call; idempotent replay and failures do not. Overages debit wallet atomically or return API_QUOTA_EXCEEDED/API_BALANCE_INSUFFICIENT.","operationId":"post_api_v1_activate","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuntimeResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Runtime activate"}},"/api/v1/activations":{"get":{"operationId":"get_api_v1_activations","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"license_id","schema":{"type":"string"}},{"in":"query","name":"product_id","schema":{"type":"string"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"q","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ActivationList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"List tenant devices"}},"/api/v1/activations/{id}/release":{"post":{"operationId":"post_api_v1_activations_by_id_release","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/StateResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Release a device","x-required-role":"owner"}},"/api/v1/api-keys":{"get":{"operationId":"get_api_v1_api-keys","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/KeyList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"get /api-keys","x-required-role":"owner"},"post":{"operationId":"post_api_v1_api-keys","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/KeySecret"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"post /api-keys","x-required-role":"owner"}},"/api/v1/api-keys/{id}":{"delete":{"operationId":"delete_api_v1_api-keys_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"delete /api-keys/{id}","x-required-role":"owner"}},"/api/v1/api-keys/{id}/rotate":{"post":{"operationId":"post_api_v1_api-keys_by_id_rotate","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/KeySecret"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"post /api-keys/{id}/rotate","x-required-role":"owner"}},"/api/v1/audit-logs":{"get":{"operationId":"get_api_v1_audit-logs","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/AuditList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Tenant audit records"}},"/api/v1/auth/accept-invitation":{"post":{"operationId":"post_api_v1_auth_accept-invitation","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPassword"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PasswordSet"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"accept-invitation"}},"/api/v1/auth/change-password":{"post":{"operationId":"post_api_v1_auth_change-password","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePassword"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PasswordSet"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Revoke all account credentials and set password"}},"/api/v1/auth/csrf":{"get":{"operationId":"get_api_v1_auth_csrf","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CSRF"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Issue session-bound CSRF token"}},"/api/v1/auth/forgot-password":{"post":{"operationId":"post_api_v1_auth_forgot-password","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Notice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"forgot-password"}},"/api/v1/auth/login":{"post":{"operationId":"post_api_v1_auth_login","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Login"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CSRF"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"login"}},"/api/v1/auth/logout":{"post":{"operationId":"post_api_v1_auth_logout","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LoggedOut"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Revoke current session"}},"/api/v1/auth/me":{"get":{"operationId":"get_api_v1_auth_me","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Me"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Current cookie account"}},"/api/v1/auth/register":{"post":{"operationId":"post_api_v1_auth_register","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Register"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Notice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"register"}},"/api/v1/auth/resend-verification":{"post":{"operationId":"post_api_v1_auth_resend-verification","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Notice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"resend-verification"}},"/api/v1/auth/reset-password":{"post":{"operationId":"post_api_v1_auth_reset-password","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPassword"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PasswordSet"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"reset-password"}},"/api/v1/auth/verify-email":{"post":{"operationId":"post_api_v1_auth_verify-email","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Verified"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"verify-email"}},"/api/v1/billing/auto-renewal":{"get":{"description":"Session only. PATCH requires workspace Owner. Defaults disabled. Enabling requires enough current-mode, current-currency balance for one renewal, and the reviewed latest paid plan, offered term and price version. Only wallet funds are charged at expiry, never PayPal or a card. A minute worker and runtime mutations process due renewals under a tenant lock. Repeated attempts charge once. Insufficient funds wait for recharge; price, plan or availability changes pause charges pending fresh consent. Disabling cancels future automatic charges, not paid coverage.","operationId":"get_api_v1_billing_auto_renewal","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/AutoRenewalResult"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Read wallet automatic renewal settings"},"patch":{"description":"Session only. PATCH requires workspace Owner. Defaults disabled. Enabling requires enough current-mode, current-currency balance for one renewal, and the reviewed latest paid plan, offered term and price version. Only wallet funds are charged at expiry, never PayPal or a card. A minute worker and runtime mutations process due renewals under a tenant lock. Repeated attempts charge once. Insufficient funds wait for recharge; price, plan or availability changes pause charges pending fresh consent. Disabling cancels future automatic charges, not paid coverage.","operationId":"patch_api_v1_billing_auto_renewal","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRenewalInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/AutoRenewal"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Enable or disable explicitly consented wallet renewal"}},"/api/v1/billing/invoices":{"get":{"operationId":"get_api_v1_billing_invoices","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/InvoiceList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Immutable monthly invoice snapshots"}},"/api/v1/billing/invoices/{id}":{"get":{"operationId":"get_api_v1_billing_invoices_by_id","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Invoice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Invoice detail"}},"/api/v1/billing/invoices/{id}/export.csv":{"get":{"operationId":"get_api_v1_billing_invoices_by_id_export_csv","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"type":"string"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Invoice detail CSV"}},"/api/v1/billing/invoices/{id}/finalize":{"post":{"operationId":"post_api_v1_billing_invoices_by_id_finalize","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/StateResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"finalize invoice","x-required-role":"owner"}},"/api/v1/billing/invoices/{id}/pay":{"post":{"operationId":"post_api_v1_billing_invoices_by_id_pay","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Invoice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Pay confirmed historical invoice from balance","x-required-role":"owner"}},"/api/v1/billing/invoices/{id}/void":{"post":{"operationId":"post_api_v1_billing_invoices_by_id_void","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/StateResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"void invoice","x-required-role":"owner"}},"/api/v1/billing/jobs":{"get":{"operationId":"get_api_v1_billing_jobs","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/BillingJobList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Durable tenant billing tasks"},"post":{"operationId":"post_api_v1_billing_jobs","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonthInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/BillingJob"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Enqueue a closed UTC month (idempotent)","x-required-role":"owner"}},"/api/v1/billing/jobs/{id}/retry":{"post":{"operationId":"post_api_v1_billing_jobs_by_id_retry","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/StateResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Retry a failed task","x-required-role":"owner"}},"/api/v1/billing/overage-settings":{"get":{"description":"Current tenant only. Read-only members can view. An unlimited API allowance is never limited by a customer overage preference. A null plan means the default allowance is not available.","operationId":"get__api_v1_billing_overage_settings","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/OverageSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Read customer overage choices and current administrator rules"},"patch":{"description":"Session Owner only. Each supplied choice requires its corresponding administrator permission; an unauthorized field rejects the entire request with 403. Runtime hard limit = administrator limit OR customer blocking preference when that permission is enabled. Does not erase past use or charges. Sandbox and live preferences are independent.","operationId":"patch__api_v1_billing_overage_settings","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverageSettingsInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/OveragePreference"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Save independent device and API overage preferences"}},"/api/v1/billing/paypal/orders":{"get":{"operationId":"get_api_v1_billing_paypal_orders","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalOrderList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Recharge orders"},"post":{"operationId":"post_api_v1_billing_paypal_orders","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RechargeInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalOrder"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Create/recover idempotent recharge","x-required-role":"owner"}},"/api/v1/billing/paypal/orders/{id}/capture":{"post":{"operationId":"post_api_v1_billing_paypal_orders_by_id_capture","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalOrder"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Confirm merchant-bound funds once","x-required-role":"owner"}},"/api/v1/billing/paypal/orders/{id}/reconcile":{"post":{"operationId":"post_api_v1_billing_paypal_orders_by_id_reconcile","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalOrder"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Confirm merchant-bound funds once","x-required-role":"owner"}},"/api/v1/billing/plans":{"get":{"operationId":"get_api_v1_billing_plans","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Public administrator-managed price catalog"}},"/api/v1/billing/purchases":{"get":{"operationId":"get_api_v1_billing_purchases","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PurchaseList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Rolling month purchases and active quota"},"post":{"description":"undefined Set renewal=true for advance renewal while a package is active. Pay immediately; the response and coverage_ends_at show the extended prepaid period. Current quota usage and software license expiry remain unchanged. Retries reuse request_id and cannot double-charge.","operationId":"post_api_v1_billing_purchases","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyPlan"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanPurchase"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Buy a package or pay an advance renewal","x-required-role":"owner"}},"/api/v1/billing/renewal-plans":{"get":{"description":"Completed purchase and applied-upgrade ownership only. Returns enabled published offers and hidden renewal-only offers for their existing customers. Pending quotes do not establish ownership. Renew using POST /billing/purchases in advance or after expiry.","operationId":"get__api_v1_billing_renewal_plans","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RenewalPlans"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"List current offers that this tenant may renew"}},"/api/v1/billing/subscription":{"get":{"operationId":"get_api_v1_billing_subscription","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Subscription"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Current and next-month plan"},"patch":{"operationId":"patch_api_v1_billing_subscription","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanChange"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ScheduledPlan"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Schedule plan for next UTC month","x-required-role":"owner"}},"/api/v1/billing/upgrades":{"get":{"description":"","operationId":"get__api_v1_billing_upgrades","parameters":[{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UpgradeList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"List the current tenant's upgrade quotes"}},"/api/v1/billing/upgrades/quote":{"post":{"description":"Requires a session Owner. The target must use the same currency, with no lower monthly price or device/API allowance. Retains original expiry and usage. The upgrade always includes current and all future prepaid/gifted coverage. Each period credits its original benefit value, prorated for remaining seconds; an unstarted period uses its whole duration. Gift value is not refundable cash. Payment is a single atomic wallet charge; dates and consumed quota remain. Renewals, gifts or cancellations between quote and payment invalidate the quote with UPGRADE_STATE_CONFLICT; a linked late PayPal recharge remains wallet credit. Old pending quotes from before whole-coverage support require a fresh quote. The upgrade always includes current and all future prepaid/gifted coverage. Each period credits its original benefit value, prorated for remaining seconds; an unstarted period uses its whole duration. Gift value is not refundable cash. Payment is a single atomic wallet charge; dates and consumed quota remain. Renewals, gifts or cancellations between quote and payment invalidate the quote with UPGRADE_STATE_CONFLICT; a linked late PayPal recharge remains wallet credit. Old pending quotes from before whole-coverage support require a fresh quote.","operationId":"post__api_v1_billing_upgrades_quote","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeQuoteInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanUpgrade"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Preview a prorated plan upgrade without debiting the wallet"}},"/api/v1/billing/upgrades/{id}/pay":{"post":{"description":"Returns pending without changing the plan when balance is insufficient. Returns applied after charging once. Changed active plan or expired quote returns 409. The upgrade always includes current and all future prepaid/gifted coverage. Each period credits its original benefit value, prorated for remaining seconds; an unstarted period uses its whole duration. Gift value is not refundable cash. Payment is a single atomic wallet charge; dates and consumed quota remain. Renewals, gifts or cancellations between quote and payment invalidate the quote with UPGRADE_STATE_CONFLICT; a linked late PayPal recharge remains wallet credit. Old pending quotes from before whole-coverage support require a fresh quote. The upgrade always includes current and all future prepaid/gifted coverage. Each period credits its original benefit value, prorated for remaining seconds; an unstarted period uses its whole duration. Gift value is not refundable cash. Payment is a single atomic wallet charge; dates and consumed quota remain. Renewals, gifts or cancellations between quote and payment invalidate the quote with UPGRADE_STATE_CONFLICT; a linked late PayPal recharge remains wallet credit. Old pending quotes from before whole-coverage support require a fresh quote.","operationId":"post__api_v1_billing_upgrades__id__pay","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanUpgrade"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Confirm and pay a valid upgrade quote once"}},"/api/v1/billing/wallet":{"get":{"operationId":"get_api_v1_billing_wallet","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/WalletResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Current environment balances"}},"/api/v1/billing/wallet/entries":{"get":{"operationId":"get_api_v1_billing_wallet_entries","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/WalletEntryList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Balance ledger"}},"/api/v1/consume":{"post":{"description":"License-authenticated runtime operation; no vendor cookie or API Key. Feature consumption requires a stable Idempotency-Key; no platform API debit for consume.","operationId":"post_api_v1_consume","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ConsumptionResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"/consume"}},"/api/v1/consume/cancel":{"post":{"description":"Reserve before the business action; commit only after success; cancel on failure. Retain the same job identifier and request body across retries. A timed-out commit is uncertain: retry commit, never cancel or repeat finished work. Finished reservations return their current status; no platform API debit. Completion emits license.consume; provisional holds do not emit consumption events.","operationId":"post_api_v1_consume_cancel","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReservationResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Feature units: cancel"}},"/api/v1/consume/commit":{"post":{"description":"Reserve before the business action; commit only after success; cancel on failure. Retain the same job identifier and request body across retries. A timed-out commit is uncertain: retry commit, never cancel or repeat finished work. Finished reservations return their current status; no platform API debit. Completion emits license.consume; provisional holds do not emit consumption events.","operationId":"post_api_v1_consume_commit","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReservationResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Feature units: commit"}},"/api/v1/consume/reserve":{"post":{"description":"Reserve before the business action; commit only after success; cancel on failure. Retain the same job identifier and request body across retries. A timed-out commit is uncertain: retry commit, never cancel or repeat finished work. Finished reservations return their current status; no platform API debit. Completion emits license.consume; provisional holds do not emit consumption events.","operationId":"post_api_v1_consume_reserve","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReservationResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Feature units: reserve"}},"/api/v1/customer/activations/{id}/release":{"post":{"operationId":"post_api_v1_customer_activations_by_id_release","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerReleaseInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CustomerReleaseResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"customerSession":[]}],"summary":"/customer/activations/{id}/release"}},"/api/v1/customer/licenses":{"get":{"operationId":"get_api_v1_customer_licenses","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CustomerLicenses"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"customerSession":[]}],"summary":"Linked buyer licenses"}},"/api/v1/customer/login":{"post":{"operationId":"post_api_v1_customer_login","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Notice"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"/customer/login"}},"/api/v1/customer/logout":{"post":{"operationId":"post_api_v1_customer_logout","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LoggedOut"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"customerSession":[]}],"summary":"/customer/logout"}},"/api/v1/customer/offline/respond":{"post":{"operationId":"post_api_v1_customer_offline_respond","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/OfflineResponse"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"customerSession":[]}],"summary":"/customer/offline/respond"}},"/api/v1/customer/verify":{"post":{"operationId":"post_api_v1_customer_verify","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CustomerSession"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"/customer/verify"}},"/api/v1/deactivate":{"post":{"description":"Authenticated by product_id + license_key + device_id. No cookie/CSRF/vendor key. activation_id required except activate. Each successful request consumes one API call; idempotent replay and failures do not. Overages debit wallet atomically or return API_QUOTA_EXCEEDED/API_BALANCE_INSUFFICIENT.","operationId":"post_api_v1_deactivate","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuntimeResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Runtime deactivate"}},"/api/v1/demo/trial":{"post":{"operationId":"post_api_v1_demo_trial","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Trial"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"Create one isolated seven-day SDK trial per owner","x-required-role":"owner"}},"/api/v1/forum/images":{"post":{"operationId":"post__api_v1_forum_images","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"additionalProperties":false,"properties":{"image":{"description":"PNG, JPEG or GIF; at most 5 MB, 4096 × 4096 and 16 million pixels. GIF is stored as a static PNG. Private until attached to a published post.","format":"binary","type":"string"}},"required":["image"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ForumImage"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Upload a private draft image","tags":["Community"]}},"/api/v1/forum/replies/{id}":{"delete":{"operationId":"delete__api_v1_forum_replies__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Delete your own reply","tags":["Community"]},"patch":{"operationId":"patch__api_v1_forum_replies__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForumReplyInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Edit your own reply","tags":["Community"]}},"/api/v1/forum/topics":{"get":{"operationId":"get__api_v1_forum_topics","parameters":[{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"category","schema":{"type":"string"}},{"in":"query","name":"language","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ForumTopicList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[],"summary":"List public discussions","tags":["Community"]},"post":{"operationId":"post__api_v1_forum_topics","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForumTopicInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Create a discussion (any verified tenant member)","tags":["Community"]}},"/api/v1/forum/topics/{id}":{"delete":{"operationId":"delete__api_v1_forum_topics__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Delete your own discussion","tags":["Community"]},"get":{"operationId":"get__api_v1_forum_topics__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ForumTopicDetail"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[],"summary":"Read a public discussion and replies","tags":["Community"]},"patch":{"operationId":"patch__api_v1_forum_topics__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForumTopicInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Edit your own discussion","tags":["Community"]}},"/api/v1/forum/topics/{id}/moderation":{"post":{"operationId":"post__api_v1_forum_topics__id__moderation","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hidden":{"type":"boolean"},"locked":{"type":"boolean"}},"required":["hidden","locked"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Hide or lock discussions (platform admin)","tags":["Community"]}},"/api/v1/forum/topics/{id}/replies":{"post":{"operationId":"post__api_v1_forum_topics__id__replies","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForumReplyInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"}},"required":["id"],"type":"object"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error code and request ID; no account details exposed"}},"security":[{"session":[]}],"summary":"Reply to a discussion","tags":["Community"]}},"/api/v1/forum/topics/{id}/translate":{"post":{"description":"Anonymous visitors may use this endpoint with a CSRF token. Only published stored forum text is accepted, never arbitrary submitted text. Translation is cached by content and target language. Hidden topics/replies return 404; concurrent translation can return TRANSLATION_PENDING. Originals are preserved.","operationId":"post__api_v1_forum_topics__id__translate","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForumTranslationInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ForumTranslationResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[],"summary":"Translate a published topic or reply"}},"/api/v1/forum/translation":{"get":{"description":"","operationId":"get__api_v1_forum_translation","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TranslationOptions"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[],"summary":"Get publicly available translation target languages"}},"/api/v1/heartbeat":{"post":{"description":"Authenticated by product_id + license_key + device_id. No cookie/CSRF/vendor key. activation_id required except activate. Each successful request consumes one API call; idempotent replay and failures do not. Overages debit wallet atomically or return API_QUOTA_EXCEEDED/API_BALANCE_INSUFFICIENT.","operationId":"post_api_v1_heartbeat","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuntimeResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Runtime heartbeat"}},"/api/v1/licenses":{"get":{"operationId":"get_api_v1_licenses","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"product_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"q","schema":{"maxLength":254,"type":"string"}},{"in":"query","name":"status","schema":{"enum":["active","expired","suspended","revoked"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicenseList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"List tenant licenses"},"post":{"description":"Requires Owner session or write key from an active Owner. No automatic Idempotency-Key retries.","operationId":"post_api_v1_licenses","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicenseSecret"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Create License","x-required-role":"owner"}},"/api/v1/licenses/batch":{"post":{"operationId":"post_api_v1_licenses_batch","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/BatchResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/licenses/batch","x-required-role":"owner"}},"/api/v1/licenses/export.csv":{"get":{"operationId":"get_api_v1_licenses_export_csv","parameters":[{"in":"query","name":"product_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"q","schema":{"maxLength":254,"type":"string"}},{"in":"query","name":"status","schema":{"enum":["active","expired","suspended","revoked"],"type":"string"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"type":"string"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Filter to at most 5000 records"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"CSV export (max 5000 records)"}},"/api/v1/licenses/policy-preview":{"post":{"operationId":"post_api_v1_licenses_policy-preview","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PolicyPreview"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/licenses/policy-preview","x-required-role":"owner"}},"/api/v1/licenses/{id}":{"delete":{"operationId":"delete_api_v1_licenses_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Archive License","x-required-role":"owner"},"get":{"operationId":"get_api_v1_licenses_by_id","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/License"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Read License"},"patch":{"operationId":"patch_api_v1_licenses_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Update License","x-required-role":"owner"}},"/api/v1/licenses/{id}/capabilities":{"get":{"operationId":"get_api_v1_licenses_by_id_capabilities","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicenseCapabilityResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/licenses/{id}/capabilities"}},"/api/v1/licenses/{id}/customer":{"patch":{"operationId":"patch_api_v1_licenses_by_id_customer","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerAssignment"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/licenses/{id}/customer","x-required-role":"owner"}},"/api/v1/licenses/{id}/maintenance/renew":{"post":{"operationId":"post_api_v1_licenses_by_id_maintenance_renew","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Renew"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicenseCapabilities"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/licenses/{id}/maintenance/renew","x-required-role":"owner"}},"/api/v1/licenses/{id}/renew":{"post":{"operationId":"post_api_v1_licenses_by_id_renew","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Renew"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Renewed"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Extend max(now, expires_at) by days","x-required-role":"owner"}},"/api/v1/licenses/{id}/revoke":{"post":{"operationId":"post_api_v1_licenses_by_id_revoke","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Terminal revocation","x-required-role":"owner"}},"/api/v1/members":{"get":{"operationId":"get_api_v1_members","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/MemberList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"get /members","x-required-role":"owner"},"post":{"operationId":"post_api_v1_members","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invite"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Invited"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"post /members","x-required-role":"owner"}},"/api/v1/members/{id}":{"patch":{"operationId":"patch_api_v1_members_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"patch /members/{id}","x-required-role":"owner"}},"/api/v1/offline/respond":{"post":{"operationId":"post_api_v1_offline_respond","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/OfflineResponse"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/offline/respond","x-required-role":"owner"}},"/api/v1/onboarding":{"post":{"operationId":"post_api_v1_onboarding","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/OnboardingResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/onboarding","x-required-role":"owner"}},"/api/v1/payments/paypal/webhook":{"post":{"operationId":"post_api_v1_payments_paypal_webhook","parameters":[{"in":"header","name":"Paypal-Auth-Algo","required":true,"schema":{"type":"string"}},{"in":"header","name":"Paypal-Cert-Url","required":true,"schema":{"type":"string"}},{"in":"header","name":"Paypal-Transmission-Id","required":true,"schema":{"type":"string"}},{"in":"header","name":"Paypal-Transmission-Sig","required":true,"schema":{"type":"string"}},{"in":"header","name":"Paypal-Transmission-Time","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/WebhookReceived"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Verified capture/refund/reversal notification"}},"/api/v1/policies":{"get":{"operationId":"get_api_v1_policies","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"product_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PolicyList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"List tenant policies"},"post":{"description":"Requires Owner session or write key from an active Owner. No automatic Idempotency-Key retries.","operationId":"post_api_v1_policies","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Create Policy","x-required-role":"owner"}},"/api/v1/policies/{id}":{"delete":{"operationId":"delete_api_v1_policies_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Archive Policy","x-required-role":"owner"},"get":{"operationId":"get_api_v1_policies_by_id","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Policy"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Read Policy"},"patch":{"operationId":"patch_api_v1_policies_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Update Policy","x-required-role":"owner"}},"/api/v1/policies/{id}/capabilities":{"get":{"operationId":"get_api_v1_policies_by_id_capabilities","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PolicyCapabilities"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/policies/{id}/capabilities"},"patch":{"operationId":"patch_api_v1_policies_by_id_capabilities","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCapabilitiesInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/policies/{id}/capabilities","x-required-role":"owner"}},"/api/v1/products":{"get":{"operationId":"get_api_v1_products","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"q","schema":{"maxLength":120,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProductList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"List tenant products"},"post":{"description":"Requires Owner session or write key from an active Owner. No automatic Idempotency-Key retries.","operationId":"post_api_v1_products","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Create Product","x-required-role":"owner"}},"/api/v1/products/{id}":{"delete":{"operationId":"delete_api_v1_products_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Archive Product","x-required-role":"owner"},"get":{"operationId":"get_api_v1_products_by_id","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Product"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Read Product"},"patch":{"operationId":"patch_api_v1_products_by_id","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Update Product","x-required-role":"owner"}},"/api/v1/products/{id}/public-keys":{"get":{"operationId":"get_api_v1_products_by_id_public-keys","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/KeyBundle"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Product pinned key bundle"}},"/api/v1/products/{id}/releases":{"get":{"operationId":"get_api_v1_products_by_id_releases","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReleaseList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/products/{id}/releases"},"post":{"operationId":"post_api_v1_products_by_id_releases","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Release"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/products/{id}/releases","x-required-role":"owner"}},"/api/v1/products/{id}/sdk-bundle":{"post":{"operationId":"post_api_v1_products_by_id_sdk-bundle","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleInput"}}},"required":true},"responses":{"200":{"content":{"application/zip":{"schema":{"format":"binary","type":"string"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/products/{id}/sdk-bundle","x-required-role":"owner"}},"/api/v1/products/{id}/signing-keys":{"get":{"operationId":"get_api_v1_products_by_id_signing-keys","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/KeyBundle"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Product pinned key bundle"}},"/api/v1/products/{id}/signing-keys/rotate":{"post":{"operationId":"post_api_v1_products_by_id_signing-keys_rotate","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/SigningKey"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Rotate signing key; retain old public keys","x-required-role":"owner"}},"/api/v1/releases/eligible":{"post":{"description":"License-authenticated runtime operation; no vendor cookie or API Key. Feature consumption requires a stable Idempotency-Key; no platform API debit for consume.","operationId":"post_api_v1_releases_eligible","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/EligibleReleases"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"/releases/eligible"}},"/api/v1/summary":{"get":{"operationId":"get_api_v1_summary","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Summary"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Tenant resource counts"}},"/api/v1/system/check-mail":{"post":{"operationId":"post_api_v1_system_check-mail","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/MailConnection"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"post /system/check-mail","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/mail-jobs":{"get":{"operationId":"get_api_v1_system_mail-jobs","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/MailJobList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"get /system/mail-jobs","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/operations":{"get":{"description":"Platform-admin session only. Append-only application log with actor, subject, reason and explicit changes.","operationId":"get__api_v1_system_operations","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"user_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"action","schema":{"maxLength":80,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformOperationList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"List administrative customer operations"}},"/api/v1/system/overview":{"get":{"description":"Platform-admin session only. Package metrics use the current configured payment environment. New users covers the last 30 days; expiry covers the next 7 days.","operationId":"get__api_v1_system_overview","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformOverview"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Read platform customer and package totals"}},"/api/v1/system/paypal":{"get":{"operationId":"get_api_v1_system_paypal","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"paypal","x-platform-admin":true,"x-required-role":"owner"},"patch":{"operationId":"patch_api_v1_system_paypal","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayPalInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"paypal","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/paypal/check":{"post":{"operationId":"post_api_v1_system_paypal_check","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalCheck"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"paypal/check","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/paypal/orders/{id}/refund":{"post":{"description":"Platform-admin session only. Reserves available unspent wallet credit before contacting PayPal. Pending means the result is not confirmed; reconcile the same request. Does not automatically cancel a package.","operationId":"post__api_v1_system_paypal_orders__id__refund","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalRefund"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Refund unused wallet funds to the original PayPal payment method"}},"/api/v1/system/paypal/refunds":{"get":{"description":"Platform-admin session only.","operationId":"get__api_v1_system_paypal_refunds","parameters":[{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"mode","schema":{"enum":["sandbox","live"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RefundList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"List refund requests for the selected payment environment"}},"/api/v1/system/paypal/refunds/{id}/reconcile":{"post":{"description":"Platform-admin session only. Retries the same PayPal-Request-Id if the refund ID was not received, or fetches the existing provider refund.","operationId":"post__api_v1_system_paypal_refunds__id__reconcile","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PayPalRefund"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Reconcile the same refund without a new charge identity"}},"/api/v1/system/plan-gifts":{"get":{"description":"Platform-admin session only. The given recipient represents the deduplicated workspace. Search matches recipient email, workspace or package name.","operationId":"get__api_v1_system_plan_gifts","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"mode","schema":{"enum":["sandbox","live"],"type":"string"}},{"in":"query","name":"user_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanGiftList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"List gift history"},"post":{"description":"Platform-admin session only. Atomic batch. Supply fingerprint from preview and a stable request_id; matching replay returns the same batch. Changes to the tier or schedule require a fresh preview. Gifts retain zero actual payment and cannot become a cash refund. Their captured benefit value is credited normally when upgrading. Only new unstarted current-tier gifts follow a later upgrade with no extra payment, retaining their dates. Historical gifts are never realigned; monthly quotas and overage rules apply normally. Mixed batches use current/--- metadata; inspect individual purchase-backed gift records for each actual tier and currency.","operationId":"post__api_v1_system_plan_gifts","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanGiftInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanGiftResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Confirm a reviewed current-tier gift"}},"/api/v1/system/plan-gifts/preview":{"post":{"description":"Platform-admin session only. 1–100 distinct active customer user IDs. Users in the same workspace receive one contract. Each item inherits that customer’s current effective package, or last expired package in the selected environment. Mixed-tier batches return the actual plan and benefit value per item. Omit plan/currency/price_version; legacy explicit values must match every customer’s existing package. Customers without a package cannot receive a different tier through this endpoint. after_current appends after all paid/gifted coverage; immediate rejects overlapping rights. No writes or charges.","operationId":"post__api_v1_system_plan_gifts_preview","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanGiftPreviewInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanGiftPreview"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Preview a current-tier package gift"}},"/api/v1/system/plan-gifts/{id}/cancel":{"post":{"description":"Platform-admin session only. Repeated cancellation is safe. Stops this contract without deleting history, refunding overage or moving other scheduled contracts.","operationId":"post__api_v1_system_plan_gifts__id__cancel","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReason"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlanGiftCancellation"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Cancel an active or scheduled gift"}},"/api/v1/system/plans":{"get":{"operationId":"get_api_v1_system_plans","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/AdminPlanList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"plans","x-platform-admin":true,"x-required-role":"owner"},"post":{"operationId":"post_api_v1_system_plans","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Price"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"plans","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/plans/customer-controls":{"patch":{"description":"Platform-admin session only. Both switches default false. Supply device_enabled, api_enabled, or both. Omitted switches retain their current state. Each disabled switch hides its customer controls and ignores only its own saved preference until re-enabled. API allowances marked unlimited remain unlimited.","operationId":"patch__api_v1_system_plans_customer_controls","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerControlsInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CustomerControlsResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Independently allow customer device or API overage settings"}},"/api/v1/system/plans/default":{"patch":{"operationId":"patch_api_v1_system_plans_default","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultPlan"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DefaultPlan"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"plans/default","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/revenue":{"get":{"operationId":"get_api_v1_system_revenue","parameters":[{"in":"query","name":"mode","schema":{"enum":["sandbox","live"],"type":"string"}},{"in":"query","name":"month","schema":{"description":"all or UTC YYYY-MM","type":"string"}},{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Revenue"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"revenue","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/settings":{"get":{"operationId":"get_api_v1_system_settings","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/SystemSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"get /system/settings","x-platform-admin":true,"x-required-role":"owner"},"patch":{"operationId":"patch_api_v1_system_settings","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/MailSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"patch /system/settings","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/test-mail":{"post":{"operationId":"post_api_v1_system_test-mail","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestMail"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/MailQueued"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]}],"summary":"post /system/test-mail","x-platform-admin":true,"x-required-role":"owner"}},"/api/v1/system/tls":{"get":{"description":"Platform-administrator browser session only. Management API keys and tenant owners are rejected. Reflects the certificate used by this process. No certificate PEM or private key is exposed.","operationId":"get__api_v1_system_tls","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TLSStatus"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success; only public certificate metadata is returned."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."}},"security":[{"session":[]}],"summary":"Read the active HTTPS certificate"},"patch":{"description":"Platform-administrator browser session only. Management API keys and tenant owners are rejected. Validates and encrypts the certificate/key in MySQL, records an audit event, then swaps the active certificate. New TLS handshakes use it immediately; existing connections continue normally. A restart uses the database certificate in preference to bootstrap files.","operationId":"patch__api_v1_system_tls","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TLSCertificateUpdateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TLSCertificateResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success; only public certificate metadata is returned."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."}},"security":[{"session":[]}],"summary":"Replace the HTTPS certificate immediately"}},"/api/v1/system/tls/check":{"post":{"description":"Platform-administrator browser session only. Management API keys and tenant owners are rejected. Checks format, key strength, key match, hostname, validity and trust chain. Direct HTTPS must be enabled. The active certificate is unchanged.","operationId":"post__api_v1_system_tls_check","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TLSCertificateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TLSCertificateInfo"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success; only public certificate metadata is returned."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code. TLS_KEY_MISMATCH, TLS_DOMAIN_MISMATCH, TLS_EXPIRED, TLS_CHAIN_UNTRUSTED and TLS_SETTINGS_CONFLICT leave the previous certificate in place."}},"security":[{"session":[]}],"summary":"Validate a certificate and private key without saving"}},"/api/v1/system/translation":{"get":{"description":"Platform-admin session only.","operationId":"get__api_v1_system_translation","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TranslationSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Read DeepL settings without exposing the API key"},"patch":{"description":"Platform-admin session only. Use expected_version from the most recent GET. The key is never returned.","operationId":"patch__api_v1_system_translation","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslationSettingsInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TranslationSettings"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Save encrypted DeepL settings"}},"/api/v1/system/translation/check":{"post":{"description":"Calls only DeepL language and usage endpoints; no forum content is sent.","operationId":"post__api_v1_system_translation_check","parameters":[{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TranslationCheck"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See error.code and error.message; request_id identifies the request."}},"security":[{"session":[]}],"summary":"Verify the saved API key and retrieve supported languages and usage"}},"/api/v1/system/users":{"get":{"description":"Platform-admin session only. Includes unverified accounts and team members; never returns hashes or authentication tokens.","operationId":"get__api_v1_system_users","parameters":[{"description":"Case-insensitive partial email, name or workspace match; wildcard characters are escaped.","in":"query","name":"q","schema":{"maxLength":254,"type":"string"}},{"in":"query","name":"status","schema":{"enum":["active","disabled"],"type":"string"}},{"in":"query","name":"role","schema":{"enum":["owner","read_only"],"type":"string"}},{"in":"query","name":"verified","schema":{"enum":["true","false"],"type":"string"}},{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformUserList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"List all registered users"}},"/api/v1/system/users/export.csv":{"get":{"description":"Platform-admin session only. Maximum 10000 matching records, UTF-8 BOM and spreadsheet formula escaping. No credentials.","operationId":"get__api_v1_system_users_export_csv","parameters":[{"description":"Case-insensitive partial email, name or workspace match; wildcard characters are escaped.","in":"query","name":"q","schema":{"maxLength":254,"type":"string"}},{"in":"query","name":"status","schema":{"enum":["active","disabled"],"type":"string"}},{"in":"query","name":"role","schema":{"enum":["owner","read_only"],"type":"string"}},{"in":"query","name":"verified","schema":{"enum":["true","false"],"type":"string"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"type":"string"}}},"description":"CSV attachment"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Export filtered registered users as CSV"}},"/api/v1/system/users/{id}":{"get":{"description":"Platform-admin session only. Workspace balances, the latest 20 contracts, and cumulative PayPal paid/refunded totals are separated by currency and environment.","operationId":"get__api_v1_system_users__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformUserDetail"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Read customer and workspace details"},"patch":{"description":"Platform-admin session only. Requires an operation reason and optimistic version. Disabling revokes existing sessions, keys and login links. Restoring does not restore keys. Platform administrator accounts are protected.","operationId":"patch__api_v1_system_users__id_","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformUserUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformUserDetail"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Update customer status or private admin note"}},"/api/v1/system/users/{id}/revoke-credentials":{"post":{"description":"Platform-admin session only. Does not disable the account; the customer can sign in again. Administrator credentials cannot be revoked here.","operationId":"post__api_v1_system_users__id__revoke_credentials","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReason"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformRevocation"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Revoke existing customer sessions and API keys"}},"/api/v1/system/workspaces/{id}/status":{"patch":{"description":"Platform-admin session only. Suspension blocks login, management API and online licensing, and revokes credentials. Contract expiry keeps running. Platform workspaces are protected; signed offline caches remain governed by their existing expiry.","operationId":"patch__api_v1_system_workspaces__id__status","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"X-CSRF-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformWorkspaceUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/PlatformWorkspaceStatus"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Inspect error.code and error.message."}},"security":[{"session":[]}],"summary":"Suspend or restore an entire customer workspace"}},"/api/v1/usage":{"get":{"operationId":"get_api_v1_usage","parameters":[{"description":"UTC natural month; defaults to current","in":"query","name":"month","schema":{"pattern":"^[0-9]{4}-[0-9]{2}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Usage"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"UTC monthly active licensed devices"}},"/api/v1/usage/devices":{"get":{"operationId":"get_api_v1_usage_devices","parameters":[{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"maximum":100000,"minimum":0,"type":"integer"}},{"description":"UTC natural month; defaults to current","in":"query","name":"month","schema":{"pattern":"^[0-9]{4}-[0-9]{2}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UsageDeviceList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Paged distinct device activity"}},"/api/v1/usage/export.csv":{"get":{"operationId":"get_api_v1_usage_export_csv","parameters":[{"description":"UTC natural month; defaults to current","in":"query","name":"month","schema":{"pattern":"^[0-9]{4}-[0-9]{2}$","type":"string"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"type":"string"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"Monthly activity CSV, max 5000 rows"}},"/api/v1/validate":{"post":{"description":"Authenticated by product_id + license_key + device_id. No cookie/CSRF/vendor key. activation_id required except activate. Each successful request consumes one API call; idempotent replay and failures do not. Overages debit wallet atomically or return API_QUOTA_EXCEEDED/API_BALANCE_INSUFFICIENT.","operationId":"post_api_v1_validate","parameters":[{"description":"新操作生成新编号；同一请求重试沿用原编号及正文。最长 80 字符，不含空白；验证和心跳可省略。","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":80,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuntimeResult"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Runtime validate"}},"/api/v1/webhook-deliveries/{id}/attempts":{"get":{"operationId":"get_api_v1_webhook-deliveries_by_id_attempts","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/AttemptList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/webhook-deliveries/{id}/attempts"}},"/api/v1/webhook-deliveries/{id}/retry":{"post":{"operationId":"post_api_v1_webhook-deliveries_by_id_retry","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ID"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/webhook-deliveries/{id}/retry","x-required-role":"owner"}},"/api/v1/webhooks":{"get":{"operationId":"get_api_v1_webhooks","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicensingWebhookList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/webhooks"},"post":{"operationId":"post_api_v1_webhooks","parameters":[{"description":"Required for cookie/public-auth writes; exempt only for supported Bearer resource writes","in":"header","name":"X-CSRF-Token","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicensingWebhookInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/LicensingWebhookSecret"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/webhooks","x-required-role":"owner"}},"/api/v1/webhooks/{id}/deliveries":{"get":{"operationId":"get_api_v1_webhooks_by_id_deliveries","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DeliveryList"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[{"session":[]},{"managementKey":[]}],"summary":"/webhooks/{id}/deliveries"}},"/healthz":{"get":{"operationId":"get_healthz","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Health"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"}},"security":[],"summary":"Process liveness"}},"/readyz":{"get":{"operationId":"get_readyz","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Health"},"request_id":{"format":"uuid","type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"405":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"See docs/error-codes.md; endpoint-specific applicability"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Database unavailable"}},"security":[],"summary":"Database readiness"}}},"servers":[{"url":"https://www.licentivo.com"}]}