Pular para o conteúdo principal

API Overview

Architecture

The Cidadão.AI API is built on FastAPI with a multi-agent architecture, designed for high performance, scalability, and real-time data processing. The system implements a layered architecture pattern with clear separation of concerns.

Production Deployment

  • Platform: Railway (Web + Worker + Beat services)
  • Status: ✅ 99.9% uptime since October 2025
  • Endpoints: 323 REST endpoints across 36 route modules
  • Performance: 80ms p50 latency, 145ms p95 latency
  • Database: PostgreSQL (Supabase) + Redis Cache
  • LLM Provider: Maritaca AI (primary), Anthropic Claude (backup)

Core Components

API Endpoints

Endpoint Overview

The Cidadão.AI API provides 323 REST endpoints organized into 36 specialized route modules:

Core Routes (7 modules)

  1. /api/v1/chat/ - Chat with agents (SSE streaming) - 18 endpoints
  2. /api/v1/agents/ - Direct agent invocation - 18 endpoints
  3. /api/v1/investigations/ - Investigation CRUD - 10 endpoints
  4. /api/v1/federal/ - Federal APIs (IBGE, DataSUS, INEP, PNCP) - 7 endpoints
  5. /api/v1/orchestration/ - Multi-agent orchestration - 7 endpoints
  6. /api/v1/transparency/ - Portal da Transparência - 6 endpoints
  7. /health/metrics - Prometheus metrics endpoint - 1 endpoint

