Skip to Content
API ReferenceFull API Reference

Full API Reference

All API responses follow the standard format:

{"success": true, "data": { ... }} {"success": false, "error": "Description of what went wrong", "details": "err.Error()"}

Interactive API documentation is available at /docs/swagger (Swagger UI) and /docs/redoc (ReDoc). The raw OpenAPI spec is served at /api/v1/openapi.yaml.

Authentication

When authentication is enabled, all API endpoints (except /api/v1/auth/*) require either a session cookie or a Personal Access Token. Include a PAT as a Bearer token:

curl https://pilot.example.com/api/v1/cluster \ -H "Authorization: Bearer pat_your_token_here"

Create tokens from the Pilot UI (user menu -> Access Tokens) or see Personal Access Tokens for details.

Health & Version

MethodPathDescriptionLicense
GET/api/v1/healthLiveness probeNo
GET/api/v1/readyReadiness probe (Kafka reachable)No
GET/api/v1/versionVersion and build infoNo
GET/api/v1/self-healing/statusSelf-healing loop statusNo

Cluster

MethodPathDescriptionLicense
GET/api/v1/clusterBasic cluster infoNo
GET/api/v1/cluster/comprehensiveFull cluster data (?summary=true to omit partition arrays)No
GET/api/v1/cluster/logdirsDisk usage by broker (?summary=true for broker-level only)No
GET/api/v1/cluster/healthBroker and partition healthNo
GET/api/v1/cluster/follower-lagFollower lag by cluster, broker, topic, partitionNo
POST/api/v1/cluster/refresh-metadataForce metadata refreshYes

GET /api/v1/cluster/follower-lag

Returns follower replica offset lag aggregated at cluster, broker, topic, and partition levels. Useful for identifying brokers or topics where replication is falling behind.

Query parameters:

ParameterTypeDefaultDescription
topicstring-Filter results to a single topic
brokerinteger-Filter results to a single broker ID
summarybooleanfalseWhen true, returns only cluster-level and broker-level totals (omits topic and partition detail)

Response shape:

{ "success": true, "data": { "cluster_total_lag": 4200, "cluster_max_lag": 850, "broker_lag": [ { "broker_id": 1, "total_lag": 1200, "max_lag": 850, "replica_count": 45 }, { "broker_id": 2, "total_lag": 1500, "max_lag": 600, "replica_count": 48 }, { "broker_id": 3, "total_lag": 1500, "max_lag": 400, "replica_count": 47 } ], "topic_lag": [ { "topic": "orders", "total_lag": 2000, "max_lag": 850, "partition_count": 12 } ], "partition_lag": [ { "topic": "orders", "partition": 3, "replicas": [ { "broker_id": 1, "offset_lag": 850, "is_leader": false }, { "broker_id": 2, "offset_lag": 0, "is_leader": true } ] } ], "urp_classification": [ { "topic": "orders", "partition": 7, "cause": "follower_lag", "lagging_brokers": [1] } ] } }

When ?summary=true is used, the topic_lag, partition_lag, and urp_classification fields are omitted.

Partitions & Brokers

MethodPathDescriptionLicense
GET/api/v1/partitionsList partitions (?minimal=true, ?fields=f1,f2)No
GET/api/v1/brokers/racksBroker rack topologyNo

Topics

MethodPathDescriptionLicense
GET/api/v1/topics/{topic}/configGet topic configurationNo
GET/api/v1/topics/{topic}/config/explicitGet explicitly set config onlyNo
PUT/api/v1/topics/{topic}/configUpdate topic configurationYes
PUT/api/v1/topics/config/bulkBulk update topic configurationYes
GET/api/v1/config/defaultsDefault broker configurationsNo
POST/api/v1/topics/searchSearch topics by nameNo

Proposals

MethodPathDescriptionLicense
POST/api/v1/proposals/generateGenerate a rebalancing proposalNo
GET/api/v1/proposalsList stored proposalsNo
GET/api/v1/proposals/{proposalId}Get proposal detailsNo
POST/api/v1/proposals/{proposalId}/applyApply (execute) a proposalYes
DELETE/api/v1/proposals/{proposalId}Delete a proposalNo

Reassignments

MethodPathDescriptionLicense
POST/api/v1/topics/{topic}/redistributeRedistribute all partitions of a topicYes
POST/api/v1/topics/{topic}/partitions/{partition}/redistributeReassign a single partitionYes
POST/api/v1/topics/{topic}/partitions/bulkBulk reassignmentYes
POST/api/v1/preferred-leader-electionCluster-wide preferred leader electionYes
POST/api/v1/topics/{topic}/preferred-leader-electionTopic-specific preferred leader electionYes

Broker Maintenance

MethodPathDescriptionLicense
POST/api/v1/brokers/{brokerId}/maintenanceEnter maintenance modeYes
DELETE/api/v1/brokers/{brokerId}/maintenanceExit maintenance modeYes
POST/api/v1/brokers/{brokerId}/logdirs/moveMove log directoriesYes

What-If & Simulation

MethodPathDescriptionLicense
POST/api/v1/what-if/simulateSimulate cluster scenariosNo
POST/api/v1/blast-radius/analyzeAnalyze failure blast radiusNo

Optimization

MethodPathDescriptionLicense
GET/api/v1/optimize/partitionsPartition count optimization recommendationsNo

Consumer Groups

MethodPathDescriptionLicense
GET/api/v1/consumer-groupsList consumer groupsNo
GET/api/v1/consumer-groups/summaryAggregated statisticsNo
GET/api/v1/consumer-groups/{group}Group details with membersNo
GET/api/v1/consumer-groups/{group}/lagPer-partition lagNo
POST/api/v1/consumer-groups/{group}/reset-offsetsReset consumer offsetsYes
DELETE/api/v1/consumer-groups/{group}Delete a consumer groupYes

Quotas

List & Analysis

MethodPathDescriptionLicense
GET/api/v1/quotasList all quotasNo
POST/api/v1/quotas/resolveResolve effective quotasNo

Entity-Specific CRUD

Each entity type supports GET (free), PUT (licensed), and DELETE (licensed):

EntityPath
Default/api/v1/quotas/default
Default User/api/v1/quotas/default-user
Default Client ID/api/v1/quotas/default-client-id
User/api/v1/quotas/user/{user}
Client ID/api/v1/quotas/client-id/{clientId}
User + Client ID/api/v1/quotas/user/{user}/{clientId}

ACLs

MethodPathDescriptionLicense
GET/api/v1/aclsList ACL bindingsNo
POST/api/v1/aclsCreate ACL bindingsYes
PUT/api/v1/aclsUpdate ACL bindingsYes
DELETE/api/v1/aclsDelete ACL bindingsYes

Messages

MethodPathDescriptionLicense
GET/api/v1/topics/{topic}/messages/tailStream new messages over SSENo
GET/api/v1/topics/{topic}/messagesFetch message rangeNo
GET/api/v1/topics/{topic}/messages/{partition}/{offset}Get single messageNo
GET/api/v1/topics/{topic}/watermarksPartition watermarksNo

Audit Log

MethodPathDescriptionLicense
GET/api/v1/audit-logList audit events (filterable by action, user, time, search)No
POST/api/v1/audit-log/revert/previewReview reversal of a stored reassignment event against current placementNo
POST/api/v1/audit-log/revertSubmit reversal of a supported audited actionYes

Reassignment reversals require the stored event selector and a fresh review fingerprint. A nonempty reversal returns 202 with an executionId; acceptance does not mean the partitions have finished moving. See Audit Logging for supported actions and offset-reset limitations.

Chat

Available when PILOT_CHAT_ENABLED=true.

MethodPathDescriptionLicense
GET/api/v1/chat/statusChat availability statusNo
POST/api/v1/chat/conversationsCreate a conversationNo
GET/api/v1/chat/conversationsList conversationsNo
GET/api/v1/chat/conversations/{id}Get conversation with messagesNo
DELETE/api/v1/chat/conversations/{id}Delete a conversationNo
POST/api/v1/chat/conversations/{id}/messagesSend message (SSE streaming response)No
POST/api/v1/chat/conversations/{id}/approve/{toolCallId}Approve pending mutationNo
POST/api/v1/chat/conversations/{id}/reject/{toolCallId}Reject pending mutationNo

Authentication

Available when authentication is configured.

MethodPathDescriptionLicense
GET/api/v1/auth/providersList configured OAuth providersNo
GET/api/v1/auth/login/{provider}Initiate OAuth login flowNo
GET/api/v1/auth/callback/{provider}OAuth callbackNo
GET/api/v1/auth/meCurrent authenticated userNo
POST/api/v1/auth/logoutEnd sessionNo
POST/api/v1/auth/refreshRefresh access tokenNo

Access Tokens

Available when authentication is configured. Requires an OAuth session (PATs cannot manage other PATs).

MethodPathDescriptionLicense
GET/api/v1/tokensList current user’s tokensNo
POST/api/v1/tokensCreate a new personal access tokenNo
DELETE/api/v1/tokens/{tokenId}Revoke a tokenNo

MCP (Model Context Protocol)

Streamable HTTP transport for AI tool integrations (GitHub Copilot, Warp, Claude Desktop).

MethodPathDescriptionLicense
POST/api/v1/mcpMCP Streamable HTTP endpointNo

When authentication is enabled, include a PAT as a Bearer token in the Authorization header. See MCP - Authentication for client configuration examples.

License & Notices

MethodPathDescriptionLicense
GET/api/v1/licenseLicense status and validationNo
GET/api/v1/third-party-noticesThird-party license noticesNo

Metrics

MethodPathDescription
GET/metricsPrometheus metrics

Static Assets

PathDescription
/uiPilot dashboard (embedded React UI)
/docs/swaggerSwagger UI
/docs/redocReDoc UI
/api/v1/openapi.yamlOpenAPI spec (YAML)
/api/v1/openapi.jsonOpenAPI spec (JSON)
Last updated on