Skip to main content

Production Deployment Guide

Health Checks

The Flow API provides health check endpoints for monitoring and orchestration:

Liveness Probe

GET /health/liveness

Returns 200 OK if the service is running. Use this for basic health monitoring.

Readiness Probe

GET /health/readiness

Returns 200 OK if the service is ready to accept traffic. Checks database connectivity.

Comprehensive Health Check

GET /health/health

Returns detailed health status including:

  • Overall status (healthy, degraded, unhealthy)
  • Database connectivity and latency
  • Storage (R2) connectivity
  • Queue connectivity

Response:

{
"status": "healthy",
"timestamp": 1703123456000,
"version": "1.0.0",
"checks": {
"database": {
"status": "ok",
"latency": 5
},
"storage": {
"status": "ok"
},
"queue": {
"status": "ok"
}
}
}

Security

CORS Configuration

  • Production: Only configured origins allowed
  • Development: Localhost origins allowed
  • Configure via APP_URL environment variable

Request Limits

  • Maximum request body size: 1MB
  • Maximum URL length: 2048 characters
  • Maximum query string: 1024 characters

Rate Limits

  • Default: 100 requests/minute per API key
  • Post creation: 30 requests/minute
  • Webhook creation: 10 requests/minute
  • API key creation: 5 requests/minute

Security Headers

All responses include:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • X-XSS-Protection: 1; mode=block
  • Referrer-Policy: strict-origin-when-cross-origin
  • Strict-Transport-Security: max-age=31536000 (production only)

Input Validation

Channel Names

  • Required
  • Maximum 100 characters
  • HTML tags removed

Post Content

  • Required (or media must be provided)
  • Maximum 10,000 characters
  • HTML tags removed

Webhook URLs

  • Must be HTTPS in production
  • Must be valid URL format
  • Localhost/private IPs blocked in production

UUIDs

  • All resource IDs must be valid UUIDs
  • Validated on all endpoints

Error Handling

Circuit Breakers

External API calls (Twitter, LinkedIn) are protected by circuit breakers:

  • Opens after 5 consecutive failures
  • Resets after 1 minute
  • Prevents cascading failures

Timeouts

  • Database operations: 5 seconds
  • Storage operations: 10 seconds
  • External API calls: 30 seconds
  • Webhook delivery: 10 seconds

Graceful Degradation

  • Database failures: Service marked as unhealthy
  • Storage failures: Service marked as degraded (non-critical)
  • Queue failures: Service marked as degraded (non-critical)

Monitoring

Audit Logging

The following operations are audited:

  • API key creation/deletion
  • Webhook creation/deletion
  • All operations include: user ID, API key ID, IP address, timestamp, request ID

Request Logging

All API requests are logged with:

  • Request ID
  • Method and path
  • Status code
  • Response time
  • API key ID (if applicable)
  • User ID (if applicable)

Deployment Checklist

  • Set APP_URL environment variable
  • Configure CORS allowed origins
  • Set up health check monitoring
  • Configure alerting for health check failures
  • Set up audit log collection
  • Configure rate limit monitoring
  • Set up error tracking
  • Configure backup strategy for D1 database
  • Test circuit breakers
  • Verify timeout configurations
  • Review security headers
  • Test input validation
  • Verify webhook URL validation
  • Test graceful degradation

Performance Targets

  • API response time: < 200ms (p95)
  • Database query time: < 50ms (p95)
  • Health check latency: < 100ms
  • Uptime target: 99.9%

SLA

  • Uptime: 99.9% (43 minutes downtime/month)
  • Response Time: 95% of requests < 200ms
  • Error Rate: < 0.1% of requests
  • Webhook Delivery: 95% success rate