Additional Routes (29 modules)

  • Admin: /api/v1/admin/* (users, roles, settings, audit)
  • Analytics: /api/v1/analysis, /api/v1/reports, /api/v1/export
  • Integration: /api/v1/oauth, /api/v1/webhooks, /api/v1/graphql
  • Infrastructure: /api/v1/tasks, /api/v1/resilience, /api/v1/observability
  • Advanced: /api/v1/ml_pipeline, /api/v1/visualization, /api/v1/network
  • Testing: /api/v1/debug, /api/v1/chaos

Key Endpoint Examples

# Chat with agents (SSE streaming)
POST /api/v1/chat/stream
GET /api/v1/chat/history

# Direct agent invocation
POST /api/v1/agents/zumbi/investigate
POST /api/v1/agents/abaporu/orchestrate
GET /api/v1/agents/status

# Investigations
POST /api/v1/investigations
GET /api/v1/investigations/{id}
GET /api/v1/investigations/{id}/progress
DELETE /api/v1/investigations/{id}

# Federal data sources
GET /api/v1/federal/ibge/demographics
GET /api/v1/federal/datasus/health-metrics
GET /api/v1/federal/inep/education-stats
GET /api/v1/federal/pncp/contracts

# Transparency Portal
GET /api/v1/transparency/contracts
GET /api/v1/transparency/expenses
GET /api/v1/transparency/agreements

# Health & Metrics
GET /health
GET /health/detailed
GET /metrics # Prometheus format

Technical Specifications

Protocol & Standards

  • Protocol: HTTPS/2 with TLS 1.3
  • API Style: RESTful with JSON:API compliance
  • Versioning: URI-based versioning (/api/v1/)
  • Authentication: OAuth 2.0 + JWT (RFC 7519)
  • Documentation: OpenAPI 3.0 Specification

Performance Characteristics

  • Response Time: p50 80ms, p95 145ms, p99 < 500ms
  • Throughput: 5,000+ requests/second (production verified)
  • Concurrency: Async/await with connection pooling (max 100 connections)
  • Caching: Multi-layer (L1: Memory 5min, L2: Redis 1h, L3: PostgreSQL 24h)
  • Cache Hit Rate: 87% in production
  • Agent Processing: p95 < 3.2s for multi-agent investigations

API Lifecycle

Request Flow

Middleware Stack

Execution Order (FastAPI uses LIFO - Last In, First Out):

  1. IPWhitelistMiddleware (production only) - IP filtering
  2. CORSMiddleware - Cross-origin resource sharing
  3. LoggingMiddleware - Structured JSON logs with request IDs
  4. SecurityMiddleware - CSRF, XSS protection, security headers
  5. RateLimitMiddleware - Per-user/IP limits (token bucket)
  6. CompressionMiddleware - Gzip response compression
  7. CorrelationMiddleware - Distributed tracing (request ID propagation)
  8. MetricsMiddleware - Prometheus metrics collection

Key Features:

  • Request correlation IDs for distributed tracing
  • Automatic Prometheus metrics (latency, requests, errors)
  • Rate limiting: 100/hour (anonymous), 1000/hour (authenticated)
  • Security headers: HSTS, CSP, X-Frame-Options
  • Compression: Gzip for responses >1KB

Data Models

Core Entities

# Investigation Entity
class Investigation:
id: UUID
user_id: UUID
query: str
status: InvestigationStatus
anomalies_found: int
confidence_score: float
created_at: datetime
completed_at: Optional[datetime]

# Analysis Entity
class Analysis:
id: UUID
type: AnalysisType
data_source: DataSource
results: Dict[str, Any]
metadata: AnalysisMetadata

# Report Entity
class Report:
id: UUID
title: str
content: str
format: ReportFormat
investigations: List[UUID]
generated_at: datetime

Error Handling

Error Response Format

{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"details": {
"field": "query",
"reason": "Query parameter is required"
},
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-01-30T10:15:30Z"
}
}

HTTP Status Codes

CodeMeaningUsage
200OKSuccessful GET, PUT
201CreatedSuccessful POST
204No ContentSuccessful DELETE
400Bad RequestInvalid parameters
401UnauthorizedMissing/invalid authentication
403ForbiddenInsufficient permissions
404Not FoundResource doesn't exist
429Too Many RequestsRate limit exceeded
500Internal Server ErrorServer-side error

Rate Limiting

Limits by Tier

TierRequests/HourBurstConcurrent
Anonymous100102
Authenticated1,00010010
Premium10,0001,00050
AdminUnlimited--

Rate Limit Headers

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200
X-RateLimit-Retry-After: 3600

Security

Authentication Flow

  1. Initial Authentication: POST /api/v1/auth/login
  2. Token Response: Access token (15min) + Refresh token (7d)
  3. Request Authentication: Authorization: Bearer <access_token>
  4. Token Refresh: POST /api/v1/auth/refresh

Security Headers

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'self'

Pagination

Request Parameters

GET /api/v1/investigations?page=2&limit=20&sort=-created_at

Response Format

{
"data": [...],
"meta": {
"page": 2,
"limit": 20,
"total": 156,
"pages": 8
},
"links": {
"first": "/api/v1/investigations?page=1&limit=20",
"prev": "/api/v1/investigations?page=1&limit=20",
"next": "/api/v1/investigations?page=3&limit=20",
"last": "/api/v1/investigations?page=8&limit=20"
}
}

Filtering & Sorting

Filter Syntax

GET /api/v1/investigations?filter[status]=completed&filter[anomalies_found][gte]=5

Sort Syntax

GET /api/v1/investigations?sort=-anomalies_found,created_at

Webhooks

Webhook Events

  • investigation.completed
  • analysis.finished
  • report.generated
  • anomaly.detected

Webhook Payload

{
"event": "investigation.completed",
"data": {
"investigation_id": "550e8400-e29b-41d4-a716-446655440000",
"anomalies_found": 12,
"severity": "high"
},
"timestamp": "2025-01-30T10:15:30Z",
"signature": "sha256=..."
}

API Versioning

Version Strategy

  • Current Version: v1
  • Deprecation Notice: 6 months
  • End of Life: 12 months
  • Version Header: X-API-Version: 1

Breaking Changes Policy

  1. Announce in release notes
  2. Add deprecation warnings
  3. Maintain backwards compatibility
  4. Provide migration guide

Performance Optimization

Caching Strategy

  1. Browser Cache: Static assets (1 year)
  2. CDN Cache: API responses (5 minutes)
  3. Redis Cache: Database queries (1 hour)
  4. Application Cache: Computed results (15 minutes)

Query Optimization

  • Field Selection: ?fields=id,title,status
  • Eager Loading: ?include=investigations,analyses
  • Sparse Fieldsets: Minimize payload size
  • Compression: gzip/brotli for responses

Monitoring & Observability

Metrics Exposed

  • Request rate (req/s)
  • Response time (p50, p95, p99)
  • Error rate (4xx, 5xx)
  • Active connections
  • Cache hit ratio

Health Endpoints

  • /health - Basic health check
  • /health/detailed - Comprehensive status
  • /health/live - Kubernetes liveness
  • /health/ready - Kubernetes readiness

SDK Support

Official SDKs

  • Python: pip install cidadao-ai-sdk
  • JavaScript/TypeScript: npm install @cidadao-ai/sdk
  • Go: go get github.com/cidadao-ai/go-sdk

Code Example

from cidadao_ai import Client

client = Client(api_key="your-api-key")

# Start investigation
investigation = client.investigations.create(
query="Contratos suspeitos em 2024",
data_source="portal_transparencia",
filters={"year": 2024, "min_value": 1000000}
)

# Check status
status = client.investigations.get_status(investigation.id)

# Get results
if status.completed:
results = client.investigations.get_results(investigation.id)
print(f"Found {results.anomalies_found} anomalies")

Server-Sent Events (SSE) Streaming

Real-Time Chat with Agents

The chat system uses SSE (Server-Sent Events) for real-time streaming responses:

# Endpoint
POST /api/v1/chat/stream

# Request
{
"message": "Analise contratos do Ministério da Saúde em 2024",
"agent_name": "abaporu", # or "auto" for automatic routing
"stream": true
}

# Response (SSE stream)
event: thinking
data: {"status": "processing", "agent": "abaporu"}

event: chunk
data: {"content": "Iniciando investigação com Zumbi..."}

event: chunk
data: {"content": "15 anomalias detectadas..."}

event: complete
data: {"status": "completed", "anomalies": 15, "confidence": 0.89}

SSE Client Example

const eventSource = new EventSource('/api/v1/chat/stream');

eventSource.addEventListener('thinking', (e) => {
const data = JSON.parse(e.data);
console.log('Agent thinking:', data.agent);
});

eventSource.addEventListener('chunk', (e) => {
const data = JSON.parse(e.data);
appendToChat(data.content); // Update UI with partial results
});

eventSource.addEventListener('complete', (e) => {
const data = JSON.parse(e.data);
console.log('Investigation complete:', data);
eventSource.close();
});

Benefits of SSE over WebSocket

  • Simpler: HTTP-based, no special protocol
  • Auto-reconnect: Built-in reconnection handling
  • Efficient: One-way communication (server → client)
  • Compatible: Works with HTTP/2 multiplexing
  • ⚠️ Limitation: One-way only (use WebSocket for bidirectional)

Best Practices

Request Optimization

  1. Use field selection to reduce payload
  2. Implement client-side caching
  3. Batch requests when possible
  4. Use webhooks for long operations

Error Handling

  1. Implement exponential backoff
  2. Handle rate limits gracefully
  3. Log errors with request IDs
  4. Validate inputs client-side

Security

  1. Never expose API keys in code
  2. Use environment variables
  3. Implement request signing
  4. Validate SSL certificates

Migration Guide

From v0 to v1

  1. Update base URL to /api/v1/
  2. Migrate from API keys to JWT
  3. Update error handling for new format
  4. Implement pagination for list endpoints