Files
ez-api/docs/swagger.yaml
zenfun 0b9556ee7e docs(api): add alert thresholds endpoints to swagger documentation
Add OpenAPI documentation for the new alert threshold management
endpoints used in traffic spike detection:

- GET /admin/alerts/thresholds - retrieve current threshold config
- PUT /admin/alerts/thresholds - update threshold configuration

Include AlertThresholdView and UpdateAlertThresholdsRequest schema
definitions with properties for QPS, RPM, TPM, RPD, TPD limits.
2025-12-31 15:57:27 +08:00

4030 lines
97 KiB
YAML

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"