diff --git a/openai_dive/src/v1/api.rs b/openai_dive/src/v1/api.rs
index 4053750..5f6ace4 100644
--- a/openai_dive/src/v1/api.rs
+++ b/openai_dive/src/v1/api.rs
@@ -172,9 +172,11 @@ impl Client {
         &self,
         path: &str,
         parameters: &T,
+        query_params: impl Into<Option<&HashMap<String, String>>>,
     ) -> Result<ResponseWrapper<String>, APIError> {
         let result = self
             .build_request(Method::POST, path, "application/json")
+            .query(&query_params.into())
             .json(&parameters)
             .send()
             .await;
@@ -268,6 +270,7 @@ impl Client {
         &self,
         path: &str,
         parameters: &I,
+        query_params: impl Into<Option<&HashMap<String, String>>>,
     ) -> Pin<Box<dyn Stream<Item = Result<O, APIError>> + Send>>
     where
         I: Serialize,
@@ -276,6 +279,7 @@ impl Client {
         let event_source = self
             .build_request(Method::POST, path, "application/json")
             .json(&parameters)
+            .query(&query_params.into())
             .eventsource()
             .unwrap();
 
diff --git a/openai_dive/src/v1/endpoints/administration/invites.rs b/openai_dive/src/v1/endpoints/administration/invites.rs
index 8a45600..59a02e8 100644
--- a/openai_dive/src/v1/endpoints/administration/invites.rs
+++ b/openai_dive/src/v1/endpoints/administration/invites.rs
@@ -55,7 +55,7 @@ impl Invites<'_> {
         let response = self
             .administration
             .client
-            .post("/organization/invites", &parameters)
+            .post("/organization/invites", &parameters, None)
             .await?;
 
         let response: Invite = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/administration/project_rate_limits.rs b/openai_dive/src/v1/endpoints/administration/project_rate_limits.rs
index ed39c10..5ab53d1 100644
--- a/openai_dive/src/v1/endpoints/administration/project_rate_limits.rs
+++ b/openai_dive/src/v1/endpoints/administration/project_rate_limits.rs
@@ -55,6 +55,7 @@ impl ProjectRateLimits<'_> {
             .post(
                 &format!("/organization/projects/{project_id}/rate_limits/{rate_limit_id}"),
                 &parameters,
+                None,
             )
             .await?;
 
diff --git a/openai_dive/src/v1/endpoints/administration/project_service_accounts.rs b/openai_dive/src/v1/endpoints/administration/project_service_accounts.rs
index 45958d8..c8363e9 100644
--- a/openai_dive/src/v1/endpoints/administration/project_service_accounts.rs
+++ b/openai_dive/src/v1/endpoints/administration/project_service_accounts.rs
@@ -72,6 +72,7 @@ impl ProjectServiceAccounts<'_> {
             .post(
                 &format!("/organization/projects/{project_id}/service_accounts"),
                 &parameters,
+                None,
             )
             .await?;
 
diff --git a/openai_dive/src/v1/endpoints/administration/project_users.rs b/openai_dive/src/v1/endpoints/administration/project_users.rs
index ae29ec8..21aa66c 100644
--- a/openai_dive/src/v1/endpoints/administration/project_users.rs
+++ b/openai_dive/src/v1/endpoints/administration/project_users.rs
@@ -69,6 +69,7 @@ impl ProjectUsers<'_> {
             .post(
                 &format!("/organization/projects/{project_id}/users"),
                 &parameters,
+                None,
             )
             .await?;
 
@@ -90,6 +91,7 @@ impl ProjectUsers<'_> {
             .post(
                 &format!("/organization/projects/{project_id}/users/{user_id}"),
                 &parameters,
+                None,
             )
             .await?;
 
diff --git a/openai_dive/src/v1/endpoints/administration/projects.rs b/openai_dive/src/v1/endpoints/administration/projects.rs
index 83f68d3..215b589 100644
--- a/openai_dive/src/v1/endpoints/administration/projects.rs
+++ b/openai_dive/src/v1/endpoints/administration/projects.rs
@@ -55,7 +55,7 @@ impl Projects<'_> {
         let response = self
             .administration
             .client
-            .post("/organization/projects", &parameters)
+            .post("/organization/projects", &parameters, None)
             .await?;
 
         let response: Project = format_response(response.data)?;
@@ -72,7 +72,11 @@ impl Projects<'_> {
         let response = self
             .administration
             .client
-            .post(&format!("/organization/projects/{project_id}"), &parameters)
+            .post(
+                &format!("/organization/projects/{project_id}"),
+                &parameters,
+                None,
+            )
             .await?;
 
         let response: Project = format_response(response.data)?;
@@ -85,7 +89,11 @@ impl Projects<'_> {
         let response = self
             .administration
             .client
-            .post(&format!("/organization/projects/{project_id}/archive"), &())
+            .post(
+                &format!("/organization/projects/{project_id}/archive"),
+                &(),
+                None,
+            )
             .await?;
 
         let response: Project = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/administration/users.rs b/openai_dive/src/v1/endpoints/administration/users.rs
index aeebc93..5346ad7 100644
--- a/openai_dive/src/v1/endpoints/administration/users.rs
+++ b/openai_dive/src/v1/endpoints/administration/users.rs
@@ -59,7 +59,7 @@ impl Users<'_> {
         let response = self
             .administration
             .client
-            .post(&format!("/organization/users/{user_id}"), &parameters)
+            .post(&format!("/organization/users/{user_id}"), &parameters, None)
             .await?;
 
         let response: User = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/batch.rs b/openai_dive/src/v1/endpoints/batch.rs
index 3c15642..0685469 100644
--- a/openai_dive/src/v1/endpoints/batch.rs
+++ b/openai_dive/src/v1/endpoints/batch.rs
@@ -22,7 +22,7 @@ impl Client {
 impl Batches<'_> {
     /// Creates and executes a batch from an uploaded file of requests
     pub async fn create(&self, parameters: CreateBatchParameters) -> Result<Batch, APIError> {
-        let response = self.client.post("/batches", &parameters).await?;
+        let response = self.client.post("/batches", &parameters, None).await?;
 
         let response: Batch = format_response(response.data)?;
 
@@ -42,7 +42,7 @@ impl Batches<'_> {
     pub async fn cancel(&self, id: &str) -> Result<Batch, APIError> {
         let response = self
             .client
-            .post(&format!("/batches/{id}/cancel"), &())
+            .post(&format!("/batches/{id}/cancel"), &(), None)
             .await?;
 
         let response: Batch = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/chat.rs b/openai_dive/src/v1/endpoints/chat.rs
index 91bf416..d397456 100644
--- a/openai_dive/src/v1/endpoints/chat.rs
+++ b/openai_dive/src/v1/endpoints/chat.rs
@@ -40,7 +40,17 @@ impl Chat<'_> {
         &self,
         parameters: ChatCompletionParameters,
     ) -> Result<ResponseWrapper<ChatCompletionResponse>, APIError> {
-        let response = self.client.post("/chat/completions", &parameters).await?;
+        let response = self
+            .client
+            .post(
+                "/chat/completions",
+                &ChatCompletionParameters {
+                    query_params: None,
+                    ..parameters
+                },
+                parameters.query_params.as_ref(),
+            )
+            .await?;
 
         let data: ChatCompletionResponse = format_response(response.data)?;
 
@@ -59,12 +69,19 @@ impl Chat<'_> {
         Pin<Box<dyn Stream<Item = Result<ChatCompletionChunkResponse, APIError>> + Send>>,
         APIError,
     > {
-        let mut stream_parameters = parameters;
+        let mut stream_parameters = ChatCompletionParameters {
+            query_params: None,
+            ..parameters
+        };
         stream_parameters.stream = Some(true);
 
         Ok(self
             .client
-            .post_stream("/chat/completions", &stream_parameters)
+            .post_stream(
+                "/chat/completions",
+                &stream_parameters,
+                stream_parameters.query_params.as_ref(),
+            )
             .await)
     }
 }
diff --git a/openai_dive/src/v1/endpoints/embeddings.rs b/openai_dive/src/v1/endpoints/embeddings.rs
index f428ba9..9a41ae5 100644
--- a/openai_dive/src/v1/endpoints/embeddings.rs
+++ b/openai_dive/src/v1/endpoints/embeddings.rs
@@ -31,7 +31,7 @@ impl Embeddings<'_> {
         &self,
         parameters: EmbeddingParameters,
     ) -> Result<ResponseWrapper<EmbeddingResponse>, APIError> {
-        let response = self.client.post("/embeddings", &parameters).await?;
+        let response = self.client.post("/embeddings", &parameters, None).await?;
 
         let data: EmbeddingResponse = format_response(response.data)?;
 
diff --git a/openai_dive/src/v1/endpoints/fine_tuning.rs b/openai_dive/src/v1/endpoints/fine_tuning.rs
index b9215a2..926e094 100644
--- a/openai_dive/src/v1/endpoints/fine_tuning.rs
+++ b/openai_dive/src/v1/endpoints/fine_tuning.rs
@@ -26,7 +26,10 @@ impl FineTuning<'_> {
         &self,
         parameters: CreateFineTuningJobParameters,
     ) -> Result<FineTuningJob, APIError> {
-        let response = self.client.post("/fine_tuning/jobs", &parameters).await?;
+        let response = self
+            .client
+            .post("/fine_tuning/jobs", &parameters, None)
+            .await?;
 
         let response: FineTuningJob = format_response(response.data)?;
 
@@ -61,7 +64,11 @@ impl FineTuning<'_> {
     pub async fn cancel(&self, id: &str) -> Result<FineTuningJob, APIError> {
         let response = self
             .client
-            .post(&format!("/fine_tuning/jobs/{id}/cancel"), &Value::Null)
+            .post(
+                &format!("/fine_tuning/jobs/{id}/cancel"),
+                &Value::Null,
+                None,
+            )
             .await?;
 
         let response: FineTuningJob = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/images.rs b/openai_dive/src/v1/endpoints/images.rs
index 42663cf..c33d936 100644
--- a/openai_dive/src/v1/endpoints/images.rs
+++ b/openai_dive/src/v1/endpoints/images.rs
@@ -23,7 +23,10 @@ impl Images<'_> {
         &self,
         parameters: CreateImageParameters,
     ) -> Result<ImageResponse, APIError> {
-        let response = self.client.post("/images/generations", &parameters).await?;
+        let response = self
+            .client
+            .post("/images/generations", &parameters, None)
+            .await?;
 
         let response: ImageResponse = format_response(response.data)?;
 
diff --git a/openai_dive/src/v1/endpoints/moderations.rs b/openai_dive/src/v1/endpoints/moderations.rs
index e169e2c..b9cb88c 100644
--- a/openai_dive/src/v1/endpoints/moderations.rs
+++ b/openai_dive/src/v1/endpoints/moderations.rs
@@ -20,7 +20,7 @@ impl Moderations<'_> {
         &self,
         parameters: ModerationParameters,
     ) -> Result<ModerationResponse, APIError> {
-        let response = self.client.post("/moderations", &parameters).await?;
+        let response = self.client.post("/moderations", &parameters, None).await?;
 
         let response: ModerationResponse = format_response(response.data)?;
 
diff --git a/openai_dive/src/v1/endpoints/responses.rs b/openai_dive/src/v1/endpoints/responses.rs
index ad684a3..8341db9 100644
--- a/openai_dive/src/v1/endpoints/responses.rs
+++ b/openai_dive/src/v1/endpoints/responses.rs
@@ -19,7 +19,7 @@ impl Client {
 impl Responses<'_> {
     /// Creates a model response.
     pub async fn create(&self, parameters: ResponseParameters) -> Result<ResponseObject, APIError> {
-        let response = self.client.post("/responses", &parameters).await?;
+        let response = self.client.post("/responses", &parameters, None).await?;
 
         let response: ResponseObject = format_response(response.data)?;
 
diff --git a/openai_dive/src/v1/endpoints/uploads.rs b/openai_dive/src/v1/endpoints/uploads.rs
index b26ac06..d193b56 100644
--- a/openai_dive/src/v1/endpoints/uploads.rs
+++ b/openai_dive/src/v1/endpoints/uploads.rs
@@ -23,7 +23,7 @@ impl Client {
 impl Uploads<'_> {
     /// Creates an intermediate Upload object that you can add Parts to.
     pub async fn create(&self, parameters: CreateUploadParameters) -> Result<Upload, APIError> {
-        let response = self.client.post("/uploads", &parameters).await?;
+        let response = self.client.post("/uploads", &parameters, None).await?;
 
         let response: Upload = format_response(response.data)?;
 
@@ -59,7 +59,7 @@ impl Uploads<'_> {
     ) -> Result<Upload, APIError> {
         let response = self
             .client
-            .post(&format!("/uploads/{id}/complete"), &parameters)
+            .post(&format!("/uploads/{id}/complete"), &parameters, None)
             .await?;
 
         let response: Upload = format_response(response.data)?;
@@ -71,7 +71,7 @@ impl Uploads<'_> {
     pub async fn cancel(&self, id: &str) -> Result<Upload, APIError> {
         let response = self
             .client
-            .post(&format!("/uploads/{id}/cancel"), &Value::Null)
+            .post(&format!("/uploads/{id}/cancel"), &Value::Null, None)
             .await?;
 
         let response: Upload = format_response(response.data)?;
diff --git a/openai_dive/src/v1/endpoints/vector_store_files.rs b/openai_dive/src/v1/endpoints/vector_store_files.rs
index 3398f6d..446c629 100644
--- a/openai_dive/src/v1/endpoints/vector_store_files.rs
+++ b/openai_dive/src/v1/endpoints/vector_store_files.rs
@@ -31,6 +31,7 @@ impl VectorStoreFiles<'_> {
             .post(
                 &format!("/vector_stores/{vector_store_id}/files"),
                 &parameters,
+                None,
             )
             .await?;
 
diff --git a/openai_dive/src/v1/endpoints/vector_stores.rs b/openai_dive/src/v1/endpoints/vector_stores.rs
index 560918f..11d0b85 100644
--- a/openai_dive/src/v1/endpoints/vector_stores.rs
+++ b/openai_dive/src/v1/endpoints/vector_stores.rs
@@ -28,7 +28,10 @@ impl VectorStores<'_> {
         &self,
         parameters: CreateVectorStoreParameters,
     ) -> Result<VectorStore, APIError> {
-        let response = self.client.post("/vector_stores", &parameters).await?;
+        let response = self
+            .client
+            .post("/vector_stores", &parameters, None)
+            .await?;
 
         let response: VectorStore = format_response(response.data)?;
 
@@ -67,7 +70,11 @@ impl VectorStores<'_> {
     ) -> Result<VectorStore, APIError> {
         let response = self
             .client
-            .post(&format!("/vector_stores/{vector_store_id}"), &parameters)
+            .post(
+                &format!("/vector_stores/{vector_store_id}"),
+                &parameters,
+                None,
+            )
             .await?;
 
         let response: VectorStore = format_response(response.data)?;
@@ -98,6 +105,7 @@ impl VectorStores<'_> {
             .post(
                 &format!("/vector_stores/{vector_store_id}/search"),
                 &parameters,
+                None,
             )
             .await?;
 
diff --git a/openai_dive/src/v1/resources/chat.rs b/openai_dive/src/v1/resources/chat.rs
index 0408ffa..545cc20 100644
--- a/openai_dive/src/v1/resources/chat.rs
+++ b/openai_dive/src/v1/resources/chat.rs
@@ -161,6 +161,10 @@ pub struct ChatCompletionParameters {
     #[serde(flatten)]
     #[serde(skip_serializing_if = "Option::is_none")]
     pub extra_body: Option<Value>,
+    /// Azure OpenAI and some other providers may require special query parameters to be set on the request URL.
+    /// This field allows you to specify those query parameters.
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub query_params: Option<HashMap<String, String>>,
 }
 
 #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
