← Back to reference

Graphql Api Reference

Endpoint

POST https://api.denpex.ai/v1/<tenant_id>/graphql

Authentication

Authorization: Bearer <token>.

Schema

type Query {
  incidents(state: IncidentState, limit: Int = 25, after: String): IncidentConnection!
  incident(id: ID!): Incident
  similar(id: ID!, k: Int = 5): [SimilarIncident!]!
  diagnostics(id: ID!): Diagnostic
  audit(limit: Int = 100, since: String): [AuditEntry!]!
}

type Mutation {
  approveIncident(id: ID!, action: ActionClass!): RemediationApproval!
  dismissIncident(id: ID!, reason: String!): DismissalResult!
  rollbackRemediation(id: ID!): RemediationResult!
}

type Subscription {
  incidents: Incident!  # server-sent events
  remediation: RemediationUpdate!
}

type Incident {
  id: ID!
  state: IncidentState!
  host: String!
  rank: Int
  severity: Severity!
  evidence: [Evidence!]!
  rules: [RuleHit!]!
  remediation: Remediation
  confidence: Float!
  createdAt: String!  # ISO 8601
}

type Evidence {
  id: ID!
  kind: String!
  ts: String!
  source: String!
  details: JSON!
}

enum ActionClass {
  CORDON
  DRAIN
  EVICT
  REROUTE
  RUN_DIAGNOSTIC
  OPEN_RMA_TICKET
  REBOOT_NODE
  RESET_GPU
}

enum Severity {
  INFO
  WARNING
  ERROR
  CRITICAL
}

type RemediationApproval {
  decisionId: ID!
  decision: AutomationTier!
  decidedAt: String!
  actor: String!
}

Subscriptions

Real-time streaming uses Server-Sent Events. Each event is a JSON object on the stream.

Limits

  • Query depth ≤ 6.
  • Query cost per request ≤ 1000 (rate-based).
  • Mutation rate limit: same as REST.

Persisted Documents

We support Apollo-style persisted operations to reduce query size; the persisted-document registry is configured per tenant.

Examples

query RecentIncidents {
  incidents(state: OPEN, limit: 5) {
    nodes { id host severity confidence }
  }
}