basePath: / definitions: internal_api.aboutResources: properties: cpuAvgPercent: type: number dbBytes: type: integer dbEngine: type: string goroutines: type: integer memHeapBytes: type: integer memSysBytes: type: integer numCpu: type: integer type: object internal_api.aboutResponse: properties: buildTime: type: string goVersion: type: string platform: type: string resources: $ref: '#/definitions/internal_api.aboutResources' startedAt: type: string uptimeSeconds: type: integer version: type: string type: object internal_api.addressResponse: properties: address: type: string type: object internal_api.aiKeyCreateResponse: properties: item: $ref: '#/definitions/oci-portal_internal_model.AiKey' key: type: string type: object internal_api.aiSettingsResponse: properties: filterDeprecated: type: boolean type: object internal_api.attachBootVolumeRequest: properties: bootVolumeId: type: string region: type: string required: - bootVolumeId type: object internal_api.attachVnicRequest: properties: assignIpv6: description: AssignIpv6 为 true 时同时自动分配一个 IPv6(要求子网已启用 IPv6)。 type: boolean assignPublicIp: type: boolean displayName: type: string privateIp: type: string region: type: string subnetId: type: string required: - subnetId type: object internal_api.attachVolumeRequest: properties: readOnly: type: boolean region: type: string volumeId: type: string required: - volumeId type: object internal_api.configChangesResponse: properties: changes: $ref: '#/definitions/oci-portal_internal_service.Changes' config: $ref: '#/definitions/oci-portal_internal_model.OciConfig' type: object internal_api.createConsoleConnectionRequest: properties: region: type: string sshPublicKey: type: string required: - sshPublicKey type: object internal_api.createIdpRequest: properties: assertionAttribute: type: string description: type: string iconUrl: type: string jitAssignAdminGroup: type: boolean jitCreate: type: boolean jitEnabled: type: boolean jitMapEmail: type: boolean jitUpdate: type: boolean metadata: type: string name: type: string nameIdFormat: type: string userStoreAttribute: type: string required: - metadata - name type: object internal_api.createInstanceRequest: properties: assignIpv6: type: boolean assignPublicIp: type: boolean availabilityDomain: description: 为空时默认使用第一个可用域 type: string bootVolumeId: type: string bootVolumeSizeGBs: type: integer bootVolumeVpusPerGB: type: integer compartmentId: description: 为空时建在租户根 type: string count: description: 批量创建数量,缺省 1,上限 10 type: integer displayName: type: string generateRootPassword: description: 服务端生成随机 root 密码并写入 TAG RootPassword type: boolean imageId: type: string memoryInGBs: type: number ocpus: type: number region: type: string rootPassword: type: string shape: type: string sshPublicKey: type: string subnetId: description: 为空时自动创建 VCN 与子网 type: string userData: type: string required: - displayName - shape type: object internal_api.createInstancesResponse: properties: errors: items: type: string type: array instances: items: $ref: '#/definitions/oci-portal_internal_oci.Instance' type: array type: object internal_api.createSecurityListRequest: properties: displayName: type: string egressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array ingressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array region: type: string vcnId: type: string required: - displayName - vcnId type: object internal_api.createSubnetRequest: properties: cidrBlock: type: string displayName: type: string dnsLabel: type: string ipv6CidrBlock: type: string prohibitPublicIp: type: boolean region: type: string vcnId: type: string required: - cidrBlock - displayName - vcnId type: object internal_api.createTaskRequest: properties: cronExpr: type: string name: type: string payload: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' type: type: string required: - cronExpr - name - type type: object internal_api.createTenantUserRequest: properties: addToAdminGroup: type: boolean description: type: string email: type: string familyName: type: string givenName: type: string grantDomainAdmin: description: 同时勾选时先授身份域管理员,再加入管理员组 type: boolean name: type: string required: - familyName - givenName - name type: object internal_api.createVCNRequest: properties: cidrBlock: type: string compartmentId: description: 为空时建在租户根 type: string displayName: type: string dnsLabel: type: string enableIpv6: description: 缺省默认启用 type: boolean region: type: string required: - cidrBlock - displayName type: object internal_api.credentialsResponse: properties: passwordLoginDisabled: type: boolean username: type: string type: object internal_api.deletedApiKeysResponse: properties: deletedApiKeys: type: integer type: object internal_api.deletedTotpResponse: properties: deletedTotpDevices: type: integer type: object internal_api.enableIPv6Request: properties: region: type: string type: object internal_api.enabledResponse: properties: enabled: type: boolean type: object internal_api.errorResponse: properties: error: type: string type: object internal_api.importRequest: properties: alias: type: string configIni: type: string fingerprint: type: string group: description: 面板内自定义分组,可空 type: string multiCompartment: description: 开启后 compartment 入库缓存 type: boolean multiRegion: description: 开启后订阅区域入库缓存 type: boolean passphrase: type: string privateKey: type: string proxyId: description: 关联出站代理,null 直连 type: integer region: type: string tenancyOcid: type: string userOcid: type: string required: - alias - privateKey type: object internal_api.instanceActionRequest: properties: action: type: string region: type: string required: - action type: object internal_api.ipv6AddressResponse: properties: ipv6Address: type: string type: object internal_api.ipv6StepsResponse: properties: steps: items: $ref: '#/definitions/oci-portal_internal_oci.IPv6Step' type: array type: object internal_api.itemResponse-oci-portal_internal_model_AiModelBlacklist: properties: item: $ref: '#/definitions/oci-portal_internal_model.AiModelBlacklist' type: object internal_api.itemsResponse-oci-portal_internal_aiwire_Model: properties: items: items: $ref: '#/definitions/oci-portal_internal_aiwire.Model' type: array type: object internal_api.itemsResponse-oci-portal_internal_model_AiChannel: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiChannel' type: array type: object internal_api.itemsResponse-oci-portal_internal_model_AiKey: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiKey' type: array type: object internal_api.itemsResponse-oci-portal_internal_model_AiModelBlacklist: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiModelBlacklist' type: array type: object internal_api.itemsResponse-oci-portal_internal_model_AiModelCache: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiModelCache' type: array type: object internal_api.itemsResponse-oci-portal_internal_model_UserIdentity: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.UserIdentity' type: array type: object internal_api.itemsResponse-oci-portal_internal_service_NotifyChannelView: properties: items: items: $ref: '#/definitions/oci-portal_internal_service.NotifyChannelView' type: array type: object internal_api.itemsResponse-oci-portal_internal_service_NotifyTemplateView: properties: items: items: $ref: '#/definitions/oci-portal_internal_service.NotifyTemplateView' type: array type: object internal_api.itemsResponse-oci-portal_internal_service_ProxyView: properties: items: items: $ref: '#/definitions/oci-portal_internal_service.ProxyView' type: array type: object internal_api.logWebhookStatusResponse: properties: exists: type: boolean webhook: $ref: '#/definitions/oci-portal_internal_service.LogWebhookInfo' type: object internal_api.loginRequest: properties: password: maxLength: 128 type: string totpCode: description: 两步验证码;账号已启用 TOTP 时必填,缺失返回 428 maxLength: 8 type: string username: description: 字段长度上限防超长输入撑爆登录守卫与 bcrypt(S-03) maxLength: 64 type: string required: - password - username type: object internal_api.oauthProvidersResponse: properties: passwordLoginDisabled: type: boolean providers: items: $ref: '#/definitions/oci-portal_internal_service.ProviderInfo' type: array type: object internal_api.pagedResponse-oci-portal_internal_model_AiCallLog: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiCallLog' type: array total: type: integer type: object internal_api.pagedResponse-oci-portal_internal_model_AiContentLog: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.AiContentLog' type: array total: type: integer type: object internal_api.pagedResponse-oci-portal_internal_model_LogEvent: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.LogEvent' type: array total: type: integer type: object internal_api.pagedResponse-oci-portal_internal_model_SystemLog: properties: items: items: $ref: '#/definitions/oci-portal_internal_model.SystemLog' type: array total: type: integer type: object internal_api.passwordResponse: properties: password: type: string type: object internal_api.publicIpResponse: properties: publicIp: type: string type: object internal_api.rawDetailResponse: properties: raw: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' type: object internal_api.renameRequest: properties: displayName: type: string region: type: string required: - displayName type: object internal_api.subscribeRegionRequest: properties: regionKey: type: string required: - regionKey type: object internal_api.tokenResponse: properties: expiresAt: type: string token: type: string type: object internal_api.totpRequiredResponse: properties: error: type: string totpRequired: type: boolean type: object internal_api.totpSetupResponse: properties: otpauthUri: type: string secret: type: string type: object internal_api.triggerResponse: properties: triggered: type: boolean type: object internal_api.updateBootVolumeRequest: properties: displayName: type: string region: type: string sizeInGBs: type: integer vpusPerGB: type: integer type: object internal_api.updateInstanceRequest: properties: displayName: type: string memoryInGBs: type: number ocpus: type: number region: type: string shape: description: 更换 shape,运行中实例会自动重启 type: string type: object internal_api.updateNotifyChannelRequest: properties: bodyTemplate: type: string enabled: type: boolean from: type: string host: type: string port: type: integer secret: type: string server: type: string to: type: string topic: type: string url: type: string username: type: string type: object internal_api.updateSecurityListRequest: properties: displayName: type: string egressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array ingressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array region: type: string type: object internal_api.updateTaskRequest: properties: cronExpr: type: string name: type: string payload: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' status: type: string type: object internal_api.updateTelegramRequest: properties: botToken: type: string chatId: type: string enabled: type: boolean type: object internal_api.updateTenantUserRequest: properties: addToAdminGroup: type: boolean description: type: string email: type: string familyName: type: string givenName: type: string grantDomainAdmin: type: boolean type: object internal_api.urlResponse: properties: url: type: string type: object internal_api.usedByResponse: properties: usedBy: type: integer type: object internal_api.webConsoleSessionResponse: properties: sessionId: type: string type: type: string type: object oci-portal_internal_aiwire.AnthBlock: properties: content: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' id: description: tool_use type: string input: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' is_error: type: boolean name: type: string source: allOf: - $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' description: image text: type: string tool_use_id: description: tool_result type: string type: type: string type: object oci-portal_internal_aiwire.AnthContent: properties: blocks: items: $ref: '#/definitions/oci-portal_internal_aiwire.AnthBlock' type: array text: type: string type: object oci-portal_internal_aiwire.AnthMessage: properties: content: $ref: '#/definitions/oci-portal_internal_aiwire.AnthContent' role: type: string type: object oci-portal_internal_aiwire.AnthOutputConfig: properties: effort: type: string type: object oci-portal_internal_aiwire.AnthTool: properties: description: type: string input_schema: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' name: type: string type: object oci-portal_internal_aiwire.AnthUsage: properties: cache_read_input_tokens: description: CacheReadInputTokens 是缓存命中读取数;OCI 隐式缓存无「写入」计数,cache_creation 恒缺 type: integer input_tokens: type: integer output_tokens: type: integer type: object oci-portal_internal_aiwire.AnyJSON: type: object oci-portal_internal_aiwire.ChatMessage: properties: content: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' role: type: string tool_call_id: type: string tool_calls: items: $ref: '#/definitions/oci-portal_internal_aiwire.ToolCall' type: array type: object oci-portal_internal_aiwire.ChatRequest: properties: max_completion_tokens: type: integer max_tokens: type: integer messages: items: $ref: '#/definitions/oci-portal_internal_aiwire.ChatMessage' type: array model: type: string parallel_tool_calls: type: boolean reasoning_effort: type: string response_format: $ref: '#/definitions/oci-portal_internal_aiwire.ResponseFormat' stream: type: boolean stream_options: $ref: '#/definitions/oci-portal_internal_aiwire.StreamOptions' temperature: type: number tool_choice: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' tools: items: $ref: '#/definitions/oci-portal_internal_aiwire.Tool' type: array top_p: type: number type: object oci-portal_internal_aiwire.ChatResponse: properties: choices: items: $ref: '#/definitions/oci-portal_internal_aiwire.Choice' type: array created: type: integer id: type: string model: type: string object: type: string usage: $ref: '#/definitions/oci-portal_internal_aiwire.Usage' type: object oci-portal_internal_aiwire.Choice: properties: finish_reason: type: string index: type: integer message: $ref: '#/definitions/oci-portal_internal_aiwire.ChatMessage' type: object oci-portal_internal_aiwire.EmbedUsage: properties: prompt_tokens: type: integer total_tokens: type: integer type: object oci-portal_internal_aiwire.Embedding: properties: embedding: items: type: number type: array index: type: integer object: type: string type: object oci-portal_internal_aiwire.EmbeddingsRequest: properties: dimensions: type: integer encoding_format: type: string input: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' model: type: string user: type: string type: object oci-portal_internal_aiwire.EmbeddingsResponse: properties: data: items: $ref: '#/definitions/oci-portal_internal_aiwire.Embedding' type: array model: type: string object: type: string usage: $ref: '#/definitions/oci-portal_internal_aiwire.EmbedUsage' type: object oci-portal_internal_aiwire.FunctionCall: properties: arguments: type: string name: type: string type: object oci-portal_internal_aiwire.FunctionDef: properties: description: type: string name: type: string parameters: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' type: object oci-portal_internal_aiwire.MessagesRequest: properties: max_tokens: type: integer messages: items: $ref: '#/definitions/oci-portal_internal_aiwire.AnthMessage' type: array metadata: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' model: type: string output_config: allOf: - $ref: '#/definitions/oci-portal_internal_aiwire.AnthOutputConfig' description: OutputConfig 是 Anthropic 官方输出控制(effort 等);网关映射 effort 到 OCI reasoningEffort。 stop_sequences: items: type: string type: array stream: type: boolean system: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' temperature: type: number thinking: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' tool_choice: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' tools: items: $ref: '#/definitions/oci-portal_internal_aiwire.AnthTool' type: array top_k: type: integer top_p: type: number type: object oci-portal_internal_aiwire.MessagesResponse: properties: content: items: $ref: '#/definitions/oci-portal_internal_aiwire.AnthBlock' type: array id: type: string model: type: string role: type: string stop_reason: type: string stop_sequence: type: string type: type: string usage: $ref: '#/definitions/oci-portal_internal_aiwire.AnthUsage' type: object oci-portal_internal_aiwire.Model: properties: created: type: integer id: type: string object: type: string owned_by: type: string type: object oci-portal_internal_aiwire.ModelList: properties: data: items: $ref: '#/definitions/oci-portal_internal_aiwire.Model' type: array object: type: string type: object oci-portal_internal_aiwire.ModerationPii: properties: label: type: string length: type: integer offset: type: integer score: type: number text: type: string type: object oci-portal_internal_aiwire.ModerationResult: properties: categories: additionalProperties: type: boolean type: object category_scores: additionalProperties: format: float64 type: number type: object flagged: type: boolean pii: items: $ref: '#/definitions/oci-portal_internal_aiwire.ModerationPii' type: array type: object oci-portal_internal_aiwire.ModerationsRequest: properties: input: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' model: type: string type: object oci-portal_internal_aiwire.ModerationsResponse: properties: id: type: string model: type: string results: items: $ref: '#/definitions/oci-portal_internal_aiwire.ModerationResult' type: array type: object oci-portal_internal_aiwire.PromptTokensDetails: properties: cached_tokens: type: integer type: object oci-portal_internal_aiwire.RerankDocument: properties: text: type: string type: object oci-portal_internal_aiwire.RerankRequest: properties: documents: items: type: string type: array model: type: string query: type: string return_documents: type: boolean top_n: type: integer type: object oci-portal_internal_aiwire.RerankResponse: properties: model: type: string results: items: $ref: '#/definitions/oci-portal_internal_aiwire.RerankResult' type: array type: object oci-portal_internal_aiwire.RerankResult: properties: document: $ref: '#/definitions/oci-portal_internal_aiwire.RerankDocument' index: type: integer relevance_score: type: number type: object oci-portal_internal_aiwire.RespError: properties: code: type: string message: type: string type: object oci-portal_internal_aiwire.RespInDetails: properties: cached_tokens: type: integer type: object oci-portal_internal_aiwire.RespOutDetails: properties: reasoning_tokens: type: integer type: object oci-portal_internal_aiwire.RespReasoning: properties: effort: type: string type: object oci-portal_internal_aiwire.RespRequest: properties: background: type: boolean conversation: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' input: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' instructions: type: string max_output_tokens: type: integer model: type: string parallel_tool_calls: type: boolean previous_response_id: type: string reasoning: $ref: '#/definitions/oci-portal_internal_aiwire.RespReasoning' store: type: boolean stream: type: boolean temperature: type: number text: $ref: '#/definitions/oci-portal_internal_aiwire.RespText' tool_choice: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' tools: items: $ref: '#/definitions/oci-portal_internal_aiwire.RespTool' type: array top_p: type: number type: object oci-portal_internal_aiwire.RespResponse: properties: created_at: type: integer error: $ref: '#/definitions/oci-portal_internal_aiwire.RespError' id: type: string model: type: string object: type: string output: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' status: type: string usage: $ref: '#/definitions/oci-portal_internal_aiwire.RespUsage' type: object oci-portal_internal_aiwire.RespText: properties: format: $ref: '#/definitions/oci-portal_internal_aiwire.RespTextFormat' type: object oci-portal_internal_aiwire.RespTextFormat: properties: name: type: string schema: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' strict: type: boolean type: type: string type: object oci-portal_internal_aiwire.RespTool: properties: description: type: string name: type: string parameters: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' strict: type: boolean type: type: string type: object oci-portal_internal_aiwire.RespUsage: properties: input_tokens: type: integer input_tokens_details: $ref: '#/definitions/oci-portal_internal_aiwire.RespInDetails' output_tokens: type: integer output_tokens_details: $ref: '#/definitions/oci-portal_internal_aiwire.RespOutDetails' total_tokens: type: integer type: object oci-portal_internal_aiwire.ResponseFormat: properties: json_schema: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' type: type: string type: object oci-portal_internal_aiwire.SpeechRequest: properties: input: type: string language: type: string model: type: string response_format: type: string voice: type: string type: object oci-portal_internal_aiwire.StreamOptions: properties: include_usage: type: boolean type: object oci-portal_internal_aiwire.Tool: properties: function: $ref: '#/definitions/oci-portal_internal_aiwire.FunctionDef' type: type: string type: object oci-portal_internal_aiwire.ToolCall: properties: function: $ref: '#/definitions/oci-portal_internal_aiwire.FunctionCall' id: type: string type: type: string type: object oci-portal_internal_aiwire.TtsOutputFormat: properties: bit_rate: type: integer codec: type: string sample_rate: type: integer type: object oci-portal_internal_aiwire.TtsRequest: properties: language: type: string model: type: string output_format: $ref: '#/definitions/oci-portal_internal_aiwire.TtsOutputFormat' speed: type: number text: type: string voice_id: type: string type: object oci-portal_internal_aiwire.Usage: properties: completion_tokens: type: integer prompt_tokens: type: integer prompt_tokens_details: allOf: - $ref: '#/definitions/oci-portal_internal_aiwire.PromptTokensDetails' description: PromptTokensDetails 携带缓存命中细分;OCI 为隐式 prompt 缓存,只有读取计数 total_tokens: type: integer type: object oci-portal_internal_model.AiCallLog: properties: cachedTokens: description: CachedTokens 是输入中缓存命中(读取)的部分;OCI 隐式缓存无写入计数 type: integer channelId: type: integer channelName: type: string clientIp: description: ClientIP 是网关调用方来源 IP(尊重「真实 IP 头」安全设置,与系统日志同源) type: string completionTokens: type: integer createdAt: type: string endpoint: description: openai / anthropic type: string errMsg: type: string id: type: integer keyId: type: integer keyName: type: string latencyMs: type: integer model: type: string promptTokens: type: integer retries: type: integer status: type: integer stream: type: boolean totalTokens: type: integer type: object oci-portal_internal_model.AiChannel: properties: createdAt: type: string disabledUntil: type: string enabled: type: boolean failCount: description: FailCount 连续失败计数;达阈值后 DisabledUntil 指数退避熔断,成功/探测通过复位 type: integer group: type: string id: type: integer lastProbeAt: type: string name: type: string ociConfigId: type: integer priority: type: integer probeError: type: string probeStatus: description: ok / no_service / no_quota / error type: string region: type: string updatedAt: type: string weight: type: integer type: object oci-portal_internal_model.AiContentLog: properties: callLogId: description: CallLogID 关联同次调用的 AiCallLog,调用日志详情据此反查正文 type: integer createdAt: type: string endpoint: type: string id: type: integer keyId: type: integer keyName: type: string model: type: string requestBody: description: |- RequestBody / ResponseBody 是截断后的正文 JSON; 64KB 截断恰在 MySQL TEXT 上限(65535B)边界,size 上探一档 → MEDIUMTEXT type: string responseBody: type: string stream: type: boolean type: object oci-portal_internal_model.AiKey: properties: contentLogUntil: description: |- ContentLogUntil 是内容日志开启截止时间;nil = 永关(默认,红线), 开启必须限时,到期自动停写 type: string createdAt: type: string enabled: type: boolean group: type: string id: type: integer lastUsedAt: type: string models: description: Models 是模型白名单(精确匹配模型名);空 = 不限,非空时网关仅放行列表内模型 items: type: string type: array name: type: string tail: type: string type: object oci-portal_internal_model.AiModelBlacklist: properties: createdAt: type: string id: type: integer name: type: string type: object oci-portal_internal_model.AiModelCache: properties: capability: type: string channelId: type: integer deprecatedAt: description: |- DeprecatedAt 是 OCI 宣布的模型弃用时间;nil 表示未宣布。 弃用后仍可调用,直到 RetiredAt(按需推理退役,同步层已剔除过期项)。 type: string modelOcid: type: string name: type: string retiredAt: type: string syncedAt: type: string vendor: type: string type: object oci-portal_internal_model.LogEvent: properties: eventTime: type: string eventType: description: 异步解析回填,如 com.oraclecloud.ComputeApi.TerminateInstance type: string id: type: integer messageId: description: 幂等键(X-OCI-NS-MessageId) type: string ociConfigId: description: 经 secret 反查归属租户 type: integer payload: description: 防御上限 256KB 超 MySQL TEXT(64KB),size 上探一档 → MEDIUMTEXT;PG/SQLite 仍为 text type: string processed: type: boolean receivedAt: type: string source: type: string sourceIp: description: 异步解析回填,Audit 事件的发起方 IP type: string truncated: type: boolean type: object oci-portal_internal_model.OciConfig: properties: accountType: type: string alias: type: string aliveStatus: type: string createdAt: type: string fingerprint: type: string group: description: |- Group 是面板内的自定义分组标签,空串表示未分组; 列名避开 SQL 保留字 GROUP type: string homeRegionKey: type: string id: type: integer lastError: type: string lastVerifiedAt: type: string multiCompartment: type: boolean multiRegion: description: |- 多区域 / 多区间支持:开启后订阅区域与 compartment 列表入库缓存, 供筛选器免实时调 OCI;未开启的租户筛选器锁定主区域 / 根区间。 type: boolean paymentModel: type: string promotionAmount: type: number promotionExpires: type: string promotionStatus: type: string proxyId: description: ProxyID 关联出站代理,nil 表示直连;该租户全部 SDK 调用经此代理 type: integer region: type: string subscriptionId: type: string subscriptionTier: type: string tenancyName: type: string tenancyOcid: type: string updatedAt: type: string userOcid: type: string type: object oci-portal_internal_model.SystemLog: properties: clientIp: type: string createdAt: type: string durationMs: type: integer errMsg: description: ErrMsg 仅失败请求(>=400)存响应的 error 文案,便于免翻服务端日志定位原因 type: string id: type: integer method: type: string path: type: string status: type: integer userAgent: type: string username: type: string type: object oci-portal_internal_model.Task: properties: createdAt: type: string cronExpr: type: string id: type: integer lastError: type: string lastRunAt: type: string name: type: string payload: type: string runCount: type: integer status: type: string type: type: string updatedAt: type: string type: object oci-portal_internal_model.TaskLog: properties: createdAt: type: string durationMs: type: integer id: type: integer message: type: string success: type: boolean taskId: type: integer type: object oci-portal_internal_model.UserIdentity: properties: createdAt: type: string display: description: 展示名:邮箱 / GitHub login type: string id: type: integer provider: type: string type: object oci-portal_internal_oci.AuditEvent: properties: compartmentName: type: string eventId: type: string eventName: type: string eventTime: type: string ipAddress: type: string principalName: type: string raw: $ref: '#/definitions/oci-portal_internal_aiwire.AnyJSON' requestAction: type: string requestPath: type: string resourceName: type: string source: type: string status: type: string type: object oci-portal_internal_oci.BlockVolume: properties: availabilityDomain: type: string displayName: type: string id: type: string lifecycleState: type: string sizeInGBs: type: integer timeCreated: type: string vpusPerGB: type: integer type: object oci-portal_internal_oci.BootVolume: properties: attachedInstanceId: type: string attachedInstanceName: type: string availabilityDomain: type: string compartmentId: type: string displayName: type: string id: type: string imageId: type: string imageName: type: string lifecycleState: type: string sizeInGBs: type: integer timeCreated: type: string vpusPerGB: type: integer type: object oci-portal_internal_oci.BootVolumeAttachment: properties: availabilityDomain: type: string bootVolumeId: type: string displayName: type: string id: type: string instanceId: type: string lifecycleState: type: string type: object oci-portal_internal_oci.Compartment: properties: description: type: string id: type: string lifecycleState: type: string name: type: string parentId: type: string timeCreated: type: string type: object oci-portal_internal_oci.ComputeShape: properties: billingType: description: ALWAYS_FREE / LIMITED_FREE / PAID type: string gpus: type: integer isFlexible: type: boolean memoryInGBs: type: number memoryMaxGBs: type: number memoryMinGBs: type: number name: type: string ocpus: type: number ocpusMax: type: number ocpusMin: type: number processorDescription: type: string type: object oci-portal_internal_oci.ConsoleConnection: properties: connectionString: description: 串口控制台 SSH 命令 type: string id: type: string instanceId: type: string lifecycleState: type: string vncConnectionString: description: VNC over SSH 隧道命令 type: string type: object oci-portal_internal_oci.CostItem: properties: computedAmount: type: number computedQuantity: type: number currency: type: string groupValue: type: string timeStart: type: string unit: type: string type: object oci-portal_internal_oci.IPv6Step: properties: detail: type: string status: description: done / skipped / failed type: string step: type: string type: object oci-portal_internal_oci.IdentityDomain: properties: displayName: type: string homeRegion: type: string id: type: string licenseType: type: string type: type: string type: object oci-portal_internal_oci.IdentityProviderInfo: properties: enabled: type: boolean id: type: string jitEnabled: type: boolean name: type: string partnerProviderId: type: string timeCreated: type: string type: type: string type: object oci-portal_internal_oci.IdentitySettingInfo: properties: id: type: string primaryEmailRequired: description: 用户需要提供主电子邮件地址:开启后创建用户 / JIT 预配必须带邮箱 type: boolean type: object oci-portal_internal_oci.Image: properties: displayName: type: string id: type: string operatingSystem: type: string operatingSystemVersion: type: string sizeInMBs: type: integer timeCreated: type: string type: object oci-portal_internal_oci.Instance: properties: availabilityDomain: type: string compartmentId: type: string definedTags: additionalProperties: additionalProperties: {} type: object type: object displayName: type: string freeformTags: additionalProperties: type: string type: object id: type: string imageId: type: string ipv6Addresses: items: type: string type: array lifecycleState: type: string memoryInGBs: type: number ocpus: type: number privateIp: type: string publicIp: type: string region: type: string shape: type: string subnetId: type: string timeCreated: type: string type: object oci-portal_internal_oci.InstanceTraffic: properties: inboundBytes: type: number instanceId: type: string outboundBytes: type: number vnics: items: $ref: '#/definitions/oci-portal_internal_oci.VnicTraffic' type: array type: object oci-portal_internal_oci.LimitService: properties: description: type: string name: type: string type: object oci-portal_internal_oci.LimitValue: properties: availabilityDomain: type: string available: type: integer name: type: string scopeType: type: string used: type: integer value: type: integer type: object oci-portal_internal_oci.NotificationRecipients: properties: recipients: items: type: string type: array testModeEnabled: type: boolean type: object oci-portal_internal_oci.PasswordPolicyInfo: properties: id: type: string minLength: type: integer name: type: string numPasswordsInHistory: type: integer passwordExpiresAfter: type: integer passwordStrength: type: string priority: type: integer type: object oci-portal_internal_oci.PromotionInfo: properties: amount: type: number currencyUnit: type: string duration: type: integer durationUnit: type: string isIntentToPay: type: boolean status: type: string timeExpired: type: string timeStarted: type: string type: object oci-portal_internal_oci.RegionInfo: properties: alias: type: string key: type: string name: type: string type: object oci-portal_internal_oci.RelayResource: properties: id: type: string state: type: string type: object oci-portal_internal_oci.SecurityList: properties: displayName: type: string egressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array id: type: string ingressRules: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityRule' type: array lifecycleState: type: string timeCreated: type: string vcnId: type: string type: object oci-portal_internal_oci.SecurityRule: properties: description: type: string destination: type: string icmpCode: type: integer icmpType: type: integer isStateless: type: boolean portMax: type: integer portMin: type: integer protocol: description: all、6(TCP)、17(UDP)、1(ICMP)、58(ICMPv6) type: string source: type: string type: object oci-portal_internal_oci.SignOnRuleInfo: properties: authenticationFactor: type: string builtIn: type: boolean conditionAttribute: type: string conditionValue: type: string id: type: string name: type: string sequence: type: integer type: object oci-portal_internal_oci.Subnet: properties: availabilityDomain: type: string cidrBlock: type: string displayName: type: string dnsLabel: type: string id: type: string ipv6CidrBlock: type: string lifecycleState: type: string prohibitPublicIp: type: boolean routeTableId: type: string timeCreated: type: string vcnId: type: string type: object oci-portal_internal_oci.SubscriptionDetail: properties: classicSubscriptionId: type: string cloudAmountCurrency: type: string csiNumber: type: string customerCountryCode: type: string endDate: type: string id: type: string isGovernmentSubscription: type: boolean lifecycleState: type: string paymentModel: type: string programType: type: string promotions: items: $ref: '#/definitions/oci-portal_internal_oci.PromotionInfo' type: array regionAssignment: type: string serviceName: type: string startDate: type: string subscriptionTier: type: string timeCreated: type: string timeUpdated: type: string type: object oci-portal_internal_oci.SubscriptionInfo: properties: id: type: string serviceName: type: string timeCreated: type: string timeUpdated: type: string type: object oci-portal_internal_oci.TenantUser: properties: description: type: string email: type: string emailVerified: type: boolean id: type: string isCurrentUser: type: boolean lastLoginTime: type: string lifecycleState: type: string mfaActivated: type: boolean name: type: string timeCreated: type: string type: object oci-portal_internal_oci.TenantUserDetail: properties: familyName: type: string givenName: type: string inAdminGroup: type: boolean inDomain: type: boolean isDomainAdmin: type: boolean type: object oci-portal_internal_oci.TrafficPoint: properties: bytes: type: number timestamp: type: string type: object oci-portal_internal_oci.VCN: properties: cidrBlocks: items: type: string type: array compartmentId: type: string defaultRouteTableId: type: string defaultSecurityListId: type: string displayName: type: string dnsLabel: type: string id: type: string ipv6CidrBlocks: items: type: string type: array lifecycleState: type: string timeCreated: type: string type: object oci-portal_internal_oci.Vnic: properties: attachmentId: type: string displayName: type: string ipv6Addresses: items: type: string type: array isPrimary: type: boolean lifecycleState: type: string privateIp: type: string publicIp: type: string subnetId: type: string subnetName: type: string timeCreated: type: string vnicId: type: string type: object oci-portal_internal_oci.VnicTraffic: properties: inbound: items: $ref: '#/definitions/oci-portal_internal_oci.TrafficPoint' type: array inboundBytes: type: number outbound: items: $ref: '#/definitions/oci-portal_internal_oci.TrafficPoint' type: array outboundBytes: type: number vnicId: type: string type: object oci-portal_internal_oci.VolumeAttachment: properties: availabilityDomain: type: string device: type: string displayName: type: string id: type: string instanceId: type: string isReadOnly: type: boolean lifecycleState: type: string volumeId: type: string volumeName: description: 卷本身的名称(attachment 名是自动生成的) type: string type: object oci-portal_internal_service.AuditEventsView: properties: cursor: type: string exhausted: type: boolean items: items: $ref: '#/definitions/oci-portal_internal_oci.AuditEvent' type: array type: object oci-portal_internal_service.Changes: additionalProperties: items: type: string type: array type: object oci-portal_internal_service.ChannelInput: properties: enabled: type: boolean group: type: string name: type: string ociConfigId: type: integer priority: type: integer region: type: string weight: type: integer type: object oci-portal_internal_service.ConfigSummary: properties: accountType: type: string alias: type: string aliveStatus: type: string createdAt: type: string group: type: string id: type: integer lastError: type: string lastVerifiedAt: type: string multiCompartment: type: boolean multiRegion: type: boolean proxyId: type: integer proxyName: description: ProxyName 由 List 按关联填充,供表格代理列 hover 展示 type: string region: type: string tenancyName: type: string tenancyOcid: type: string type: object oci-portal_internal_service.ImportFail: properties: line: type: string lineNo: type: integer reason: type: string type: object oci-portal_internal_service.ImportResult: properties: created: items: $ref: '#/definitions/oci-portal_internal_service.ProxyView' type: array failed: items: $ref: '#/definitions/oci-portal_internal_service.ImportFail' type: array type: object oci-portal_internal_service.LogWebhookInfo: properties: createdAt: type: string path: type: string secret: type: string type: object oci-portal_internal_service.NotifyChannelView: properties: bodyTemplate: type: string enabled: type: boolean from: type: string host: description: smtp type: string port: type: integer secretSet: description: 密文字段状态(ntfy token / bark device key / smtp password) type: boolean secretTail: type: string server: description: ntfy / bark 共用 Server type: string to: type: string topic: type: string type: type: string url: description: webhook type: string username: type: string type: object oci-portal_internal_service.NotifyEventsView: properties: logEventIdentity: type: boolean logEventInstance: type: boolean logEventLogin: type: boolean logEventPolicy: type: boolean logEventRegion: type: boolean loginLock: type: boolean modelDeprecated: type: boolean snatchSuccess: type: boolean taskFail: type: boolean taskRecover: type: boolean taskStop: type: boolean tenantDead: type: boolean type: object oci-portal_internal_service.NotifyTemplateView: properties: defaultTemplate: type: string kind: type: string label: type: string template: description: Template 是自定义模板;空串表示未自定义(按默认发送) type: string vars: items: type: string type: array type: object oci-portal_internal_service.OAuthProvidersView: properties: githubClientId: type: string githubDisabled: type: boolean githubDisplayName: type: string githubSecretSet: type: boolean oidcClientId: type: string oidcDisabled: type: boolean oidcDisplayName: type: string oidcIssuer: type: string oidcSecretSet: type: boolean type: object oci-portal_internal_service.Overview: properties: check: $ref: '#/definitions/oci-portal_internal_service.OverviewCheck' cost: $ref: '#/definitions/oci-portal_internal_service.OverviewCost' tasks: $ref: '#/definitions/oci-portal_internal_service.OverviewTasks' tenants: $ref: '#/definitions/oci-portal_internal_service.OverviewTenants' type: object oci-portal_internal_service.OverviewCheck: properties: coveredConfigs: type: integer hasActiveTask: type: boolean instanceCount: type: integer lastCheckedAt: type: string totalConfigs: type: integer type: object oci-portal_internal_service.OverviewCost: properties: coveredConfigs: type: integer currency: type: string days: items: $ref: '#/definitions/oci-portal_internal_service.OverviewCostDay' type: array hasActiveTask: type: boolean total: type: number type: object oci-portal_internal_service.OverviewCostDay: properties: amount: type: number day: type: string type: object oci-portal_internal_service.OverviewTasks: properties: active: type: integer cost: type: integer healthCheck: type: integer snatch: type: integer total: type: integer type: object oci-portal_internal_service.OverviewTenants: properties: alive: type: integer byType: additionalProperties: type: integer type: object dead: type: integer total: type: integer type: object oci-portal_internal_service.ProviderInfo: properties: displayName: type: string provider: type: string type: object oci-portal_internal_service.ProxyInput: properties: host: type: string name: type: string password: type: string port: type: integer type: type: string username: type: string required: - host - port - type type: object oci-portal_internal_service.ProxyView: properties: city: type: string country: description: Country / City 为出口实测地区;GeoAt 空串表示尚未探测(前端显示「检测中」) type: string createdAt: type: string geoAt: type: string host: type: string id: type: integer name: type: string passwordSet: type: boolean port: type: integer type: type: string usedBy: description: UsedBy 为关联此代理的租户数,前端据此提示删除约束 type: integer username: type: string type: object oci-portal_internal_service.RegionSubscriptionView: properties: alias: type: string isHomeRegion: type: boolean key: type: string name: type: string status: type: string type: object oci-portal_internal_service.RelayView: properties: connector: $ref: '#/definitions/oci-portal_internal_oci.RelayResource' endpoint: type: string events: items: type: string type: array policy: $ref: '#/definitions/oci-portal_internal_oci.RelayResource' ready: type: boolean subscription: $ref: '#/definitions/oci-portal_internal_oci.RelayResource' topic: $ref: '#/definitions/oci-portal_internal_oci.RelayResource' webhook: $ref: '#/definitions/oci-portal_internal_service.LogWebhookInfo' type: object oci-portal_internal_service.SecuritySettings: properties: appUrl: description: 面板公网基址;优先于 PUBLIC_URL 环境变量,回传链路与 OAuth 回调用 type: string ipRateBurst: type: integer ipRateRps: description: 全局 IP 限速令牌桶 type: integer loginFailLimit: description: 登录守卫:LockMinutes 分钟窗口内失败 FailLimit 次锁 LockMinutes 分钟 type: integer loginLockMinutes: type: integer realIpHeader: description: 真实IP请求头:空 = 直连(RemoteAddr);反代后必须选择与反代匹配的头 type: string type: object oci-portal_internal_service.TaskSettingsView: properties: snatchAuthFailLimit: type: integer type: object oci-portal_internal_service.TelegramView: properties: chatId: type: string enabled: type: boolean tokenSet: type: boolean tokenTail: type: string type: object oci-portal_internal_service.UpdateCredentialsInput: properties: currentPassword: type: string newPassword: type: string newUsername: type: string required: - currentPassword type: object oci-portal_internal_service.UpdateOAuthInput: properties: githubClientId: type: string githubClientSecret: type: string githubDisabled: type: boolean githubDisplayName: type: string oidcClientId: type: string oidcClientSecret: type: string oidcDisabled: type: boolean oidcDisplayName: type: string oidcIssuer: type: string type: object info: contact: {} description: '自托管 OCI 多租户管理面板 API。业务接口用 JWT(Bearer);AI 网关端点(/ai/v1/*)用独立网关密钥(Authorization: Bearer 或 x-api-key)。' title: OCI Portal API version: 0.0.1 paths: /ai/v1/audio/speech: post: parameters: - description: OpenAI audio speech 请求体(model/input 必填,voice 见 xAI Grok Voice 列表,language 缺省 auto;未列字段原样透传) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.SpeechRequest' responses: "200": description: 音频字节(Content-Type 透传上游,默认 audio/mpeg) schema: type: file summary: OpenAI Audio Speech 兼容端点(文本转语音) tags: - AI 网关 /ai/v1/chat/completions: post: parameters: - description: OpenAI chat/completions 请求体(支持 stream;经 Responses 转换直通) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.ChatRequest' responses: "200": description: 'OpenAI 兼容响应(非流式;流式为 SSE,末尾 data: [DONE])' schema: $ref: '#/definitions/oci-portal_internal_aiwire.ChatResponse' summary: OpenAI Chat Completions 兼容端点 tags: - AI 网关 /ai/v1/embeddings: post: parameters: - description: OpenAI embeddings 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.EmbeddingsRequest' responses: "200": description: OpenAI 兼容响应 schema: $ref: '#/definitions/oci-portal_internal_aiwire.EmbeddingsResponse' summary: OpenAI 兼容向量嵌入 tags: - AI 网关 /ai/v1/messages: post: parameters: - description: Anthropic messages 请求体(支持 stream;经 OCI OpenAI 兼容面直通;max_tokens 可缺省,默认 8192) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.MessagesRequest' responses: "200": description: Anthropic 兼容响应(非流式;流式为 SSE 事件序列) schema: $ref: '#/definitions/oci-portal_internal_aiwire.MessagesResponse' summary: Anthropic Messages 兼容端点 tags: - AI 网关 /ai/v1/models: get: responses: "200": description: OpenAI 兼容 models 列表 schema: $ref: '#/definitions/oci-portal_internal_aiwire.ModelList' summary: 可用模型列表 tags: - AI 网关 /ai/v1/moderations: post: parameters: - description: 审核请求体(input 为字符串或字符串数组,单次至多 8 条;model 接受但忽略) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.ModerationsRequest' responses: "200": description: 审核结果(categories/category_scores 为 overall/blocklist/prompt_injection,pii 为扩展字段) schema: $ref: '#/definitions/oci-portal_internal_aiwire.ModerationsResponse' summary: 内容审核端点(OCI Guardrails) tags: - AI 网关 /ai/v1/rerank: post: parameters: - description: 重排请求体(model/query/documents 必填,可选 top_n/return_documents) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.RerankRequest' responses: "200": description: 重排结果(results[].index 指向入参下标) schema: $ref: '#/definitions/oci-portal_internal_aiwire.RerankResponse' summary: 文档重排端点(Cohere Rerank) tags: - AI 网关 /ai/v1/responses: post: parameters: - description: OpenAI responses 请求体(支持 stream;服务端工具 web_search/x_search/code_interpreter/mcp 含流式;未列字段原样透传上游) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.RespRequest' responses: "200": description: OpenAI 兼容响应(非流式;流式为 SSE);直通仅建模常用字段,未列字段原样返回 schema: $ref: '#/definitions/oci-portal_internal_aiwire.RespResponse' summary: OpenAI Responses 兼容端点 tags: - AI 网关 /ai/v1/tts: post: parameters: - description: xAI TTS 请求体(text/language 必填,voice_id 缺省 eve;model 为网关扩展,缺省 xai.grok-tts;未列字段原样透传) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_aiwire.TtsRequest' responses: "200": description: 音频字节(Content-Type 透传上游,默认 audio/mpeg) schema: type: file summary: xAI 官方格式文本转语音端点 tags: - AI 网关 /api/v1/about: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.aboutResponse' security: - BearerAuth: [] summary: 返回构建、运行时长与资源占用信息,「设置 · 关于」页展示 tags: - 设置 /api/v1/ai-blacklist: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_model_AiModelBlacklist' security: - BearerAuth: [] summary: 模型黑名单列表 tags: - AI 管理 post: parameters: - description: '请求体:{name: 模型名}' in: body name: body required: true schema: type: object responses: "201": description: Created schema: $ref: '#/definitions/internal_api.itemResponse-oci-portal_internal_model_AiModelBlacklist' security: - BearerAuth: [] summary: 添加模型黑名单 tags: - AI 管理 /api/v1/ai-blacklist/{id}: delete: parameters: - description: 黑名单条目 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 移除模型黑名单(重新同步后模型恢复入池) tags: - AI 管理 /api/v1/ai-channels: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_model_AiChannel' security: - BearerAuth: [] summary: '---- 渠道 ----' tags: - AI 管理 post: parameters: - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.ChannelInput' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_model.AiChannel' security: - BearerAuth: [] summary: 创建 AI 渠道 tags: - AI 管理 /api/v1/ai-channels/{id}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除 AI 渠道 tags: - AI 管理 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.ChannelInput' responses: "204": description: 无内容 security: - BearerAuth: [] summary: 更新 AI 渠道 tags: - AI 管理 /api/v1/ai-channels/{id}/probe: post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.AiChannel' security: - BearerAuth: [] summary: 触发探测:服务可见性 + 模型同步 + 配额试调,返回更新后的渠道 tags: - AI 管理 /api/v1/ai-channels/{id}/sync-models: post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_model_AiModelCache' security: - BearerAuth: [] summary: 同步渠道模型缓存 tags: - AI 管理 /api/v1/ai-content-logs: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.pagedResponse-oci-portal_internal_model_AiCallLog' security: - BearerAuth: [] summary: 分页查询内容日志 tags: - AI 管理 /api/v1/ai-keys: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_model_AiKey' security: - BearerAuth: [] summary: '---- 密钥 ----' tags: - AI 管理 post: parameters: - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "201": description: key 为明文密钥,仅本次返回 schema: $ref: '#/definitions/internal_api.aiKeyCreateResponse' security: - BearerAuth: [] summary: 生成密钥 tags: - AI 管理 /api/v1/ai-keys/{id}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除 AI 网关密钥 tags: - AI 管理 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "204": description: 无内容 security: - BearerAuth: [] summary: 更新 AI 网关密钥 tags: - AI 管理 /api/v1/ai-keys/{id}/content-log: put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.AiKey' security: - BearerAuth: [] summary: 设置密钥内容日志窗口 tags: - AI 管理 /api/v1/ai-logs: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.pagedResponse-oci-portal_internal_model_AiContentLog' security: - BearerAuth: [] summary: AI 调用日志列表 tags: - AI 管理 /api/v1/ai-models: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_aiwire_Model' security: - BearerAuth: [] summary: '---- 聚合模型与调用日志 ----' tags: - AI 管理 /api/v1/ai-settings: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.aiSettingsResponse' security: - BearerAuth: [] summary: AI 网关全局设置 tags: - AI 管理 put: parameters: - description: 开启后已宣布弃用(即使未退役)的模型从列表与路由中排除 in: body name: body required: true schema: $ref: '#/definitions/internal_api.aiSettingsResponse' responses: "200": description: OK schema: $ref: '#/definitions/internal_api.aiSettingsResponse' security: - BearerAuth: [] summary: 更新 AI 网关全局设置 tags: - AI 管理 /api/v1/auth/credentials: get: responses: "200": description: username 与 passwordLoginDisabled schema: $ref: '#/definitions/internal_api.credentialsResponse' security: - BearerAuth: [] summary: 登录凭据摘要 tags: - 认证 put: parameters: - description: 新凭据(当前密码必验) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.UpdateCredentialsInput' responses: "204": description: 已更新,请重新登录 "401": description: 当前密码错误 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 修改登录凭据 tags: - 认证 /api/v1/auth/identities: get: responses: "200": description: items schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_model_UserIdentity' security: - BearerAuth: [] summary: 已绑定外部身份 tags: - 认证 /api/v1/auth/identities/{id}: delete: parameters: - description: 身份 ID in: path name: id required: true type: integer responses: "204": description: 已解绑 "409": description: 最后一个身份不可解绑 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 解绑外部身份 tags: - 认证 /api/v1/auth/login: post: consumes: - application/json parameters: - description: 登录凭据 in: body name: body required: true schema: $ref: '#/definitions/internal_api.loginRequest' produces: - application/json responses: "200": description: token 与 expiresAt schema: $ref: '#/definitions/internal_api.tokenResponse' "401": description: 凭据错误 schema: $ref: '#/definitions/internal_api.errorResponse' "428": description: 需要两步验证码(totpRequired=true) schema: $ref: '#/definitions/internal_api.totpRequiredResponse' summary: 登录 tags: - 认证 /api/v1/auth/logout: post: responses: "204": description: 令牌已吊销 security: - BearerAuth: [] summary: 登出 tags: - 认证 /api/v1/auth/oauth/{provider}/authorize: get: parameters: - description: oidc / github in: path name: provider required: true type: string - description: bind=绑定当前账号(需 Bearer),缺省登录 in: query name: mode type: string responses: "200": description: url schema: $ref: '#/definitions/internal_api.urlResponse' summary: 外部登录授权跳转 tags: - 认证 /api/v1/auth/oauth/{provider}/callback: get: parameters: - description: oidc / github in: path name: provider required: true type: string - description: 授权流程 state in: query name: state required: true type: string - description: 授权码 in: query name: code required: true type: string responses: "302": description: 登录 token 经 fragment 回前端,绑定回设置页 summary: 外部登录回调 tags: - 认证 /api/v1/auth/oauth/providers: get: responses: "200": description: providers 与 passwordLoginDisabled schema: $ref: '#/definitions/internal_api.oauthProvidersResponse' summary: 外部登录 provider 列表 tags: - 认证 /api/v1/auth/password-login: put: parameters: - description: '{disabled: bool}' in: body name: body required: true schema: type: object responses: "204": description: 已保存 "409": description: 未绑定外部身份 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 密码登录开关 tags: - 认证 /api/v1/auth/revoke-sessions: post: responses: "200": description: 新 token 与 expiresAt schema: $ref: '#/definitions/internal_api.tokenResponse' security: - BearerAuth: [] summary: 撤销全部会话 tags: - 认证 /api/v1/auth/totp: get: responses: "200": description: enabled schema: $ref: '#/definitions/internal_api.enabledResponse' security: - BearerAuth: [] summary: 两步验证状态 tags: - 认证 /api/v1/auth/totp/activate: post: parameters: - description: '{code: 6 位验证码}' in: body name: body required: true schema: type: object responses: "204": description: 已启用 security: - BearerAuth: [] summary: 激活两步验证 tags: - 认证 /api/v1/auth/totp/disable: post: parameters: - description: '{password 或 code 任一确认}' in: body name: body required: true schema: type: object responses: "204": description: 已停用 security: - BearerAuth: [] summary: 停用两步验证 tags: - 认证 /api/v1/auth/totp/setup: post: responses: "200": description: secret 与 otpauthUri schema: $ref: '#/definitions/internal_api.totpSetupResponse' "409": description: 已启用 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 发起两步验证设置 tags: - 认证 /api/v1/console-sessions/{sessionId}: delete: parameters: - description: 会话 ID in: path name: sessionId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 关闭网页控制台会话 tags: - 网页控制台 /api/v1/console-sessions/{sessionId}/ws: get: parameters: - description: 会话 ID in: path name: sessionId required: true type: string - description: JWT(浏览器 WebSocket 无法带头,经 query 传递) in: query name: token required: true type: string responses: "101": description: 升级为 WebSocket summary: 控制台 WebSocket 数据面 tags: - 网页控制台 /api/v1/log-events: get: parameters: - description: 按配置过滤 in: query name: configId type: integer - description: 关键字 in: query name: q type: string responses: "200": description: items 与 total schema: $ref: '#/definitions/internal_api.pagedResponse-oci-portal_internal_model_LogEvent' security: - BearerAuth: [] summary: 回传日志事件列表 tags: - 任务与日志回传 /api/v1/oci-configs: get: responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_service.ConfigSummary' type: array security: - BearerAuth: [] summary: 租户配置列表 tags: - 租户配置 post: parameters: - description: API Key 配置(私钥密文落库) in: body name: body required: true schema: $ref: '#/definitions/internal_api.importRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_model.OciConfig' security: - BearerAuth: [] summary: 导入租户配置 tags: - 租户配置 /api/v1/oci-configs/{id}: delete: description: 删除租户配置及其本地关联任务、快照、回传、告警和 AI 渠道数据,并撤销 Webhook 密钥;不删除 OCI 云端资源。 parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除租户配置 tags: - 租户配置 get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.OciConfig' security: - BearerAuth: [] summary: 租户配置详情 tags: - 租户配置 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 可更新字段(别名/分组/代理/多区域开关等) in: body name: body required: true schema: type: object responses: "200": description: config 与 changes 字段变更对照 schema: $ref: '#/definitions/internal_api.configChangesResponse' security: - BearerAuth: [] summary: 更新租户配置 tags: - 租户配置 /api/v1/oci-configs/{id}/audit-events: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 续查游标(上次响应原样带回) in: query name: cursor type: string - description: 单批目标条数,缺省 100,上限 200 in: query name: limit type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.AuditEventsView' security: - BearerAuth: [] summary: 批式懒加载查询租户 OCI 审计事件 tags: - 租户 IAM /api/v1/oci-configs/{id}/audit-events/detail: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: raw 为事件原文 JSON schema: $ref: '#/definitions/internal_api.rawDetailResponse' security: - BearerAuth: [] summary: 按 eventId 取回原始事件 JSON:缓存命中秒开, tags: - 租户 IAM /api/v1/oci-configs/{id}/availability-domains: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: type: string type: array security: - BearerAuth: [] summary: 可用域列表 tags: - 租户配置 /api/v1/oci-configs/{id}/boot-volume-attachments/{attachmentId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: attachmentId in: path name: attachmentId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 分离引导卷 tags: - 存储 /api/v1/oci-configs/{id}/boot-volumes: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.BootVolume' type: array security: - BearerAuth: [] summary: 引导卷列表 tags: - 存储 /api/v1/oci-configs/{id}/boot-volumes/{bootVolumeId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: bootVolumeId in: path name: bootVolumeId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除引导卷 tags: - 存储 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: bootVolumeId in: path name: bootVolumeId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.BootVolume' security: - BearerAuth: [] summary: 引导卷详情 tags: - 存储 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: bootVolumeId in: path name: bootVolumeId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateBootVolumeRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.BootVolume' security: - BearerAuth: [] summary: 更新引导卷 tags: - 存储 /api/v1/oci-configs/{id}/cached-compartments: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Compartment' type: array security: - BearerAuth: [] summary: 返回筛选器用区间列表:未开多区间支持返回空数组 tags: - 租户配置 /api/v1/oci-configs/{id}/cached-regions: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_service.RegionSubscriptionView' type: array security: - BearerAuth: [] summary: 返回筛选器用区域列表:未开多区域支持只含默认区域 tags: - 租户配置 /api/v1/oci-configs/{id}/compartments: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Compartment' type: array security: - BearerAuth: [] summary: 列出租户下全部 ACTIVE compartment tags: - 租户配置 /api/v1/oci-configs/{id}/console-connections/{connectionId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: connectionId in: path name: connectionId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除实例控制台连接 tags: - 计算 /api/v1/oci-configs/{id}/costs: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.CostItem' type: array security: - BearerAuth: [] summary: 配置成本快照 tags: - 成本 /api/v1/oci-configs/{id}/domains: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.IdentityDomain' type: array security: - BearerAuth: [] summary: 租户身份域列表 tags: - 租户 IAM /api/v1/oci-configs/{id}/identity-providers: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.IdentityProviderInfo' type: array security: - BearerAuth: [] summary: 身份提供商列表 tags: - 租户 IAM post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createIdpRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.IdentityProviderInfo' security: - BearerAuth: [] summary: 创建身份提供商(SAML) tags: - 租户 IAM /api/v1/oci-configs/{id}/identity-providers/{idpId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: idpId in: path name: idpId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除身份提供商 tags: - 租户 IAM /api/v1/oci-configs/{id}/identity-providers/{idpId}/activate: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: idpId in: path name: idpId required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.IdentityProviderInfo' security: - BearerAuth: [] summary: 激活身份提供商 tags: - 租户 IAM /api/v1/oci-configs/{id}/identity-settings: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.IdentitySettingInfo' security: - BearerAuth: [] summary: 身份域设置 tags: - 租户 IAM put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.IdentitySettingInfo' security: - BearerAuth: [] summary: 更新身份域设置 tags: - 租户 IAM /api/v1/oci-configs/{id}/images: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Image' type: array security: - BearerAuth: [] summary: 镜像列表 tags: - 租户配置 /api/v1/oci-configs/{id}/images/{imageId}: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: imageId in: path name: imageId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Image' security: - BearerAuth: [] summary: 镜像详情 tags: - 租户配置 /api/v1/oci-configs/{id}/instances: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Instance' type: array security: - BearerAuth: [] summary: 实例列表 tags: - 计算 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createInstanceRequest' responses: "201": description: 部分成功仍 201,errors 为逐台失败信息 schema: $ref: '#/definitions/internal_api.createInstancesResponse' security: - BearerAuth: [] summary: 创建实例 tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 终止实例 tags: - 计算 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Instance' security: - BearerAuth: [] summary: 实例详情 tags: - 计算 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateInstanceRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Instance' security: - BearerAuth: [] summary: 更新实例 tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/action: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.instanceActionRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Instance' security: - BearerAuth: [] summary: 实例电源操作(启停/重启) tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/boot-volume-attachments: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.BootVolumeAttachment' type: array security: - BearerAuth: [] summary: 引导卷附件列表 tags: - 存储 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.attachBootVolumeRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.BootVolumeAttachment' security: - BearerAuth: [] summary: 附加引导卷 tags: - 存储 /api/v1/oci-configs/{id}/instances/{instanceId}/change-public-ip: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/internal_api.publicIpResponse' security: - BearerAuth: [] summary: '---- 实例 IP ----' tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/console-connections: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.ConsoleConnection' type: array security: - BearerAuth: [] summary: 实例控制台连接列表 tags: - 计算 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createConsoleConnectionRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.ConsoleConnection' security: - BearerAuth: [] summary: 创建实例控制台连接 tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/console-sessions: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 实例 OCID in: path name: instanceId required: true type: string - description: '{type: serial|vnc}' in: body name: body required: true schema: type: object responses: "201": description: sessionId 与 type schema: $ref: '#/definitions/internal_api.webConsoleSessionResponse' security: - BearerAuth: [] summary: 创建网页控制台会话 tags: - 网页控制台 /api/v1/oci-configs/{id}/instances/{instanceId}/ipv6-addresses: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 移除实例 IPv6 地址 tags: - 计算 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "201": description: Created schema: $ref: '#/definitions/internal_api.ipv6AddressResponse' security: - BearerAuth: [] summary: 实例添加 IPv6 地址 tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/replace-boot-volume: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.attachBootVolumeRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.BootVolumeAttachment' security: - BearerAuth: [] summary: 更换实例引导卷 tags: - 存储 /api/v1/oci-configs/{id}/instances/{instanceId}/traffic: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.InstanceTraffic' security: - BearerAuth: [] summary: '---- 流量与成本 ----' tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/vnics: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Vnic' type: array security: - BearerAuth: [] summary: 实例 VNIC 列表 tags: - 计算 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.attachVnicRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.Vnic' security: - BearerAuth: [] summary: 附加 VNIC tags: - 计算 /api/v1/oci-configs/{id}/instances/{instanceId}/volume-attachments: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.VolumeAttachment' type: array security: - BearerAuth: [] summary: 卷附件列表 tags: - 存储 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: instanceId in: path name: instanceId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.attachVolumeRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.VolumeAttachment' security: - BearerAuth: [] summary: 附加块存储卷 tags: - 存储 /api/v1/oci-configs/{id}/limits: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.LimitValue' type: array security: - BearerAuth: [] summary: 服务限额查询 tags: - 租户配置 /api/v1/oci-configs/{id}/limits/services: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.LimitService' type: array security: - BearerAuth: [] summary: 限额服务列表 tags: - 租户配置 /api/v1/oci-configs/{id}/log-relay: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 逆序销毁链路并撤销 secret tags: - 任务与日志回传 get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.RelayView' security: - BearerAuth: [] summary: 查询 OCI 侧链路状态与关键事件清单 tags: - 任务与日志回传 post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.RelayView' security: - BearerAuth: [] summary: 一键建立回传链路 tags: - 任务与日志回传 /api/v1/oci-configs/{id}/log-webhook: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 撤销配置的回传 secret,旧回调地址随即失效 tags: - 任务与日志回传 get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/internal_api.logWebhookStatusResponse' security: - BearerAuth: [] summary: 查询配置的回调地址 tags: - 任务与日志回传 post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.LogWebhookInfo' security: - BearerAuth: [] summary: 生成 tags: - 任务与日志回传 /api/v1/oci-configs/{id}/notification-recipients: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.NotificationRecipients' security: - BearerAuth: [] summary: '---- 域通知收件人与密码策略 ----' tags: - 租户 IAM put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.NotificationRecipients' security: - BearerAuth: [] summary: 更新通知收件人 tags: - 租户 IAM /api/v1/oci-configs/{id}/password-policies: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.PasswordPolicyInfo' type: array security: - BearerAuth: [] summary: 密码策略列表 tags: - 租户 IAM /api/v1/oci-configs/{id}/password-policies/{policyId}: put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: policyId in: path name: policyId required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.PasswordPolicyInfo' security: - BearerAuth: [] summary: 更新密码策略 tags: - 租户 IAM /api/v1/oci-configs/{id}/region-subscriptions: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_service.RegionSubscriptionView' type: array security: - BearerAuth: [] summary: 区域订阅列表 tags: - 租户配置 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.subscribeRegionRequest' responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_service.RegionSubscriptionView' type: array security: - BearerAuth: [] summary: 订阅新区域 tags: - 租户配置 /api/v1/oci-configs/{id}/saml-metadata: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: SAML 元数据 XML(附件下载) schema: type: file security: - BearerAuth: [] summary: 下载 SAML 元数据 tags: - 租户 IAM /api/v1/oci-configs/{id}/security-lists: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.SecurityList' type: array security: - BearerAuth: [] summary: 安全列表清单 tags: - 网络 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createSecurityListRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.SecurityList' security: - BearerAuth: [] summary: 创建安全列表 tags: - 网络 /api/v1/oci-configs/{id}/security-lists/{securityListId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: securityListId in: path name: securityListId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除安全列表 tags: - 网络 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: securityListId in: path name: securityListId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.SecurityList' security: - BearerAuth: [] summary: 安全列表详情 tags: - 网络 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: securityListId in: path name: securityListId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateSecurityListRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.SecurityList' security: - BearerAuth: [] summary: 更新安全列表 tags: - 网络 /api/v1/oci-configs/{id}/shapes: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.ComputeShape' type: array security: - BearerAuth: [] summary: 实例形状列表 tags: - 租户配置 /api/v1/oci-configs/{id}/sign-on-exemptions: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.SignOnRuleInfo' security: - BearerAuth: [] summary: 创建 MFA 豁免规则 tags: - 租户 IAM /api/v1/oci-configs/{id}/sign-on-exemptions/{ruleId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: ruleId in: path name: ruleId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除 MFA 豁免规则 tags: - 租户 IAM /api/v1/oci-configs/{id}/sign-on-rules: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.SignOnRuleInfo' type: array security: - BearerAuth: [] summary: 单点登录规则列表 tags: - 租户 IAM /api/v1/oci-configs/{id}/subnets: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Subnet' type: array security: - BearerAuth: [] summary: 子网列表 tags: - 网络 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createSubnetRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.Subnet' security: - BearerAuth: [] summary: 创建子网 tags: - 网络 /api/v1/oci-configs/{id}/subnets/{subnetId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: subnetId in: path name: subnetId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除子网 tags: - 网络 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: subnetId in: path name: subnetId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Subnet' security: - BearerAuth: [] summary: 子网详情 tags: - 网络 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: subnetId in: path name: subnetId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.renameRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Subnet' security: - BearerAuth: [] summary: 更新子网 tags: - 网络 /api/v1/oci-configs/{id}/subscriptions: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.SubscriptionInfo' type: array security: - BearerAuth: [] summary: 订阅列表 tags: - 租户配置 /api/v1/oci-configs/{id}/subscriptions/{subscriptionId}: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: subscriptionId in: path name: subscriptionId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.SubscriptionDetail' security: - BearerAuth: [] summary: 订阅详情 tags: - 租户配置 /api/v1/oci-configs/{id}/users: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.TenantUser' type: array security: - BearerAuth: [] summary: 租户 IAM 用户列表 tags: - 租户 IAM post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createTenantUserRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.TenantUser' security: - BearerAuth: [] summary: 创建租户 IAM 用户 tags: - 租户 IAM /api/v1/oci-configs/{id}/users/{userId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: userId in: path name: userId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除租户 IAM 用户 tags: - 租户 IAM get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: userId in: path name: userId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.TenantUserDetail' security: - BearerAuth: [] summary: 租户用户详情 tags: - 租户 IAM put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: userId in: path name: userId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateTenantUserRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.TenantUser' security: - BearerAuth: [] summary: 更新租户 IAM 用户 tags: - 租户 IAM /api/v1/oci-configs/{id}/users/{userId}/api-keys: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: userId in: path name: userId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/internal_api.deletedApiKeysResponse' security: - BearerAuth: [] summary: 清除用户全部 API Key tags: - 租户 IAM /api/v1/oci-configs/{id}/users/{userId}/mfa-devices: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: userId in: path name: userId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/internal_api.deletedTotpResponse' security: - BearerAuth: [] summary: 清除用户 MFA 设备 tags: - 租户 IAM /api/v1/oci-configs/{id}/users/{userId}/reset-password: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: userId in: path name: userId required: true type: string responses: "200": description: 一次性明文密码 schema: $ref: '#/definitions/internal_api.passwordResponse' security: - BearerAuth: [] summary: 重置租户用户密码 tags: - 租户 IAM /api/v1/oci-configs/{id}/vcns: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.VCN' type: array security: - BearerAuth: [] summary: VCN 列表 tags: - 网络 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createVCNRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.VCN' security: - BearerAuth: [] summary: 创建 VCN tags: - 网络 /api/v1/oci-configs/{id}/vcns/{vcnId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: vcnId in: path name: vcnId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除 VCN tags: - 网络 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: vcnId in: path name: vcnId required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.VCN' security: - BearerAuth: [] summary: VCN 详情 tags: - 网络 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: vcnId in: path name: vcnId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.renameRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.VCN' security: - BearerAuth: [] summary: 更新 VCN tags: - 网络 /api/v1/oci-configs/{id}/vcns/{vcnId}/enable-ipv6: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: vcnId in: path name: vcnId required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.enableIPv6Request' responses: "200": description: OK schema: $ref: '#/definitions/internal_api.ipv6StepsResponse' security: - BearerAuth: [] summary: VCN 启用 IPv6 tags: - 网络 /api/v1/oci-configs/{id}/verify: post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: config 与 changes 字段变更对照 schema: $ref: '#/definitions/internal_api.configChangesResponse' security: - BearerAuth: [] summary: 验证配置连通性并刷新画像 tags: - 租户配置 /api/v1/oci-configs/{id}/vnic-attachments/{attachmentId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: attachmentId in: path name: attachmentId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 分离 VNIC tags: - 计算 /api/v1/oci-configs/{id}/vnics/{vnicId}/ipv6-addresses: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: vnicId in: path name: vnicId required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "201": description: Created schema: $ref: '#/definitions/internal_api.addressResponse' security: - BearerAuth: [] summary: 为指定 VNIC 添加 IPv6 tags: - 计算 /api/v1/oci-configs/{id}/volume-attachments/{attachmentId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: attachmentId in: path name: attachmentId required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 分离块存储卷 tags: - 存储 /api/v1/oci-configs/{id}/volumes: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.BlockVolume' type: array security: - BearerAuth: [] summary: 块存储卷列表 tags: - 存储 /api/v1/overview: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.Overview' security: - BearerAuth: [] summary: 返回总览页聚合数据 tags: - 租户配置 /api/v1/proxies: get: responses: "200": description: items schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_service_ProxyView' security: - BearerAuth: [] summary: 代理列表 tags: - 设置 post: parameters: - description: 代理配置(密码只写不回) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.ProxyInput' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_service.ProxyView' security: - BearerAuth: [] summary: 创建代理 tags: - 设置 /api/v1/proxies/{id}: delete: parameters: - description: 代理 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除代理 tags: - 设置 put: parameters: - description: 代理 ID in: path name: id required: true type: integer - description: 代理配置(密码缺省沿用) in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.ProxyInput' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.ProxyView' security: - BearerAuth: [] summary: 更新代理 tags: - 设置 /api/v1/proxies/{id}/probe: post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.ProxyView' security: - BearerAuth: [] summary: 手动重测代理出口地区,同步返回最新视图 tags: - 设置 /api/v1/proxies/{id}/tenants: put: parameters: - description: 代理 ID in: path name: id required: true type: integer - description: 请求体 {\ in: body name: body required: true schema: type: object responses: "200": description: usedBy schema: $ref: '#/definitions/internal_api.usedByResponse' security: - BearerAuth: [] summary: 设置代理关联的租户全集 tags: - 设置 /api/v1/proxies/import: post: parameters: - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.ImportResult' security: - BearerAuth: [] summary: 批量导入代理 tags: - 设置 /api/v1/regions: get: responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.RegionInfo' type: array security: - BearerAuth: [] summary: 返回本地维护的完整区域表 tags: - 租户配置 /api/v1/settings/notify-channels: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_service_NotifyChannelView' security: - BearerAuth: [] summary: 返回全部通知渠道的脱敏视图 tags: - 设置 /api/v1/settings/notify-channels/{type}: put: parameters: - description: 渠道类型(webhook/ntfy/bark/smtp) in: path name: type required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateNotifyChannelRequest' responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_service_NotifyChannelView' security: - BearerAuth: [] summary: 保存单渠道配置并返回全渠道最新视图 tags: - 设置 /api/v1/settings/notify-channels/{type}/test: post: parameters: - description: 渠道类型(webhook/ntfy/bark/smtp) in: path name: type required: true type: string responses: "204": description: 无内容 security: - BearerAuth: [] summary: 向指定渠道发送测试消息 tags: - 设置 /api/v1/settings/notify-events: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.NotifyEventsView' security: - BearerAuth: [] summary: 返回全部通知事件开关 tags: - 设置 put: parameters: - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.NotifyEventsView' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.NotifyEventsView' security: - BearerAuth: [] summary: 全量保存五个事件开关并返回最新值 tags: - 设置 /api/v1/settings/notify-templates: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_service_NotifyTemplateView' security: - BearerAuth: [] summary: 返回全部通知模板 tags: - 设置 /api/v1/settings/notify-templates/{kind}: put: parameters: - description: kind in: path name: kind required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "204": description: 无内容 security: - BearerAuth: [] summary: 保存单个通知模板 tags: - 设置 /api/v1/settings/notify-templates/{kind}/test: post: parameters: - description: kind in: path name: kind required: true type: string - description: 请求体(见接口说明) in: body name: body required: true schema: type: object responses: "204": description: 无内容 security: - BearerAuth: [] summary: 用示例变量渲染模板并同步发送测试消息 tags: - 设置 /api/v1/settings/oauth: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.OAuthProvidersView' security: - BearerAuth: [] summary: OAuth provider 配置 tags: - 设置 put: parameters: - description: provider 配置 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.UpdateOAuthInput' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.OAuthProvidersView' security: - BearerAuth: [] summary: 保存 OAuth provider 配置 tags: - 设置 /api/v1/settings/security: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.SecuritySettings' security: - BearerAuth: [] summary: 返回安全设置 tags: - 设置 put: parameters: - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.SecuritySettings' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.SecuritySettings' security: - BearerAuth: [] summary: 保存安全设置并返回最新值 tags: - 设置 /api/v1/settings/task: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.TaskSettingsView' security: - BearerAuth: [] summary: 返回任务行为设置 tags: - 设置 put: parameters: - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.TaskSettingsView' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.TaskSettingsView' security: - BearerAuth: [] summary: 保存任务行为设置并返回最新值 tags: - 设置 /api/v1/settings/telegram: get: responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.TelegramView' security: - BearerAuth: [] summary: 返回脱敏后的 Telegram 配置,绝不回 token 明文 tags: - 设置 put: parameters: - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateTelegramRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_service.TelegramView' security: - BearerAuth: [] summary: 保存配置并返回最新脱敏视图 tags: - 设置 /api/v1/settings/telegram/test: post: responses: "204": description: 无内容 security: - BearerAuth: [] summary: 用当前已保存配置同步发送一条测试消息 tags: - 设置 /api/v1/system-logs: get: responses: "200": description: items 与 total schema: $ref: '#/definitions/internal_api.pagedResponse-oci-portal_internal_model_SystemLog' security: - BearerAuth: [] summary: 系统操作日志列表 tags: - 设置 /api/v1/tasks: get: responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_model.Task' type: array security: - BearerAuth: [] summary: 任务列表 tags: - 任务与日志回传 post: parameters: - description: 任务定义(类型/cron/payload) in: body name: body required: true schema: $ref: '#/definitions/internal_api.createTaskRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_model.Task' security: - BearerAuth: [] summary: 创建任务 tags: - 任务与日志回传 /api/v1/tasks/{id}: delete: parameters: - description: 任务 ID in: path name: id required: true type: integer responses: "204": description: 无内容 security: - BearerAuth: [] summary: 删除任务 tags: - 任务与日志回传 get: parameters: - description: 任务 ID in: path name: id required: true type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.Task' security: - BearerAuth: [] summary: 任务详情 tags: - 任务与日志回传 put: parameters: - description: 任务 ID in: path name: id required: true type: integer - description: 可更新字段 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateTaskRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.Task' security: - BearerAuth: [] summary: 更新任务 tags: - 任务与日志回传 /api/v1/tasks/{id}/logs: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_model.TaskLog' type: array security: - BearerAuth: [] summary: 任务执行日志 tags: - 任务与日志回传 /api/v1/tasks/{id}/run: post: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "202": description: Accepted schema: $ref: '#/definitions/internal_api.triggerResponse' "409": description: 任务正在执行中 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 立即执行任务(异步触发,结果经任务日志轮询获取) tags: - 任务与日志回传 /api/v1/webhooks/oci-logs/{secret}: post: parameters: - description: 面板生成的回传密钥(鉴权凭据) in: path name: secret required: true type: string - description: ONS 消息原文(SubscriptionConfirmation / Notification) in: body name: body required: true schema: type: object responses: "200": description: 已受理 "403": description: 时间戳超窗或证书源非 Oracle 域 schema: $ref: '#/definitions/internal_api.errorResponse' "404": description: secret 无效(不暴露端点存在性) summary: OCI 日志回传入口(ONS HTTPS 订阅投递) tags: - 任务与日志回传 securityDefinitions: BearerAuth: description: '登录接口返回的 JWT,格式: Bearer ' in: header name: Authorization type: apiKey swagger: "2.0"