Files
bzzz/docs/BZZZv2B-API_REFERENCE.md
anthonyrawlins ee6bb09511 Complete Phase 2B documentation suite and implementation
🎉 MAJOR MILESTONE: Complete BZZZ Phase 2B documentation and core implementation

## Documentation Suite (7,000+ lines)
-  User Manual: Comprehensive guide with practical examples
-  API Reference: Complete REST API documentation
-  SDK Documentation: Multi-language SDK guide (Go, Python, JS, Rust)
-  Developer Guide: Development setup and contribution procedures
-  Architecture Documentation: Detailed system design with ASCII diagrams
-  Technical Report: Performance analysis and benchmarks
-  Security Documentation: Comprehensive security model
-  Operations Guide: Production deployment and monitoring
-  Documentation Index: Cross-referenced navigation system

## SDK Examples & Integration
- 🔧 Go SDK: Simple client, event streaming, crypto operations
- 🐍 Python SDK: Async client with comprehensive examples
- 📜 JavaScript SDK: Collaborative agent implementation
- 🦀 Rust SDK: High-performance monitoring system
- 📖 Multi-language README with setup instructions

## Core Implementation
- 🔐 Age encryption implementation (pkg/crypto/age_crypto.go)
- 🗂️ Shamir secret sharing (pkg/crypto/shamir.go)
- 💾 DHT encrypted storage (pkg/dht/encrypted_storage.go)
- 📤 UCXL decision publisher (pkg/ucxl/decision_publisher.go)
- 🔄 Updated main.go with Phase 2B integration

## Project Organization
- 📂 Moved legacy docs to old-docs/ directory
- 🎯 Comprehensive README.md update with modern structure
- 🔗 Full cross-reference system between all documentation
- 📊 Production-ready deployment procedures

## Quality Assurance
-  All documentation cross-referenced and validated
-  Working code examples in multiple languages
-  Production deployment procedures tested
-  Security best practices implemented
-  Performance benchmarks documented

Ready for production deployment and community adoption.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-08 19:57:40 +10:00

1072 lines
24 KiB
Markdown

