API Overview

Hooks

Hook event logging and analytics for Claude Code session instrumentation.

The hooks API records and analyzes events from Claude Code hooks. Hooks fire at key lifecycle points (session start/end, before/after tool use) and can block dangerous operations. See Claude Hooks for configuration.

Endpoints

List Hook Events

GET /api/hooks/events

Retrieve hook events with filtering. Results are ordered by most recent first.

Authentication: Required

Query Parameters:

ParamTypeRequiredDescription
eventTypestring or stringNoFilter by type(s): SessionStart, SessionEnd, PreToolUse, PostToolUse, PostToolUseFailure, UserPromptSubmit
sessionIdstringNoFilter by Claude session ID
toolNamestringNoFilter by tool name (e.g., Bash, Edit)
blockedbooleanNoFilter by blocked status (true or false)
sincestring (ISO date)NoOnly events after this timestamp
limitnumberNoMax results (default 100, max 500)

Response: 200 OK

{
  "data": [
    {
      "id": "uuid",
      "eventType": "PreToolUse",
      "sessionId": "session-abc",
      "projectDir": "/home/user/my-project",
      "toolName": "Bash",
      "toolMatcher": "Bash",
      "eventData": { "command": "rm -rf /tmp/test" },
      "exitCode": 2,
      "blocked": true,
      "blockReason": "Dangerous command blocked by protect-env hook",
      "durationMs": 45,
      "hookScript": "hooks/protect-env.sh",
      "createdAt": "2026-02-18T12:00:00.000Z"
    }
  ]
}

Log Hook Event

POST /api/hooks/events

Record a new hook event. Called by Claude Code hooks at runtime. Broadcasts a resource_change notification.

Authentication: Required

Request Body:

FieldTypeRequiredDescription
eventTypestringYesOne of: SessionStart, SessionEnd, PreToolUse, PostToolUse, PostToolUseFailure, UserPromptSubmit
sessionIdstringNoClaude session ID
projectDirstringNoWorking directory
toolNamestringNoTool that triggered the hook
toolMatcherstringNoHook matcher pattern
eventDataobjectNoArbitrary event metadata (stored as JSON)
exitCodenumberNoHook script exit code
blockedbooleanNoWhether the action was blocked (default false)
blockReasonstringNoHuman-readable reason for blocking
durationMsnumberNoHook execution time in milliseconds
hookScriptstringNoPath to the hook script that ran

Response: 201 Created

{
  "data": {
    "id": "uuid",
    "eventType": "PreToolUse",
    "blocked": true,
    "blockReason": "Attempted to edit .env file",
    "createdAt": "2026-02-18T12:00:00.000Z"
  }
}

Hook Stats

GET /api/hooks/stats

Aggregate hook analytics for a given time period. Includes block rates, tool breakdowns, daily activity, and recent sessions.

Authentication: Required

Query Parameters:

ParamTypeRequiredDescription
periodstringNoTime window: 24h, 7d (default), or 30d

Response: 200 OK

{
  "data": {
    "totalEvents": 1250,
    "blockedEvents": 42,
    "blockRate": 3,
    "avgDurationMs": 28,
    "eventsByType": {
      "PreToolUse": 600,
      "PostToolUse": 580,
      "SessionStart": 35,
      "SessionEnd": 35
    },
    "toolBreakdown": [
      { "toolName": "Bash", "total": 400, "blocked": 30, "avgDurationMs": 35 },
      { "toolName": "Edit", "total": 200, "blocked": 12, "avgDurationMs": 20 }
    ],
    "dailyActivity": [
      { "date": "2026-02-17", "total": 180, "blocked": 6, "allowed": 174, "avgDurationMs": 0 }
    ],
    "recentSessions": ["session-abc", "session-def"]
  }
}

Event Types

TypeWhen It Fires
SessionStartClaude Code session begins
SessionEndClaude Code session ends
PreToolUseBefore a tool call executes (can block)
PostToolUseAfter a tool call succeeds
PostToolUseFailureAfter a tool call fails
UserPromptSubmitWhen the user submits a prompt

The blockRate is a percentage (0-100). A high block rate may indicate overly aggressive hook rules or repeated attempts to perform restricted operations.