diff --git a/src/openai/__init__.py b/src/openai/__init__.py
index 7ce6df0817..6e90913161 100644
--- a/src/openai/__init__.py
+++ b/src/openai/__init__.py
@@ -182,7 +182,7 @@ def project(self, value: str | None) -> None:  # type: ignore
     @override
     def base_url(self) -> _httpx.URL:
         if base_url is not None:
-            return _httpx.URL(base_url)
+            return self._enforce_trailing_slash(_httpx.URL(base_url))
 
         return super().base_url
 
@@ -245,6 +245,11 @@ def _client(self, value: _httpx.Client) -> None:  # type: ignore
 
         http_client = value
 
+    def _enforce_trailing_slash(self, url: _httpx.URL) -> _httpx.URL:
+        if url.raw_path.endswith(b"/"):
+            return url
+        return url.copy_with(raw_path=url.raw_path + b"/")
+
 
 class _AzureModuleClient(_ModuleClient, AzureOpenAI):  # type: ignore
     ...
diff --git a/tests/test_module_client.py b/tests/test_module_client.py
index 6bab33a1d7..bab3e95f70 100644
--- a/tests/test_module_client.py
+++ b/tests/test_module_client.py
@@ -41,8 +41,8 @@ def test_base_url_option() -> None:
 
     openai.base_url = "http://foo.com"
 
-    assert openai.base_url == URL("http://foo.com")
-    assert openai.completions._client.base_url == URL("http://foo.com")
+    assert openai.base_url == URL("http://foo.com/")
+    assert openai.completions._client.base_url == URL("http://foo.com/")
 
 
 def test_timeout_option() -> None: