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"