# BZZZ API Reference
**Version 2.0 - Phase 2B Edition**
Complete API reference for BZZZ's unified semantic context publishing platform.
## Table of Contents
1. [Overview](#overview)
2. [Authentication](#authentication)
3. [Agent APIs](#agent-apis)
4. [Decision APIs](#decision-apis)
5. [Crypto APIs](#crypto-apis)
6. [Admin APIs](#admin-apis)
7. [DHT APIs](#dht-apis)
8. [Debug APIs](#debug-apis)
9. [WebSocket APIs](#websocket-apis)
10. [Error Codes](#error-codes)
11. [Data Models](#data-models)
## Overview
The BZZZ API provides RESTful endpoints for interacting with the distributed semantic context publishing platform. All APIs use JSON for request/response payloads and include comprehensive error handling.
### Base URL
```
http://localhost:8080/api
```
### Content Types
- Request: `application/json`
- Response: `application/json`
- WebSocket: `application/json` messages
### Cross-References
- **Implementation**: `api/` package in codebase
- **Configuration**: [CONFIG_REFERENCE.md](CONFIG_REFERENCE.md)
- **User Guide**: [USER_MANUAL.md](USER_MANUAL.md#api-usage)
- **Security Model**: [SECURITY.md](SECURITY.md#api-security)
## Authentication
BZZZ uses role-based authentication with optional admin authorization for privileged operations.
### Role-Based Access
Most APIs automatically use your agent's configured role. No explicit authentication required for standard operations.
### Admin Authorization
Admin-only endpoints require the admin authorization header:
```http
Authorization: Admin QmAdminNodeID
```
**Cross-Reference**: Admin role management in `pkg/config/roles.go:IsAdminRole()`
## Agent APIs
Endpoints for agent status, configuration, and capabilities.
### GET `/agent/status`
Get current agent status and configuration.
**Response**:
```json
{
"node_id": "QmYourNodeID",
"agent_id": "backend-dev-01",
"role": "backend_developer",
"authority_level": "suggestion",
"specialization": "code_generation",
"can_decrypt": ["backend_developer"],
"is_admin": false,
"capabilities": ["golang", "docker", "kubernetes"],
"models": ["ollama/codegemma", "ollama/llama3.1"],
"active_tasks": 2,
"max_tasks": 5,
"uptime_seconds": 3600
}
```
**Cross-Reference**: Implementation in `main.go:announceAvailability()`
### GET `/agent/capabilities`
Get detailed agent capabilities and available models.
**Response**:
```json
{
"capabilities": ["code_generation", "debugging", "testing"],
"models": [
{
"name": "ollama/codegemma",
"type": "code_generation",
"available": true,
"last_used": "2025-01-08T15:30:00Z"
}
],
"specialization": "code_generation",
"expertise": ["golang", "microservices", "docker"],
"reports_to": ["senior_software_architect"],
"deliverables": ["code", "documentation", "tests"]
}
```
### POST `/agent/update-role`
Update agent role configuration (requires restart).
**Request**:
```json
{
"role": "senior_software_architect",
"specialization": "architecture",
"models": ["ollama/llama3.1", "gpt-4"]
}
```
**Response**:
```json
{
"status": "updated",
"restart_required": true,
"new_authority_level": "decision"
}
```
**Cross-Reference**: Role definitions in `pkg/config/roles.go`
### GET `/agent/peers`
List connected peers and their roles.
**Response**:
```json
{
"connected_peers": [
{
"node_id": "QmPeer1",
"agent_id": "architect-01",
"role": "senior_software_architect",
"authority_level": "decision",
"last_seen": "2025-01-08T15:29:50Z",
"available": true,
"active_tasks": 1
}
],
"total_peers": 3,
"admin_peer": "QmAdminPeer"
}
```
## Decision APIs
Endpoints for publishing and querying decisions with automatic encryption.
### POST `/decisions/architectural`
Publish an architectural decision.
**Request**:
```json
{
"task": "migrate_to_microservices",
"decision": "Split monolith into 5 microservices based on domain boundaries",
"rationale": "Improve scalability, maintainability, and team autonomy",
"alternatives": [
"Keep monolith with better modularization",
"Partial split into 2 services",
"Complete rewrite with serverless"
],
"implications": [
"Increased operational complexity",
"Better scalability and fault isolation",
"Need for service mesh",
"Distributed transaction challenges"
],
"next_steps": [
"Define service boundaries",
"Plan data migration strategy",
"Set up CI/CD pipelines",
"Implement monitoring"
]
}
```
**Response**:
```json
{
"ucxl_address": "backend_dev/backend_developer/microservices/migrate_to_microservices/1704672000",
"encrypted": true,
"stored_at": "2025-01-08T15:30:00Z",
"accessible_by": ["backend_developer", "senior_software_architect", "admin"],
"dht_peers": 3
}
```
**Cross-Reference**: Implementation in `pkg/ucxl/decision_publisher.go:PublishArchitecturalDecision()`
### POST `/decisions/code`
Publish a code implementation decision.
**Request**:
```json
{
"task": "implement_user_authentication",
"decision": "Implemented JWT-based authentication with refresh tokens",
"files_modified": [
"internal/auth/jwt.go",
"internal/middleware/auth.go",
"cmd/server/main.go"
],
"lines_changed": 245,
"test_results": {
"passed": 18,
"failed": 1,
"skipped": 2,
"coverage": 87.5,
"failed_tests": ["TestJWT_ExpiredToken"]
},
"dependencies": [
"github.com/golang-jwt/jwt/v5",
"golang.org/x/crypto/bcrypt"
],
"language": "go"
}
```
**Response**:
```json
{
"ucxl_address": "backend_dev/backend_developer/auth/implement_user_authentication/1704672000",
"encrypted": true,
"content_type": "decision",
"size_bytes": 1024,
"hash": "sha256:abc123...",
"stored_at": "2025-01-08T15:30:00Z"
}
```
**Cross-Reference**: Implementation in `pkg/ucxl/decision_publisher.go:PublishCodeDecision()`
### POST `/decisions/system-status`
Publish system status and health information.
**Request**:
```json
{
"status": "All systems operational",
"metrics": {
"uptime_seconds": 86400,
"active_peers": 4,
"decisions_published": 25,
"decisions_retrieved": 12,
"cache_hit_rate": 0.85,
"dht_entries": 150,
"memory_usage_mb": 245.7
},
"health_checks": {
"dht_connected": true,
"elections_ready": true,
"crypto_functional": true,
"peers_discovered": true,
"admin_available": true
}
}
```
**Response**:
```json
{
"ucxl_address": "backend_dev/backend_developer/system/system_status/1704672000",
"status_recorded": true,
"alert_level": "normal"
}
```
### GET `/decisions/query`
Query recent decisions with filtering.
**Query Parameters**:
- `agent`: Filter by agent ID
- `role`: Filter by creator role
- `project`: Filter by project name
- `task`: Filter by task name
- `content_type`: Filter by decision type
- `since`: ISO timestamp for date filtering
- `limit`: Maximum results (default: 10, max: 100)
**Example**:
```
GET /decisions/query?role=backend_developer&project=auth&limit=5
```
**Response**:
```json
{
"decisions": [
{
"address": "backend_dev/backend_developer/auth/implement_jwt/1704672000",
"creator_role": "backend_developer",
"content_type": "decision",
"timestamp": "2025-01-08T15:30:00Z",
"size": 1024,
"encrypted_for": ["backend_developer", "senior_software_architect", "admin"],
"dht_peers": 3
}
],
"total_found": 1,
"query_time_ms": 45
}
```
**Cross-Reference**: Implementation in `pkg/ucxl/decision_publisher.go:QueryRecentDecisions()`
### GET `/decisions/content/{ucxl_address}`
Retrieve and decrypt specific decision content.
**Parameters**:
- `ucxl_address`: Full UCXL address of the decision
**Example**:
```
GET /decisions/content/backend_dev/backend_developer/auth/implement_jwt/1704672000
```
**Response**:
```json
{
"address": "backend_dev/backend_developer/auth/implement_jwt/1704672000",
"agent": "backend_dev",
"role": "backend_developer",
"project": "auth",
"task": "implement_jwt",
"decision": "Implemented JWT authentication with refresh tokens",
"context": {
"decision_type": "code",
"language": "go",
"node_id": "QmYourNode"
},
"timestamp": "2025-01-08T15:30:00Z",
"success": true,
"files_modified": ["auth.go", "middleware.go"],
"lines_changed": 245,
"test_results": {
"passed": 18,
"failed": 1,
"coverage": 87.5
},
"decrypted_by": "backend_developer"
}
```
**Error Response** (403 Forbidden):
```json
{
"error": "access_denied",
"message": "Current role cannot decrypt content from role: admin",
"current_role": "backend_developer",
"required_authority": "master"
}
```
**Cross-Reference**: Implementation in `pkg/ucxl/decision_publisher.go:GetDecisionContent()`
## Crypto APIs
Endpoints for encryption, key management, and cryptographic operations.
### GET `/crypto/test-age`
Test Age encryption functionality.
**Response**:
```json
{
"test_passed": true,
"key_generation": "ok",
"encryption": "ok",
"decryption": "ok",
"test_content_size": 64,
"execution_time_ms": 12
}
```
**Cross-Reference**: Implementation in `pkg/crypto/age_crypto.go:TestAgeEncryption()`
### GET `/crypto/test-shamir`
Test Shamir secret sharing functionality.
**Response**:
```json
{
"test_passed": true,
"secret_splitting": "ok",
"secret_reconstruction": "ok",
"threshold": 3,
"total_shares": 5,
"execution_time_ms": 89
}
```
**Cross-Reference**: Implementation in `pkg/crypto/shamir.go:TestShamirSecretSharing()`
### POST `/crypto/generate-keys`
Generate new Age key pair for role-based encryption.
**Response**:
```json
{
"public_key": "age1abcdef1234567890abcdef1234567890abcdef1234567890abcdef12345678",
"private_key": "AGE-SECRET-KEY-1ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890",
"key_type": "X25519",
"generated_at": "2025-01-08T15:30:00Z"
}
```
⚠️ **Security Warning**: Store the private key securely and never share it.
**Cross-Reference**: Implementation in `pkg/crypto/age_crypto.go:GenerateAgeKeyPair()`
### POST `/crypto/validate-keys`
Validate Age key format and functionality.
**Request**:
```json
{
"public_key": "age1abcdef...",
"private_key": "AGE-SECRET-KEY-1...",
"test_encryption": true
}
```
**Response**:
```json
{
"public_key_valid": true,
"private_key_valid": true,
"key_pair_matches": true,
"encryption_test": "passed",
"key_format": "X25519"
}
```
**Cross-Reference**: Implementation in `pkg/crypto/age_crypto.go:ValidateAgeKey()`
### GET `/crypto/role-permissions`
Get current role's encryption permissions.
**Response**:
```json
{
"current_role": "backend_developer",
"authority_level": "suggestion",
"can_decrypt": ["backend_developer"],
"can_be_decrypted_by": [
"backend_developer",
"senior_software_architect",
"admin"
],
"has_age_keys": true,
"key_status": "valid"
}
```
## Admin APIs
Administrative endpoints requiring admin authorization.
### GET `/admin/election-status`
Get current election and admin status.
**Authorization**: Admin required
**Response**:
```json
{
"current_admin": "QmAdminNode",
"is_election_active": false,
"last_election": "2025-01-08T14:30:00Z",
"election_reason": "heartbeat_timeout",
"candidates": [],
"quorum_size": 3,
"active_nodes": 5,
"last_heartbeat": "2025-01-08T15:29:50Z",
"next_heartbeat": "2025-01-08T15:30:05Z"
}
```
**Cross-Reference**: Implementation in `pkg/election/election.go:GetElectionStatus()`
### POST `/admin/trigger-election`
Manually trigger an admin election.
**Authorization**: Admin required
**Request**:
```json
{
"reason": "manual_trigger",
"force": false
}
```
**Response**:
```json
{
"election_triggered": true,
"election_id": "election-1704672000",
"candidates": [
{
"node_id": "QmCandidate1",
"role": "admin",
"score": 95.5,
"capabilities": ["high_uptime", "master_authority"]
}
],
"expected_completion": "2025-01-08T15:31:00Z"
}
```
**Cross-Reference**: Implementation in `pkg/election/election.go:TriggerElection()`
### GET `/admin/key-shares`
View admin key shares information.
**Authorization**: Admin required
**Response**:
```json
{
"total_shares": 5,
"threshold": 3,
"distributed_shares": [
{
"node_id": "QmNode1",
"share_index": 1,
"has_share": true,
"last_validated": "2025-01-08T15:00:00Z"
},
{
"node_id": "QmNode2",
"share_index": 2,
"has_share": true,
"last_validated": "2025-01-08T15:00:00Z"
}
],
"reconstruction_possible": true
}
```
**Cross-Reference**: Implementation in `pkg/crypto/shamir.go:AdminKeyManager`
### POST `/admin/reconstruct-key`
Reconstruct admin private key from shares.
**Authorization**: Admin required
**Request**:
```json
{
"shares": [
{
"node_id": "QmNode1",
"index": 1,
"share": "base64-encoded-share"
},
{
"node_id": "QmNode2",
"index": 2,
"share": "base64-encoded-share"
},
{
"node_id": "QmNode3",
"index": 3,
"share": "base64-encoded-share"
}
]
}
```
**Response**:
```json
{
"reconstruction_successful": true,
"key_reconstructed": true,
"shares_used": 3,
"validation_passed": true
}
```
⚠️ **Security Warning**: Reconstructed keys contain sensitive admin privileges.
**Cross-Reference**: Implementation in `pkg/crypto/shamir.go:ReconstructAdminKey()`
## DHT APIs
Endpoints for DHT storage operations and metrics.
### GET `/dht/metrics`
Get DHT storage and performance metrics.
**Response**:
```json
{
"stored_items": 25,
"retrieved_items": 12,
"cache_hits": 8,
"cache_misses": 4,
"cache_hit_rate": 0.67,
"encryption_ops": 25,
"decryption_ops": 12,
"average_store_time_ms": 150,
"average_retrieve_time_ms": 45,
"connected_peers": 4,
"last_update": "2025-01-08T15:30:00Z"
}
```
**Cross-Reference**: Implementation in `pkg/dht/encrypted_storage.go:GetMetrics()`
### GET `/dht/content/{ucxl_address}`
Retrieve raw encrypted content from DHT (admin only).
**Authorization**: Admin required
**Parameters**:
- `ucxl_address`: Full UCXL address
**Response**:
```json
{
"address": "backend_dev/backend_developer/auth/jwt/1704672000",
"encrypted_content": "base64-encoded-encrypted-data",
"metadata": {
"creator_role": "backend_developer",
"encrypted_for": ["backend_developer", "senior_software_architect", "admin"],
"content_type": "decision",
"size": 1024,
"hash": "sha256:abc123...",
"timestamp": "2025-01-08T15:30:00Z",
"dht_peers": 3,
"replication_factor": 3
}
}
```
### POST `/dht/store-raw`
Store raw encrypted content in DHT (admin only).
**Authorization**: Admin required
**Request**:
```json
{
"ucxl_address": "admin/admin/system/backup/1704672000",
"content": "base64-encoded-encrypted-content",
"creator_role": "admin",
"content_type": "backup"
}
```
**Response**:
```json
{
"stored": true,
"dht_key": "/bzzz/ucxl/generated-hash",
"replication_factor": 3,
"announced": true
}
```
**Cross-Reference**: Implementation in `pkg/dht/encrypted_storage.go:StoreUCXLContent()`
### GET `/dht/peers/{ucxl_address}`
Discover peers that have specific content.
**Parameters**:
- `ucxl_address`: Full UCXL address to discover
**Response**:
```json
{
"content_address": "backend_dev/backend_developer/auth/jwt/1704672000",
"peers_with_content": [
{
"peer_id": "QmPeer1",
"node_id": "Node1",
"announced_at": "2025-01-08T15:25:00Z"
},
{
"peer_id": "QmPeer2",
"node_id": "Node2",
"announced_at": "2025-01-08T15:26:00Z"
}
],
"total_peers": 2
}
```
**Cross-Reference**: Implementation in `pkg/dht/encrypted_storage.go:DiscoverContentPeers()`
## Debug APIs
Development and debugging endpoints.
### GET `/debug/status`
Get comprehensive system status for debugging.
**Response**:
```json
{
"system": {
"version": "2.0",
"uptime_seconds": 3600,
"go_version": "go1.23.0",
"memory_usage_mb": 156.7
},
"node": {
"id": "QmYourNode",
"addresses": ["/ip4/192.168.1.100/tcp/4001"],
"connected_peers": 4
},
"agent": {
"id": "backend-dev-01",
"role": "backend_developer",
"authority": "suggestion",
"active_tasks": 2,
"max_tasks": 5
},
"dht": {
"connected": true,
"stored_items": 25,
"bootstrap_peers": 2
},
"crypto": {
"age_functional": true,
"shamir_functional": true,
"keys_configured": true
},
"admin": {
"current_admin": "QmAdminPeer",
"is_admin": false,
"election_active": false,
"last_heartbeat": "2025-01-08T15:29:50Z"
}
}
```
### GET `/debug/recent-decisions`
Get recent decisions with full debug information.
**Query Parameters**:
- `limit`: Maximum results (default: 5, max: 20)
**Response**:
```json
{
"decisions": [
{
"address": "backend_dev/backend_developer/auth/jwt/1704672000",
"metadata": {
"creator_role": "backend_developer",
"content_type": "decision",
"size": 1024,
"timestamp": "2025-01-08T15:30:00Z"
},
"storage": {
"dht_key": "/bzzz/ucxl/abc123...",
"cached": true,
"cache_expires": "2025-01-08T15:40:00Z",
"replication_peers": 3
},
"access": {
"can_decrypt": true,
"encrypted_for": ["backend_developer", "senior_software_architect", "admin"]
}
}
],
"debug_info": {
"query_time_ms": 25,
"cache_hits": 1,
"dht_lookups": 0
}
}
```
### POST `/debug/test-e2e`
Run end-to-end system test.
**Response**:
```json
{
"test_passed": true,
"stages": {
"age_encryption": "passed",
"shamir_reconstruction": "passed",
"decision_publishing": "passed",
"dht_storage": "passed",
"content_retrieval": "passed",
"decryption": "passed"
},
"execution_time_ms": 1250,
"decisions_created": 3,
"content_verified": 3
}
```
**Cross-Reference**: Implementation in `main.go:testEndToEndDecisionFlow()`
## WebSocket APIs
Real-time event streaming via WebSocket connections.
### WebSocket `/ws/events`
Stream real-time system events.
**Connection**:
```javascript
const ws = new WebSocket('ws://localhost:8080/ws/events');
```
**Event Types**:
#### Decision Published
```json
{
"type": "decision_published",
"timestamp": "2025-01-08T15:30:00Z",
"data": {
"address": "backend_dev/backend_developer/auth/jwt/1704672000",
"creator_role": "backend_developer",
"content_type": "decision",
"can_decrypt": true
}
}
```
#### Admin Changed
```json
{
"type": "admin_changed",
"timestamp": "2025-01-08T15:30:00Z",
"data": {
"old_admin": "QmOldAdmin",
"new_admin": "QmNewAdmin",
"election_reason": "heartbeat_timeout"
}
}
```
#### Peer Connected/Disconnected
```json
{
"type": "peer_connected",
"timestamp": "2025-01-08T15:30:00Z",
"data": {
"peer_id": "QmNewPeer",
"agent_id": "architect-02",
"role": "senior_software_architect"
}
}
```
### WebSocket `/ws/decisions/{role}`
Stream decisions for specific role.
**Connection**:
```javascript
const ws = new WebSocket('ws://localhost:8080/ws/decisions/backend_developer');
```
**Events**: Only decision events for the specified role.
## Error Codes
Standard HTTP error codes with BZZZ-specific error details.
### 400 Bad Request
```json
{
"error": "bad_request",
"message": "Invalid UCXL address format",
"details": {
"provided": "invalid/address",
"expected_format": "agent/role/project/task/node"
}
}
```
### 401 Unauthorized
```json
{
"error": "unauthorized",
"message": "Admin authorization required",
"required_header": "Authorization: Admin QmNodeID"
}
```
### 403 Forbidden
```json
{
"error": "access_denied",
"message": "Current role cannot decrypt content from role: admin",
"current_role": "backend_developer",
"required_authority": "master"
}
```
### 404 Not Found
```json
{
"error": "not_found",
"message": "UCXL content not found in DHT",
"address": "backend_dev/backend_developer/missing/task/1704672000",
"searched_peers": 4
}
```
### 500 Internal Server Error
```json
{
"error": "internal_error",
"message": "Age encryption failed",
"details": {
"operation": "encrypt_for_role",
"role": "backend_developer",
"key_status": "invalid"
},
"request_id": "req-abc123"
}
```
### 503 Service Unavailable
```json
{
"error": "service_unavailable",
"message": "DHT not connected",
"retry_after": 30,
"status": {
"dht_connected": false,
"bootstrap_peers": 0
}
}
```
## Data Models
Core data structures used in API responses.
### AgentStatus
```typescript
interface AgentStatus {
node_id: string; // P2P node identifier
agent_id: string; // Agent identifier
role: string; // Current role name
authority_level: string; // Authority level (master, decision, suggestion, read_only)
specialization: string; // Agent specialization
can_decrypt: string[]; // Roles this agent can decrypt
is_admin: boolean; // Whether this node is admin
capabilities: string[]; // Agent capabilities
models: string[]; // Available AI models
active_tasks: number; // Current active tasks
max_tasks: number; // Maximum concurrent tasks
uptime_seconds: number; // Uptime in seconds
}
```
### TaskDecision
```typescript
interface TaskDecision {
agent: string; // Creator agent ID
role: string; // Creator role
project: string; // Project name
task: string; // Task name
decision: string; // Decision description
context: Record<string, any>; // Additional context
timestamp: string; // ISO timestamp
success: boolean; // Whether task succeeded
error_message?: string; // Error if failed
files_modified?: string[]; // Modified files
lines_changed?: number; // Lines of code changed
test_results?: TestResults; // Test execution results
dependencies?: string[]; // Dependencies added/modified
next_steps?: string[]; // Recommended next steps
}
```
### TestResults
```typescript
interface TestResults {
passed: number; // Passed tests
failed: number; // Failed tests
skipped: number; // Skipped tests
coverage?: number; // Code coverage percentage
failed_tests?: string[]; // Names of failed tests
}
```
### UCXLMetadata
```typescript
interface UCXLMetadata {
address: string; // Full UCXL address
creator_role: string; // Role that created content
encrypted_for: string[]; // Roles that can decrypt
content_type: string; // Content type (decision, status, etc)
timestamp: string; // Creation timestamp
size: number; // Content size in bytes
hash: string; // SHA256 hash of encrypted content
dht_peers: string[]; // Peers that have this content
replication_factor: number; // Number of peer replicas
}
```
### ElectionStatus
```typescript
interface ElectionStatus {
current_admin: string; // Current admin node ID
is_election_active: boolean; // Whether election is running
last_election: string; // Last election timestamp
election_reason: string; // Reason for last election
candidates: ElectionCandidate[]; // Current candidates
quorum_size: number; // Required quorum size
active_nodes: number; // Currently active nodes
last_heartbeat: string; // Last admin heartbeat
next_heartbeat: string; // Next expected heartbeat
}
```
### ElectionCandidate
```typescript
interface ElectionCandidate {
node_id: string; // Candidate node ID
role: string; // Candidate role
score: number; // Election score
capabilities: string[]; // Candidate capabilities
uptime_seconds: number; // Candidate uptime
authority_level: string; // Authority level
}
```
---
## Cross-References
- **User Manual**: [USER_MANUAL.md](USER_MANUAL.md)
- **Developer Guide**: [DEVELOPER.md](DEVELOPER.md)
- **Configuration**: [CONFIG_REFERENCE.md](CONFIG_REFERENCE.md)
- **Security Model**: [SECURITY.md](SECURITY.md)
- **Implementation**: Source code in `api/`, `pkg/*/` packages
**BZZZ API Reference v2.0** - Complete API documentation for Phase 2B unified architecture with Age encryption and DHT storage.