diff --git a/frontend/src/api/services/subscription.ts b/frontend/src/api/services/subscription.ts index b3b7958e..fd4992c9 100644 --- a/frontend/src/api/services/subscription.ts +++ b/frontend/src/api/services/subscription.ts @@ -37,7 +37,7 @@ const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes export class SubscriptionService { private readonly baseUrl = '/tenants'; - private readonly plansUrl = '/plans/'; + private readonly plansUrl = '/plans'; // ============================================================================ // NEW METHODS - Centralized Plans API diff --git a/services/tenant/app/api/plans.py b/services/tenant/app/api/plans.py index 5ccbc890..eabb5ebf 100644 --- a/services/tenant/app/api/plans.py +++ b/services/tenant/app/api/plans.py @@ -21,7 +21,7 @@ logger = structlog.get_logger() router = APIRouter(prefix="/plans", tags=["subscription-plans"]) -@router.get("/", response_model=Dict[str, Any]) +@router.get("", response_model=Dict[str, Any]) async def get_available_plans(): """ Get all available subscription plans with complete metadata diff --git a/shared/service_base.py b/shared/service_base.py index 1f9f12e2..a3215856 100755 --- a/shared/service_base.py +++ b/shared/service_base.py @@ -116,7 +116,8 @@ class BaseFastAPIService: config = {**default_config, **fastapi_kwargs} # Create FastAPI app - self.app = FastAPI(**config) + # Disable redirect_slashes to avoid 307 redirects that break behind HTTPS proxies + self.app = FastAPI(**config, redirect_slashes=False) # Setup unified OpenTelemetry telemetry # This single call configures: