Skip to content

Multi-Tenant Setup

Configure GateFlow for multiple tenants with isolated resources and billing.

Overview

Multi-tenancy allows you to serve multiple customers through a single GateFlow account:

Creating Tenants

Create a Tenant

bash
curl -X POST https://api.gateflow.ai/v1/management/tenants \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "external_id": "acme_123",
    "tier": "enterprise",
    "settings": {
      "default_model": "gpt-5.2",
      "allowed_models": ["gpt-5.2", "claude-sonnet-4-5-20250929"],
      "rate_limits": {
        "rpm": 1000,
        "tpm": 100000
      },
      "monthly_budget_usd": 1000
    }
  }'

Response:

json
{
  "id": "tenant_abc123",
  "name": "Acme Corp",
  "external_id": "acme_123",
  "api_key": "gw_tenant_abc123_...",
  "created_at": "2026-02-16T10:00:00Z"
}

Tenant API Keys

Each tenant gets isolated API keys:

bash
curl -X POST https://api.gateflow.ai/v1/management/tenants/tenant_abc123/api-keys \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production",
    "rate_limits": {
      "rpm": 500,
      "tpm": 50000
    }
  }'

Tenant Identification

Via API Key

Each tenant has unique API keys:

python
import openai

# Tenant A
client_a = openai.OpenAI(
    base_url="https://api.gateflow.ai/v1",
    api_key="gw_tenant_abc123_..."  # Tenant A's key
)

# Tenant B
client_b = openai.OpenAI(
    base_url="https://api.gateflow.ai/v1",
    api_key="gw_tenant_xyz789_..."  # Tenant B's key
)

Via Header

Use a single API key with tenant headers:

python
response = client.chat.completions.create(
    model="gpt-5.2",
    messages=[{"role": "user", "content": "Hello"}],
    extra_headers={
        "X-GateFlow-Tenant-ID": "tenant_abc123"
    }
)

Via Request Body

python
response = client.chat.completions.create(
    model="gpt-5.2",
    messages=[{"role": "user", "content": "Hello"}],
    extra_body={
        "gateflow": {
            "tenant_id": "tenant_abc123"
        }
    }
)

Tenant Isolation

Resource Isolation

Each tenant has isolated:

  • API keys and authentication
  • Rate limits and quotas
  • Usage tracking and billing
  • Audit logs and compliance data
  • Cache (optional)

Data Isolation Configuration

bash
curl -X PATCH https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "isolation": {
      "cache": "isolated",      # or "shared"
      "logs": "isolated",
      "vectors": "isolated"     # For RAG features
    }
  }'

Tenant Tiers

Configure Tiers

bash
curl -X POST https://api.gateflow.ai/v1/management/tenant-tiers \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "enterprise",
    "features": {
      "allowed_models": ["gpt-5.2", "gpt-5", "claude-opus-4-5-20251107", "claude-sonnet-4-5-20250929"],
      "max_rpm": 5000,
      "max_tpm": 500000,
      "caching": true,
      "priority_queue": true,
      "dedicated_support": true
    }
  }'

Tier Comparison

FeatureFreeProEnterprise
ModelsGPT-5-miniAll GPT, ClaudeAll models
RPM1001,00010,000
CachingNoYesYes
Priority QueueNoNormalHigh
SupportCommunityEmailDedicated

Per-Tenant Configuration

Model Restrictions

bash
curl -X PATCH https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "settings": {
      "allowed_models": ["gpt-5.2", "gpt-5-mini"],
      "blocked_models": ["claude-opus-4-5-20251107"],
      "default_model": "gpt-5-mini"
    }
  }'

Provider Restrictions

bash
curl -X PATCH https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "settings": {
      "allowed_providers": ["openai", "anthropic"],
      "blocked_providers": ["google"]
    }
  }'

Custom Rate Limits

bash
curl -X PATCH https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "rate_limits": {
      "rpm": 2000,
      "tpm": 200000,
      "daily_requests": 50000,
      "concurrent_requests": 50
    }
  }'

Tenant Billing

Usage Tracking

bash
curl https://api.gateflow.ai/v1/management/tenants/tenant_abc123/usage \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -G -d "period=month"

Response:

json
{
  "tenant_id": "tenant_abc123",
  "period": "2026-02",
  "usage": {
    "total_requests": 125000,
    "total_tokens": 45000000,
    "total_cost_usd": 450.00,
    "by_model": {
      "gpt-5.2": {"requests": 100000, "tokens": 40000000, "cost_usd": 400},
      "gpt-5-mini": {"requests": 25000, "tokens": 5000000, "cost_usd": 50}
    }
  },
  "limits": {
    "monthly_budget_usd": 1000,
    "remaining_usd": 550
  }
}

Budget Alerts

bash
curl -X POST https://api.gateflow.ai/v1/management/tenants/tenant_abc123/alerts \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "budget",
    "thresholds": [0.5, 0.8, 0.95],
    "webhook_url": "https://your-saas.com/tenant-budget-alert",
    "email": "billing@acme.com"
  }'

Tenant Management API

List Tenants

bash
curl https://api.gateflow.ai/v1/management/tenants \
  -H "Authorization: Bearer gw_prod_admin_key"

Get Tenant Details

bash
curl https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key"

Suspend Tenant

bash
curl -X POST https://api.gateflow.ai/v1/management/tenants/tenant_abc123/suspend \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "payment_overdue"
  }'

Delete Tenant

bash
curl -X DELETE https://api.gateflow.ai/v1/management/tenants/tenant_abc123 \
  -H "Authorization: Bearer gw_prod_admin_key"

Tenant Analytics

Aggregate Dashboard

bash
curl https://api.gateflow.ai/v1/management/analytics/tenants \
  -H "Authorization: Bearer gw_prod_admin_key" \
  -G -d "period=month"

Response:

json
{
  "period": "2026-02",
  "total_tenants": 150,
  "active_tenants": 120,
  "total_revenue_usd": 45000,
  "top_tenants": [
    {"id": "tenant_abc123", "name": "Acme Corp", "usage_usd": 2500},
    {"id": "tenant_xyz789", "name": "Tech Inc", "usage_usd": 1800}
  ],
  "by_tier": {
    "free": {"count": 80, "usage_usd": 0},
    "pro": {"count": 50, "usage_usd": 15000},
    "enterprise": {"count": 20, "usage_usd": 30000}
  }
}

Best Practices

  1. Use external IDs - Map to your own customer IDs for easy integration
  2. Set budget alerts - Proactively notify tenants before limits
  3. Start with restrictive limits - Increase based on tenant needs
  4. Use tenant tiers - Simplify management with predefined configurations
  5. Monitor per-tenant - Track usage patterns for each tenant

Next Steps

Built with reliability in mind.