basePath: / definitions: gin.H: additionalProperties: {} type: object github_com_ez-api_ez-api_internal_dto.APIKeyDTO: properties: access_token: type: string account_id: type: string api_key: type: string auto_ban: type: boolean ban_reason: type: string ban_until: type: string expires_at: type: string group_id: type: integer project_id: type: string refresh_token: type: string status: type: string weight: type: integer type: object github_com_ez-api_ez-api_internal_dto.BindingDTO: properties: group_id: type: integer namespace: type: string public_model: type: string selector_type: type: string selector_value: type: string status: type: string weight: type: integer type: object github_com_ez-api_ez-api_internal_dto.ModelDTO: properties: context_window: type: integer cost_per_token: type: number kind: type: string max_output_tokens: type: integer name: type: string supports_fim: type: boolean supports_functions: type: boolean supports_tool_choice: type: boolean supports_vision: type: boolean type: object github_com_ez-api_ez-api_internal_dto.ProviderGroupDTO: properties: base_url: type: string google_location: type: string google_project: type: string headers_profile: type: string models: items: type: string type: array name: type: string static_headers: type: string status: type: string type: type: string type: object github_com_ez-api_ez-api_internal_model.APIKey: properties: access_token: type: string account_id: type: string api_key: type: string auto_ban: type: boolean ban_reason: type: string ban_until: type: string createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' expires_at: type: string failure_rate: type: number failure_requests: type: integer group_id: type: integer id: type: integer project_id: type: string status: type: string success_rate: type: number success_requests: type: integer total_requests: type: integer updatedAt: type: string weight: type: integer type: object github_com_ez-api_ez-api_internal_model.Binding: properties: createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' group_id: type: integer id: type: integer namespace: type: string public_model: type: string selector_type: type: string selector_value: type: string status: type: string updatedAt: type: string weight: type: integer type: object github_com_ez-api_ez-api_internal_model.LogRecord: properties: audit_reason: type: string client_ip: type: string createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' error_message: type: string group: type: string id: type: integer key_id: type: integer latency_ms: type: integer model: type: string provider_id: type: integer provider_name: type: string provider_type: type: string request_body: description: optional, only when audit triggered type: string request_size: type: integer response_body: description: optional, only when audit triggered type: string response_size: type: integer status_code: type: integer tokens_in: type: integer tokens_out: type: integer updatedAt: type: string type: object github_com_ez-api_ez-api_internal_model.Model: properties: context_window: type: integer cost_per_token: type: number createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' id: type: integer kind: type: string max_output_tokens: type: integer name: type: string supports_fim: type: boolean supports_functions: type: boolean supports_tool_choice: type: boolean supports_vision: type: boolean updatedAt: type: string type: object github_com_ez-api_ez-api_internal_model.Namespace: properties: createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' description: type: string id: type: integer name: type: string status: type: string updatedAt: type: string type: object github_com_ez-api_ez-api_internal_model.ProviderGroup: properties: base_url: type: string createdAt: type: string deletedAt: $ref: '#/definitions/gorm.DeletedAt' failure_rate: type: number failure_requests: type: integer google_location: type: string google_project: type: string headers_profile: type: string id: type: integer models: description: comma-separated list of supported models type: string name: type: string static_headers: type: string status: type: string success_rate: type: number success_requests: type: integer total_requests: type: integer type: description: openai, anthropic, gemini type: string updatedAt: type: string type: object github_com_ez-api_ez-api_internal_service.LogWebhookConfig: properties: cooldown_seconds: type: integer enabled: type: boolean secret: type: string status_code_threshold: type: integer threshold: type: integer url: type: string window_seconds: type: integer type: object github_com_ez-api_ez-api_internal_service.ModelRegistryCheckResult: properties: current_upstream_ref: type: string current_version: type: string enabled: type: boolean latest_version: type: string needs_refresh: type: boolean upstream_ref: type: string type: object github_com_ez-api_ez-api_internal_service.ModelRegistryStatus: properties: cache_current: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.modelRegistryFile' cache_prev: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.modelRegistryFile' enabled: type: boolean last_error: type: string last_refresh_at: type: integer models_dev_ref: type: string models_dev_url: type: string redis_meta: additionalProperties: type: string type: object type: object github_com_ez-api_ez-api_internal_service.modelRegistryFile: properties: meta: $ref: '#/definitions/modelcap.Meta' models: additionalProperties: $ref: '#/definitions/modelcap.Model' type: object type: object gorm.DeletedAt: properties: time: type: string valid: description: Valid is true if Time is not NULL type: boolean type: object internal_api.APIKeyStatsSummaryResponse: properties: failure_rate: type: number failure_requests: type: integer success_rate: type: number success_requests: type: integer total_requests: type: integer type: object internal_api.AboutResponse: properties: description: example: High-performance LLM API gateway type: string name: example: EZ-API Gateway type: string repository: example: https://github.com/ez-api/ez-api type: string version: example: 0.1.0 type: string type: object internal_api.AccessResponse: properties: default_namespace: type: string namespaces: items: type: string type: array type: object internal_api.AckAlertRequest: properties: acked_by: type: string type: object internal_api.AdminUsageStatsResponse: properties: active_masters: type: integer by_master: items: $ref: '#/definitions/internal_api.MasterUsageAgg' type: array by_provider: items: $ref: '#/definitions/internal_api.ProviderUsageAgg' type: array period: type: string total_masters: type: integer total_requests: type: integer total_tokens: type: integer type: object internal_api.AlertStats: properties: acknowledged: type: integer active: type: integer critical: type: integer info: type: integer resolved: type: integer total: type: integer warning: type: integer type: object internal_api.AlertThresholdView: properties: global_qps: type: integer master_rpd: type: integer master_rpm: type: integer master_tpd: type: integer master_tpm: type: integer min_rpm_requests_1m: type: integer min_tpm_tokens_1m: type: integer updated_at: type: integer type: object internal_api.AlertView: properties: acked_at: type: integer acked_by: type: string created_at: type: integer expires_at: type: integer id: type: integer message: type: string metadata: type: string related_id: type: integer related_name: type: string related_type: type: string resolved_at: type: integer severity: type: string status: type: string title: type: string type: type: string updated_at: type: integer type: object internal_api.BatchActionRequest: properties: action: type: string ids: items: type: integer type: array status: type: string type: object internal_api.BatchResponse: properties: action: type: string failed: items: $ref: '#/definitions/internal_api.BatchResult' type: array success: items: type: integer type: array type: object internal_api.BatchResult: properties: error: type: string id: type: integer type: object internal_api.CountStats: properties: active: type: integer total: type: integer type: object internal_api.CreateAlertRequest: properties: expires_at: type: integer message: type: string metadata: type: string related_id: type: integer related_name: type: string related_type: type: string severity: type: string title: type: string type: type: string required: - severity - title - type type: object internal_api.CreateMasterRequest: properties: global_qps: type: integer group: type: string max_child_keys: type: integer name: type: string required: - group - name type: object internal_api.DashboardSummaryResponse: properties: keys: $ref: '#/definitions/internal_api.CountStats' latency: $ref: '#/definitions/internal_api.LatencyStats' masters: $ref: '#/definitions/internal_api.CountStats' period: type: string provider_keys: $ref: '#/definitions/internal_api.ProviderKeyStats' requests: $ref: '#/definitions/internal_api.RequestStats' tokens: $ref: '#/definitions/internal_api.TokenStats' top_models: items: $ref: '#/definitions/internal_api.TopModelStat' type: array updated_at: type: integer type: object internal_api.DeleteLogsRequest: properties: before: type: string key_id: type: integer model: type: string type: object internal_api.DeleteLogsResponse: properties: deleted_count: type: integer type: object internal_api.GroupedStatsItem: properties: avg_latency_ms: type: number count: type: integer date: description: For group_by=day type: string hour: description: For group_by=hour type: string minute: description: For group_by=minute type: string model: description: For group_by=model type: string month: description: For group_by=month type: string tokens_in: type: integer tokens_out: type: integer type: object internal_api.GroupedStatsResponse: properties: items: items: $ref: '#/definitions/internal_api.GroupedStatsItem' type: array type: object internal_api.IssueChildKeyRequest: properties: allow_ips: type: string deny_ips: type: string expires_at: type: string group: type: string model_limits: type: string model_limits_enabled: type: boolean scopes: type: string type: object internal_api.KeyUsageStat: properties: key_id: type: integer requests: type: integer tokens: type: integer type: object internal_api.LatencyStats: properties: avg_ms: type: number type: object internal_api.ListAlertsResponse: properties: items: items: $ref: '#/definitions/internal_api.AlertView' type: array limit: type: integer offset: type: integer total: type: integer type: object internal_api.ListLogsResponse: properties: items: items: $ref: '#/definitions/internal_api.LogView' type: array limit: type: integer offset: type: integer total: type: integer type: object internal_api.ListMasterLogsResponse: properties: items: items: $ref: '#/definitions/internal_api.MasterLogView' type: array limit: type: integer offset: type: integer total: type: integer type: object internal_api.LogStatsResponse: properties: avg_latency_ms: type: number by_status: additionalProperties: format: int64 type: integer type: object tokens_in: type: integer tokens_out: type: integer total: type: integer type: object internal_api.LogView: properties: audit_reason: type: string client_ip: type: string created_at: type: integer error_message: type: string group: type: string id: type: integer key_id: type: integer latency_ms: type: integer model: type: string provider_id: type: integer provider_name: type: string provider_type: type: string request_body: type: string request_size: type: integer response_size: type: integer status_code: type: integer tokens_in: type: integer tokens_out: type: integer type: object internal_api.ManageMasterRequest: properties: action: description: freeze/unfreeze type: string required: - action type: object internal_api.MasterLogView: properties: created_at: type: integer error_message: type: string group: type: string id: type: integer key_id: type: integer latency_ms: type: integer model: type: string request_size: type: integer response_size: type: integer status_code: type: integer tokens_in: type: integer tokens_out: type: integer type: object internal_api.MasterRealtimeSummaryView: properties: master_id: type: integer qps: type: integer rate_limited: type: boolean type: object internal_api.MasterRealtimeView: properties: qps: type: integer qps_limit: type: integer rate_limited: type: boolean requests: type: integer tokens: type: integer updated_at: type: integer type: object internal_api.MasterUsageAgg: properties: master_id: type: integer requests: type: integer tokens: type: integer type: object internal_api.MasterUsageStatsResponse: properties: by_key: items: $ref: '#/definitions/internal_api.KeyUsageStat' type: array by_model: items: $ref: '#/definitions/internal_api.ModelUsageStat' type: array period: type: string total_requests: type: integer total_tokens: type: integer type: object internal_api.MasterView: properties: created_at: type: integer default_namespace: type: string epoch: type: integer global_qps: type: integer group: type: string id: type: integer max_child_keys: type: integer name: type: string namespaces: type: string realtime: $ref: '#/definitions/internal_api.MasterRealtimeView' status: type: string updated_at: type: integer type: object internal_api.ModelUsageStat: properties: model: type: string requests: type: integer tokens: type: integer type: object internal_api.NamespaceRequest: properties: description: type: string name: type: string status: type: string type: object internal_api.OperationLogView: properties: actor: type: string client_ip: type: string created_at: type: integer error_message: type: string id: type: integer latency_ms: type: integer method: type: string path: type: string query: type: string request_id: type: string status_code: type: integer user_agent: type: string type: object internal_api.ProviderKeyStats: properties: active: type: integer auto_disabled: type: integer suspended: type: integer total: type: integer type: object internal_api.ProviderUsageAgg: properties: provider_id: type: integer provider_name: type: string provider_type: type: string requests: type: integer tokens: type: integer type: object internal_api.RequestStats: properties: error_rate: type: number failed: type: integer success: type: integer total: type: integer type: object internal_api.StatusResponse: properties: status: example: ok type: string uptime: example: 72h30m15s type: string version: example: 0.1.0 type: string type: object internal_api.SystemRealtimeView: properties: by_master: items: $ref: '#/definitions/internal_api.MasterRealtimeSummaryView' type: array qps: type: integer rate_limited_count: type: integer rpm: type: integer updated_at: type: integer type: object internal_api.TokenStats: properties: input: type: integer output: type: integer total: type: integer type: object internal_api.TokenView: properties: allow_ips: type: string created_at: type: integer default_namespace: type: string deny_ips: type: string expires_at: type: string group: type: string id: type: integer issued_at_epoch: type: integer issued_by: type: string last_accessed_at: type: string model_limits: type: string model_limits_enabled: type: boolean namespaces: type: string quota_limit: type: integer quota_reset_at: type: string quota_reset_type: type: string quota_used: type: integer request_count: type: integer scopes: type: string status: type: string updated_at: type: integer used_tokens: type: integer type: object internal_api.TopModelStat: properties: model: type: string requests: type: integer tokens: type: integer type: object internal_api.UpdateAccessRequest: properties: default_namespace: type: string namespaces: items: type: string type: array propagate_to_keys: type: boolean type: object internal_api.UpdateAlertThresholdsRequest: properties: global_qps: type: integer master_rpd: type: integer master_rpm: type: integer master_tpd: type: integer master_tpm: type: integer min_rpm_requests_1m: type: integer min_tpm_tokens_1m: type: integer type: object internal_api.UpdateMasterRequest: properties: global_qps: type: integer group: type: string max_child_keys: type: integer name: type: string propagate_to_keys: type: boolean type: object internal_api.UpdateNamespaceRequest: properties: description: type: string name: type: string status: type: string type: object internal_api.UpdateTokenRequest: properties: allow_ips: type: string deny_ips: type: string expires_at: type: string model_limits: type: string model_limits_enabled: type: boolean scopes: type: string status: description: active/suspended type: string type: object internal_api.WhoamiResponse: properties: created_at: example: 1703505600 type: integer default_namespace: example: default type: string epoch: example: 1 type: integer global_qps: example: 100 type: integer group: example: default type: string id: description: Master fields (only present when type is "master") example: 1 type: integer issued_at_epoch: example: 1 type: integer issued_by: example: master type: string master_id: description: Key fields (only present when type is "key") example: 1 type: integer max_child_keys: example: 5 type: integer name: example: tenant-a type: string namespaces: example: default,ns1 type: string role: description: Admin fields (only present when type is "admin") example: admin type: string scopes: example: chat:write type: string status: example: active type: string type: description: 'Type of the authenticated identity: "admin", "master", or "key"' example: master type: string updated_at: example: 1703505600 type: integer type: object internal_api.apiKeyStatsFlushEntry: properties: api_key_id: type: integer requests: type: integer success_requests: type: integer type: object internal_api.apiKeyStatsFlushRequest: properties: keys: items: $ref: '#/definitions/internal_api.apiKeyStatsFlushEntry' type: array type: object internal_api.refreshModelRegistryRequest: properties: ref: type: string type: object internal_api.reportAlertEntry: properties: fingerprint: type: string message: type: string metadata: type: string related_id: type: integer related_name: type: string related_type: type: string severity: type: string title: type: string type: type: string required: - severity - title - type type: object internal_api.reportAlertsRequest: properties: alerts: items: $ref: '#/definitions/internal_api.reportAlertEntry' type: array required: - alerts type: object internal_api.reportAlertsResponse: properties: accepted: type: integer deduplicated: type: integer errors: items: type: string type: array type: object internal_api.statsFlushEntry: properties: last_accessed_at: type: integer requests: type: integer token_hash: type: string tokens: type: integer type: object internal_api.statsFlushRequest: properties: keys: items: $ref: '#/definitions/internal_api.statsFlushEntry' type: array type: object modelcap.Meta: properties: checksum: type: string source: type: string updated_at: type: string upstream_ref: type: string upstream_url: type: string version: type: string type: object modelcap.Model: properties: context_window: type: integer cost_per_token: type: number kind: type: string max_output_tokens: type: integer name: type: string supports_fim: type: boolean supports_functions: type: boolean supports_stream: type: boolean supports_tool_choice: type: boolean supports_vision: type: boolean type: object host: localhost:8080 info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: Management API for EZ-API Gateway system. license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: EZ-API Control Plane version: 0.0.1 paths: /about: get: description: Returns system metadata for display on an about page produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AboutResponse' summary: Get system information tags: - Public /admin/alerts: get: description: List system alerts with optional filters parameters: - description: limit (default 50, max 200) in: query name: limit type: integer - description: offset in: query name: offset type: integer - description: filter by status (active, acknowledged, resolved, dismissed) in: query name: status type: string - description: filter by severity (info, warning, critical) in: query name: severity type: string - description: filter by type (rate_limit, error_spike, quota_exceeded, key_disabled, key_expired, provider_down) in: query name: type type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.ListAlertsResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List alerts tags: - admin post: consumes: - application/json description: Create a new system alert parameters: - description: Alert data in: body name: request required: true schema: $ref: '#/definitions/internal_api.CreateAlertRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/internal_api.AlertView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create alert tags: - admin /admin/alerts/{id}: delete: description: Dismiss an alert (soft delete) parameters: - description: Alert ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Dismiss alert tags: - admin get: description: Get a single alert by ID parameters: - description: Alert ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get alert tags: - admin /admin/alerts/{id}/ack: post: consumes: - application/json description: Mark an alert as acknowledged parameters: - description: Alert ID in: path name: id required: true type: integer - description: Ack data in: body name: request schema: $ref: '#/definitions/internal_api.AckAlertRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Acknowledge alert tags: - admin /admin/alerts/{id}/resolve: post: description: Mark an alert as resolved parameters: - description: Alert ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Resolve alert tags: - admin /admin/alerts/stats: get: description: Get alert count statistics by status and severity produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertStats' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Alert statistics tags: - admin /admin/alerts/thresholds: get: description: Get current alert threshold configuration for traffic spike detection produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertThresholdView' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get alert thresholds tags: - admin put: consumes: - application/json description: Update alert threshold configuration for traffic spike detection parameters: - description: Threshold configuration in: body name: request required: true schema: $ref: '#/definitions/internal_api.UpdateAlertThresholdsRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AlertThresholdView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update alert thresholds tags: - admin /admin/api-keys: get: description: List API keys with optional filters parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: filter by group_id in: query name: group_id type: integer - description: filter by status (active, suspended, auto_disabled, manual_disabled) in: query name: status type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.APIKey' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List API keys tags: - admin post: consumes: - application/json description: Create an API key for a provider group parameters: - description: API key payload in: body name: key required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.APIKeyDTO' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.APIKey' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create an API key tags: - admin /admin/api-keys/{id}: delete: description: Delete an API key parameters: - description: APIKey ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete API key tags: - admin get: description: Get an API key by id parameters: - description: APIKey ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.APIKey' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get API key tags: - admin put: consumes: - application/json description: Update an API key parameters: - description: APIKey ID in: path name: id required: true type: integer - description: API key payload in: body name: key required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.APIKeyDTO' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.APIKey' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update API key tags: - admin /admin/api-keys/batch: post: consumes: - application/json description: Batch delete or status update for api keys parameters: - description: Batch payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.BatchActionRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.BatchResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Batch api keys tags: - admin /admin/apikey-stats/summary: get: description: Aggregate APIKey success/failure stats across all provider groups parameters: - description: Start time (unix seconds) in: query name: since type: integer - description: End time (unix seconds) in: query name: until type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.APIKeyStatsSummaryResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: APIKey stats summary (admin) tags: - admin /admin/bindings: get: description: List all configured bindings parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by namespace/public_model in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Binding' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List bindings tags: - admin post: consumes: - application/json description: Create a new (namespace, public_model) binding to a provider group and selector parameters: - description: Binding Info in: body name: binding required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.BindingDTO' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Binding' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create a new binding tags: - admin /admin/bindings/{id}: delete: description: Delete a binding by id and rebuild bindings snapshot parameters: - description: Binding ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete a binding tags: - admin get: description: Get a binding by id parameters: - description: Binding ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Binding' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get a binding tags: - admin put: consumes: - application/json description: Update an existing binding parameters: - description: Binding ID in: path name: id required: true type: integer - description: Binding Info in: body name: binding required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.BindingDTO' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Binding' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update a binding tags: - admin /admin/bindings/batch: post: consumes: - application/json description: Batch delete or status update for bindings parameters: - description: Batch payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.BatchActionRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.BatchResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Batch bindings tags: - admin /admin/dashboard/summary: get: description: Returns aggregated metrics for dashboard display including requests, tokens, latency, masters, keys, and provider keys statistics parameters: - description: 'time period: today, week, month, all' in: query name: period type: string - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.DashboardSummaryResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Dashboard summary tags: - admin /admin/features: get: description: Returns all feature flags stored in Redis (meta:features) produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List feature flags tags: - admin put: consumes: - application/json description: Updates selected feature flags (meta:features). Values are stored as strings. parameters: - description: Feature map in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update feature flags tags: - admin /admin/keys/{id}/access: get: description: Returns key default_namespace and namespaces parameters: - description: Key ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AccessResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get key access settings tags: - admin put: consumes: - application/json description: Updates key default_namespace and namespaces and syncs to Redis parameters: - description: Key ID in: path name: id required: true type: integer - description: Access settings in: body name: request required: true schema: $ref: '#/definitions/internal_api.UpdateAccessRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AccessResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update key access settings tags: - admin /admin/logs: delete: consumes: - application/json description: Delete logs before a given timestamp with optional filters parameters: - description: Delete filters in: body name: request required: true schema: $ref: '#/definitions/internal_api.DeleteLogsRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.DeleteLogsResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete logs (admin) tags: - admin get: description: List request logs with basic filtering/pagination. Returns full log records including request_body. parameters: - description: limit (default 50, max 200) in: query name: limit type: integer - description: offset in: query name: offset type: integer - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer - description: key id in: query name: key_id type: integer - description: route group in: query name: group type: string - description: model in: query name: model type: string - description: status code in: query name: status_code type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.ListLogsResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List logs (admin) tags: - admin /admin/logs/stats: get: description: 'Aggregate log stats with basic filtering. Use group_by param for grouped statistics (model/day/month/hour/minute). Without group_by returns LogStatsResponse; with group_by returns GroupedStatsResponse. Note: minute-level aggregation is limited to 6-hour time ranges.' parameters: - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer - description: 'group by dimension: model, day, month, hour, minute. Returns GroupedStatsResponse when specified.' enum: - model - day - month - hour - minute in: query name: group_by type: string produces: - application/json responses: "200": description: Grouped stats (when group_by is specified) schema: $ref: '#/definitions/internal_api.GroupedStatsResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Log stats (admin) tags: - admin /admin/logs/webhook: get: description: Returns current webhook notification config produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.LogWebhookConfig' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get log webhook config tags: - admin put: consumes: - application/json description: Updates webhook notification config parameters: - description: Webhook config in: body name: request required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.LogWebhookConfig' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.LogWebhookConfig' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update log webhook config tags: - admin /admin/masters: get: description: List all master tenants parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by name/group in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/internal_api.MasterView' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List masters tags: - admin post: consumes: - application/json description: Create a new master account (tenant) parameters: - description: Master Info in: body name: master required: true schema: $ref: '#/definitions/internal_api.CreateMasterRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create a new master tenant tags: - admin /admin/masters/{id}: delete: description: Suspends a master and revokes all existing keys by bumping epoch and syncing to Redis parameters: - description: Master ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete (revoke) master tags: - admin get: description: Get a master tenant by id parameters: - description: Master ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get master tags: - admin put: consumes: - application/json description: Update master fields; optionally propagate group to existing keys parameters: - description: Master ID in: path name: id required: true type: integer - description: Update payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.UpdateMasterRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update master tags: - admin /admin/masters/{id}/access: get: description: Returns master default_namespace and namespaces parameters: - description: Master ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AccessResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get master access settings tags: - admin put: consumes: - application/json description: Updates master default_namespace and namespaces; optionally propagate to existing keys parameters: - description: Master ID in: path name: id required: true type: integer - description: Access settings in: body name: request required: true schema: $ref: '#/definitions/internal_api.UpdateAccessRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AccessResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update master access settings tags: - admin /admin/masters/{id}/keys: post: consumes: - application/json description: Issue a new access token (child key) for a specified master. The key still belongs to the master; issuer is recorded as admin for audit. parameters: - description: Master ID in: path name: id required: true type: integer - description: Key Request in: body name: request required: true schema: $ref: '#/definitions/internal_api.IssueChildKeyRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "403": description: Forbidden schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Issue a child key on behalf of a master tags: - admin /admin/masters/{id}/manage: post: consumes: - application/json description: Freeze or unfreeze a master tenant parameters: - description: Master ID in: path name: id required: true type: integer - description: Action in: body name: request required: true schema: $ref: '#/definitions/internal_api.ManageMasterRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Manage master status tags: - admin /admin/masters/{id}/realtime: get: description: Return realtime counters for the specified master parameters: - description: Master ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterRealtimeView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Master realtime stats (admin) tags: - admin /admin/masters/batch: post: consumes: - application/json description: Batch delete or status update for masters parameters: - description: Batch payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.BatchActionRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.BatchResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Batch masters tags: - admin /admin/model-registry/check: post: consumes: - application/json description: Checks models.dev commit SHA for a ref and indicates whether refresh is needed (does not apply changes) parameters: - description: optional override ref in: body name: body schema: $ref: '#/definitions/internal_api.refreshModelRegistryRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.ModelRegistryCheckResult' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Check model registry upstream version tags: - admin /admin/model-registry/refresh: post: consumes: - application/json description: Fetches models.dev, computes per-binding capabilities, and updates Redis meta:models parameters: - description: optional override ref in: body name: body schema: $ref: '#/definitions/internal_api.refreshModelRegistryRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Refresh model registry from models.dev tags: - admin /admin/model-registry/rollback: post: description: Rollback meta:models to previous cached last-good version produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Rollback model registry tags: - admin /admin/model-registry/status: get: description: Returns Redis meta and local last-good cache info for model capability registry produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_service.ModelRegistryStatus' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get model registry status tags: - admin /admin/models: get: description: Get a list of all registered models parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by name/kind in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Model' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List all models tags: - admin post: consumes: - application/json description: Register a supported model with its capabilities parameters: - description: Model Info in: body name: model required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.ModelDTO' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Model' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Register a new model tags: - admin /admin/models/{id}: delete: description: Delete a model by id parameters: - description: Model ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete a model tags: - admin put: consumes: - application/json description: Update an existing model's configuration parameters: - description: Model ID in: path name: id required: true type: integer - description: Model Info in: body name: model required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.ModelDTO' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Model' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update a model tags: - admin /admin/models/batch: post: consumes: - application/json description: Batch delete for models parameters: - description: Batch payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.BatchActionRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.BatchResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Batch models tags: - admin /admin/namespaces: get: description: List all namespaces parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by name/description in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Namespace' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List namespaces tags: - admin post: consumes: - application/json description: Create a namespace for bindings parameters: - description: Namespace payload in: body name: namespace required: true schema: $ref: '#/definitions/internal_api.NamespaceRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Namespace' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create namespace tags: - admin /admin/namespaces/{id}: delete: description: Delete a namespace and its bindings parameters: - description: Namespace ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete namespace tags: - admin get: description: Get a namespace by id parameters: - description: Namespace ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Namespace' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get namespace tags: - admin put: consumes: - application/json description: Update a namespace parameters: - description: Namespace ID in: path name: id required: true type: integer - description: Update payload in: body name: namespace required: true schema: $ref: '#/definitions/internal_api.UpdateNamespaceRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.Namespace' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update namespace tags: - admin /admin/operation-logs: get: description: List admin operation logs parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by actor/method/path in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/internal_api.OperationLogView' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List operation logs tags: - admin /admin/provider-groups: get: description: List all provider groups parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by name/type in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.ProviderGroup' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: List provider groups tags: - admin post: consumes: - application/json description: Create a provider group definition parameters: - description: Provider group payload in: body name: group required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.ProviderGroupDTO' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.ProviderGroup' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Create a provider group tags: - admin /admin/provider-groups/{id}: delete: description: Delete a provider group and its api keys/bindings parameters: - description: ProviderGroup ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Delete provider group tags: - admin get: description: Get a provider group by id parameters: - description: ProviderGroup ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.ProviderGroup' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Get provider group tags: - admin put: consumes: - application/json description: Update a provider group parameters: - description: ProviderGroup ID in: path name: id required: true type: integer - description: Provider group payload in: body name: group required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_dto.ProviderGroupDTO' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.ProviderGroup' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Update provider group tags: - admin /admin/realtime: get: description: Return aggregated realtime counters across all masters produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.SystemRealtimeView' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: System-level realtime stats (admin) tags: - admin /admin/stats: get: description: Aggregate request stats across all masters parameters: - description: today|week|month|all in: query name: period type: string - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.AdminUsageStatsResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Usage stats (admin) tags: - admin /admin/sync/snapshot: post: description: Force full synchronization of DB state to Redis produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] summary: Force sync snapshot tags: - admin /auth/whoami: get: description: |- Returns the identity of the authenticated user based on the Authorization header. Supports Admin Token, Master Key, and Child Key (API Key) authentication. Response varies by token type: - Admin Token: {"type": "admin", "role": "admin"} - Master Key: {"type": "master", "id": 1, "name": "...", ...} - Child Key: {"type": "key", "id": 5, "master_id": 1, "issued_by": "master", ...} produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.WhoamiResponse' "401": description: Invalid or missing token schema: $ref: '#/definitions/gin.H' security: - AdminAuth: [] - MasterAuth: [] summary: Get current identity tags: - auth /internal/alerts/report: post: consumes: - application/json description: Internal endpoint for Data Plane to report alerts to Control Plane parameters: - description: Alerts to report in: body name: request required: true schema: $ref: '#/definitions/internal_api.reportAlertsRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.reportAlertsResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' summary: Report alerts from DP tags: - internal /internal/apikey-stats/flush: post: consumes: - application/json description: Internal endpoint for flushing accumulated APIKey stats from DP to CP database parameters: - description: Stats to flush in: body name: request required: true schema: $ref: '#/definitions/internal_api.apiKeyStatsFlushRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' summary: Flush API key stats tags: - internal /internal/stats/flush: post: consumes: - application/json description: Internal endpoint for flushing accumulated key usage stats from DP to CP database parameters: - description: Stats to flush in: body name: request required: true schema: $ref: '#/definitions/internal_api.statsFlushRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' summary: Flush key stats tags: - internal /logs: post: consumes: - application/json description: Internal endpoint for ingesting logs from Balancer parameters: - description: Log Record in: body name: log required: true schema: $ref: '#/definitions/github_com_ez-api_ez-api_internal_model.LogRecord' produces: - application/json responses: "202": description: Accepted schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' summary: Ingest logs tags: - system /status: get: description: Returns public runtime status information without sensitive data produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.StatusResponse' summary: Get system status tags: - Public /v1/logs: get: description: List request logs for the authenticated master parameters: - description: limit (default 50, max 200) in: query name: limit type: integer - description: offset in: query name: offset type: integer - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer - description: model in: query name: model type: string - description: status code in: query name: status_code type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.ListMasterLogsResponse' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: List logs (master) tags: - master /v1/logs/stats: get: description: Aggregate request log stats for the authenticated master parameters: - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.LogStatsResponse' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Log stats (master) tags: - master /v1/realtime: get: description: Return realtime counters for the authenticated master produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterRealtimeView' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Master realtime stats tags: - master /v1/self: get: description: Returns master metadata for the authenticated master key produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterView' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Get current master info tags: - master /v1/stats: get: description: Aggregate request stats for the authenticated master parameters: - description: today|week|month|all in: query name: period type: string - description: unix seconds in: query name: since type: integer - description: unix seconds in: query name: until type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.MasterUsageStatsResponse' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Usage stats (master) tags: - master /v1/tokens: get: description: List child keys issued under the authenticated master parameters: - description: page (1-based) in: query name: page type: integer - description: limit (default 50, max 200) in: query name: limit type: integer - description: search by group/scopes/namespaces/status in: query name: search type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/internal_api.TokenView' type: array "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: List child keys tags: - master post: consumes: - application/json description: Issue a new access token (child key) for the authenticated master parameters: - description: Key Request in: body name: request required: true schema: $ref: '#/definitions/internal_api.IssueChildKeyRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "403": description: Forbidden schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Issue a child key tags: - master /v1/tokens/{id}: delete: description: Suspends a child key under the authenticated master parameters: - description: Token ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/gin.H' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Delete (revoke) child key tags: - master get: description: Get a child key by id under the authenticated master parameters: - description: Token ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.TokenView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Get child key tags: - master put: consumes: - application/json description: Update token scopes/status under the authenticated master parameters: - description: Token ID in: path name: id required: true type: integer - description: Update payload in: body name: request required: true schema: $ref: '#/definitions/internal_api.UpdateTokenRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_api.TokenView' "400": description: Bad Request schema: $ref: '#/definitions/gin.H' "401": description: Unauthorized schema: $ref: '#/definitions/gin.H' "404": description: Not Found schema: $ref: '#/definitions/gin.H' "500": description: Internal Server Error schema: $ref: '#/definitions/gin.H' security: - MasterAuth: [] summary: Update child key tags: - master securityDefinitions: AdminAuth: description: 'Type "Bearer" followed by a space and the admin token. Example: Bearer admin123' in: header name: Authorization type: apiKey MasterAuth: description: 'Type "Bearer" followed by a space and the master key. Example: Bearer sk-xxx' in: header name: Authorization type: apiKey swagger: "2.0"