How do you implement a multi-tenant API with FastAPI?

Answer

Multi-tenancy in FastAPI at the API level: Subdomain-based: extract tenant from host header in middleware, inject into request state. Header-based: clients send X-Tenant-ID header; extract in dependency. JWT-claim-based: include tenant_id in the JWT; extract when authenticating. Dependency pattern: async def get_tenant(tenant_id: str = Header(...)) -> Tenant: tenant = await Tenant.get(tenant_id); if not tenant: raise HTTPException(404); return tenant. Database strategies: Row-level: filter every query by tenant_id — use SQLAlchemy query filters automatically applied via a custom session or base query. Schema-level (PostgreSQL): switch schema via SET search_path TO tenant_schema at the connection level — use a scoped DB dependency that sets the schema. Ensure every query is tenant-scoped to prevent cross-tenant data leakage — this is the most critical security requirement.