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: description: FilterDeprecated 开启后已宣布弃用(即使未退役)的模型从列表与路由中排除 type: boolean grokWebSearch: description: |- GrokWebSearch / GrokXSearch 是 xai. 模型服务端搜索工具默认注入开关; 请求 tools 已包含同名工具时不覆盖 type: boolean grokXSearch: type: boolean streamGuardEnabled: description: |- StreamGuardEnabled / StreamGuardKB 是 Responses 流式保险丝: instructions+tools 合计超阈值(KB)的流式请求改非流式上游并合成 SSE type: boolean streamGuardKB: type: integer upstreamWaitSeconds: description: |- UpstreamWaitSeconds 是 responses 直通的上游无响应预算(秒):非流式为单次 尝试总超时,流式为等待响应头预算;multi-agent/搜索类模型需远超 60s type: integer 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 reservedPublicIpId: description: ReservedPublicIPID 非空时不分配临时公网 IP,VNIC 就绪后由后台绑定该保留 IP。 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.createBucketRequest: properties: compartmentId: type: string name: type: string publicRead: type: boolean region: type: string storageTier: description: Standard / Archive type: string versioningOn: type: boolean required: - name 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.createIdpResponse: properties: enabled: type: boolean id: type: string jitEnabled: type: boolean name: type: string partnerProviderId: type: string setupWarning: $ref: '#/definitions/internal_api.idpSetupWarning' timeCreated: type: string type: type: string 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 reservedPublicIpId: description: 非空时不分配临时 IP,实例就绪后自动绑定该保留 IP 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.createPARRequest: properties: accessType: type: string expiresHours: type: integer name: type: string objectName: description: 空 = 桶级 type: string region: type: string required: - accessType 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.idpIconResponse: properties: fileName: type: string url: type: string type: object internal_api.idpSetupWarning: properties: code: type: string message: type: string requestId: type: string resourceCreated: type: boolean 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_AggregatedModel: properties: items: items: $ref: '#/definitions/oci-portal_internal_service.AggregatedModel' 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.parPage: properties: items: items: $ref: '#/definitions/oci-portal_internal_oci.PAR' type: array nextPage: type: string type: object internal_api.passwordResponse: properties: password: type: string type: object internal_api.payInvoiceRequest: properties: email: type: string required: - email 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.testChannelModelRequest: properties: model: type: string required: - model 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.updateBucketRequest: properties: publicRead: type: boolean region: type: string versioningOn: type: boolean 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.userApiKeysResponse: properties: items: items: $ref: '#/definitions/oci-portal_internal_service.UserApiKeyInfo' type: array 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 modelCount: description: ModelCount 是渠道模型缓存计数,列表查询回填,不落库 type: integer name: type: string ociConfigId: type: integer priority: type: integer probeError: type: string probeModel: description: ProbeModel 是用户测试通过后固定的探测验证模型名;探测时置于候选首位 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.Bucket: properties: approximateCount: type: integer approximateSize: type: integer name: type: string namespace: type: string storageTier: type: string timeCreated: type: string versioningOn: type: boolean visibility: description: NoPublicAccess / ObjectRead 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 quotaNames: description: |- QuotaNames 是该 shape 对应的配额名(与 Limits 服务 compute limit name 同名), 前端据此结合 limits 行判定配额与 AD 可用性。 items: type: string type: array 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 subValue: description: 复合分组的第二维取值(如 service 下的 skuName) 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.Invoice: properties: amount: type: number amountDue: type: number currency: type: string id: type: string internalId: type: string isPaid: type: boolean isPayable: type: boolean isPaymentFailed: type: boolean number: type: string status: type: string timeDue: type: string timeInvoice: type: string type: type: string type: object oci-portal_internal_oci.InvoiceLine: properties: currency: type: string orderNo: type: string product: type: string quantity: type: number timeEnd: type: string timeStart: type: string total: type: number unitPrice: type: number 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.ListObjectsResult: properties: nextStartWith: type: string objects: items: $ref: '#/definitions/oci-portal_internal_oci.ObjectSummary' type: array prefixes: items: type: string type: array type: object oci-portal_internal_oci.NotificationRecipients: properties: recipients: items: type: string type: array testModeEnabled: type: boolean type: object oci-portal_internal_oci.ObjectDetail: properties: archivalState: type: string contentMd5: type: string contentType: type: string etag: type: string metadata: additionalProperties: type: string type: object name: type: string size: type: integer storageTier: type: string timeModified: type: string type: object oci-portal_internal_oci.ObjectSummary: properties: archivalState: type: string name: type: string size: type: integer storageTier: type: string timeModified: type: string type: object oci-portal_internal_oci.PAR: properties: accessType: type: string fullUrl: type: string id: type: string name: type: string objectName: type: string timeCreated: type: string timeExpires: type: string 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.PaymentMethod: properties: billingAgreement: type: string cardType: type: string email: type: string lastDigits: type: string method: description: CREDIT_CARD / PAYPAL type: string nameOnCard: type: string payerName: type: string timeExpiration: type: string 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.ReservedIP: properties: assignedInstanceId: type: string assignedInstanceName: type: string displayName: type: string id: type: string ipAddress: type: string lifecycleState: type: string timeCreated: 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.AggregatedModel: properties: capability: type: string name: 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 scannedThrough: type: string 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.CreatedApiKey: properties: configIni: type: string fingerprint: type: string privateKey: 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 series: description: |- Series 按币种拆分的序列(合计降序);顶层 Currency/Total/Days 恒为首个 (主)币种,多币种租户的其余币种只出现在 Series,不与主币种相加。 items: $ref: '#/definitions/oci-portal_internal_service.OverviewCostSeries' type: array total: type: number type: object oci-portal_internal_service.OverviewCostDay: properties: amount: type: number day: type: string type: object oci-portal_internal_service.OverviewCostSeries: properties: currency: type: string days: items: $ref: '#/definitions/oci-portal_internal_service.OverviewCostDay' type: array total: type: number 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.SecurityPatch: properties: appUrl: type: string ipRateBurst: type: integer ipRateRps: type: integer loginFailLimit: type: integer loginLockMinutes: type: integer realIpHeader: type: string 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 oci-portal_internal_service.UserApiKeyInfo: properties: configIni: type: string fingerprint: type: string isCurrent: description: IsCurrent 表示该 key 正被当前配置用于签名请求 type: boolean timeCreated: 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.8.2 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 含流式;codex 兼容:namespace 工具组拍平为限定名 function 并在响应还原,custom 工具转 function 包装并回转 custom_tool_call(apply_patch 丢弃),tool_search 剥离,web_search.external_web_access 上游不支持自动处理,超 76KB 流式请求自动改非流式合成 SSE;未列字段原样透传上游) 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}/models: get: 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-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-channels/{id}/test-model: post: parameters: - description: 渠道 ID in: path name: id required: true type: integer - description: 模型名 in: body name: body required: true schema: $ref: '#/definitions/internal_api.testChannelModelRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.AiChannel' "502": description: 试调未通过 schema: $ref: '#/definitions/internal_api.errorResponse' security: - BearerAuth: [] summary: 测试渠道模型(max_tokens=16 试调;通过即设为探测验证模型并按需置渠道可用) tags: - AI 管理 /api/v1/ai-content-logs: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.pagedResponse-oci-portal_internal_model_AiContentLog' 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_AiCallLog' security: - BearerAuth: [] summary: AI 调用日志列表 tags: - AI 管理 /api/v1/ai-model-catalog: get: responses: "200": description: OK schema: $ref: '#/definitions/internal_api.itemsResponse-oci-portal_internal_service_AggregatedModel' security: - BearerAuth: [] summary: 聚合模型目录 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: 全量提交;保险丝阈值限 1..1024 KB,上游无响应预算限 30..900 秒 in: body name: body required: true schema: $ref: '#/definitions/internal_api.aiSettingsResponse' responses: "200": description: OK schema: $ref: '#/definitions/internal_api.aiSettingsResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object 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: "200": description: 已更新,返回换发的新 token schema: $ref: '#/definitions/internal_api.tokenResponse' "204": description: 已更新但新 token 签发失败,需重新登录 "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: "200": description: 已解绑,返回换发的新 token schema: $ref: '#/definitions/internal_api.tokenResponse' "204": description: 已解绑但新 token 签发失败,需重新登录 "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: "200": description: 已保存,返回换发的新 token schema: $ref: '#/definitions/internal_api.tokenResponse' "204": description: 已保存但新 token 签发失败,需重新登录 "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: "200": description: 已启用,返回换发的新 token schema: $ref: '#/definitions/internal_api.tokenResponse' "204": description: 已启用但新 token 签发失败,需重新登录 security: - BearerAuth: [] summary: 激活两步验证 tags: - 认证 /api/v1/auth/totp/disable: post: parameters: - description: '{password 或 code 任一确认}' in: body name: body required: true schema: type: object responses: "200": description: 已停用,返回换发的新 token schema: $ref: '#/definitions/internal_api.tokenResponse' "204": description: 已停用但新 token 签发失败,需重新登录 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}/activate-api-key: post: description: 将刚创建的 key 设为本配置签名凭据:验证可用后落库,不删除旧 key;私钥为创建时下发的那份回传。 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体:fingerprint 与 privateKey in: body name: body required: true schema: type: object responses: "204": description: 无内容 security: - BearerAuth: [] summary: 启用 API Key 为面板签名凭据 tags: - 租户 IAM /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 - description: 检索关键字(服务端全文匹配,支持 * 通配;仅首查生效) in: query name: q type: string 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}/buckets: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 区域 in: query name: region type: string - description: 区间 OCID,空为生效区间 in: query name: compartmentId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Bucket' 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.createBucketRequest' responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.Bucket' security: - BearerAuth: [] summary: 创建存储桶 tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string responses: "200": description: queued=true 表示已转后台清空删除 schema: additionalProperties: type: boolean type: object security: - BearerAuth: [] summary: 删除存储桶(非空桶后台清空后删除) tags: - 对象存储 put: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateBucketRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.Bucket' security: - BearerAuth: [] summary: 更新存储桶(可见性/版本控制) tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/objects: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 对象名(完整 key) in: query name: object required: true type: string responses: "204": description: 删除成功 security: - BearerAuth: [] summary: 删除对象 tags: - 对象存储 get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 前缀(虚拟目录) in: query name: prefix type: string - description: 上页 nextStartWith 游标 in: query name: startWith type: string - description: 每页数量,默认 100 in: query name: limit type: integer responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.ListObjectsResult' security: - BearerAuth: [] summary: 对象列表(前缀模式分页) tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/objects/content: get: description: 预览/编辑用小文件直读(上限 20MB),不签发 PAR;响应体为原始字节,ETag 经响应头返回 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 对象名(完整 key) in: query name: object required: true type: string responses: "200": description: 对象原始内容 schema: type: string "413": description: 对象超出中转上限 schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 读取对象内容(面板中转) tags: - 对象存储 put: description: 文本编辑保存(上限 5MB),请求体为原始字节;If-Match 请求头做并发保护,冲突返回 412 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 对象名(完整 key) in: query name: object required: true type: string responses: "200": description: etag=新 ETag schema: additionalProperties: type: string type: object "412": description: If-Match 不匹配,对象已被并发修改 schema: additionalProperties: type: string type: object "413": description: 请求体超出上限 schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 保存对象内容(面板中转) tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/objects/detail: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 对象名(完整 key) in: query name: object required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_oci.ObjectDetail' security: - BearerAuth: [] summary: 对象元数据 tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/objects/rename: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 请求体:region、source、newName in: body name: body required: true schema: type: object responses: "204": description: 重命名成功 security: - BearerAuth: [] summary: 重命名对象 tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/objects/restore: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 请求体:region、object、hours(可下载时长,默认 24) in: body name: body required: true schema: type: object responses: "202": description: 取回已提交,约 1 小时后可下载 security: - BearerAuth: [] summary: 取回 Archive 对象 tags: - 对象存储 /api/v1/oci-configs/{id}/buckets/{bucket}/pars: delete: description: 'all=1 时删除桶内全部 PAR 并返回 {"deleted": n};否则按 parId 删单条' parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: PAR ID(可含 / 等字符,故经 query 传递) in: query name: parId type: string - description: 为 1 时删除全部 in: query name: all type: string - description: 区域 in: query name: region type: string responses: "200": description: 'all=1 时返回 {deleted: n}' schema: additionalProperties: type: integer type: object "204": description: 按 parId 删单条成功,链接立即失效 security: - BearerAuth: [] summary: 删除临时链接 tags: - 对象存储 get: description: 游标分页:page 传上次响应的 nextPage,nextPage 为空表示已到末页 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 区域 in: query name: region type: string - description: 分页游标(上次响应的 nextPage,空取首页) in: query name: page type: string - description: 每页条数,默认 100,上限 1000 in: query name: limit type: integer responses: "200": description: OK schema: $ref: '#/definitions/internal_api.parPage' security: - BearerAuth: [] summary: 临时链接列表 tags: - 对象存储 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 桶名 in: path name: bucket required: true type: string - description: 请求体 in: body name: body required: true schema: $ref: '#/definitions/internal_api.createPARRequest' responses: "201": description: fullUrl 仅创建响应返回,请立即保存 schema: $ref: '#/definitions/oci-portal_internal_oci.PAR' "400": description: accessType 或 expiresHours 非法 schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 签发临时链接(PAR) 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 - description: 起始时间 RFC3339,缺省为 endTime-30 天;返回行严格限于 [startTime, endTime) 窗口(Usage API HOURLY 粒度会把起点下扩到 UTC 日零点,越界行已在服务端过滤) in: query name: startTime type: string - description: 结束时间 RFC3339,缺省为当前时刻 in: query name: endTime type: string - description: HOURLY / DAILY / MONTHLY,缺省 DAILY in: query name: granularity type: string - description: COST / USAGE,缺省 COST in: query name: queryType type: string - description: 分组维度,单维或复合(如 service,skuName),缺省 service in: query name: groupBy type: string 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: description: 创建禁用态 IdP;若 IdP 已创建但 JIT 后置配置失败且回滚无法确认,仍返回 201,并在 setupWarning 中标明部分成功 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/internal_api.createIdpResponse' 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}/idp-icons: delete: description: 使用上传响应中的 fileName 删除身份域公开图片;404 按已删除处理 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 上传响应返回的 IdP 图标存储标识(images/idp-icon-<32hex>.) in: query name: fileName required: true type: string responses: "204": description: 无内容 "400": description: fileName 缺失或不是本服务生成的 IdP 图标标识 schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 删除身份提供商图标 tags: - 租户 IAM post: consumes: - multipart/form-data description: 上传到身份域公共图片存储(/storage/v1/Images),返回可填入 iconUrl 的公网地址 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 身份域 OCID(缺省 Default 域) in: query name: domainId type: string - description: 图标文件(png/jpg/jpeg/gif/svg/webp/ico,≤1MB) in: formData name: file required: true type: file responses: "200": description: OK schema: $ref: '#/definitions/internal_api.idpIconResponse' "400": description: 缺文件字段、文件为空或文件名非法 schema: additionalProperties: type: string type: object "413": description: 文件超过 1MB schema: additionalProperties: type: string type: object "415": description: 扩展名不支持或与文件内容不符 schema: additionalProperties: type: string type: object 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: description: 旧临时 IP 删除、旧保留 IP 自动解绑(资源保留在账户),随后分配新临时 IP 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}/invoices: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 自然年过滤(按开票时间);缺省全量 in: query name: year type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.Invoice' type: array security: - BearerAuth: [] summary: 发票列表 tags: - 账单 /api/v1/oci-configs/{id}/invoices/{internalId}/lines: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 发票内部 ID in: path name: internalId required: true type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.InvoiceLine' type: array security: - BearerAuth: [] summary: 发票费用明细 tags: - 账单 /api/v1/oci-configs/{id}/invoices/{internalId}/pay: post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 发票内部 ID in: path name: internalId required: true type: string - description: 回执邮箱 in: body name: body required: true schema: $ref: '#/definitions/internal_api.payInvoiceRequest' responses: "200": description: OK schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 支付发票 tags: - 账单 /api/v1/oci-configs/{id}/invoices/{internalId}/pdf: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 发票内部 ID in: path name: internalId required: true type: string - description: 发票号(用作下载文件名) in: query name: number type: string responses: "200": description: PDF 原文 schema: type: file security: - BearerAuth: [] summary: 发票 PDF 下载 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}/object-storage/namespace: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 区域 in: query name: region type: string responses: "200": description: OK schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: 对象存储 namespace tags: - 对象存储 /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}/payment-methods: get: parameters: - description: 配置 ID in: path name: id required: true type: integer responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.PaymentMethod' type: array security: - BearerAuth: [] summary: 付款方式列表 tags: - 账单 /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}/reserved-ips: get: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 区域,空为主区域 in: query name: region type: string - description: 区间 OCID,空为生效区间 in: query name: compartmentId type: string responses: "200": description: OK schema: items: $ref: '#/definitions/oci-portal_internal_oci.ReservedIP' type: array security: - BearerAuth: [] summary: 保留 IP 列表 tags: - 网络 post: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 请求体:region、compartmentId、displayName in: body name: body required: true schema: type: object responses: "201": description: Created schema: $ref: '#/definitions/oci-portal_internal_oci.ReservedIP' security: - BearerAuth: [] summary: 创建保留 IP tags: - 网络 /api/v1/oci-configs/{id}/reserved-ips/{publicIpId}: delete: parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 保留 IP OCID in: path name: publicIpId required: true type: string - description: 区域 in: query name: region type: string responses: "204": description: 删除成功 security: - BearerAuth: [] summary: 删除保留 IP tags: - 网络 put: description: vnicId 非空时绑到该网卡,否则绑 instanceId 主网卡(两者都空为解绑);目标已有公网 IP 时自动释放/解绑 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: 保留 IP OCID in: path name: publicIpId required: true type: string - description: 请求体:region、instanceId、vnicId in: body name: body required: true schema: type: object responses: "204": description: 绑定成功 security: - BearerAuth: [] summary: 绑定/解绑保留 IP 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 get: 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.userApiKeysResponse' security: - BearerAuth: [] summary: 列出用户 API Key tags: - 租户 IAM post: description: 后端生成 RSA-2048 密钥对并上传公钥;私钥仅本次响应返回,不落库。 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/oci-portal_internal_service.CreatedApiKey' security: - BearerAuth: [] summary: 为用户新增 API Key tags: - 租户 IAM /api/v1/oci-configs/{id}/users/{userId}/api-keys/{fingerprint}: delete: description: 当前配置正在使用的 key 拒删(409),避免面板失联。 parameters: - description: 配置 ID in: path name: id required: true type: integer - description: userId in: path name: userId required: true type: string - description: key 指纹 in: path name: fingerprint required: true type: string responses: "204": description: 无内容 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}/change-public-ip: post: description: 旧临时 IP 删除、旧保留 IP 自动解绑(资源保留在账户),随后分配新临时 IP parameters: - description: 配置 ID in: path name: id required: true type: integer - description: VNIC OCID in: path name: vnicId required: true type: string - description: 请求体:region in: body name: body required: true schema: type: object responses: "200": description: OK schema: $ref: '#/definitions/internal_api.publicIpResponse' security: - BearerAuth: [] summary: 更换 VNIC 临时公网 IP 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: - 设置 patch: parameters: - description: 出现的字段才会被更新 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: - 设置 patch: parameters: - description: 出现的字段才会被更新 in: body name: body required: true schema: $ref: '#/definitions/oci-portal_internal_service.SecurityPatch' 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: 可更新字段;抢机 payload 的 count 语义为目标台数 in: body name: body required: true schema: $ref: '#/definitions/internal_api.updateTaskRequest' responses: "200": description: OK schema: $ref: '#/definitions/oci-portal_internal_model.Task' "400": description: 参数非法或抢机目标不大于已完成数量 schema: $ref: '#/definitions/internal_api.errorResponse' "409": description: 任务被并发修改,须刷新重试 schema: $ref: '#/definitions/internal_api.errorResponse' 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"