diff --git a/docs/howtos/Client Generation/12multipart.mdx b/docs/howtos/Client Generation/12multipart.mdx
new file mode 100644
index 0000000000..ff4491ae37
--- /dev/null
+++ b/docs/howtos/Client Generation/12multipart.mdx
@@ -0,0 +1,159 @@
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+# Multipart
+
+This doc details what emitters will generate for multipart request.
+
+## Common multipart request
+
+When content-type of operation is "multipart/form-data", the body payload is multipart payload.
+
+
+
+
+```typespec
+model Address {
+ city: string;
+}
+model MultipartRequest {
+ id: string;
+ address: Address;
+ profileImage: bytes;
+ pictures: bytes[];
+}
+
+@post
+op upload(
+ @header contentType: "multipart/form-data",
+ @body body: MultipartRequest,
+): NoContentResponse;
+```
+
+
+
+
+
+```python
+class MultipartRequest:
+ id: str = rest_field()
+ address: "Address" = rest_field()
+ profile_image: FileType = rest_field(name="profileImage", is_multipart_file_input=True)
+ pictures: List[FileType] = rest_field(is_multipart_file_input=True)
+
+def upload(
+ self, body: Union[_models.MultipartRequest, JSON], **kwargs: Any
+) -> None:
+```
+
+
+
+
+
+```csharp
+
+```
+
+
+
+
+
+```typescript
+
+```
+
+
+
+
+
+```java
+// Model class
+@Immutable
+public final class MultipartRequest {
+ public MultipartRequest(String id, Address address, ProfileImageFileDetails profileImage, List pictures);
+}
+
+// Client API
+public void upload(MultipartRequest body);
+```
+
+
+
+
+## Multipart request with `@multipartBody`
+
+With `@multipartBody`, typespec author could define part of multipart request with more detailed info.
+For example, typespec author could use `File` model predefined in `@typespec/http` to declare the requiredness of filename and
+contentType.
+
+
+
+
+```typespec
+model Address {
+ city: string;
+}
+model MultipartRequest {
+ id: HttpPart;
+ address: HttpPart;
+ profileImage: HttpPart;
+ previousAddresses: HttpPart;
+ pictures: HttpPart[];
+}
+
+@post
+op upload(
+ @header contentType: "multipart/form-data",
+ @multipartBody body: MultipartRequest,
+): NoContentResponse;
+```
+
+
+
+
+
+```python
+class MultipartRequest:
+ id: str = rest_field()
+ address: "Address" = rest_field()
+ profile_image: FileType = rest_field(name="profileImage", is_multipart_file_input=True)
+ pictures: List[FileType] = rest_field(is_multipart_file_input=True)
+
+def upload(
+ self, body: Union[_models.MultipartRequest, JSON], **kwargs: Any
+) -> None:
+```
+
+
+
+
+
+```csharp
+
+```
+
+
+
+
+
+```typescript
+
+```
+
+
+
+
+
+```java
+// Model class
+@Immutable
+public final class MultipartRequest {
+ public MultipartRequest(String id, Address address, FileDetails profileImage, List previousAddresses, List pictures);
+}
+
+// Client API
+public void upload(MultipartRequest body);
+```
+
+
+