Appearance
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
| Feature | Free | Pro | Enterprise |
|---|---|---|---|
| Models | GPT-5-mini | All GPT, Claude | All models |
| RPM | 100 | 1,000 | 10,000 |
| Caching | No | Yes | Yes |
| Priority Queue | No | Normal | High |
| Support | Community | Dedicated |
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
- Use external IDs - Map to your own customer IDs for easy integration
- Set budget alerts - Proactively notify tenants before limits
- Start with restrictive limits - Increase based on tenant needs
- Use tenant tiers - Simplify management with predefined configurations
- Monitor per-tenant - Track usage patterns for each tenant
Next Steps
- Rate Limits - Configure rate limiting
- Organizations & RBAC - Access control
- Cost Analytics - Usage tracking