diff --git a/docs/hi/docs/about/index.md b/docs/hi/docs/about/index.md
new file mode 100644
index 000000000..c155450a3
--- /dev/null
+++ b/docs/hi/docs/about/index.md
@@ -0,0 +1,3 @@
+# परिचय { #about }
+
+FastAPI, इसके design, प्रेरणा और और भी बहुत कुछ के बारे में। 🤓
diff --git a/docs/hi/docs/advanced/additional-responses.md b/docs/hi/docs/advanced/additional-responses.md
new file mode 100644
index 000000000..410157c7a
--- /dev/null
+++ b/docs/hi/docs/advanced/additional-responses.md
@@ -0,0 +1,247 @@
+# OpenAPI में अतिरिक्त Responses { #additional-responses-in-openapi }
+
+/// warning | चेतावनी
+
+यह एक काफ़ी advanced विषय है।
+
+अगर आप **FastAPI** के साथ शुरुआत कर रहे हैं, तो शायद आपको इसकी ज़रूरत न पड़े।
+
+///
+
+आप अतिरिक्त status codes, media types, descriptions आदि के साथ अतिरिक्त responses घोषित कर सकते हैं।
+
+ये अतिरिक्त responses OpenAPI schema में शामिल किए जाएँगे, इसलिए वे API docs में भी दिखाई देंगे।
+
+लेकिन उन अतिरिक्त responses के लिए आपको यह सुनिश्चित करना होगा कि आप अपने status code और content के साथ सीधे `JSONResponse` जैसा कोई `Response` return करें।
+
+## `model` के साथ अतिरिक्त Response { #additional-response-with-model }
+
+आप अपने *path operation decorators* को `responses` parameter दे सकते हैं।
+
+यह एक `dict` प्राप्त करता है: keys प्रत्येक response के status codes होते हैं (जैसे `200`), और values अन्य `dict`s होते हैं जिनमें उनमें से प्रत्येक की जानकारी होती है।
+
+इनमें से प्रत्येक response `dict` में `model` key हो सकती है, जिसमें `response_model` की तरह एक Pydantic model होता है।
+
+**FastAPI** उस model को लेगा, उसका JSON Schema generate करेगा और उसे OpenAPI में सही जगह शामिल करेगा।
+
+उदाहरण के लिए, status code `404` और Pydantic model `Message` के साथ एक और response घोषित करने के लिए, आप लिख सकते हैं:
+
+{* ../../docs_src/additional_responses/tutorial001_py310.py hl[18,22] *}
+
+/// note | नोट
+
+ध्यान रखें कि आपको सीधे `JSONResponse` return करना होगा।
+
+///
+
+/// note | नोट
+
+`model` key OpenAPI का हिस्सा नहीं है।
+
+**FastAPI** वहाँ से Pydantic model लेगा, JSON Schema generate करेगा, और उसे सही जगह रखेगा।
+
+सही जगह है:
+
+* `content` key में, जिसकी value एक और JSON object (`dict`) होती है जिसमें शामिल है:
+ * media type वाली एक key, जैसे `application/json`, जिसकी value एक और JSON object होती है, जिसमें शामिल है:
+ * एक key `schema`, जिसकी value model से JSON Schema होती है, यही सही जगह है।
+ * **FastAPI** इसे सीधे शामिल करने के बजाय आपके OpenAPI में किसी अन्य जगह मौजूद global JSON Schemas का reference यहाँ जोड़ता है। इस तरह, अन्य applications और clients उन JSON Schemas को सीधे उपयोग कर सकते हैं, बेहतर code generation tools प्रदान कर सकते हैं, आदि।
+
+///
+
+इस *path operation* के लिए OpenAPI में generate किए गए responses होंगे:
+
+```JSON hl_lines="3-12"
+{
+ "responses": {
+ "404": {
+ "description": "Additional Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Message"
+ }
+ }
+ }
+ },
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Item"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+Schemas को OpenAPI schema के अंदर किसी दूसरी जगह reference किया गया है:
+
+```JSON hl_lines="4-16"
+{
+ "components": {
+ "schemas": {
+ "Message": {
+ "title": "Message",
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "title": "Message",
+ "type": "string"
+ }
+ }
+ },
+ "Item": {
+ "title": "Item",
+ "required": [
+ "id",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "title": "Id",
+ "type": "string"
+ },
+ "value": {
+ "title": "Value",
+ "type": "string"
+ }
+ }
+ },
+ "ValidationError": {
+ "title": "ValidationError",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "loc": {
+ "title": "Location",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "msg": {
+ "title": "Message",
+ "type": "string"
+ },
+ "type": {
+ "title": "Error Type",
+ "type": "string"
+ }
+ }
+ },
+ "HTTPValidationError": {
+ "title": "HTTPValidationError",
+ "type": "object",
+ "properties": {
+ "detail": {
+ "title": "Detail",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+## मुख्य response के लिए अतिरिक्त media types { #additional-media-types-for-the-main-response }
+
+आप इसी `responses` parameter का उपयोग करके उसी मुख्य response के लिए अलग-अलग media types जोड़ सकते हैं।
+
+उदाहरण के लिए, आप `image/png` का एक अतिरिक्त media type जोड़ सकते हैं, यह घोषित करते हुए कि आपका *path operation* एक JSON object (media type `application/json` के साथ) या एक PNG image return कर सकता है:
+
+{* ../../docs_src/additional_responses/tutorial002_py310.py hl[17:22,26] *}
+
+/// note | नोट
+
+ध्यान दें कि आपको image को सीधे `FileResponse` का उपयोग करके return करना होगा।
+
+///
+
+/// note | नोट
+
+जब तक आप अपने `responses` parameter में स्पष्ट रूप से कोई अलग media type specify नहीं करते, FastAPI मान लेगा कि response का media type मुख्य response class (default `application/json`) जैसा ही है।
+
+लेकिन अगर आपने custom response class specify की है जिसका media type `None` है, तो FastAPI किसी भी ऐसे अतिरिक्त response के लिए `application/json` का उपयोग करेगा जिसके साथ कोई associated model है।
+
+///
+
+## जानकारी को मिलाना { #combining-information }
+
+आप कई जगहों से response जानकारी को भी मिला सकते हैं, जिसमें `response_model`, `status_code`, और `responses` parameters शामिल हैं।
+
+आप default status code `200` (या ज़रूरत पड़ने पर custom code) का उपयोग करके `response_model` घोषित कर सकते हैं, और फिर उसी response के लिए अतिरिक्त जानकारी सीधे OpenAPI schema में `responses` के अंदर घोषित कर सकते हैं।
+
+**FastAPI** `responses` से अतिरिक्त जानकारी बनाए रखेगा, और उसे आपके model से JSON Schema के साथ मिला देगा।
+
+उदाहरण के लिए, आप status code `404` वाला एक response घोषित कर सकते हैं जो Pydantic model का उपयोग करता है और जिसमें custom `description` है।
+
+और status code `200` वाला एक response, जो आपके `response_model` का उपयोग करता है, लेकिन जिसमें custom `example` शामिल है:
+
+{* ../../docs_src/additional_responses/tutorial003_py310.py hl[20:31] *}
+
+यह सब मिलाकर आपके OpenAPI में शामिल किया जाएगा, और API docs में दिखाया जाएगा:
+
+
+
+## पहले से परिभाषित responses और custom responses को मिलाएँ { #combine-predefined-responses-and-custom-ones }
+
+आप कुछ पहले से परिभाषित responses रखना चाह सकते हैं जो कई *path operations* पर लागू होते हैं, लेकिन आप उन्हें प्रत्येक *path operation* के लिए ज़रूरी custom responses के साथ मिलाना चाहते हैं।
+
+ऐसे मामलों के लिए, आप `**dict_to_unpack` के साथ `dict` को "unpacking" करने की Python technique का उपयोग कर सकते हैं:
+
+```Python
+old_dict = {
+ "old key": "old value",
+ "second old key": "second old value",
+}
+new_dict = {**old_dict, "new key": "new value"}
+```
+
+यहाँ, `new_dict` में `old_dict` के सभी key-value pairs के साथ नया key-value pair भी होगा:
+
+```Python
+{
+ "old key": "old value",
+ "second old key": "second old value",
+ "new key": "new value",
+}
+```
+
+आप इस technique का उपयोग अपने *path operations* में कुछ पहले से परिभाषित responses को reuse करने और उन्हें अतिरिक्त custom responses के साथ मिलाने के लिए कर सकते हैं।
+
+उदाहरण के लिए:
+
+{* ../../docs_src/additional_responses/tutorial004_py310.py hl[11:15,24] *}
+
+## OpenAPI responses के बारे में अधिक जानकारी { #more-information-about-openapi-responses }
+
+Responses में आप ठीक-ठीक क्या शामिल कर सकते हैं, यह देखने के लिए आप OpenAPI specification में ये sections देख सकते हैं:
+
+* [OpenAPI Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object), इसमें `Response Object` शामिल है।
+* [OpenAPI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object), आप इसमें से कुछ भी सीधे अपने `responses` parameter के अंदर प्रत्येक response में शामिल कर सकते हैं। जिसमें `description`, `headers`, `content` (इसी के अंदर आप अलग-अलग media types और JSON Schemas घोषित करते हैं), और `links` शामिल हैं।
diff --git a/docs/hi/docs/advanced/additional-status-codes.md b/docs/hi/docs/advanced/additional-status-codes.md
new file mode 100644
index 000000000..bec6e4eae
--- /dev/null
+++ b/docs/hi/docs/advanced/additional-status-codes.md
@@ -0,0 +1,41 @@
+# अतिरिक्त Status Codes { #additional-status-codes }
+
+default रूप से, **FastAPI** responses को `JSONResponse` का उपयोग करके return करेगा, जिसमें आपके *path operation* से return किया गया content उस `JSONResponse` के अंदर रखा जाएगा।
+
+यह default status code या वह status code उपयोग करेगा जो आपने अपने *path operation* में set किया है।
+
+## अतिरिक्त status codes { #additional-status-codes_1 }
+
+अगर आप मुख्य status code के अलावा अतिरिक्त status codes return करना चाहते हैं, तो आप सीधे `Response`, जैसे `JSONResponse`, return करके और अतिरिक्त status code को सीधे set करके ऐसा कर सकते हैं।
+
+उदाहरण के लिए, मान लीजिए कि आप एक ऐसा *path operation* रखना चाहते हैं जो items को update करने की अनुमति देता है, और सफल होने पर HTTP status code 200 "OK" return करता है।
+
+लेकिन आप यह भी चाहते हैं कि यह नए items को स्वीकार करे। और जब items पहले मौजूद नहीं थे, तो यह उन्हें बनाता है, और HTTP status code 201 "Created" return करता है।
+
+ऐसा करने के लिए, `JSONResponse` import करें, और अपना content वहीं सीधे return करें, साथ में अपनी पसंद का `status_code` set करें:
+
+{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
+
+/// warning | चेतावनी
+
+जब आप सीधे `Response` return करते हैं, जैसे ऊपर के उदाहरण में, तो वह सीधे return किया जाएगा।
+
+इसे किसी model आदि के साथ serialize नहीं किया जाएगा।
+
+सुनिश्चित करें कि इसमें वही data है जो आप चाहते हैं, और values valid JSON हैं (अगर आप `JSONResponse` उपयोग कर रहे हैं)।
+
+///
+
+/// note | तकनीकी विवरण
+
+आप `from starlette.responses import JSONResponse` भी उपयोग कर सकते हैं।
+
+**FastAPI** आपकी सुविधा के लिए, developer के रूप में, वही `starlette.responses` `fastapi.responses` के रूप में प्रदान करता है। लेकिन उपलब्ध अधिकांश responses सीधे Starlette से आते हैं। `status` के साथ भी यही है।
+
+///
+
+## OpenAPI और API docs { #openapi-and-api-docs }
+
+अगर आप अतिरिक्त status codes और responses सीधे return करते हैं, तो वे OpenAPI schema (API docs) में शामिल नहीं होंगे, क्योंकि FastAPI के पास पहले से यह जानने का तरीका नहीं है कि आप क्या return करने वाले हैं।
+
+लेकिन आप इसे अपने code में document कर सकते हैं, उपयोग करके: [अतिरिक्त Responses](additional-responses.md)।
diff --git a/docs/hi/docs/advanced/advanced-dependencies.md b/docs/hi/docs/advanced/advanced-dependencies.md
new file mode 100644
index 000000000..4c6648b95
--- /dev/null
+++ b/docs/hi/docs/advanced/advanced-dependencies.md
@@ -0,0 +1,163 @@
+# Advanced Dependencies { #advanced-dependencies }
+
+## Parameterized dependencies { #parameterized-dependencies }
+
+अब तक हमने जो भी dependencies देखी हैं, वे एक निश्चित function या class हैं।
+
+लेकिन ऐसे मामले हो सकते हैं जहाँ आप dependency पर parameters सेट कर पाना चाहें, बिना कई अलग-अलग functions या classes declare किए।
+
+कल्पना करें कि हम एक ऐसी dependency रखना चाहते हैं जो जाँचती है कि query parameter `q` में कुछ निश्चित content है या नहीं।
+
+लेकिन हम उस निश्चित content को parameterize कर पाना चाहते हैं।
+
+## एक "callable" instance { #a-callable-instance }
+
+Python में किसी class के instance को "callable" बनाने का एक तरीका है।
+
+खुद class को नहीं (जो पहले से ही callable होती है), बल्कि उस class के एक instance को।
+
+ऐसा करने के लिए, हम एक method `__call__` declare करते हैं:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[12] *}
+
+इस मामले में, यही `__call__` है जिसे **FastAPI** अतिरिक्त parameters और sub-dependencies की जाँच के लिए उपयोग करेगा, और बाद में आपकी *path operation function* में parameter को value पास करने के लिए यही call किया जाएगा।
+
+## Instance को parameterize करें { #parameterize-the-instance }
+
+और अब, हम `__init__` का उपयोग करके instance के parameters declare कर सकते हैं जिन्हें हम dependency को "parameterize" करने के लिए उपयोग कर सकते हैं:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[9] *}
+
+इस मामले में, **FastAPI** कभी भी `__init__` को छुएगा या उसकी परवाह नहीं करेगा, हम इसे सीधे अपने code में उपयोग करेंगे।
+
+## एक instance बनाएँ { #create-an-instance }
+
+हम इस class का एक instance इस तरह बना सकते हैं:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[18] *}
+
+और इस तरह हम अपनी dependency को "parameterize" कर पाते हैं, जिसमें अब `"bar"` उसके अंदर है, attribute `checker.fixed_content` के रूप में।
+
+## Instance को dependency के रूप में उपयोग करें { #use-the-instance-as-a-dependency }
+
+फिर, हम `Depends(FixedContentQueryChecker)` के बजाय इस `checker` को `Depends(checker)` में उपयोग कर सकते हैं, क्योंकि dependency class खुद नहीं, बल्कि instance `checker` है।
+
+और dependency को solve करते समय, **FastAPI** इस `checker` को इस तरह call करेगा:
+
+```Python
+checker(q="somequery")
+```
+
+...और जो भी यह return करेगा उसे हमारी *path operation function* में dependency की value के रूप में parameter `fixed_content_included` में पास करेगा:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[22] *}
+
+/// tip | सुझाव
+
+यह सब थोड़ा बनावटी लग सकता है। और अभी यह बहुत स्पष्ट नहीं हो सकता कि यह कैसे उपयोगी है।
+
+ये उदाहरण जानबूझकर सरल रखे गए हैं, लेकिन दिखाते हैं कि यह सब कैसे काम करता है।
+
+Security वाले chapters में utility functions हैं जिन्हें इसी तरीके से implement किया गया है।
+
+अगर आपने यह सब समझ लिया है, तो आप पहले से जानते हैं कि security के लिए वे utility tools अंदर से कैसे काम करते हैं।
+
+///
+
+## `yield`, `HTTPException`, `except` और Background Tasks वाली Dependencies { #dependencies-with-yield-httpexception-except-and-background-tasks }
+
+/// warning | चेतावनी
+
+सबसे अधिक संभावना है कि आपको इन तकनीकी विवरणों की आवश्यकता नहीं है।
+
+ये विवरण मुख्य रूप से तब उपयोगी हैं जब आपके पास 0.121.0 से पुरानी FastAPI application थी और आपको `yield` वाली dependencies के साथ समस्याएँ आ रही हैं।
+
+///
+
+`yield` वाली dependencies समय के साथ अलग-अलग use cases को संभालने और कुछ समस्याएँ ठीक करने के लिए विकसित हुई हैं, यहाँ बदले हुए व्यवहार का सारांश है।
+
+### `yield` और `scope` वाली Dependencies { #dependencies-with-yield-and-scope }
+
+Version 0.121.0 में, FastAPI ने `yield` वाली dependencies के लिए `Depends(scope="function")` का support जोड़ा।
+
+`Depends(scope="function")` का उपयोग करने पर, `yield` के बाद का exit code *path operation function* के समाप्त होते ही, response client को वापस भेजे जाने से पहले execute होता है।
+
+और `Depends(scope="request")` (default) का उपयोग करने पर, `yield` के बाद का exit code response भेजे जाने के बाद execute होता है।
+
+आप इसके बारे में docs में [Dependencies with `yield` - Early exit and `scope`](../tutorial/dependencies/dependencies-with-yield.md#early-exit-and-scope) में अधिक पढ़ सकते हैं।
+
+### `yield` और `StreamingResponse` वाली Dependencies, तकनीकी विवरण { #dependencies-with-yield-and-streamingresponse-technical-details }
+
+FastAPI 0.118.0 से पहले, यदि आप `yield` वाली dependency उपयोग करते थे, तो यह *path operation function* के return करने के बाद लेकिन response भेजने से ठीक पहले exit code run करती थी।
+
+इरादा यह था कि आवश्यक से अधिक समय तक resources को पकड़े रखने से बचा जाए, response के network से गुजरने की प्रतीक्षा करते हुए।
+
+इस बदलाव का अर्थ यह भी था कि यदि आपने `StreamingResponse` return किया, तो `yield` वाली dependency का exit code पहले ही run हो चुका होता।
+
+उदाहरण के लिए, यदि आपके पास `yield` वाली dependency में database session था, तो `StreamingResponse` data stream करते समय उस session का उपयोग नहीं कर पाता क्योंकि `yield` के बाद वाले exit code में session पहले ही बंद हो चुका होता।
+
+यह व्यवहार 0.118.0 में revert कर दिया गया, ताकि `yield` के बाद का exit code response भेजे जाने के बाद execute हो।
+
+/// note | ध्यान दें
+
+जैसा कि आप नीचे देखेंगे, यह version 0.106.0 से पहले के व्यवहार से बहुत मिलता-जुलता है, लेकिन कई सुधारों और corner cases के लिए bug fixes के साथ।
+
+///
+
+#### Early Exit Code वाले Use Cases { #use-cases-with-early-exit-code }
+
+कुछ specific conditions वाले use cases हैं जिन्हें response भेजने से पहले `yield` वाली dependencies का exit code run करने के पुराने व्यवहार से लाभ हो सकता है।
+
+उदाहरण के लिए, कल्पना करें कि आपके पास ऐसा code है जो `yield` वाली dependency में database session का उपयोग केवल user verify करने के लिए करता है, लेकिन database session फिर *path operation function* में कभी उपयोग नहीं होता, केवल dependency में उपयोग होता है, **और** response भेजे जाने में लंबा समय लेता है, जैसे `StreamingResponse` जो data धीरे-धीरे भेजता है, लेकिन किसी कारण से database का उपयोग नहीं करता।
+
+इस मामले में, database session तब तक पकड़ा रहेगा जब तक response भेजना समाप्त नहीं हो जाता, लेकिन यदि आप इसका उपयोग नहीं करते हैं, तो इसे पकड़े रखना आवश्यक नहीं होगा।
+
+यह इस तरह दिख सकता है:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py *}
+
+Exit code, यानी `Session` का automatic closing, यहाँ:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[19:21] *}
+
+...response द्वारा slow data भेजना समाप्त करने के बाद run होगा:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[30:38] hl[31:33] *}
+
+लेकिन क्योंकि `generate_stream()` database session का उपयोग नहीं करता, response भेजते समय session को खुला रखना वास्तव में आवश्यक नहीं है।
+
+यदि आपके पास SQLModel (या SQLAlchemy) का उपयोग करते हुए यह specific use case है, तो आप session को तब explicit रूप से बंद कर सकते हैं जब आपको इसकी आगे आवश्यकता न हो:
+
+{* ../../docs_src/dependencies/tutorial014_an_py310.py ln[24:28] hl[28] *}
+
+इस तरह session database connection release कर देगा, ताकि अन्य requests उसका उपयोग कर सकें।
+
+यदि आपके पास कोई अलग use case है जिसे `yield` वाली dependency से early exit करने की आवश्यकता है, तो कृपया अपने specific use case और dependencies with `yield` के लिए early closing से आपको क्यों लाभ होगा, इसके साथ एक [GitHub Discussion Question](https://github.com/fastapi/fastapi/discussions/new?category=questions) बनाएँ।
+
+यदि dependencies with `yield` में early closing के लिए compelling use cases होते हैं, तो मैं early closing में opt in करने का नया तरीका जोड़ने पर विचार करूँगा।
+
+### `yield` और `except` वाली Dependencies, तकनीकी विवरण { #dependencies-with-yield-and-except-technical-details }
+
+FastAPI 0.110.0 से पहले, यदि आप `yield` वाली dependency उपयोग करते थे, और फिर उस dependency में `except` के साथ exception capture करते थे, और exception को फिर से raise नहीं करते थे, तो exception automatic रूप से किसी भी exception handlers या internal server error handler को raise/forward कर दिया जाता था।
+
+यह version 0.110.0 में बदला गया ताकि handler के बिना forwarded exceptions (internal server errors) से होने वाली unhandled memory consumption ठीक की जा सके, और इसे regular Python code के व्यवहार के साथ consistent बनाया जा सके।
+
+### Background Tasks और `yield` वाली Dependencies, तकनीकी विवरण { #background-tasks-and-dependencies-with-yield-technical-details }
+
+FastAPI 0.106.0 से पहले, `yield` के बाद exceptions raise करना संभव नहीं था, `yield` वाली dependencies में exit code response भेजे जाने के *बाद* execute होता था, इसलिए [Exception Handlers](../tutorial/handling-errors.md#install-custom-exception-handlers) पहले ही run हो चुके होते।
+
+इसे मुख्य रूप से इस तरह design किया गया था ताकि dependencies द्वारा "yielded" किए गए उन्हीं objects को background tasks के अंदर उपयोग किया जा सके, क्योंकि exit code background tasks के समाप्त होने के बाद execute होता था।
+
+यह FastAPI 0.106.0 में बदला गया, इस इरादे से कि response के network से गुजरने की प्रतीक्षा करते समय resources को पकड़े न रखा जाए।
+
+/// tip | सुझाव
+
+इसके अतिरिक्त, background task सामान्यतः logic का एक independent set होता है जिसे अलग से संभाला जाना चाहिए, अपने स्वयं के resources के साथ (जैसे उसका अपना database connection)।
+
+इसलिए, इस तरह आपके पास शायद अधिक साफ़ code होगा।
+
+///
+
+यदि आप इस व्यवहार पर निर्भर थे, तो अब आपको background tasks के लिए resources background task के अंदर ही बनाने चाहिए, और internally केवल ऐसा data उपयोग करना चाहिए जो `yield` वाली dependencies के resources पर निर्भर न हो।
+
+उदाहरण के लिए, उसी database session का उपयोग करने के बजाय, आप background task के अंदर एक नया database session बनाएँगे, और इस नए session का उपयोग करके database से objects प्राप्त करेंगे। और फिर database से object को background task function में parameter के रूप में पास करने के बजाय, आप उस object की ID पास करेंगे और फिर background task function के अंदर object को फिर से प्राप्त करेंगे।
diff --git a/docs/hi/docs/advanced/advanced-python-types.md b/docs/hi/docs/advanced/advanced-python-types.md
new file mode 100644
index 000000000..d73a95fd8
--- /dev/null
+++ b/docs/hi/docs/advanced/advanced-python-types.md
@@ -0,0 +1,61 @@
+# उन्नत Python Types { #advanced-python-types }
+
+Python types के साथ काम करते समय यहाँ कुछ अतिरिक्त विचार हैं जो उपयोगी हो सकते हैं।
+
+## `Union` या `Optional` का उपयोग { #using-union-or-optional }
+
+अगर आपका code किसी कारण से `|` का उपयोग नहीं कर सकता, उदाहरण के लिए अगर यह type annotation में नहीं बल्कि `response_model=` जैसी किसी चीज़ में है, तो vertical bar (`|`) का उपयोग करने के बजाय आप `typing` से `Union` का उपयोग कर सकते हैं।
+
+उदाहरण के लिए, आप declare कर सकते हैं कि कोई चीज़ `str` या `None` हो सकती है:
+
+```python
+from typing import Union
+
+
+def say_hi(name: Union[str, None]):
+ print(f"Hi {name}!")
+```
+
+`typing` में `Optional` के साथ यह declare करने का एक shortcut भी है कि कोई चीज़ `None` हो सकती है।
+
+मेरे बहुत **subjective** दृष्टिकोण से एक tip यहाँ है:
+
+* 🚨 `Optional[SomeType]` का उपयोग करने से बचें
+* इसके बजाय ✨ **`Union[SomeType, None]` का उपयोग करें** ✨।
+
+दोनों equivalent हैं और अंदर से वे समान हैं, लेकिन मैं `Optional` के बजाय `Union` की सलाह दूँगा क्योंकि "**optional**" शब्द से ऐसा लग सकता है कि value optional है, जबकि इसका वास्तविक अर्थ है "यह `None` हो सकता है", भले ही यह optional न हो और अभी भी required हो।
+
+मुझे लगता है कि `Union[SomeType, None]` अपने अर्थ के बारे में अधिक explicit है।
+
+यह बस शब्दों और नामों की बात है। लेकिन ये शब्द इस बात को प्रभावित कर सकते हैं कि आप और आपके teammates code के बारे में कैसे सोचते हैं।
+
+एक उदाहरण के रूप में, इस function को लेते हैं:
+
+```python
+from typing import Optional
+
+
+def say_hi(name: Optional[str]):
+ print(f"Hey {name}!")
+```
+
+parameter `name` को `Optional[str]` के रूप में define किया गया है, लेकिन यह **optional नहीं है**, आप function को parameter के बिना call नहीं कर सकते:
+
+```Python
+say_hi() # अरे नहीं, यह error throw करता है! 😱
+```
+
+`name` parameter **अभी भी required** है (*optional* नहीं) क्योंकि इसमें default value नहीं है। फिर भी, `name` value के रूप में `None` स्वीकार करता है:
+
+```Python
+say_hi(name=None) # यह काम करता है, None valid है 🎉
+```
+
+अच्छी खबर यह है कि अधिकतर मामलों में, आप types के unions को define करने के लिए बस `|` का उपयोग कर पाएँगे:
+
+```python
+def say_hi(name: str | None):
+ print(f"Hey {name}!")
+```
+
+इसलिए, सामान्यतः आपको `Optional` और `Union` जैसे नामों के बारे में चिंता करने की ज़रूरत नहीं होती। 😎
diff --git a/docs/hi/docs/advanced/async-tests.md b/docs/hi/docs/advanced/async-tests.md
new file mode 100644
index 000000000..8981d552b
--- /dev/null
+++ b/docs/hi/docs/advanced/async-tests.md
@@ -0,0 +1,99 @@
+# Async Tests { #async-tests }
+
+आपने पहले ही देखा है कि दिए गए `TestClient` का उपयोग करके अपनी **FastAPI** applications को कैसे test किया जाता है। अब तक, आपने केवल synchronous tests लिखना देखा है, `async` functions का उपयोग किए बिना।
+
+अपने tests में asynchronous functions का उपयोग कर पाना उपयोगी हो सकता है, उदाहरण के लिए, जब आप अपने database को asynchronously query कर रहे हों। कल्पना करें कि आप अपनी FastAPI application को requests भेजना test करना चाहते हैं और फिर verify करना चाहते हैं कि आपके backend ने async database library का उपयोग करते हुए database में सही data सफलतापूर्वक लिखा है।
+
+आइए देखें कि हम इसे कैसे काम करवा सकते हैं।
+
+## pytest.mark.anyio { #pytest-mark-anyio }
+
+अगर हम अपने tests में asynchronous functions call करना चाहते हैं, तो हमारे test functions asynchronous होने चाहिए। AnyIO इसके लिए एक अच्छा plugin प्रदान करता है, जो हमें specify करने देता है कि कुछ test functions को asynchronously call किया जाना है।
+
+## HTTPX { #httpx }
+
+भले ही आपकी **FastAPI** application `async def` के बजाय सामान्य `def` functions का उपयोग करती हो, यह अंदर से फिर भी एक `async` application होती है।
+
+`TestClient` अंदर कुछ magic करता है ताकि standard pytest का उपयोग करते हुए आपकी सामान्य `def` test functions में asynchronous FastAPI application को call किया जा सके। लेकिन जब हम इसे asynchronous functions के अंदर उपयोग करते हैं, तो वह magic अब काम नहीं करता। अपने tests को asynchronously चलाने पर, हम अपने test functions के अंदर `TestClient` का उपयोग नहीं कर सकते।
+
+`TestClient` [HTTPX](https://www.python-httpx.org) पर आधारित है, और सौभाग्य से, हम API को test करने के लिए इसे सीधे उपयोग कर सकते हैं।
+
+## उदाहरण { #example }
+
+एक सरल उदाहरण के लिए, आइए [बड़ी Applications](../tutorial/bigger-applications.md) और [Testing](../tutorial/testing.md) में वर्णित file structure जैसी एक structure पर विचार करें:
+
+```
+.
+├── app
+│ ├── __init__.py
+│ ├── main.py
+│ └── test_main.py
+```
+
+file `main.py` में यह होगा:
+
+{* ../../docs_src/async_tests/app_a_py310/main.py *}
+
+file `test_main.py` में `main.py` के लिए tests होंगे, यह अब कुछ ऐसा दिख सकता है:
+
+{* ../../docs_src/async_tests/app_a_py310/test_main.py *}
+
+## इसे चलाएँ { #run-it }
+
+आप अपने tests को हमेशा की तरह इस तरह चला सकते हैं:
+
+
+
+लेकिन अगर हम port `9999` वाले proxy का उपयोग करके "official" URL पर, `/api/v1/docs` पर docs UI access करते हैं, तो यह सही तरीके से काम करता है! 🎉
+
+आप इसे [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) पर देख सकते हैं:
+
+
+
+बिल्कुल जैसा हम चाहते थे। ✔️
+
+ऐसा इसलिए है क्योंकि FastAPI इस `root_path` का उपयोग OpenAPI में default `server` बनाने के लिए करता है, जिसमें `root_path` द्वारा दिया गया URL होता है।
+
+## अतिरिक्त servers { #additional-servers }
+
+/// warning | चेतावनी
+
+यह एक अधिक advanced use case है। चाहें तो इसे skip कर सकते हैं।
+
+///
+
+Default रूप से, **FastAPI** OpenAPI schema में `root_path` के URL वाला एक `server` बनाएगा।
+
+लेकिन आप अन्य alternative `servers` भी प्रदान कर सकते हैं, उदाहरण के लिए अगर आप चाहते हैं कि *वही* docs UI staging और production environment दोनों के साथ interact करे।
+
+अगर आप `servers` की custom list पास करते हैं और कोई `root_path` है (क्योंकि आपकी API proxy के पीछे रहती है), तो **FastAPI** list की शुरुआत में इस `root_path` के साथ एक "server" insert करेगा।
+
+उदाहरण के लिए:
+
+{* ../../docs_src/behind_a_proxy/tutorial003_py310.py hl[4:7] *}
+
+यह इस तरह का OpenAPI schema generate करेगा:
+
+```JSON hl_lines="5-7"
+{
+ "openapi": "3.1.0",
+ // यहाँ और चीज़ें
+ "servers": [
+ {
+ "url": "/api/v1"
+ },
+ {
+ "url": "https://stag.example.com",
+ "description": "Staging environment"
+ },
+ {
+ "url": "https://prod.example.com",
+ "description": "Production environment"
+ }
+ ],
+ "paths": {
+ // यहाँ और चीज़ें
+ }
+}
+```
+
+/// tip | सुझाव
+
+ध्यान दें कि `/api/v1` के `url` value वाला auto-generated server `root_path` से लिया गया है।
+
+///
+
+[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) पर docs UI में यह ऐसा दिखेगा:
+
+
+
+/// tip | सुझाव
+
+Docs UI आपके द्वारा चुने गए server के साथ interact करेगा।
+
+///
+
+/// note | तकनीकी विवरण
+
+OpenAPI specification में `servers` property optional है।
+
+अगर आप `servers` parameter specify नहीं करते और `root_path` `/` के बराबर है, तो generated OpenAPI schema में `servers` property default रूप से पूरी तरह omit कर दी जाएगी, जो `/` के `url` value वाले single server के equivalent है।
+
+///
+
+### `root_path` से automatic server disable करें { #disable-automatic-server-from-root-path }
+
+अगर आप नहीं चाहते कि **FastAPI** `root_path` का उपयोग करके automatic server शामिल करे, तो आप parameter `root_path_in_servers=False` उपयोग कर सकते हैं:
+
+{* ../../docs_src/behind_a_proxy/tutorial004_py310.py hl[9] *}
+
+और फिर यह उसे OpenAPI schema में शामिल नहीं करेगा।
+
+## Sub-application mount करना { #mounting-a-sub-application }
+
+अगर आपको `root_path` वाले proxy का उपयोग करते हुए भी sub-application mount करनी है (जैसा कि [Sub Applications - Mounts](sub-applications.md) में बताया गया है), तो आप इसे सामान्य रूप से कर सकते हैं, जैसा कि आप अपेक्षा करेंगे।
+
+FastAPI internally `root_path` का smart तरीके से उपयोग करेगा, इसलिए यह बस काम करेगा। ✨
diff --git a/docs/hi/docs/advanced/custom-response.md b/docs/hi/docs/advanced/custom-response.md
new file mode 100644
index 000000000..8655618f2
--- /dev/null
+++ b/docs/hi/docs/advanced/custom-response.md
@@ -0,0 +1,273 @@
+# कस्टम Response - HTML, Stream, File, अन्य { #custom-response-html-stream-file-others }
+
+Default रूप से, **FastAPI** JSON responses लौटाएगा।
+
+आप [सीधे Response लौटाएँ](response-directly.md) में दिखाए गए अनुसार सीधे `Response` लौटाकर इसे override कर सकते हैं।
+
+लेकिन अगर आप सीधे `Response` लौटाते हैं (या कोई subclass, जैसे `JSONResponse`), तो data अपने आप convert नहीं होगा (भले ही आप `response_model` declare करें), और documentation अपने आप generate नहीं होगी (उदाहरण के लिए, generated OpenAPI के हिस्से के रूप में HTTP header `Content-Type` में specific "media type" शामिल करना)।
+
+लेकिन आप *path operation decorator* में `response_class` parameter का उपयोग करके वह `Response` भी declare कर सकते हैं जिसे आप उपयोग करना चाहते हैं (जैसे कोई भी `Response` subclass)।
+
+आप अपनी *path operation function* से जो contents लौटाते हैं, उन्हें उस `Response` के अंदर रख दिया जाएगा।
+
+/// note | नोट
+
+यदि आप बिना media type वाली response class का उपयोग करते हैं, तो FastAPI अपेक्षा करेगा कि आपके response में कोई content न हो, इसलिए यह अपने generated OpenAPI docs में response format को document नहीं करेगा।
+
+///
+
+## JSON Responses { #json-responses }
+
+Default रूप से FastAPI JSON responses लौटाता है।
+
+यदि आप [Response Model](../tutorial/response-model.md) declare करते हैं तो FastAPI Pydantic का उपयोग करके data को JSON में serialize करने के लिए उसका उपयोग करेगा।
+
+यदि आप response model declare नहीं करते हैं, तो FastAPI [JSON Compatible Encoder](../tutorial/encoder.md) में समझाए गए `jsonable_encoder` का उपयोग करेगा और उसे `JSONResponse` में रखेगा।
+
+यदि आप JSON media type (`application/json`) के साथ `response_class` declare करते हैं, जैसा कि `JSONResponse` के साथ होता है, तो आपके द्वारा लौटाया गया data आपकी *path operation decorator* में declare किए गए किसी भी Pydantic `response_model` के साथ अपने आप convert (और filter) हो जाएगा। लेकिन data Pydantic के साथ JSON bytes में serialize नहीं होगा, इसके बजाय इसे `jsonable_encoder` के साथ convert किया जाएगा और फिर `JSONResponse` class को pass किया जाएगा, जो Python की standard JSON library का उपयोग करके इसे bytes में serialize करेगी।
+
+### JSON Performance { #json-performance }
+
+संक्षेप में, यदि आप maximum performance चाहते हैं, तो [Response Model](../tutorial/response-model.md) का उपयोग करें और *path operation decorator* में `response_class` declare न करें।
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *}
+
+## HTML Response { #html-response }
+
+**FastAPI** से सीधे HTML के साथ response लौटाने के लिए, `HTMLResponse` का उपयोग करें।
+
+* `HTMLResponse` import करें।
+* अपने *path operation decorator* के parameter `response_class` के रूप में `HTMLResponse` pass करें।
+
+{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
+
+/// note | नोट
+
+Parameter `response_class` का उपयोग response के "media type" को define करने के लिए भी किया जाएगा।
+
+इस मामले में, HTTP header `Content-Type` को `text/html` पर set किया जाएगा।
+
+और इसे OpenAPI में इसी तरह document किया जाएगा।
+
+///
+
+### `Response` लौटाएँ { #return-a-response }
+
+जैसा कि [सीधे Response लौटाएँ](response-directly.md) में देखा गया है, आप अपनी *path operation* में response को सीधे लौटाकर भी override कर सकते हैं।
+
+ऊपर वाला वही उदाहरण, जो `HTMLResponse` लौटाता है, इस तरह दिख सकता है:
+
+{* ../../docs_src/custom_response/tutorial003_py310.py hl[2,7,19] *}
+
+/// warning | चेतावनी
+
+आपकी *path operation function* द्वारा सीधे लौटाया गया `Response` OpenAPI में document नहीं होगा (उदाहरण के लिए, `Content-Type` document नहीं होगा) और automatic interactive docs में visible नहीं होगा।
+
+///
+
+/// note | नोट
+
+बेशक, वास्तविक `Content-Type` header, status code, आदि, आपके द्वारा लौटाए गए `Response` object से आएँगे।
+
+///
+
+### OpenAPI में document करें और `Response` override करें { #document-in-openapi-and-override-response }
+
+यदि आप function के अंदर से response को override करना चाहते हैं लेकिन साथ ही OpenAPI में "media type" document करना चाहते हैं, तो आप `response_class` parameter का उपयोग कर सकते हैं और `Response` object भी लौटा सकते हैं।
+
+तब `response_class` का उपयोग केवल OpenAPI *path operation* को document करने के लिए किया जाएगा, लेकिन आपका `Response` जैसा है वैसा ही उपयोग किया जाएगा।
+
+#### सीधे `HTMLResponse` लौटाएँ { #return-an-htmlresponse-directly }
+
+उदाहरण के लिए, यह कुछ ऐसा हो सकता है:
+
+{* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *}
+
+इस उदाहरण में, function `generate_html_response()` पहले से ही HTML को `str` में लौटाने के बजाय `Response` generate करके लौटाता है।
+
+`generate_html_response()` को call करने का result लौटाकर, आप पहले से ही एक `Response` लौटा रहे हैं जो default **FastAPI** behavior को override करेगा।
+
+लेकिन क्योंकि आपने `response_class` में भी `HTMLResponse` pass किया है, **FastAPI** को पता होगा कि इसे OpenAPI और interactive docs में `text/html` के साथ HTML के रूप में कैसे document करना है:
+
+
+
+## उपलब्ध responses { #available-responses }
+
+यहाँ कुछ उपलब्ध responses दिए गए हैं।
+
+ध्यान रखें कि आप कुछ और लौटाने के लिए `Response` का उपयोग कर सकते हैं, या custom sub-class भी बना सकते हैं।
+
+/// note | तकनीकी विवरण
+
+आप `from starlette.responses import HTMLResponse` भी उपयोग कर सकते हैं।
+
+**FastAPI** आपकी सुविधा के लिए, developer के रूप में, वही `starlette.responses` `fastapi.responses` के रूप में प्रदान करता है। लेकिन अधिकांश उपलब्ध responses सीधे Starlette से आते हैं।
+
+///
+
+### `Response` { #response }
+
+मुख्य `Response` class, बाकी सभी responses इससे inherit करते हैं।
+
+आप इसे सीधे लौटा सकते हैं।
+
+यह निम्नलिखित parameters accept करता है:
+
+* `content` - एक `str` या `bytes`।
+* `status_code` - एक `int` HTTP status code।
+* `headers` - strings का एक `dict`।
+* `media_type` - media type बताने वाला एक `str`। उदाहरण के लिए `"text/html"`।
+
+FastAPI (असल में Starlette) अपने आप एक Content-Length header शामिल करेगा। यह `media_type` के आधार पर Content-Type header भी शामिल करेगा और text types के लिए charset append करेगा।
+
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
+
+### `HTMLResponse` { #htmlresponse }
+
+कुछ text या bytes लेता है और HTML response लौटाता है, जैसा आपने ऊपर पढ़ा।
+
+### `PlainTextResponse` { #plaintextresponse }
+
+कुछ text या bytes लेता है और plain text response लौटाता है।
+
+{* ../../docs_src/custom_response/tutorial005_py310.py hl[2,7,9] *}
+
+### `JSONResponse` { #jsonresponse }
+
+कुछ data लेता है और `application/json` encoded response लौटाता है।
+
+जैसा आपने ऊपर पढ़ा, यह **FastAPI** में उपयोग किया जाने वाला default response है।
+
+/// note | तकनीकी विवरण
+
+लेकिन यदि आप response model या return type declare करते हैं, तो उसका उपयोग सीधे data को JSON में serialize करने के लिए किया जाएगा, और JSON के लिए सही media type वाला response सीधे लौटाया जाएगा, `JSONResponse` class का उपयोग किए बिना।
+
+यह best performance पाने का ideal तरीका है।
+
+///
+
+### `RedirectResponse` { #redirectresponse }
+
+HTTP redirect लौटाता है। Default रूप से 307 status code (Temporary Redirect) का उपयोग करता है।
+
+आप सीधे `RedirectResponse` लौटा सकते हैं:
+
+{* ../../docs_src/custom_response/tutorial006_py310.py hl[2,9] *}
+
+---
+
+या आप इसे `response_class` parameter में उपयोग कर सकते हैं:
+
+
+{* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *}
+
+यदि आप ऐसा करते हैं, तो आप अपनी *path operation* function से URL सीधे लौटा सकते हैं।
+
+इस मामले में, उपयोग किया गया `status_code` `RedirectResponse` के लिए default वाला होगा, जो `307` है।
+
+---
+
+आप `status_code` parameter को `response_class` parameter के साथ combine करके भी उपयोग कर सकते हैं:
+
+{* ../../docs_src/custom_response/tutorial006c_py310.py hl[2,7,9] *}
+
+### `StreamingResponse` { #streamingresponse }
+
+एक async generator या सामान्य generator/iterator (`yield` वाली function) लेता है और response body को stream करता है।
+
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
+
+/// note | तकनीकी विवरण
+
+एक `async` task केवल तब cancel किया जा सकता है जब वह किसी `await` तक पहुँचता है। यदि कोई `await` नहीं है, तो generator (`yield` वाली function) ठीक से cancel नहीं हो सकता और cancellation request किए जाने के बाद भी चलना जारी रख सकता है।
+
+चूँकि इस छोटे उदाहरण को किसी `await` statement की आवश्यकता नहीं है, हम event loop को cancellation handle करने का अवसर देने के लिए `await anyio.sleep(0)` जोड़ते हैं।
+
+यह बड़े या infinite streams के साथ और भी अधिक महत्वपूर्ण होगा।
+
+///
+
+/// tip | टिप
+
+सीधे `StreamingResponse` लौटाने के बजाय, आपको शायद [Stream Data](./stream-data.md) में दिए गए style का पालन करना चाहिए, यह कहीं अधिक सुविधाजनक है और आपके लिए पर्दे के पीछे cancellation handle करता है।
+
+यदि आप JSON Lines stream कर रहे हैं, तो [Stream JSON Lines](../tutorial/stream-json-lines.md) tutorial का पालन करें।
+
+///
+
+### `FileResponse` { #fileresponse }
+
+एक file को response के रूप में asynchronously stream करता है।
+
+Instantiate करने के लिए अन्य response types की तुलना में अलग set of arguments लेता है:
+
+* `path` - stream की जाने वाली file का file path।
+* `headers` - dictionary के रूप में शामिल किए जाने वाले कोई भी custom headers।
+* `media_type` - media type बताने वाली string। यदि unset है, तो media type infer करने के लिए filename या path का उपयोग किया जाएगा।
+* `filename` - यदि set है, तो इसे response `Content-Disposition` में शामिल किया जाएगा।
+
+File responses में उपयुक्त `Content-Length`, `Last-Modified` और `ETag` headers शामिल होंगे।
+
+{* ../../docs_src/custom_response/tutorial009_py310.py hl[2,10] *}
+
+आप `response_class` parameter का उपयोग भी कर सकते हैं:
+
+{* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *}
+
+इस मामले में, आप अपनी *path operation* function से file path सीधे लौटा सकते हैं।
+
+## Custom response class { #custom-response-class }
+
+आप `Response` से inherit करके और उसका उपयोग करके अपनी खुद की custom response class बना सकते हैं।
+
+उदाहरण के लिए, मान लें कि आप कुछ settings के साथ [`orjson`](https://github.com/ijl/orjson) का उपयोग करना चाहते हैं।
+
+मान लें आप चाहते हैं कि यह indented और formatted JSON लौटाए, इसलिए आप orjson option `orjson.OPT_INDENT_2` का उपयोग करना चाहते हैं।
+
+आप `CustomORJSONResponse` बना सकते हैं। आपको मुख्य रूप से `Response.render(content)` method बनाना है जो content को `bytes` के रूप में लौटाता है:
+
+{* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *}
+
+अब यह लौटाने के बजाय:
+
+```json
+{"message": "Hello World"}
+```
+
+...यह response लौटाएगा:
+
+```json
+{
+ "message": "Hello World"
+}
+```
+
+बेशक, JSON formatting की तुलना में इसका लाभ उठाने के लिए आपको शायद कहीं बेहतर तरीके मिलेंगे। 😉
+
+### `orjson` या Response Model { #orjson-or-response-model }
+
+यदि आप performance खोज रहे हैं, तो शायद `orjson` response की तुलना में [Response Model](../tutorial/response-model.md) का उपयोग करना आपके लिए बेहतर होगा।
+
+Response model के साथ, FastAPI data को JSON में serialize करने के लिए Pydantic का उपयोग करेगा, intermediate steps के बिना, जैसे `jsonable_encoder` के साथ convert करना, जो किसी भी अन्य मामले में होता।
+
+और अंदर से, Pydantic JSON में serialize करने के लिए `orjson` जैसे ही underlying Rust mechanisms का उपयोग करता है, इसलिए response model के साथ आपको पहले से ही best performance मिल जाएगी।
+
+## Default response class { #default-response-class }
+
+**FastAPI** class instance या `APIRouter` बनाते समय आप specify कर सकते हैं कि default रूप से कौन-सी response class उपयोग करनी है।
+
+इसे define करने वाला parameter `default_response_class` है।
+
+नीचे दिए गए उदाहरण में, **FastAPI** सभी *path operations* में JSON के बजाय default रूप से `HTMLResponse` का उपयोग करेगा।
+
+{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
+
+/// tip | टिप
+
+आप पहले की तरह *path operations* में अब भी `response_class` override कर सकते हैं।
+
+///
+
+## अतिरिक्त documentation { #additional-documentation }
+
+आप `responses` का उपयोग करके OpenAPI में media type और कई अन्य details भी declare कर सकते हैं: [OpenAPI में अतिरिक्त Responses](additional-responses.md)।
diff --git a/docs/hi/docs/advanced/dataclasses.md b/docs/hi/docs/advanced/dataclasses.md
new file mode 100644
index 000000000..55e487691
--- /dev/null
+++ b/docs/hi/docs/advanced/dataclasses.md
@@ -0,0 +1,95 @@
+# Dataclasses का उपयोग { #using-dataclasses }
+
+FastAPI **Pydantic** के ऊपर बनाया गया है, और मैंने आपको दिखाया है कि requests और responses घोषित करने के लिए Pydantic models का उपयोग कैसे करें।
+
+लेकिन FastAPI उसी तरह [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) का उपयोग भी support करता है:
+
+{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
+
+यह अभी भी **Pydantic** की वजह से support किया जाता है, क्योंकि इसमें [`dataclasses` के लिए internal support](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel) है।
+
+इसलिए, ऊपर दिए गए code में भी, जो Pydantic का स्पष्ट रूप से उपयोग नहीं करता, FastAPI उन standard dataclasses को Pydantic की अपनी तरह की dataclasses में बदलने के लिए Pydantic का उपयोग कर रहा है।
+
+और निश्चित रूप से, यह इन्हें भी support करता है:
+
+* data validation
+* data serialization
+* data documentation, आदि।
+
+यह Pydantic models की तरह ही काम करता है। और अंदर से यह वास्तव में उसी तरह, Pydantic का उपयोग करके हासिल किया जाता है।
+
+/// note | नोट
+
+ध्यान रखें कि dataclasses वह सब कुछ नहीं कर सकतीं जो Pydantic models कर सकते हैं।
+
+इसलिए, आपको अभी भी Pydantic models का उपयोग करना पड़ सकता है।
+
+लेकिन अगर आपके पास बहुत सारी dataclasses पहले से मौजूद हैं, तो FastAPI का उपयोग करके web API को power देने के लिए उनका उपयोग करने की यह एक अच्छी तरकीब है। 🤓
+
+///
+
+## `response_model` में Dataclasses { #dataclasses-in-response-model }
+
+आप `response_model` parameter में भी `dataclasses` का उपयोग कर सकते हैं:
+
+{* ../../docs_src/dataclasses_/tutorial002_py310.py hl[1,6:12,18] *}
+
+dataclass अपने आप Pydantic dataclass में बदल जाएगी।
+
+इस तरह, उसका schema API docs के user interface में दिखाई देगा:
+
+
+
+## Nested Data Structures में Dataclasses { #dataclasses-in-nested-data-structures }
+
+आप nested data structures बनाने के लिए `dataclasses` को अन्य type annotations के साथ भी जोड़ सकते हैं।
+
+कुछ मामलों में, आपको अभी भी Pydantic के `dataclasses` वाले version का उपयोग करना पड़ सकता है। उदाहरण के लिए, अगर automatically generated API documentation में errors हों।
+
+उस स्थिति में, आप standard `dataclasses` को बस `pydantic.dataclasses` से बदल सकते हैं, जो एक drop-in replacement है:
+
+{* ../../docs_src/dataclasses_/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
+
+1. हम अभी भी standard `dataclasses` से `field` import करते हैं।
+
+2. `pydantic.dataclasses`, `dataclasses` के लिए एक drop-in replacement है।
+
+3. `Author` dataclass में `Item` dataclasses की एक list शामिल है।
+
+4. `Author` dataclass को `response_model` parameter के रूप में उपयोग किया गया है।
+
+5. आप request body के रूप में dataclasses के साथ अन्य standard type annotations का उपयोग कर सकते हैं।
+
+ इस मामले में, यह `Item` dataclasses की एक list है।
+
+6. यहाँ हम एक dictionary return कर रहे हैं जिसमें `items` है, जो dataclasses की एक list है।
+
+ FastAPI अभी भी data को JSON में serialize करने में सक्षम है।
+
+7. यहाँ `response_model`, `Author` dataclasses की list के type annotation का उपयोग कर रहा है।
+
+ फिर से, आप `dataclasses` को standard type annotations के साथ जोड़ सकते हैं।
+
+8. ध्यान दें कि यह *path operation function* `async def` की बजाय सामान्य `def` का उपयोग करता है।
+
+ हमेशा की तरह, FastAPI में आप आवश्यकता के अनुसार `def` और `async def` को जोड़ सकते हैं।
+
+ अगर आपको यह याद दिलाने की आवश्यकता है कि किसे कब उपयोग करना है, तो [`async` और `await`](../async.md#in-a-hurry) के docs में _"जल्दी में हैं?"_ section देखें।
+
+9. यह *path operation function* dataclasses return नहीं कर रहा है (हालाँकि कर सकता था), बल्कि internal data वाली dictionaries की list return कर रहा है।
+
+ FastAPI response को बदलने के लिए `response_model` parameter (जिसमें dataclasses शामिल हैं) का उपयोग करेगा।
+
+आप जटिल data structures बनाने के लिए `dataclasses` को कई अलग-अलग combinations में अन्य type annotations के साथ जोड़ सकते हैं।
+
+अधिक विशिष्ट विवरण देखने के लिए ऊपर दिए गए in-code annotation tips देखें।
+
+## और जानें { #learn-more }
+
+आप `dataclasses` को अन्य Pydantic models के साथ भी जोड़ सकते हैं, उनसे inherit कर सकते हैं, उन्हें अपने models में शामिल कर सकते हैं, आदि।
+
+अधिक जानने के लिए, [dataclasses के बारे में Pydantic docs](https://docs.pydantic.dev/latest/concepts/dataclasses/) देखें।
+
+## Version { #version }
+
+यह FastAPI version `0.67.0` से उपलब्ध है। 🔖
diff --git a/docs/hi/docs/advanced/events.md b/docs/hi/docs/advanced/events.md
new file mode 100644
index 000000000..05afd4e1c
--- /dev/null
+++ b/docs/hi/docs/advanced/events.md
@@ -0,0 +1,165 @@
+# Lifespan Events { #lifespan-events }
+
+आप ऐसी logic (code) define कर सकते हैं जिसे application के **starts up** होने से पहले execute किया जाना चाहिए। इसका मतलब है कि यह code application के **requests receive करना शुरू करने से पहले**, **एक बार** execute होगा।
+
+उसी तरह, आप ऐसी logic (code) define कर सकते हैं जिसे application के **shutting down** होने पर execute किया जाना चाहिए। इस मामले में, यह code संभवतः **कई requests** handle करने के **बाद**, **एक बार** execute होगा।
+
+क्योंकि यह code application के requests लेना **शुरू** करने से पहले, और requests handle करना **पूरा** करने के तुरंत बाद execute होता है, यह पूरी application **lifespan** को cover करता है (शब्द "lifespan" थोड़ी देर में महत्वपूर्ण होगा 😉)।
+
+यह उन **resources** को setup करने के लिए बहुत उपयोगी हो सकता है जिनकी आपको पूरी app में जरूरत होती है, और जो requests के बीच **shared** होते हैं, और/या जिन्हें आपको बाद में **clean up** करना होता है। उदाहरण के लिए, database connection pool, या कोई shared machine learning model load करना।
+
+## Use Case { #use-case }
+
+आइए एक उदाहरण **use case** से शुरू करते हैं और फिर देखते हैं कि इसे इससे कैसे solve किया जाए।
+
+मान लीजिए कि आपके पास कुछ **machine learning models** हैं जिन्हें आप requests handle करने के लिए use करना चाहते हैं। 🤖
+
+वही models requests के बीच shared हैं, इसलिए, यह हर request के लिए एक model, या हर user के लिए एक model या ऐसा कुछ नहीं है।
+
+मान लीजिए कि model load करने में **काफी समय लग सकता है**, क्योंकि उसे disk से बहुत सारा **data** read करना होता है। इसलिए आप इसे हर request के लिए नहीं करना चाहते।
+
+आप इसे module/file के top level पर load कर सकते हैं, लेकिन इसका मतलब यह भी होगा कि अगर आप सिर्फ एक simple automated test run कर रहे हैं, तब भी यह **model load** करेगा, और फिर वह test **slow** होगा क्योंकि code के किसी independent part को run कर पाने से पहले उसे model load होने का इंतजार करना पड़ेगा।
+
+यही हम solve करेंगे, चलिए model को requests handle होने से पहले load करते हैं, लेकिन केवल application के requests receive करना शुरू करने से ठीक पहले, code load होते समय नहीं।
+
+## Lifespan { #lifespan }
+
+आप `FastAPI` app के `lifespan` parameter और एक "context manager" (मैं अभी दिखाऊंगा कि यह क्या है) का use करके यह *startup* और *shutdown* logic define कर सकते हैं।
+
+आइए एक उदाहरण से शुरू करते हैं और फिर इसे detail में देखते हैं।
+
+हम `yield` के साथ एक async function `lifespan()` इस तरह create करते हैं:
+
+{* ../../docs_src/events/tutorial003_py310.py hl[16,19] *}
+
+यहां हम `yield` से पहले machine learning models वाली dictionary में (fake) model function रखकर model load करने वाली महंगी *startup* operation को simulate कर रहे हैं। यह code application के **requests लेना शुरू करने से पहले**, *startup* के दौरान execute होगा।
+
+और फिर, `yield` के तुरंत बाद, हम model unload करते हैं। यह code application के **requests handle करना पूरा करने के बाद**, *shutdown* से ठीक पहले execute होगा। उदाहरण के लिए, यह memory या GPU जैसे resources release कर सकता है।
+
+/// tip | सुझाव
+
+`shutdown` तब होगा जब आप application को **stop** कर रहे होंगे।
+
+शायद आपको कोई नया version start करना हो, या आप इसे चलाते-चलाते बस थक गए हों। 🤷
+
+///
+
+### Lifespan function { #lifespan-function }
+
+ध्यान देने वाली पहली चीज यह है कि हम `yield` के साथ एक async function define कर रहे हैं। यह `yield` वाली Dependencies से बहुत मिलता-जुलता है।
+
+{* ../../docs_src/events/tutorial003_py310.py hl[14:19] *}
+
+function का पहला हिस्सा, `yield` से पहले वाला, application start होने से **पहले** execute होगा।
+
+और `yield` के बाद वाला हिस्सा application के finish हो जाने के **बाद** execute होगा।
+
+### Async Context Manager { #async-context-manager }
+
+अगर आप check करें, तो function को `@asynccontextmanager` से decorate किया गया है।
+
+यह function को "**async context manager**" नाम की चीज में convert करता है।
+
+{* ../../docs_src/events/tutorial003_py310.py hl[1,13] *}
+
+Python में एक **context manager** ऐसी चीज है जिसे आप `with` statement में use कर सकते हैं, उदाहरण के लिए, `open()` को context manager की तरह use किया जा सकता है:
+
+```Python
+with open("file.txt") as file:
+ file.read()
+```
+
+Python के नए versions में, एक **async context manager** भी है। आप इसे `async with` के साथ use करेंगे:
+
+```Python
+async with lifespan(app):
+ await do_stuff()
+```
+
+जब आप ऊपर की तरह कोई context manager या async context manager create करते हैं, तो यह क्या करता है कि `with` block में enter करने से पहले, यह `yield` से पहले वाला code execute करेगा, और `with` block से exit करने के बाद, यह `yield` के बाद वाला code execute करेगा।
+
+ऊपर हमारे code example में, हम इसे सीधे use नहीं करते, बल्कि FastAPI को pass करते हैं ताकि वह इसे use कर सके।
+
+`FastAPI` app का `lifespan` parameter एक **async context manager** लेता है, इसलिए हम अपना नया `lifespan` async context manager उसे pass कर सकते हैं।
+
+{* ../../docs_src/events/tutorial003_py310.py hl[22] *}
+
+## Alternative Events (deprecated) { #alternative-events-deprecated }
+
+/// warning | चेतावनी
+
+*startup* और *shutdown* को handle करने का recommended तरीका ऊपर बताए गए अनुसार `FastAPI` app के `lifespan` parameter का use करना है। अगर आप `lifespan` parameter provide करते हैं, तो `startup` और `shutdown` event handlers अब call नहीं किए जाएंगे। यह पूरा `lifespan` होगा या पूरे events, दोनों नहीं।
+
+आप शायद यह हिस्सा skip कर सकते हैं।
+
+///
+
+इस logic को *startup* के दौरान और *shutdown* के दौरान execute करने के लिए define करने का एक alternative तरीका है।
+
+आप event handlers (functions) define कर सकते हैं जिन्हें application के starts up होने से पहले, या application के shutting down होने पर execute किया जाना चाहिए।
+
+इन functions को `async def` या normal `def` के साथ declare किया जा सकता है।
+
+### `startup` event { #startup-event }
+
+application start होने से पहले run होने वाला function add करने के लिए, इसे event `"startup"` के साथ declare करें:
+
+{* ../../docs_src/events/tutorial001_py310.py hl[8] *}
+
+इस मामले में, `startup` event handler function items "database" (बस एक `dict`) को कुछ values के साथ initialize करेगा।
+
+आप एक से अधिक event handler function add कर सकते हैं।
+
+और आपकी application requests receive करना तब तक शुरू नहीं करेगी जब तक सभी `startup` event handlers complete नहीं हो जाते।
+
+### `shutdown` event { #shutdown-event }
+
+application के shutting down होने पर run होने वाला function add करने के लिए, इसे event `"shutdown"` के साथ declare करें:
+
+{* ../../docs_src/events/tutorial002_py310.py hl[6] *}
+
+यहां, `shutdown` event handler function एक text line `"Application shutdown"` को `log.txt` file में write करेगा।
+
+/// note | नोट
+
+`open()` function में, `mode="a"` का मतलब "append" होता है, इसलिए, line उस file में जो भी है उसके बाद add की जाएगी, पिछले contents को overwrite किए बिना।
+
+///
+
+/// tip | सुझाव
+
+ध्यान दें कि इस मामले में हम एक standard Python `open()` function use कर रहे हैं जो एक file के साथ interact करता है।
+
+इसलिए, इसमें I/O (input/output) शामिल है, जिसके लिए चीजों के disk पर write होने का "waiting" करना पड़ता है।
+
+लेकिन `open()` `async` और `await` use नहीं करता।
+
+इसलिए, हम event handler function को `async def` के बजाय standard `def` के साथ declare करते हैं।
+
+///
+
+### `startup` और `shutdown` साथ में { #startup-and-shutdown-together }
+
+इस बात की काफी संभावना है कि आपके *startup* और *shutdown* की logic connected हो, आप शायद कुछ start करना और फिर उसे finish करना, कोई resource acquire करना और फिर उसे release करना, आदि चाहें।
+
+इसे अलग-अलग functions में करना, जो logic या variables को साथ में share नहीं करते, अधिक कठिन है क्योंकि आपको values को global variables या इसी तरह की tricks में store करना पड़ेगा।
+
+इसी वजह से, अब इसके बजाय ऊपर explain किए गए `lifespan` को use करने की recommendation है।
+
+## Technical Details { #technical-details }
+
+जिज्ञासु nerds के लिए बस एक technical detail। 🤓
+
+अंदर से, ASGI technical specification में, यह [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) का हिस्सा है, और यह `startup` और `shutdown` नाम के events define करता है।
+
+/// note | नोट
+
+आप Starlette `lifespan` handlers के बारे में [Starlette की Lifespan docs](https://www.starlette.dev/lifespan/) में और पढ़ सकते हैं।
+
+इसमें यह भी शामिल है कि lifespan state को कैसे handle किया जाए जिसे आपके code के अन्य areas में use किया जा सकता है।
+
+///
+
+## Sub Applications { #sub-applications }
+
+🚨 ध्यान रखें कि ये lifespan events (startup और shutdown) केवल main application के लिए execute होंगे, [Sub Applications - Mounts](sub-applications.md) के लिए नहीं।
diff --git a/docs/hi/docs/advanced/generate-clients.md b/docs/hi/docs/advanced/generate-clients.md
new file mode 100644
index 000000000..fa4b8f496
--- /dev/null
+++ b/docs/hi/docs/advanced/generate-clients.md
@@ -0,0 +1,192 @@
+# SDKs जेनरेट करना { #generating-sdks }
+
+क्योंकि **FastAPI** **OpenAPI** specification पर आधारित है, इसकी APIs को एक standard format में वर्णित किया जा सकता है जिसे कई tools समझते हैं।
+
+इससे up-to-date **documentation**, कई भाषाओं में client libraries (**SDKs**), और **testing** या **automation workflows** जेनरेट करना आसान हो जाता है, जो आपके code के साथ sync में रहते हैं।
+
+इस guide में, आप सीखेंगे कि अपने FastAPI backend के लिए **TypeScript SDK** कैसे जेनरेट करें।
+
+## Open Source SDK Generators { #open-source-sdk-generators }
+
+एक versatile विकल्प [OpenAPI Generator](https://openapi-generator.tech/) है, जो **कई programming languages** को support करता है और आपकी OpenAPI specification से SDKs जेनरेट कर सकता है।
+
+**TypeScript clients** के लिए, [Hey API](https://heyapi.dev/) एक purpose-built solution है, जो TypeScript ecosystem के लिए optimized experience प्रदान करता है।
+
+आप [OpenAPI.Tools](https://openapi.tools/#sdk) पर और SDK generators खोज सकते हैं।
+
+/// tip | सुझाव
+
+FastAPI अपने-आप **OpenAPI 3.1** specifications जेनरेट करता है, इसलिए आपके द्वारा उपयोग किया जाने वाला कोई भी tool इस version को support करना चाहिए।
+
+///
+
+## TypeScript SDK बनाएँ { #create-a-typescript-sdk }
+
+आइए एक सरल FastAPI application से शुरू करें:
+
+{* ../../docs_src/generate_clients/tutorial001_py310.py hl[7:9,12:13,16:17,21] *}
+
+ध्यान दें कि *path operations* उन models को define करते हैं जिनका उपयोग वे request payload और response payload के लिए करते हैं, `Item` और `ResponseMessage` models का उपयोग करके।
+
+### API Docs { #api-docs }
+
+यदि आप `/docs` पर जाते हैं, तो आप देखेंगे कि इसमें requests में भेजे जाने और responses में प्राप्त होने वाले data के लिए **schemas** हैं:
+
+
+
+आप वे schemas देख सकते हैं क्योंकि उन्हें app में models के साथ declare किया गया था।
+
+वह जानकारी app के **OpenAPI schema** में उपलब्ध होती है, और फिर API docs में दिखाई जाती है।
+
+Models से वही जानकारी जो OpenAPI में शामिल होती है, **client code जेनरेट करने** के लिए उपयोग की जा सकती है।
+
+### Hey API { #hey-api }
+
+जब हमारे पास models के साथ एक FastAPI app हो, तो हम Hey API का उपयोग करके TypeScript client जेनरेट कर सकते हैं। ऐसा करने का सबसे तेज़ तरीका npx के माध्यम से है।
+
+```sh
+npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
+```
+
+यह `./src/client` में TypeScript SDK जेनरेट करेगा।
+
+आप उनकी website पर [`@hey-api/openapi-ts` install करना](https://heyapi.dev/openapi-ts/get-started) सीख सकते हैं और [generated output](https://heyapi.dev/openapi-ts/output) के बारे में पढ़ सकते हैं।
+
+### SDK का उपयोग करना { #using-the-sdk }
+
+अब आप client code को import करके उपयोग कर सकते हैं। यह कुछ ऐसा दिख सकता है, ध्यान दें कि आपको methods के लिए autocompletion मिलता है:
+
+
+
+आपको भेजने के लिए payload के लिए भी autocompletion मिलेगा:
+
+
+
+/// tip | सुझाव
+
+`name` और `price` के लिए autocompletion पर ध्यान दें, जिसे FastAPI application में, `Item` model में define किया गया था।
+
+///
+
+आपके द्वारा भेजे जाने वाले data के लिए inline errors होंगे:
+
+
+
+Response object में भी autocompletion होगा:
+
+
+
+## Tags के साथ FastAPI App { #fastapi-app-with-tags }
+
+कई मामलों में, आपका FastAPI app बड़ा होगा, और आप शायद *path operations* के अलग-अलग groups को separate करने के लिए tags का उपयोग करेंगे।
+
+उदाहरण के लिए, आपके पास **items** के लिए एक section और **users** के लिए दूसरा section हो सकता है, और उन्हें tags द्वारा separate किया जा सकता है:
+
+{* ../../docs_src/generate_clients/tutorial002_py310.py hl[21,26,34] *}
+
+### Tags के साथ TypeScript Client जेनरेट करें { #generate-a-typescript-client-with-tags }
+
+यदि आप tags का उपयोग करने वाले FastAPI app के लिए client जेनरेट करते हैं, तो यह सामान्यतः client code को भी tags के आधार पर separate करेगा।
+
+इस तरह, आप client code के लिए चीज़ों को सही तरह से ordered और grouped रख पाएँगे:
+
+
+
+इस मामले में, आपके पास हैं:
+
+* `ItemsService`
+* `UsersService`
+
+### Client Method Names { #client-method-names }
+
+अभी, जेनरेट किए गए method names जैसे `createItemItemsPost` बहुत साफ़ नहीं दिखते:
+
+```TypeScript
+ItemsService.createItemItemsPost({name: "Plumbus", price: 5})
+```
+
+...ऐसा इसलिए है क्योंकि client generator प्रत्येक *path operation* के लिए OpenAPI internal **operation ID** का उपयोग करता है।
+
+OpenAPI required करता है कि प्रत्येक operation ID सभी *path operations* में unique हो, इसलिए FastAPI उस operation ID को जेनरेट करने के लिए **function name**, **path**, और **HTTP method/operation** का उपयोग करता है, क्योंकि इस तरह यह सुनिश्चित कर सकता है कि operation IDs unique हैं।
+
+लेकिन मैं आगे आपको दिखाऊँगा कि इसे कैसे बेहतर बनाया जाए। 🤓
+
+## Custom Operation IDs और बेहतर Method Names { #custom-operation-ids-and-better-method-names }
+
+आप इन operation IDs को **जेनरेट** करने के तरीके को **modify** कर सकते हैं ताकि वे clients में सरल हों और **सरल method names** हों।
+
+इस मामले में, आपको किसी दूसरे तरीके से सुनिश्चित करना होगा कि प्रत्येक operation ID **unique** हो।
+
+उदाहरण के लिए, आप सुनिश्चित कर सकते हैं कि प्रत्येक *path operation* में एक tag हो, और फिर **tag** और *path operation* **name** (function name) के आधार पर operation ID जेनरेट करें।
+
+### Custom Generate Unique ID Function { #custom-generate-unique-id-function }
+
+FastAPI प्रत्येक *path operation* के लिए एक **unique ID** का उपयोग करता है, जिसका उपयोग **operation ID** के लिए और requests या responses के लिए आवश्यक किसी भी custom models के names के लिए भी किया जाता है।
+
+आप उस function को customize कर सकते हैं। यह एक `APIRoute` लेता है और एक string output करता है।
+
+उदाहरण के लिए, यहाँ यह पहले tag (आपके पास शायद केवल एक tag होगा) और *path operation* name (function name) का उपयोग कर रहा है।
+
+फिर आप उस custom function को `generate_unique_id_function` parameter के रूप में **FastAPI** को pass कर सकते हैं:
+
+{* ../../docs_src/generate_clients/tutorial003_py310.py hl[6:7,10] *}
+
+### Custom Operation IDs के साथ TypeScript Client जेनरेट करें { #generate-a-typescript-client-with-custom-operation-ids }
+
+अब, यदि आप client को फिर से जेनरेट करते हैं, तो आप देखेंगे कि इसमें बेहतर method names हैं:
+
+
+
+जैसा कि आप देखते हैं, method names में अब tag और फिर function name है, अब वे URL path और HTTP operation की जानकारी शामिल नहीं करते।
+
+### Client Generator के लिए OpenAPI Specification को Preprocess करें { #preprocess-the-openapi-specification-for-the-client-generator }
+
+जेनरेट किए गए code में अभी भी कुछ **duplicated information** है।
+
+हम पहले से जानते हैं कि यह method **items** से संबंधित है क्योंकि वह शब्द `ItemsService` (tag से लिया गया) में है, लेकिन method name में भी tag name prefixed है। 😕
+
+हम शायद इसे सामान्य रूप से OpenAPI के लिए रखना चाहेंगे, क्योंकि यह सुनिश्चित करेगा कि operation IDs **unique** हैं।
+
+लेकिन generated client के लिए, हम clients जेनरेट करने से ठीक पहले OpenAPI operation IDs को **modify** कर सकते हैं, ताकि उन method names को अधिक अच्छे और **cleaner** बनाया जा सके।
+
+हम OpenAPI JSON को `openapi.json` file में download कर सकते हैं और फिर इस तरह के script से **उस prefixed tag को remove** कर सकते हैं:
+
+{* ../../docs_src/generate_clients/tutorial004_py310.py *}
+
+//// tab | Node.js
+
+```Javascript
+{!> ../../docs_src/generate_clients/tutorial004.js!}
+```
+
+////
+
+इसके साथ, operation IDs को `items-get_items` जैसी चीज़ों से बदलकर सिर्फ़ `get_items` कर दिया जाएगा, इस तरह client generator सरल method names जेनरेट कर सकता है।
+
+### Preprocessed OpenAPI के साथ TypeScript Client जेनरेट करें { #generate-a-typescript-client-with-the-preprocessed-openapi }
+
+क्योंकि अंतिम परिणाम अब `openapi.json` file में है, आपको अपनी input location update करनी होगी:
+
+```sh
+npx @hey-api/openapi-ts -i ./openapi.json -o src/client
+```
+
+नया client जेनरेट करने के बाद, अब आपके पास **clean method names** होंगे, सभी **autocompletion**, **inline errors**, आदि के साथ:
+
+
+
+## लाभ { #benefits }
+
+Automatically generated clients का उपयोग करते समय, आपको इन चीज़ों के लिए **autocompletion** मिलेगा:
+
+* Methods.
+* body में request payloads, query parameters, आदि।
+* Response payloads.
+
+आपके पास हर चीज़ के लिए **inline errors** भी होंगे।
+
+और जब भी आप backend code update करते हैं, और frontend को **regenerate** करते हैं, तो इसमें methods के रूप में कोई भी नए *path operations* उपलब्ध होंगे, पुराने remove हो जाएँगे, और कोई भी अन्य change generated code में reflect होगा। 🤓
+
+इसका मतलब यह भी है कि यदि कुछ बदलता है, तो वह client code में अपने-आप **reflect** होगा। और यदि आप client को **build** करते हैं, तो यदि उपयोग किए गए data में कोई **mismatch** है, तो यह error देगा।
+
+इसलिए, आप development cycle में बहुत जल्दी **कई errors detect** कर लेंगे, बजाय इसके कि errors के production में आपके अंतिम users को दिखने का इंतज़ार करना पड़े और फिर यह debug करने की कोशिश करनी पड़े कि समस्या कहाँ है। ✨
diff --git a/docs/hi/docs/advanced/index.md b/docs/hi/docs/advanced/index.md
new file mode 100644
index 000000000..d2ecb69dc
--- /dev/null
+++ b/docs/hi/docs/advanced/index.md
@@ -0,0 +1,21 @@
+# उन्नत उपयोगकर्ता गाइड { #advanced-user-guide }
+
+## अतिरिक्त feature { #additional-features }
+
+मुख्य [ट्यूटोरियल - उपयोगकर्ता गाइड](../tutorial/index.md) आपको **FastAPI** के सभी मुख्य feature का अवलोकन देने के लिए पर्याप्त होना चाहिए।
+
+अगले sections में आप अन्य विकल्प, configurations, और अतिरिक्त feature देखेंगे।
+
+/// tip | सुझाव
+
+अगले sections **ज़रूरी नहीं कि "उन्नत"** हों।
+
+और संभव है कि आपके उपयोग के मामले के लिए समाधान उनमें से किसी एक में हो।
+
+///
+
+## पहले ट्यूटोरियल पढ़ें { #read-the-tutorial-first }
+
+आप मुख्य [ट्यूटोरियल - उपयोगकर्ता गाइड](../tutorial/index.md) से मिली जानकारी के साथ भी **FastAPI** के ज़्यादातर feature का उपयोग कर सकते हैं।
+
+और अगले sections मानते हैं कि आपने इसे पहले ही पढ़ लिया है, और यह भी मानते हैं कि आप उन मुख्य विचारों को जानते हैं।
diff --git a/docs/hi/docs/advanced/json-base64-bytes.md b/docs/hi/docs/advanced/json-base64-bytes.md
new file mode 100644
index 000000000..c99ffbc7f
--- /dev/null
+++ b/docs/hi/docs/advanced/json-base64-bytes.md
@@ -0,0 +1,63 @@
+# Base64 के रूप में Bytes वाला JSON { #json-with-bytes-as-base64 }
+
+अगर आपके app को JSON data receive और send करना है, लेकिन आपको उसमें binary data शामिल करना है, तो आप उसे base64 के रूप में encode कर सकते हैं।
+
+## Base64 बनाम Files { #base64-vs-files }
+
+पहले यह विचार करें कि क्या आप binary data upload करने के लिए [Request Files](../tutorial/request-files.md) और binary data भेजने के लिए [कस्टम Response - FileResponse](./custom-response.md#fileresponse) का उपयोग कर सकते हैं, बजाय इसके कि उसे JSON में encode किया जाए।
+
+JSON में केवल UTF-8 encoded strings हो सकती हैं, इसलिए उसमें raw bytes नहीं हो सकते।
+
+Base64 binary data को strings में encode कर सकता है, लेकिन ऐसा करने के लिए उसे मूल binary data की तुलना में अधिक characters का उपयोग करना पड़ता है, इसलिए यह सामान्य files की तुलना में आमतौर पर कम efficient होगा।
+
+Base64 का उपयोग केवल तभी करें जब आपको निश्चित रूप से JSON में binary data शामिल करना हो, और आप उसके लिए files का उपयोग नहीं कर सकते।
+
+## Pydantic `bytes` { #pydantic-bytes }
+
+आप `bytes` fields वाला एक Pydantic model declare कर सकते हैं, और फिर model config में `val_json_bytes` का उपयोग करके उसे बता सकते हैं कि input JSON data को *validate* करने के लिए base64 का उपयोग करे; उस validation के हिस्से के रूप में यह base64 string को bytes में decode करेगा।
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
+
+अगर आप `/docs` देखें, तो वे दिखाएँगे कि field `data` base64 encoded bytes की अपेक्षा करता है:
+
+
+
diff --git a/docs/hi/docs/advanced/openapi-webhooks.md b/docs/hi/docs/advanced/openapi-webhooks.md
new file mode 100644
index 000000000..65cafd0d6
--- /dev/null
+++ b/docs/hi/docs/advanced/openapi-webhooks.md
@@ -0,0 +1,55 @@
+# OpenAPI Webhooks { #openapi-webhooks }
+
+ऐसे मामले होते हैं जहाँ आप अपने API **users** को बताना चाहते हैं कि आपकी app कुछ data के साथ (एक request भेजते हुए) *उनकी* app को कॉल कर सकती है, सामान्यतः किसी प्रकार के **event** की **सूचना** देने के लिए।
+
+इसका मतलब है कि आपके users द्वारा आपकी API को requests भेजने की सामान्य प्रक्रिया के बजाय, **आपकी API** (या आपकी app) **उनके system को requests भेज** सकती है (उनकी API, उनकी app को)।
+
+इसे सामान्यतः **webhook** कहा जाता है।
+
+## Webhooks के चरण { #webhooks-steps }
+
+सामान्यतः प्रक्रिया यह होती है कि **आप अपने code में define करते हैं** कि आप कौन-सा message भेजेंगे, यानी **request का body**।
+
+आप यह भी किसी तरीके से define करते हैं कि आपकी app किन **क्षणों** पर वे requests या events भेजेगी।
+
+और **आपके users** किसी तरीके से (उदाहरण के लिए कहीं किसी web dashboard में) वह **URL** define करते हैं जहाँ आपकी app को वे requests भेजनी चाहिए।
+
+Webhooks के लिए URLs को register करने की सारी **logic** और वास्तव में उन requests को भेजने का code आपके ऊपर है। आप इसे **अपने खुद के code** में जैसे चाहें वैसे लिखते हैं।
+
+## **FastAPI** और OpenAPI के साथ webhooks का दस्तावेज़ीकरण { #documenting-webhooks-with-fastapi-and-openapi }
+
+**FastAPI** के साथ, OpenAPI का उपयोग करते हुए, आप इन webhooks के नाम, आपकी app द्वारा भेजे जा सकने वाले HTTP operations के प्रकार (जैसे `POST`, `PUT`, आदि) और आपकी app द्वारा भेजे जाने वाले request **bodies** define कर सकते हैं।
+
+इससे आपके users के लिए आपकी **webhook** requests प्राप्त करने के लिए **अपनी APIs implement करना** बहुत आसान हो सकता है, वे शायद अपने कुछ API code को autogenerate भी कर सकें।
+
+/// note | नोट
+
+Webhooks OpenAPI 3.1.0 और उससे ऊपर में उपलब्ध हैं, और FastAPI `0.99.0` और उससे ऊपर द्वारा समर्थित हैं।
+
+///
+
+## Webhooks वाली app { #an-app-with-webhooks }
+
+जब आप एक **FastAPI** application बनाते हैं, तो एक `webhooks` attribute होता है जिसका उपयोग आप *webhooks* define करने के लिए कर सकते हैं, उसी तरह जैसे आप *path operations* define करते हैं, उदाहरण के लिए `@app.webhooks.post()` के साथ।
+
+{* ../../docs_src/openapi_webhooks/tutorial001_py310.py hl[9:12,15:20] *}
+
+आप जिन webhooks को define करते हैं वे **OpenAPI** schema और automatic **docs UI** में आ जाएँगे।
+
+/// note | नोट
+
+`app.webhooks` object वास्तव में सिर्फ़ एक `APIRouter` है, वही type जिसका उपयोग आप अपनी app को multiple files के साथ structure करते समय करेंगे।
+
+///
+
+ध्यान दें कि webhooks के साथ आप वास्तव में कोई *path* declare नहीं कर रहे हैं (जैसे `/items/`), वहाँ आप जो text pass करते हैं वह केवल webhook का एक **identifier** है (event का नाम), उदाहरण के लिए `@app.webhooks.post("new-subscription")` में, webhook का नाम `new-subscription` है।
+
+ऐसा इसलिए है क्योंकि उम्मीद की जाती है कि **आपके users** उस वास्तविक **URL path** को किसी और तरीके से define करेंगे जहाँ वे webhook request प्राप्त करना चाहते हैं (जैसे कोई web dashboard)।
+
+### Docs देखें { #check-the-docs }
+
+अब आप अपनी app start कर सकते हैं और [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) पर जा सकते हैं।
+
+आप देखेंगे कि आपके docs में सामान्य *path operations* हैं और अब कुछ **webhooks** भी हैं:
+
+
diff --git a/docs/hi/docs/advanced/path-operation-advanced-configuration.md b/docs/hi/docs/advanced/path-operation-advanced-configuration.md
new file mode 100644
index 000000000..1636b4f0e
--- /dev/null
+++ b/docs/hi/docs/advanced/path-operation-advanced-configuration.md
@@ -0,0 +1,166 @@
+# Path Operation की उन्नत Configuration { #path-operation-advanced-configuration }
+
+## OpenAPI operationId { #openapi-operationid }
+
+/// warning | चेतावनी
+
+अगर आप OpenAPI में "expert" नहीं हैं, तो शायद आपको इसकी ज़रूरत नहीं है।
+
+///
+
+आप अपने *path operation* में उपयोग किए जाने वाले OpenAPI `operationId` को parameter `operation_id` के साथ सेट कर सकते हैं।
+
+आपको यह सुनिश्चित करना होगा कि यह प्रत्येक operation के लिए unique हो।
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py310.py hl[6] *}
+
+### *path operation function* के नाम को operationId के रूप में उपयोग करना { #using-the-path-operation-function-name-as-the-operationid }
+
+अगर आप अपने APIs के function नामों को `operationId`s के रूप में उपयोग करना चाहते हैं, तो आप `FastAPI` को एक custom `generate_unique_id_function` पास कर सकते हैं।
+
+यह function प्रत्येक `APIRoute` प्राप्त करता है और उस path operation के लिए उपयोग करने वाला `operationId` return करता है।
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
+
+/// warning | चेतावनी
+
+अगर आप ऐसा करते हैं, तो आपको यह सुनिश्चित करना होगा कि आपके प्रत्येक *path operation functions* का नाम unique हो।
+
+भले ही वे अलग-अलग modules (Python files) में हों।
+
+///
+
+## OpenAPI से बाहर रखना { #exclude-from-openapi }
+
+किसी *path operation* को generated OpenAPI schema से बाहर रखने के लिए (और इस प्रकार, automatic documentation systems से भी), parameter `include_in_schema` का उपयोग करें और इसे `False` पर सेट करें:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py310.py hl[6] *}
+
+## Docstring से उन्नत description { #advanced-description-from-docstring }
+
+आप OpenAPI के लिए किसी *path operation function* की docstring से उपयोग की जाने वाली lines को सीमित कर सकते हैं।
+
+एक `\f` (एक escaped "form feed" character) जोड़ने से **FastAPI** इस बिंदु पर OpenAPI के लिए उपयोग किए जाने वाले output को truncate कर देता है।
+
+यह documentation में नहीं दिखेगा, लेकिन अन्य tools (जैसे Sphinx) बाकी हिस्से का उपयोग कर सकेंगे।
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial004_py310.py hl[17:27] *}
+
+## अतिरिक्त Responses { #additional-responses }
+
+आपने शायद देखा होगा कि किसी *path operation* के लिए `response_model` और `status_code` कैसे declare किए जाते हैं।
+
+यह किसी *path operation* के मुख्य response के बारे में metadata define करता है।
+
+आप उनके models, status codes आदि के साथ अतिरिक्त responses भी declare कर सकते हैं।
+
+इसके बारे में documentation में यहाँ एक पूरा chapter है, आप इसे [OpenAPI में अतिरिक्त Responses](additional-responses.md) पर पढ़ सकते हैं।
+
+## OpenAPI Extra { #openapi-extra }
+
+जब आप अपने application में कोई *path operation* declare करते हैं, तो **FastAPI** उस *path operation* के बारे में relevant metadata को automatically generate करता है, जिसे OpenAPI schema में शामिल किया जाता है।
+
+/// note | तकनीकी विवरण
+
+OpenAPI specification में इसे [Operation Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object) कहा जाता है।
+
+///
+
+इसमें *path operation* के बारे में सारी जानकारी होती है और इसका उपयोग automatic documentation generate करने के लिए किया जाता है।
+
+इसमें `tags`, `parameters`, `requestBody`, `responses` आदि शामिल होते हैं।
+
+यह *path operation*-specific OpenAPI schema सामान्यतः **FastAPI** द्वारा automatically generate किया जाता है, लेकिन आप इसे extend भी कर सकते हैं।
+
+/// tip | सुझाव
+
+यह एक low level extension point है।
+
+अगर आपको केवल अतिरिक्त responses declare करने की ज़रूरत है, तो ऐसा करने का एक अधिक सुविधाजनक तरीका [OpenAPI में अतिरिक्त Responses](additional-responses.md) के साथ है।
+
+///
+
+आप parameter `openapi_extra` का उपयोग करके किसी *path operation* के लिए OpenAPI schema को extend कर सकते हैं।
+
+### OpenAPI Extensions { #openapi-extensions }
+
+यह `openapi_extra` उपयोगी हो सकता है, उदाहरण के लिए, [OpenAPI Extensions](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions) declare करने के लिए:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py310.py hl[6] *}
+
+अगर आप automatic API docs खोलते हैं, तो आपका extension specific *path operation* के नीचे दिखाई देगा।
+
+
+
+और अगर आप resulting OpenAPI (आपकी API में `/openapi.json` पर) देखते हैं, तो आपको अपना extension specific *path operation* के हिस्से के रूप में भी दिखाई देगा:
+
+```JSON hl_lines="22"
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "FastAPI",
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/items/": {
+ "get": {
+ "summary": "Read Items",
+ "operationId": "read_items_items__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ },
+ "x-aperture-labs-portal": "blue"
+ }
+ }
+ }
+}
+```
+
+### Custom OpenAPI *path operation* schema { #custom-openapi-path-operation-schema }
+
+`openapi_extra` में मौजूद dictionary को *path operation* के लिए automatically generated OpenAPI schema के साथ deeply merge किया जाएगा।
+
+तो, आप automatically generated schema में अतिरिक्त data जोड़ सकते हैं।
+
+उदाहरण के लिए, आप FastAPI की Pydantic के साथ automatic features का उपयोग किए बिना, अपने code से request को read और validate करने का निर्णय ले सकते हैं, लेकिन फिर भी आप OpenAPI schema में request को define करना चाह सकते हैं।
+
+आप यह `openapi_extra` के साथ कर सकते हैं:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py310.py hl[19:36, 39:40] *}
+
+इस उदाहरण में, हमने कोई Pydantic model declare नहीं किया। वास्तव में, request body को JSON के रूप में parsed भी नहीं किया गया है, इसे सीधे `bytes` के रूप में read किया गया है, और function `magic_data_reader()` किसी तरीके से इसे parse करने का ज़िम्मेदार होगा।
+
+फिर भी, हम request body के लिए expected schema declare कर सकते हैं।
+
+### Custom OpenAPI content type { #custom-openapi-content-type }
+
+इसी trick का उपयोग करके, आप JSON Schema define करने के लिए Pydantic model का उपयोग कर सकते हैं, जिसे फिर *path operation* के लिए custom OpenAPI schema section में शामिल किया जाता है।
+
+और आप ऐसा तब भी कर सकते हैं जब request में data type JSON न हो।
+
+उदाहरण के लिए, इस application में हम Pydantic models से JSON Schema निकालने के लिए FastAPI की integrated functionality या JSON के लिए automatic validation का उपयोग नहीं करते हैं। वास्तव में, हम request content type को JSON नहीं, बल्कि YAML के रूप में declare कर रहे हैं:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[15:20, 22] *}
+
+फिर भी, हालांकि हम default integrated functionality का उपयोग नहीं कर रहे हैं, हम अभी भी उस data के लिए JSON Schema manually generate करने के लिए Pydantic model का उपयोग कर रहे हैं जिसे हम YAML में receive करना चाहते हैं।
+
+फिर हम request को सीधे उपयोग करते हैं, और body को `bytes` के रूप में extract करते हैं। इसका मतलब है कि FastAPI request payload को JSON के रूप में parse करने की कोशिश भी नहीं करेगा।
+
+और फिर अपने code में, हम उस YAML content को सीधे parse करते हैं, और फिर हम YAML content को validate करने के लिए फिर से उसी Pydantic model का उपयोग कर रहे हैं:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[24:31] *}
+
+/// tip | सुझाव
+
+यहाँ हम उसी Pydantic model को reuse करते हैं।
+
+लेकिन इसी तरह, हम इसे किसी और तरीके से भी validate कर सकते थे।
+
+///
diff --git a/docs/hi/docs/advanced/response-change-status-code.md b/docs/hi/docs/advanced/response-change-status-code.md
new file mode 100644
index 000000000..3ef2f1b3f
--- /dev/null
+++ b/docs/hi/docs/advanced/response-change-status-code.md
@@ -0,0 +1,31 @@
+# Response - Status Code बदलें { #response-change-status-code }
+
+आपने शायद पहले पढ़ा होगा कि आप एक default [Response Status Code](../tutorial/response-status-code.md) सेट कर सकते हैं।
+
+लेकिन कुछ मामलों में आपको default से अलग status code लौटाना पड़ता है।
+
+## उपयोग का मामला { #use-case }
+
+उदाहरण के लिए, कल्पना करें कि आप default रूप से "OK" `200` का HTTP status code लौटाना चाहते हैं।
+
+लेकिन अगर data मौजूद नहीं था, तो आप उसे बनाना चाहते हैं, और "CREATED" `201` का HTTP status code लौटाना चाहते हैं।
+
+लेकिन फिर भी आप `response_model` के साथ लौटाए गए data को filter और convert कर पाने में सक्षम रहना चाहते हैं।
+
+ऐसे मामलों के लिए, आप `Response` parameter का उपयोग कर सकते हैं।
+
+## `Response` parameter का उपयोग करें { #use-a-response-parameter }
+
+आप अपनी *path operation function* में `Response` type का parameter घोषित कर सकते हैं (जैसा कि आप cookies और headers के लिए कर सकते हैं)।
+
+और फिर आप उस *temporary* response object में `status_code` सेट कर सकते हैं।
+
+{* ../../docs_src/response_change_status_code/tutorial001_py310.py hl[1,9,12] *}
+
+और फिर आप अपनी ज़रूरत का कोई भी object लौटा सकते हैं, जैसा कि आप सामान्य रूप से करते हैं (एक `dict`, एक database model, आदि)।
+
+और अगर आपने `response_model` घोषित किया है, तो यह आपके लौटाए गए object को filter और convert करने के लिए अभी भी उपयोग किया जाएगा।
+
+**FastAPI** उस *temporary* response का उपयोग status code (साथ ही cookies और headers) निकालने के लिए करेगा, और उन्हें अंतिम response में डाल देगा जिसमें आपके द्वारा लौटाया गया value होगा, जिसे किसी भी `response_model` द्वारा filter किया गया होगा।
+
+आप dependencies में भी `Response` parameter घोषित कर सकते हैं, और उनमें status code सेट कर सकते हैं। लेकिन ध्यान रखें कि आख़िरी बार जो सेट किया जाएगा, वही प्रभावी होगा।
diff --git a/docs/hi/docs/advanced/response-cookies.md b/docs/hi/docs/advanced/response-cookies.md
new file mode 100644
index 000000000..ccd65dc0f
--- /dev/null
+++ b/docs/hi/docs/advanced/response-cookies.md
@@ -0,0 +1,51 @@
+# Response Cookies { #response-cookies }
+
+## `Response` parameter का उपयोग करें { #use-a-response-parameter }
+
+आप अपने *path operation function* में `Response` प्रकार का parameter घोषित कर सकते हैं।
+
+और फिर आप उस *temporary* response object में cookies set कर सकते हैं।
+
+{* ../../docs_src/response_cookies/tutorial002_py310.py hl[1, 8:9] *}
+
+और फिर आप अपनी ज़रूरत का कोई भी object return कर सकते हैं, जैसा कि आप सामान्य रूप से करते हैं (एक `dict`, database model, आदि)।
+
+और अगर आपने `response_model` घोषित किया है, तो आपके द्वारा return किए गए object को filter और convert करने के लिए उसका अभी भी उपयोग किया जाएगा।
+
+**FastAPI** उस *temporary* response का उपयोग cookies (साथ ही headers और status code) निकालने के लिए करेगा, और उन्हें final response में डाल देगा जिसमें आपके द्वारा return किया गया value होगा, किसी भी `response_model` द्वारा filter किया हुआ।
+
+आप dependencies में भी `Response` parameter घोषित कर सकते हैं, और उनमें cookies (और headers) set कर सकते हैं।
+
+## सीधे `Response` return करें { #return-a-response-directly }
+
+आप अपने code में सीधे `Response` return करते समय भी cookies बना सकते हैं।
+
+ऐसा करने के लिए, आप [सीधे Response Return करें](response-directly.md) में बताए अनुसार एक response बना सकते हैं।
+
+फिर उसमें Cookies set करें, और फिर उसे return करें:
+
+{* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
+
+/// tip | सुझाव
+
+ध्यान रखें कि अगर आप `Response` parameter का उपयोग करने के बजाय सीधे response return करते हैं, तो FastAPI उसे सीधे return करेगा।
+
+इसलिए, आपको यह सुनिश्चित करना होगा कि आपका data सही प्रकार का है। उदाहरण के लिए, अगर आप `JSONResponse` return कर रहे हैं, तो वह JSON के साथ compatible हो।
+
+और यह भी कि आप कोई ऐसा data नहीं भेज रहे हैं जिसे `response_model` द्वारा filter किया जाना चाहिए था।
+
+///
+
+### अधिक जानकारी { #more-info }
+
+/// note | तकनीकी विवरण
+
+आप `from starlette.responses import Response` या `from starlette.responses import JSONResponse` का भी उपयोग कर सकते हैं।
+
+**FastAPI** आपकी सुविधा के लिए, developer के रूप में, वही `starlette.responses` `fastapi.responses` के रूप में प्रदान करता है। लेकिन उपलब्ध अधिकांश responses सीधे Starlette से आते हैं।
+
+और क्योंकि `Response` का उपयोग अक्सर headers और cookies set करने के लिए किया जा सकता है, **FastAPI** इसे `fastapi.Response` पर भी प्रदान करता है।
+
+///
+
+सभी उपलब्ध parameters और options देखने के लिए, [Starlette में documentation](https://www.starlette.dev/responses/#set-cookie) देखें।
diff --git a/docs/hi/docs/advanced/response-directly.md b/docs/hi/docs/advanced/response-directly.md
new file mode 100644
index 000000000..1f91a875e
--- /dev/null
+++ b/docs/hi/docs/advanced/response-directly.md
@@ -0,0 +1,83 @@
+# सीधे एक Response लौटाएँ { #return-a-response-directly }
+
+जब आप **FastAPI** *path operation* बनाते हैं, तो सामान्यतः आप उससे कोई भी data लौटा सकते हैं: एक `dict`, एक `list`, एक Pydantic model, एक database model, आदि।
+
+अगर आप [Response Model](../tutorial/response-model.md) declare करते हैं, तो FastAPI Pydantic का उपयोग करके data को JSON में serialize करने के लिए उसका उपयोग करेगा।
+
+अगर आप response model declare नहीं करते, तो FastAPI [JSON Compatible Encoder](../tutorial/encoder.md) में समझाए गए `jsonable_encoder` का उपयोग करेगा और उसे एक `JSONResponse` में रखेगा।
+
+आप सीधे एक `JSONResponse` भी बना सकते हैं और उसे लौटा सकते हैं।
+
+/// tip | सुझाव
+
+आम तौर पर सीधे `JSONResponse` लौटाने की तुलना में [Response Model](../tutorial/response-model.md) का उपयोग करने पर performance काफी बेहतर होगी, क्योंकि उस तरीके से यह Rust में Pydantic का उपयोग करके data serialize करता है।
+
+///
+
+## एक `Response` लौटाएँ { #return-a-response }
+
+आप एक `Response` या उसकी कोई भी sub-class लौटा सकते हैं।
+
+/// note | नोट
+
+`JSONResponse` खुद `Response` की एक sub-class है।
+
+///
+
+और जब आप एक `Response` लौटाते हैं, तो **FastAPI** उसे सीधे pass कर देगा।
+
+यह Pydantic models के साथ कोई data conversion नहीं करेगा, contents को किसी भी type में convert नहीं करेगा, आदि।
+
+यह आपको बहुत अधिक **flexibility** देता है। आप कोई भी data type लौटा सकते हैं, किसी भी data declaration या validation को override कर सकते हैं, आदि।
+
+यह आपको बहुत अधिक **responsibility** भी देता है। आपको यह सुनिश्चित करना होगा कि आप जो data लौटा रहे हैं वह सही है, सही format में है, वह serialize किया जा सकता है, आदि।
+
+## `Response` में `jsonable_encoder` का उपयोग करना { #using-the-jsonable-encoder-in-a-response }
+
+क्योंकि **FastAPI** आपके लौटाए गए `Response` में कोई बदलाव नहीं करता, आपको सुनिश्चित करना होगा कि उसके contents इसके लिए तैयार हैं।
+
+उदाहरण के लिए, आप किसी Pydantic model को पहले `dict` में convert किए बिना `JSONResponse` में नहीं रख सकते, जिसमें सभी data types (जैसे `datetime`, `UUID`, आदि) JSON-compatible types में convert किए गए हों।
+
+ऐसे मामलों के लिए, response को pass करने से पहले आप अपने data को convert करने के लिए `jsonable_encoder` का उपयोग कर सकते हैं:
+
+{* ../../docs_src/response_directly/tutorial001_py310.py hl[5:6,20:21] *}
+
+/// note | तकनीकी विवरण
+
+आप `from starlette.responses import JSONResponse` का भी उपयोग कर सकते हैं।
+
+**FastAPI** आपकी सुविधा के लिए, developer के रूप में, वही `starlette.responses` `fastapi.responses` के रूप में उपलब्ध कराता है। लेकिन उपलब्ध अधिकांश responses सीधे Starlette से आते हैं।
+
+///
+
+## custom `Response` लौटाना { #returning-a-custom-response }
+
+ऊपर दिया गया उदाहरण वे सभी हिस्से दिखाता है जिनकी आपको जरूरत है, लेकिन यह अभी बहुत उपयोगी नहीं है, क्योंकि आप सीधे `item` लौटा सकते थे, और **FastAPI** उसे आपके लिए `JSONResponse` में रख देता, उसे `dict` में convert करता, आदि। यह सब default रूप से होता है।
+
+अब, देखते हैं कि आप इसका उपयोग custom response लौटाने के लिए कैसे कर सकते हैं।
+
+मान लें कि आप एक [XML](https://en.wikipedia.org/wiki/XML) response लौटाना चाहते हैं।
+
+आप अपना XML content एक string में रख सकते हैं, उसे `Response` में रख सकते हैं, और उसे लौटा सकते हैं:
+
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
+
+## Response Model कैसे काम करता है { #how-a-response-model-works }
+
+जब आप किसी path operation में [Response Model - Return Type](../tutorial/response-model.md) declare करते हैं, तो **FastAPI** Pydantic का उपयोग करके data को JSON में serialize करने के लिए उसका उपयोग करेगा।
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+क्योंकि यह Rust side पर होगा, performance regular Python और `JSONResponse` class के साथ किए जाने की तुलना में काफी बेहतर होगी।
+
+`response_model` या return type का उपयोग करते समय, FastAPI data को convert करने के लिए `jsonable_encoder` का उपयोग नहीं करेगा (जो धीमा होता), और न ही `JSONResponse` class का उपयोग करेगा।
+
+इसके बजाय यह response model (या return type) का उपयोग करके Pydantic के साथ generate किए गए JSON bytes लेता है और JSON के लिए सही media type (`application/json`) के साथ सीधे एक `Response` लौटाता है।
+
+## नोट्स { #notes }
+
+जब आप सीधे एक `Response` लौटाते हैं, तो उसका data अपने-आप validate, convert (serialize), या document नहीं किया जाता।
+
+लेकिन आप फिर भी उसे [OpenAPI में अतिरिक्त Responses](additional-responses.md) में बताए अनुसार document कर सकते हैं।
+
+बाद के sections में आप देख सकते हैं कि automatic data conversion, documentation, आदि रखते हुए इन custom `Response`s का उपयोग/declare कैसे करें।
diff --git a/docs/hi/docs/advanced/response-headers.md b/docs/hi/docs/advanced/response-headers.md
new file mode 100644
index 000000000..9d62e2f47
--- /dev/null
+++ b/docs/hi/docs/advanced/response-headers.md
@@ -0,0 +1,41 @@
+# Response Headers { #response-headers }
+
+## `Response` parameter का उपयोग करें { #use-a-response-parameter }
+
+आप अपने *path operation function* में `Response` प्रकार का parameter घोषित कर सकते हैं (जैसा कि आप cookies के लिए कर सकते हैं)।
+
+और फिर आप उस *अस्थायी* response object में headers सेट कर सकते हैं।
+
+{* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
+
+और फिर आप अपनी ज़रूरत का कोई भी object return कर सकते हैं, जैसा कि आप सामान्य रूप से करते हैं (एक `dict`, database model, आदि)।
+
+और अगर आपने `response_model` घोषित किया है, तो वह अब भी आपके return किए गए object को filter और convert करने के लिए उपयोग किया जाएगा।
+
+**FastAPI** headers (साथ ही cookies और status code) निकालने के लिए उस *अस्थायी* response का उपयोग करेगा, और उन्हें अंतिम response में डाल देगा जिसमें आपके द्वारा return किया गया value होता है, जिसे किसी भी `response_model` द्वारा filter किया गया होता है।
+
+आप dependencies में भी `Response` parameter घोषित कर सकते हैं, और उनमें headers (और cookies) सेट कर सकते हैं।
+
+## सीधे `Response` return करें { #return-a-response-directly }
+
+जब आप सीधे `Response` return करते हैं, तब भी आप headers जोड़ सकते हैं।
+
+[सीधे Response Return करें](response-directly.md) में वर्णित तरीके से response बनाएँ और headers को एक अतिरिक्त parameter के रूप में पास करें:
+
+{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
+
+/// note | तकनीकी विवरण
+
+आप `from starlette.responses import Response` या `from starlette.responses import JSONResponse` का भी उपयोग कर सकते हैं।
+
+**FastAPI** आपकी, developer की, सुविधा के लिए वही `starlette.responses` `fastapi.responses` के रूप में प्रदान करता है। लेकिन उपलब्ध अधिकांश responses सीधे Starlette से आते हैं।
+
+और क्योंकि `Response` का उपयोग अक्सर headers और cookies सेट करने के लिए किया जा सकता है, **FastAPI** इसे `fastapi.Response` पर भी प्रदान करता है।
+
+///
+
+## Custom Headers { #custom-headers }
+
+ध्यान रखें कि custom proprietary headers को [`X-` prefix का उपयोग करके](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) जोड़ा जा सकता है।
+
+लेकिन अगर आपके पास custom headers हैं जिन्हें आप चाहते हैं कि browser में कोई client देख सके, तो आपको उन्हें अपनी CORS configurations में जोड़ना होगा ([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md) में और पढ़ें), इसके लिए [Starlette के CORS docs](https://www.starlette.dev/middleware/#corsmiddleware) में documented parameter `expose_headers` का उपयोग करें।
diff --git a/docs/hi/docs/advanced/security/http-basic-auth.md b/docs/hi/docs/advanced/security/http-basic-auth.md
new file mode 100644
index 000000000..172694ef9
--- /dev/null
+++ b/docs/hi/docs/advanced/security/http-basic-auth.md
@@ -0,0 +1,107 @@
+# HTTP Basic Auth { #http-basic-auth }
+
+सबसे सरल मामलों के लिए, आप HTTP Basic Auth का उपयोग कर सकते हैं।
+
+HTTP Basic Auth में, application एक header की अपेक्षा करता है जिसमें username और password होता है।
+
+अगर उसे यह नहीं मिलता, तो यह HTTP 401 "Unauthorized" error लौटाता है।
+
+और `WWW-Authenticate` header लौटाता है जिसका value `Basic` होता है, और एक optional `realm` parameter होता है।
+
+यह browser को username और password के लिए integrated prompt दिखाने को कहता है।
+
+फिर, जब आप वह username और password टाइप करते हैं, तो browser उन्हें header में अपने-आप भेज देता है।
+
+## Simple HTTP Basic Auth { #simple-http-basic-auth }
+
+* `HTTPBasic` और `HTTPBasicCredentials` import करें।
+* `HTTPBasic` का उपयोग करके एक "`security` scheme" बनाएँ।
+* अपने *path operation* में dependency के साथ उस `security` का उपयोग करें।
+* यह `HTTPBasicCredentials` type का एक object लौटाता है:
+ * इसमें भेजे गए `username` और `password` होते हैं।
+
+{* ../../docs_src/security/tutorial006_an_py310.py hl[4,8,12] *}
+
+जब आप पहली बार URL खोलने की कोशिश करते हैं (या docs में "Execute" button पर क्लिक करते हैं), तो browser आपसे आपका username और password पूछेगा:
+
+
+
+## Username जाँचें { #check-the-username }
+
+यहाँ एक अधिक complete example है।
+
+यह जाँचने के लिए dependency का उपयोग करें कि username और password सही हैं या नहीं।
+
+इसके लिए, username और password जाँचने के लिए Python standard module [`secrets`](https://docs.python.org/3/library/secrets.html) का उपयोग करें।
+
+`secrets.compare_digest()` को `bytes` या ऐसा `str` लेना होता है जिसमें केवल ASCII characters (English वाले) हों, इसका मतलब है कि यह `á` जैसे characters के साथ काम नहीं करेगा, जैसे `Sebastián` में।
+
+इसे handle करने के लिए, हम पहले `username` और `password` को UTF-8 से encode करके `bytes` में convert करते हैं।
+
+फिर हम `secrets.compare_digest()` का उपयोग करके यह सुनिश्चित कर सकते हैं कि `credentials.username` `"stanleyjobson"` है, और `credentials.password` `"swordfish"` है।
+
+{* ../../docs_src/security/tutorial007_an_py310.py hl[1,12:24] *}
+
+यह इसके समान होगा:
+
+```Python
+if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"):
+ # कोई error लौटाएँ
+ ...
+```
+
+लेकिन `secrets.compare_digest()` का उपयोग करने से यह "timing attacks" नाम के attacks के एक type के विरुद्ध सुरक्षित रहेगा।
+
+### Timing Attacks { #timing-attacks }
+
+लेकिन "timing attack" क्या होता है?
+
+मान लीजिए कुछ attackers username और password का अनुमान लगाने की कोशिश कर रहे हैं।
+
+और वे username `johndoe` और password `love123` के साथ एक request भेजते हैं।
+
+तब आपकी application में Python code कुछ इस तरह के बराबर होगा:
+
+```Python
+if "johndoe" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+लेकिन जैसे ही Python `johndoe` में पहले `j` की तुलना `stanleyjobson` में पहले `s` से करता है, यह `False` लौटा देगा, क्योंकि उसे पहले से पता है कि ये दोनों strings समान नहीं हैं, यह सोचते हुए कि "बाकी अक्षरों की तुलना करके और computation खर्च करने की जरूरत नहीं है"। और आपकी application कहेगी "Incorrect username or password"।
+
+लेकिन फिर attackers username `stanleyjobsox` और password `love123` के साथ कोशिश करते हैं।
+
+और आपका application code कुछ ऐसा करता है:
+
+```Python
+if "stanleyjobsox" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+Python को यह समझने से पहले कि दोनों strings समान नहीं हैं, `stanleyjobsox` और `stanleyjobson` दोनों में पूरे `stanleyjobso` की तुलना करनी पड़ेगी। इसलिए "Incorrect username or password" का reply वापस देने में कुछ extra microseconds लगेंगे।
+
+#### जवाब देने में लगा समय attackers की मदद करता है { #the-time-to-answer-helps-the-attackers }
+
+उस समय, यह देखकर कि server ने "Incorrect username or password" response भेजने में कुछ microseconds ज्यादा लिए, attackers जान जाएँगे कि उन्होंने _कुछ_ सही पाया है, शुरुआती अक्षरों में से कुछ सही थे।
+
+और फिर वे यह जानते हुए फिर कोशिश कर सकते हैं कि यह शायद `johndoe` की तुलना में `stanleyjobsox` से ज्यादा मिलता-जुलता है।
+
+#### एक "professional" attack { #a-professional-attack }
+
+बेशक, attackers यह सब हाथ से नहीं करेंगे, वे इसे करने के लिए एक program लिखेंगे, संभवतः प्रति सेकंड हजारों या लाखों tests के साथ। और उन्हें एक समय में बस एक extra सही अक्षर मिलेगा।
+
+लेकिन ऐसा करते हुए, कुछ minutes या hours में attackers ने हमारी application की "help" से सही username और password का अनुमान लगा लिया होगा, सिर्फ जवाब देने में लगे समय का उपयोग करके।
+
+#### इसे `secrets.compare_digest()` से ठीक करें { #fix-it-with-secrets-compare-digest }
+
+लेकिन हमारे code में हम वास्तव में `secrets.compare_digest()` का उपयोग कर रहे हैं।
+
+संक्षेप में, `stanleyjobsox` की तुलना `stanleyjobson` से करने में उतना ही समय लगेगा जितना `johndoe` की तुलना `stanleyjobson` से करने में लगता है। और password के लिए भी वही।
+
+इस तरह, अपने application code में `secrets.compare_digest()` का उपयोग करके, यह security attacks की इस पूरी range के विरुद्ध सुरक्षित रहेगा।
+
+### Error लौटाएँ { #return-the-error }
+
+यह detect करने के बाद कि credentials incorrect हैं, status code 401 (वही जो तब लौटाया जाता है जब कोई credentials provide नहीं किए जाते) के साथ एक `HTTPException` लौटाएँ और browser को login prompt फिर से दिखाने के लिए `WWW-Authenticate` header जोड़ें:
+
+{* ../../docs_src/security/tutorial007_an_py310.py hl[26:30] *}
diff --git a/docs/hi/docs/advanced/security/index.md b/docs/hi/docs/advanced/security/index.md
new file mode 100644
index 000000000..cd5d222c6
--- /dev/null
+++ b/docs/hi/docs/advanced/security/index.md
@@ -0,0 +1,19 @@
+# उन्नत सुरक्षा { #advanced-security }
+
+## अतिरिक्त Features { #additional-features }
+
+[Tutorial - User Guide: Security](../../tutorial/security/index.md) में शामिल चीज़ों के अलावा सुरक्षा संभालने के लिए कुछ अतिरिक्त features हैं।
+
+/// tip | सुझाव
+
+अगले sections **ज़रूरी नहीं कि "उन्नत" ही हों**।
+
+और यह संभव है कि आपके use case के लिए समाधान उनमें से किसी एक में हो।
+
+///
+
+## पहले Tutorial पढ़ें { #read-the-tutorial-first }
+
+अगले sections मानकर चलते हैं कि आपने मुख्य [Tutorial - User Guide: Security](../../tutorial/security/index.md) पहले ही पढ़ लिया है।
+
+वे सभी समान concepts पर आधारित हैं, लेकिन कुछ अतिरिक्त functionalities की अनुमति देते हैं।
diff --git a/docs/hi/docs/advanced/security/oauth2-scopes.md b/docs/hi/docs/advanced/security/oauth2-scopes.md
new file mode 100644
index 000000000..1bf01f366
--- /dev/null
+++ b/docs/hi/docs/advanced/security/oauth2-scopes.md
@@ -0,0 +1,274 @@
+# OAuth2 scopes { #oauth2-scopes }
+
+आप **FastAPI** के साथ OAuth2 scopes सीधे उपयोग कर सकते हैं, वे निर्बाध रूप से काम करने के लिए एकीकृत हैं।
+
+यह आपको OAuth2 standard का पालन करते हुए, आपकी OpenAPI application (और API docs) में एक अधिक fine-grained permission system रखने की अनुमति देगा।
+
+Scopes के साथ OAuth2 वह mechanism है जिसे कई बड़े authentication providers, जैसे Facebook, Google, GitHub, Microsoft, X (Twitter), आदि उपयोग करते हैं। वे इसका उपयोग users और applications को विशिष्ट permissions देने के लिए करते हैं।
+
+हर बार जब आप Facebook, Google, GitHub, Microsoft, X (Twitter) के साथ "log in with" करते हैं, वह application scopes के साथ OAuth2 का उपयोग कर रही होती है।
+
+इस section में आप देखेंगे कि अपनी **FastAPI** application में उसी scopes वाले OAuth2 के साथ authentication और authorization को कैसे manage करें।
+
+/// warning | चेतावनी
+
+यह थोड़ा-बहुत advanced section है। यदि आप अभी शुरू कर रहे हैं, तो आप इसे छोड़ सकते हैं।
+
+आपको अनिवार्य रूप से OAuth2 scopes की आवश्यकता नहीं है, और आप authentication और authorization को जैसे चाहें handle कर सकते हैं।
+
+लेकिन scopes के साथ OAuth2 को आपकी API (OpenAPI के साथ) और आपकी API docs में अच्छी तरह integrate किया जा सकता है।
+
+फिर भी, आप उन scopes, या किसी भी अन्य security/authorization requirement को अपने code में अपनी आवश्यकता के अनुसार enforce करते हैं।
+
+कई मामलों में, scopes के साथ OAuth2 overkill हो सकता है।
+
+लेकिन यदि आप जानते हैं कि आपको इसकी आवश्यकता है, या आप curious हैं, तो पढ़ते रहें।
+
+///
+
+## OAuth2 scopes और OpenAPI { #oauth2-scopes-and-openapi }
+
+OAuth2 specification "scopes" को spaces से अलग की गई strings की list के रूप में define करती है।
+
+इनमें से प्रत्येक string का content किसी भी format में हो सकता है, लेकिन उसमें spaces नहीं होने चाहिए।
+
+ये scopes "permissions" को दर्शाते हैं।
+
+OpenAPI में (जैसे API docs), आप "security schemes" define कर सकते हैं।
+
+जब इनमें से कोई security scheme OAuth2 का उपयोग करती है, तो आप scopes declare और उपयोग भी कर सकते हैं।
+
+प्रत्येक "scope" बस एक string है (spaces के बिना)।
+
+वे सामान्यतः विशिष्ट security permissions declare करने के लिए उपयोग किए जाते हैं, उदाहरण के लिए:
+
+* `users:read` या `users:write` आम examples हैं।
+* `instagram_basic` Facebook / Instagram द्वारा उपयोग किया जाता है।
+* `https://www.googleapis.com/auth/drive` Google द्वारा उपयोग किया जाता है।
+
+/// note | नोट
+
+OAuth2 में "scope" बस एक string है जो required विशिष्ट permission declare करती है।
+
+इससे फर्क नहीं पड़ता कि इसमें `:` जैसे अन्य characters हैं या यह एक URL है।
+
+वे details implementation specific हैं।
+
+OAuth2 के लिए वे बस strings हैं।
+
+///
+
+## Global view { #global-view }
+
+पहले, आइए जल्दी से देखें कि मुख्य **Tutorial - User Guide** में [Password के साथ OAuth2 (और hashing), JWT tokens के साथ Bearer](../../tutorial/security/oauth2-jwt.md) के examples से कौन से parts बदलते हैं। अब OAuth2 scopes का उपयोग करते हुए:
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
+
+अब आइए उन बदलावों को step by step review करें।
+
+## OAuth2 Security scheme { #oauth2-security-scheme }
+
+पहला बदलाव यह है कि अब हम OAuth2 security scheme को दो उपलब्ध scopes, `me` और `items`, के साथ declare कर रहे हैं।
+
+`scopes` parameter एक `dict` receive करता है जिसमें प्रत्येक scope key के रूप में और description value के रूप में होती है:
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[63:66] *}
+
+क्योंकि अब हम उन scopes को declare कर रहे हैं, वे API docs में तब दिखाई देंगे जब आप log-in/authorize करेंगे।
+
+और आप select कर सकेंगे कि आप किन scopes को access देना चाहते हैं: `me` और `items`।
+
+यह वही mechanism है जिसका उपयोग तब होता है जब आप Facebook, Google, GitHub, आदि के साथ log in करते समय permissions देते हैं:
+
+
+
+## Scopes के साथ JWT token { #jwt-token-with-scopes }
+
+अब, token *path operation* को modify करें ताकि requested scopes return हों।
+
+हम अभी भी वही `OAuth2PasswordRequestForm` उपयोग कर रहे हैं। इसमें `scopes` property शामिल है जिसमें `str` की `list` होती है, और request में received प्रत्येक scope होता है।
+
+और हम scopes को JWT token के part के रूप में return करते हैं।
+
+/// danger | खतरा
+
+सरलता के लिए, यहाँ हम received scopes को सीधे token में जोड़ रहे हैं।
+
+लेकिन आपकी application में, security के लिए, आपको सुनिश्चित करना चाहिए कि आप केवल वे scopes जोड़ें जिन्हें user वास्तव में रख सकता है, या जिन्हें आपने predefine किया है।
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[157] *}
+
+## *path operations* और dependencies में scopes declare करें { #declare-scopes-in-path-operations-and-dependencies }
+
+अब हम declare करते हैं कि `/users/me/items/` के लिए *path operation* को scope `items` required है।
+
+इसके लिए, हम `fastapi` से `Security` import और उपयोग करते हैं।
+
+आप dependencies declare करने के लिए `Security` का उपयोग कर सकते हैं (बिल्कुल `Depends` की तरह), लेकिन `Security` एक parameter `scopes` भी receive करता है जिसमें scopes (strings) की list होती है।
+
+इस case में, हम dependency function `get_current_active_user` को `Security` में pass करते हैं (उसी तरह जैसे हम `Depends` के साथ करते)।
+
+लेकिन हम scopes की एक `list` भी pass करते हैं, इस case में केवल एक scope के साथ: `items` (इसमें और भी हो सकते थे)।
+
+और dependency function `get_current_active_user` sub-dependencies भी declare कर सकता है, न केवल `Depends` के साथ बल्कि `Security` के साथ भी। अपना sub-dependency function (`get_current_user`) और अधिक scope requirements declare करते हुए।
+
+इस case में, इसे scope `me` required है (इसे एक से अधिक scope required हो सकते थे)।
+
+/// note | नोट
+
+आपको अलग-अलग जगहों पर अलग-अलग scopes जोड़ना अनिवार्य नहीं है।
+
+हम यहाँ यह demonstrate करने के लिए कर रहे हैं कि **FastAPI** अलग-अलग levels पर declared scopes को कैसे handle करता है।
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
+
+/// note | तकनीकी विवरण
+
+`Security` वास्तव में `Depends` का subclass है, और इसमें केवल एक extra parameter है जिसे हम बाद में देखेंगे।
+
+लेकिन `Depends` के बजाय `Security` का उपयोग करके, **FastAPI** जान जाएगा कि यह security scopes declare कर सकता है, उन्हें internally उपयोग कर सकता है, और API को OpenAPI के साथ document कर सकता है।
+
+लेकिन जब आप `fastapi` से `Query`, `Path`, `Depends`, `Security` और अन्य import करते हैं, तो वे वास्तव में functions हैं जो special classes return करते हैं।
+
+///
+
+## `SecurityScopes` का उपयोग करें { #use-securityscopes }
+
+अब dependency `get_current_user` को update करें।
+
+यह वही है जिसका उपयोग ऊपर की dependencies द्वारा किया जाता है।
+
+यहीं हम पहले बनाई गई उसी OAuth2 scheme का उपयोग कर रहे हैं, इसे dependency के रूप में declare करते हुए: `oauth2_scheme`।
+
+क्योंकि इस dependency function की अपनी कोई scope requirements नहीं हैं, हम `oauth2_scheme` के साथ `Depends` उपयोग कर सकते हैं, जब हमें security scopes specify करने की आवश्यकता नहीं है तो हमें `Security` उपयोग करने की आवश्यकता नहीं है।
+
+हम `SecurityScopes` type का एक special parameter भी declare करते हैं, जिसे `fastapi.security` से import किया गया है।
+
+यह `SecurityScopes` class `Request` के समान है (`Request` का उपयोग request object को सीधे प्राप्त करने के लिए किया गया था)।
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[9,106] *}
+
+## `scopes` का उपयोग करें { #use-the-scopes }
+
+Parameter `security_scopes` का type `SecurityScopes` होगा।
+
+इसमें property `scopes` होगी जिसमें एक list होगी, जिसमें स्वयं और इसे sub-dependency के रूप में उपयोग करने वाली सभी dependencies द्वारा required सभी scopes शामिल होंगे। इसका मतलब है, सभी "dependants"... यह confusing लग सकता है, इसे नीचे फिर से समझाया गया है।
+
+`security_scopes` object (`SecurityScopes` class का) एक `scope_str` attribute भी provide करता है जिसमें एक single string होती है, जिसमें वे scopes spaces से अलग होते हैं (हम इसका उपयोग करेंगे)।
+
+हम एक `HTTPException` बनाते हैं जिसे हम बाद में कई points पर reuse (`raise`) कर सकते हैं।
+
+इस exception में, हम required scopes (यदि कोई हों) को spaces से अलग की गई string के रूप में शामिल करते हैं (`scope_str` का उपयोग करके)। हम scopes वाली उस string को `WWW-Authenticate` header में रखते हैं (यह spec का part है)।
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[106,108:116] *}
+
+## `username` और data shape verify करें { #verify-the-username-and-data-shape }
+
+हम verify करते हैं कि हमें `username` मिलता है, और scopes extract करते हैं।
+
+और फिर हम उस data को Pydantic model के साथ validate करते हैं (`ValidationError` exception को catch करते हुए), और यदि JWT token पढ़ने या Pydantic के साथ data validate करने में error मिलता है, तो हम पहले बनाया हुआ `HTTPException` raise करते हैं।
+
+इसके लिए, हम Pydantic model `TokenData` को नई property `scopes` के साथ update करते हैं।
+
+Pydantic के साथ data validate करके हम यह सुनिश्चित कर सकते हैं कि हमारे पास, उदाहरण के लिए, scopes के साथ बिल्कुल `str` की `list` और `username` के साथ `str` है।
+
+उदाहरण के लिए, `dict`, या कुछ और नहीं, क्योंकि यह बाद में किसी point पर application को break कर सकता है, जिससे यह security risk बन सकता है।
+
+हम यह भी verify करते हैं कि हमारे पास उस username वाला user है, और यदि नहीं, तो हम वही exception raise करते हैं जो हमने पहले बनाया था।
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[47,117:129] *}
+
+## `scopes` verify करें { #verify-the-scopes }
+
+अब हम verify करते हैं कि इस dependency और सभी dependants (जिसमें *path operations* शामिल हैं) द्वारा required सभी scopes, received token में provided scopes में शामिल हैं, अन्यथा `HTTPException` raise करते हैं।
+
+इसके लिए, हम `security_scopes.scopes` का उपयोग करते हैं, जिसमें इन सभी scopes की `list` `str` के रूप में होती है।
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[130:136] *}
+
+## Dependency tree और scopes { #dependency-tree-and-scopes }
+
+आइए इस dependency tree और scopes को फिर से review करें।
+
+क्योंकि `get_current_active_user` dependency में `get_current_user` sub-dependency के रूप में है, `get_current_active_user` पर declared scope `"me"` required scopes की उस list में शामिल होगा जो `get_current_user` को pass किए गए `security_scopes.scopes` में होती है।
+
+*path operation* स्वयं भी एक scope, `"items"`, declare करता है, इसलिए यह भी `get_current_user` को pass किए गए `security_scopes.scopes` की list में होगा।
+
+Dependencies और scopes की hierarchy इस तरह दिखती है:
+
+* *path operation* `read_own_items` में है:
+ * Dependency के साथ required scopes `["items"]`:
+ * `get_current_active_user`:
+ * Dependency function `get_current_active_user` में है:
+ * Dependency के साथ required scopes `["me"]`:
+ * `get_current_user`:
+ * Dependency function `get_current_user` में है:
+ * स्वयं द्वारा required कोई scopes नहीं।
+ * `oauth2_scheme` का उपयोग करने वाली dependency।
+ * `SecurityScopes` type का एक `security_scopes` parameter:
+ * इस `security_scopes` parameter में property `scopes` है जिसमें ऊपर declared इन सभी scopes वाली `list` है, इसलिए:
+ * *path operation* `read_own_items` के लिए `security_scopes.scopes` में `["me", "items"]` होगा।
+ * *path operation* `read_users_me` के लिए `security_scopes.scopes` में `["me"]` होगा, क्योंकि यह dependency `get_current_active_user` में declared है।
+ * *path operation* `read_system_status` के लिए `security_scopes.scopes` में `[]` (कुछ नहीं) होगा, क्योंकि उसने `scopes` के साथ कोई `Security` declare नहीं किया, और उसकी dependency, `get_current_user`, भी कोई `scopes` declare नहीं करती।
+
+/// tip | सुझाव
+
+यहाँ महत्वपूर्ण और "magic" बात यह है कि प्रत्येक *path operation* के लिए `get_current_user` के पास check करने हेतु `scopes` की अलग list होगी।
+
+यह सब उस specific *path operation* के dependency tree में प्रत्येक *path operation* और प्रत्येक dependency में declared `scopes` पर निर्भर करता है।
+
+///
+
+## `SecurityScopes` के बारे में अधिक details { #more-details-about-securityscopes }
+
+आप `SecurityScopes` का उपयोग किसी भी point पर, और multiple जगहों पर कर सकते हैं, इसका "root" dependency पर होना ज़रूरी नहीं है।
+
+इसमें हमेशा current `Security` dependencies और **उस specific** *path operation* तथा **उस specific** dependency tree के सभी dependants में declared security scopes होंगे।
+
+क्योंकि `SecurityScopes` में dependants द्वारा declared सभी scopes होंगे, आप इसका उपयोग यह verify करने के लिए कर सकते हैं कि token में required scopes हैं, एक central dependency function में, और फिर अलग-अलग *path operations* में अलग-अलग scope requirements declare कर सकते हैं।
+
+उन्हें प्रत्येक *path operation* के लिए independently check किया जाएगा।
+
+## इसे check करें { #check-it }
+
+यदि आप API docs खोलते हैं, तो आप authenticate कर सकते हैं और specify कर सकते हैं कि आप किन scopes को authorize करना चाहते हैं।
+
+
+
+यदि आप कोई scope select नहीं करते हैं, तो आप "authenticated" होंगे, लेकिन जब आप `/users/me/` या `/users/me/items/` access करने की कोशिश करेंगे तो आपको error मिलेगा कि आपके पास पर्याप्त permissions नहीं हैं। आप फिर भी `/status/` access कर पाएंगे।
+
+और यदि आप scope `me` select करते हैं लेकिन scope `items` नहीं, तो आप `/users/me/` access कर पाएंगे लेकिन `/users/me/items/` नहीं।
+
+ऐसा ही किसी third party application के साथ होगा जो user द्वारा provided token के साथ इन *path operations* में से किसी एक को access करने की कोशिश करती, यह इस पर निर्भर करता है कि user ने application को कितनी permissions दीं।
+
+## Third party integrations के बारे में { #about-third-party-integrations }
+
+इस example में हम OAuth2 "password" flow का उपयोग कर रहे हैं।
+
+यह तब appropriate है जब हम अपनी ही application में log in कर रहे हों, शायद अपने ही frontend के साथ।
+
+क्योंकि हम इस पर भरोसा कर सकते हैं कि यह `username` और `password` receive करे, क्योंकि हम इसे control करते हैं।
+
+लेकिन यदि आप ऐसी OAuth2 application बना रहे हैं जिससे दूसरे connect करेंगे (अर्थात, यदि आप Facebook, Google, GitHub, आदि के बराबर authentication provider बना रहे हैं) तो आपको अन्य flows में से किसी एक का उपयोग करना चाहिए।
+
+सबसे common implicit flow है।
+
+सबसे secure code flow है, लेकिन इसे implement करना अधिक complex है क्योंकि इसमें अधिक steps required हैं। क्योंकि यह अधिक complex है, कई providers अंततः implicit flow suggest करते हैं।
+
+/// note | नोट
+
+यह common है कि प्रत्येक authentication provider अपने flows को अलग तरीके से name करता है, ताकि इसे अपने brand का part बना सके।
+
+लेकिन अंततः, वे वही OAuth2 standard implement कर रहे होते हैं।
+
+///
+
+**FastAPI** में इन सभी OAuth2 authentication flows के लिए utilities `fastapi.security.oauth2` में शामिल हैं।
+
+## Decorator `dependencies` में `Security` { #security-in-decorator-dependencies }
+
+जिस तरह आप decorator के `dependencies` parameter में `Depends` की `list` define कर सकते हैं (जैसा कि [path operation decorators में Dependencies](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md) में समझाया गया है), आप वहाँ `scopes` के साथ `Security` भी उपयोग कर सकते हैं।
diff --git a/docs/hi/docs/advanced/settings.md b/docs/hi/docs/advanced/settings.md
new file mode 100644
index 000000000..0c4d3c061
--- /dev/null
+++ b/docs/hi/docs/advanced/settings.md
@@ -0,0 +1,302 @@
+# Settings और Environment Variables { #settings-and-environment-variables }
+
+कई मामलों में आपकी application को कुछ बाहरी settings या configurations की ज़रूरत हो सकती है, उदाहरण के लिए secret keys, database credentials, email services के लिए credentials, आदि।
+
+इनमें से ज़्यादातर settings variable होती हैं (बदल सकती हैं), जैसे database URLs। और कई sensitive हो सकती हैं, जैसे secrets।
+
+इसी कारण उन्हें आम तौर पर environment variables में दिया जाता है जिन्हें application पढ़ती है।
+
+/// tip | सुझाव
+
+Environment variables को समझने के लिए आप [Environment Variables](../environment-variables.md) पढ़ सकते हैं।
+
+///
+
+## Types और validation { #types-and-validation }
+
+ये environment variables केवल text strings को handle कर सकते हैं, क्योंकि ये Python के बाहर होते हैं और इन्हें दूसरे programs और system के बाकी हिस्सों के साथ compatible होना होता है (और अलग-अलग operating systems, जैसे Linux, Windows, और macOS के साथ भी)।
+
+इसका मतलब है कि Python में किसी environment variable से पढ़ी गई कोई भी value एक `str` होगी, और किसी अलग type में कोई भी conversion या कोई भी validation code में करनी होगी।
+
+## Pydantic `Settings` { #pydantic-settings }
+
+सौभाग्य से, Pydantic environment variables से आने वाली इन settings को handle करने के लिए एक बेहतरीन utility देता है: [Pydantic: Settings management](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)।
+
+### `pydantic-settings` install करें { #install-pydantic-settings }
+
+सबसे पहले, सुनिश्चित करें कि आप अपना [virtual environment](../virtual-environments.md) बनाते हैं, उसे activate करते हैं, और फिर `pydantic-settings` package install करते हैं:
+
+
+
+और फिर, sub-application के लिए docs को [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs) पर खोलें।
+
+आप sub-application के लिए automatic API docs देखेंगे, जिसमें केवल उसके अपने _path operations_ शामिल होंगे, सभी सही sub-path prefix `/subapi` के अंतर्गत:
+
+
+
+अगर आप दोनों user interfaces में से किसी के साथ interact करने की कोशिश करते हैं, तो वे सही तरह काम करेंगे, क्योंकि browser हर specific app या sub-app से बात कर पाएगा।
+
+### तकनीकी विवरण: `root_path` { #technical-details-root-path }
+
+जब आप ऊपर बताए गए तरीके से कोई sub-application mount करते हैं, तो FastAPI sub-application के लिए mount path communicate करने का ध्यान रखेगा, ASGI specification के एक mechanism का उपयोग करके जिसे `root_path` कहा जाता है।
+
+इस तरह, sub-application को पता होगा कि docs UI के लिए उस path prefix का उपयोग करना है।
+
+और sub-application की अपनी mounted sub-applications भी हो सकती हैं और सब कुछ सही तरह काम करेगा, क्योंकि FastAPI इन सभी `root_path`s को अपने आप handle करता है।
+
+आप `root_path` के बारे में और इसे स्पष्ट रूप से कैसे उपयोग करें, यह [Behind a Proxy](behind-a-proxy.md) वाले section में और सीखेंगे।
diff --git a/docs/hi/docs/advanced/templates.md b/docs/hi/docs/advanced/templates.md
new file mode 100644
index 000000000..b16ef4a6e
--- /dev/null
+++ b/docs/hi/docs/advanced/templates.md
@@ -0,0 +1,126 @@
+# Templates { #templates }
+
+आप **FastAPI** के साथ अपनी पसंद का कोई भी template engine उपयोग कर सकते हैं।
+
+एक आम विकल्प Jinja2 है, वही जिसे Flask और अन्य tools उपयोग करते हैं।
+
+इसे आसानी से configure करने के लिए utilities उपलब्ध हैं जिन्हें आप सीधे अपने **FastAPI** application में उपयोग कर सकते हैं (Starlette द्वारा प्रदान की गई)।
+
+## Dependencies install करें { #install-dependencies }
+
+सुनिश्चित करें कि आप एक [virtual environment](../virtual-environments.md) बनाएँ, उसे activate करें, और `jinja2` install करें:
+
+
+
+आप input box में messages टाइप कर सकते हैं, और उन्हें भेज सकते हैं:
+
+
+
+और WebSockets के साथ आपका **FastAPI** application जवाब देगा:
+
+
+
+आप कई messages भेज (और receive कर) सकते हैं:
+
+
+
+और वे सभी उसी WebSocket connection का उपयोग करेंगे।
+
+## `Depends` और अन्य का उपयोग { #using-depends-and-others }
+
+WebSocket endpoints में आप `fastapi` से import कर सकते हैं और उपयोग कर सकते हैं:
+
+* `Depends`
+* `Security`
+* `Cookie`
+* `Header`
+* `Path`
+* `Query`
+
+वे अन्य FastAPI endpoints/*path operations* की तरह ही काम करते हैं:
+
+{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
+
+/// note | नोट
+
+क्योंकि यह एक WebSocket है, इसलिए `HTTPException` raise करना वास्तव में उचित नहीं है, इसके बजाय हम `WebSocketException` raise करते हैं।
+
+आप [specification में परिभाषित valid codes](https://tools.ietf.org/html/rfc6455#section-7.4.1) में से एक closing code का उपयोग कर सकते हैं।
+
+///
+
+### dependencies के साथ WebSockets आज़माएँ { #try-the-websockets-with-dependencies }
+
+अपना application चलाएँ:
+
+
+
+## disconnections और कई clients को handle करना { #handling-disconnections-and-multiple-clients }
+
+जब WebSocket connection बंद होता है, तो `await websocket.receive_text()` एक `WebSocketDisconnect` exception raise करेगा, जिसे आप इस उदाहरण की तरह catch और handle कर सकते हैं।
+
+{* ../../docs_src/websockets_/tutorial003_py310.py hl[79:81] *}
+
+इसे आज़माने के लिए:
+
+* app को कई browser tabs में खोलें।
+* उनसे messages लिखें।
+* फिर tabs में से एक को बंद करें।
+
+इससे `WebSocketDisconnect` exception raise होगा, और बाकी सभी clients को ऐसा message मिलेगा:
+
+```
+Client #1596980209979 left the chat
+```
+
+/// tip | सुझाव
+
+ऊपर दिया गया app एक minimal और सरल उदाहरण है, जो दिखाता है कि कई WebSocket connections को messages कैसे handle और broadcast किए जाएँ।
+
+लेकिन ध्यान रखें कि, चूँकि सब कुछ memory में, एक ही list में handle किया जाता है, यह केवल तब तक काम करेगा जब तक process चल रहा है, और केवल एक single process के साथ काम करेगा।
+
+अगर आपको कुछ ऐसा चाहिए जिसे FastAPI के साथ integrate करना आसान हो लेकिन जो अधिक robust हो, Redis, PostgreSQL या अन्य द्वारा supported हो, तो [encode/broadcaster](https://github.com/encode/broadcaster) देखें।
+
+///
+
+## अधिक जानकारी { #more-info }
+
+विकल्पों के बारे में अधिक जानने के लिए, इनके लिए Starlette का documentation देखें:
+
+* [`WebSocket` class](https://www.starlette.dev/websockets/)।
+* [Class-based WebSocket handling](https://www.starlette.dev/endpoints/#websocketendpoint)।
diff --git a/docs/hi/docs/advanced/wsgi.md b/docs/hi/docs/advanced/wsgi.md
new file mode 100644
index 000000000..1ea60d4e9
--- /dev/null
+++ b/docs/hi/docs/advanced/wsgi.md
@@ -0,0 +1,51 @@
+# WSGI शामिल करना - Flask, Django, अन्य { #including-wsgi-flask-django-others }
+
+आप WSGI applications को mount कर सकते हैं, जैसा आपने [Sub Applications - Mounts](sub-applications.md), [Proxy के पीछे](behind-a-proxy.md) में देखा।
+
+इसके लिए, आप `WSGIMiddleware` का उपयोग कर सकते हैं और इसे अपनी WSGI application को wrap करने के लिए इस्तेमाल कर सकते हैं, उदाहरण के लिए, Flask, Django, आदि।
+
+## `WSGIMiddleware` का उपयोग करना { #using-wsgimiddleware }
+
+/// note | नोट
+
+इसके लिए `a2wsgi` install करना required है, उदाहरण के लिए `pip install a2wsgi` के साथ।
+
+///
+
+आपको `a2wsgi` से `WSGIMiddleware` import करना होगा।
+
+फिर WSGI (जैसे Flask) app को middleware के साथ wrap करें।
+
+और फिर उसे किसी path के अंतर्गत mount करें।
+
+{* ../../docs_src/wsgi/tutorial001_py310.py hl[1,3,23] *}
+
+/// note | नोट
+
+पहले, `fastapi.middleware.wsgi` से `WSGIMiddleware` का उपयोग करने की सलाह दी जाती थी, लेकिन अब यह deprecated है।
+
+इसके बजाय `a2wsgi` package का उपयोग करने की सलाह दी जाती है। उपयोग वही रहता है।
+
+बस यह सुनिश्चित करें कि आपके पास `a2wsgi` package install है और आप `a2wsgi` से `WSGIMiddleware` को सही ढंग से import करते हैं।
+
+///
+
+## इसे जाँचें { #check-it }
+
+अब, path `/v1/` के अंतर्गत हर request को Flask application द्वारा handle किया जाएगा।
+
+और बाकी को **FastAPI** द्वारा handle किया जाएगा।
+
+यदि आप इसे run करते हैं और [http://localhost:8000/v1/](http://localhost:8000/v1/) पर जाते हैं, तो आपको Flask से response दिखाई देगा:
+
+```txt
+Hello, World from Flask!
+```
+
+और यदि आप [http://localhost:8000/v2](http://localhost:8000/v2) पर जाते हैं, तो आपको FastAPI से response दिखाई देगा:
+
+```JSON
+{
+ "message": "Hello World"
+}
+```
diff --git a/docs/hi/docs/deployment/cloud.md b/docs/hi/docs/deployment/cloud.md
new file mode 100644
index 000000000..f4c6087d3
--- /dev/null
+++ b/docs/hi/docs/deployment/cloud.md
@@ -0,0 +1,24 @@
+# Cloud Providers पर FastAPI Deploy करें { #deploy-fastapi-on-cloud-providers }
+
+आप अपनी FastAPI application deploy करने के लिए वस्तुतः **किसी भी cloud provider** का उपयोग कर सकते हैं।
+
+अधिकांश मामलों में, मुख्य cloud providers के पास उनके साथ FastAPI deploy करने के लिए guides होती हैं।
+
+## FastAPI Cloud { #fastapi-cloud }
+
+**[FastAPI Cloud](https://fastapicloud.com)** को **FastAPI** के पीछे मौजूद उसी author और team ने बनाया है।
+
+यह न्यूनतम प्रयास के साथ API को **build**, **deploy**, और **access** करने की प्रक्रिया को सरल बनाता है।
+
+यह FastAPI के साथ apps बनाने वाले उसी **developer experience** को उन्हें cloud पर **deploy** करने में भी लाता है। 🎉
+
+FastAPI Cloud, *FastAPI and friends* open source projects का प्राथमिक sponsor और funding provider है। ✨
+
+## Cloud Providers - Sponsors { #cloud-providers-sponsors }
+
+कुछ अन्य cloud providers भी ✨ [**FastAPI को sponsor करते हैं**](https://github.com/sponsors/tiangolo) ✨। 🙇
+
+आप उनकी guides का पालन करने और उनकी services आज़माने के लिए उन पर भी विचार कर सकते हैं:
+
+* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi)
+* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi)
diff --git a/docs/hi/docs/deployment/concepts.md b/docs/hi/docs/deployment/concepts.md
new file mode 100644
index 000000000..de085e34b
--- /dev/null
+++ b/docs/hi/docs/deployment/concepts.md
@@ -0,0 +1,321 @@
+# Deployments की अवधारणाएँ { #deployments-concepts }
+
+जब आप एक **FastAPI** application, या वास्तव में किसी भी प्रकार की web API, deploy करते हैं, तो कई अवधारणाएँ होती हैं जिनकी आपको शायद परवाह होगी, और उनका उपयोग करके आप अपनी application को **deploy करने** का **सबसे उपयुक्त** तरीका ढूँढ सकते हैं।
+
+कुछ महत्वपूर्ण अवधारणाएँ हैं:
+
+* सुरक्षा - HTTPS
+* startup पर चलना
+* Restarts
+* Replication (चल रहे processes की संख्या)
+* Memory
+* शुरू करने से पहले के पिछले steps
+
+हम देखेंगे कि ये **deployments** को कैसे प्रभावित करेंगे।
+
+अंत में, अंतिम उद्देश्य यह है कि आप अपने **API clients को serve** कर सकें, वह भी ऐसे तरीके से जो **सुरक्षित** हो, **disruptions से बचाए**, और **compute resources** (जैसे remote servers/virtual machines) का यथासंभव कुशलता से उपयोग करे। 🚀
+
+मैं यहाँ इन **अवधारणाओं** के बारे में थोड़ा और बताऊँगा, और उम्मीद है कि इससे आपको वह **intuition** मिलेगी जिसकी आपको अपनी API को बहुत अलग-अलग environments में deploy करने का निर्णय लेने के लिए आवश्यकता होगी, संभवतः ऐसे **future** environments में भी जो अभी मौजूद नहीं हैं।
+
+इन अवधारणाओं पर विचार करके, आप **अपनी खुद की APIs** को deploy करने का सबसे अच्छा तरीका **evaluate और design** कर पाएँगे।
+
+अगले chapters में, मैं आपको FastAPI applications deploy करने के लिए अधिक **ठोस recipes** दूँगा।
+
+लेकिन अभी के लिए, आइए इन महत्वपूर्ण **conceptual ideas** को देखें। ये अवधारणाएँ किसी भी अन्य प्रकार की web API पर भी लागू होती हैं। 💡
+
+## सुरक्षा - HTTPS { #security-https }
+
+[HTTPS के बारे में पिछले chapter](https.md) में हमने सीखा कि HTTPS आपकी API के लिए encryption कैसे प्रदान करता है।
+
+हमने यह भी देखा कि HTTPS सामान्यतः आपके application server से **external** एक component, एक **TLS Termination Proxy**, द्वारा प्रदान किया जाता है।
+
+और **HTTPS certificates renew** करने का प्रभारी कुछ होना चाहिए, यह वही component हो सकता है या कुछ अलग भी हो सकता है।
+
+### HTTPS के लिए उदाहरण Tools { #example-tools-for-https }
+
+TLS Termination Proxy के रूप में आप जिन tools का उपयोग कर सकते हैं, उनमें से कुछ हैं:
+
+* Traefik
+ * Certificate renewals को अपने-आप संभालता है ✨
+* Caddy
+ * Certificate renewals को अपने-आप संभालता है ✨
+* Nginx
+ * Certificate renewals के लिए Certbot जैसे external component के साथ
+* HAProxy
+ * Certificate renewals के लिए Certbot जैसे external component के साथ
+* Nginx जैसे Ingress Controller के साथ Kubernetes
+ * Certificate renewals के लिए cert-manager जैसे external component के साथ
+* Cloud provider द्वारा उनकी services के हिस्से के रूप में internally संभाला गया (नीचे पढ़ें 👇)
+
+एक और विकल्प यह है कि आप एक **cloud service** का उपयोग कर सकते हैं जो HTTPS setup करने सहित अधिक काम करती है। इसमें कुछ restrictions हो सकती हैं या आपसे अधिक charge लिया जा सकता है, आदि। लेकिन उस स्थिति में, आपको स्वयं TLS Termination Proxy setup नहीं करना पड़ेगा।
+
+अगले chapters में मैं आपको कुछ ठोस उदाहरण दिखाऊँगा।
+
+---
+
+फिर विचार करने के लिए अगले concepts उस program के बारे में हैं जो आपकी वास्तविक API चला रहा है (जैसे Uvicorn)।
+
+## Program और Process { #program-and-process }
+
+हम चल रहे "**process**" के बारे में बहुत बात करेंगे, इसलिए यह स्पष्ट होना उपयोगी है कि इसका क्या अर्थ है, और "**program**" शब्द से इसका क्या अंतर है।
+
+### Program क्या है { #what-is-a-program }
+
+**Program** शब्द का उपयोग आम तौर पर कई चीजों का वर्णन करने के लिए किया जाता है:
+
+* वह **code** जो आप लिखते हैं, **Python files**।
+* वह **file** जिसे operating system द्वारा **execute** किया जा सकता है, उदाहरण के लिए: `python`, `python.exe` या `uvicorn`।
+* कोई विशेष program जब वह operating system पर **चल रहा** हो, CPU का उपयोग कर रहा हो, और memory में चीजें store कर रहा हो। इसे **process** भी कहा जाता है।
+
+### Process क्या है { #what-is-a-process }
+
+**Process** शब्द सामान्यतः अधिक विशिष्ट तरीके से उपयोग किया जाता है, केवल उस चीज़ के लिए जो operating system में चल रही होती है (जैसे ऊपर के अंतिम point में):
+
+* कोई विशेष program जब वह operating system पर **चल रहा** हो।
+ * यह न तो file को refer करता है, न code को, यह **विशेष रूप से** उस चीज़ को refer करता है जिसे operating system द्वारा **execute** और manage किया जा रहा है।
+* कोई भी program, कोई भी code, **केवल तभी कुछ कर सकता है** जब उसे **execute** किया जा रहा हो। यानी, जब कोई **process चल रहा** हो।
+* Process को आपके द्वारा, या operating system द्वारा **terminate** (या "kill") किया जा सकता है। उस point पर, वह चलना/execute होना बंद कर देता है, और वह **अब कुछ नहीं कर सकता**।
+* आपके computer पर चल रही प्रत्येक application के पीछे कोई process होता है, प्रत्येक running program, प्रत्येक window, आदि। और computer चालू होने पर सामान्यतः कई processes **एक ही समय में** चल रहे होते हैं।
+* **एक ही program** के **multiple processes** एक ही समय में चल सकते हैं।
+
+यदि आप अपने operating system में "task manager" या "system monitor" (या समान tools) देखते हैं, तो आप उनमें से कई processes चलते हुए देख पाएँगे।
+
+और, उदाहरण के लिए, आप शायद देखेंगे कि एक ही browser program (Firefox, Chrome, Edge, आदि) को चलाने वाले multiple processes हैं। वे सामान्यतः प्रति tab एक process चलाते हैं, साथ में कुछ अन्य extra processes भी।
+
+
+
+---
+
+अब जब हम **process** और **program** शब्दों के बीच अंतर जानते हैं, तो deployments के बारे में बात जारी रखते हैं।
+
+## startup पर चलना { #running-on-startup }
+
+अधिकांश मामलों में, जब आप एक web API बनाते हैं, तो आप चाहते हैं कि वह **हमेशा चलती रहे**, बिना interruption के, ताकि आपके clients हमेशा उसे access कर सकें। यह निश्चित रूप से तब तक है जब तक आपके पास कोई विशेष कारण न हो कि आप उसे केवल कुछ स्थितियों में ही चलाना चाहते हैं, लेकिन अधिकांश समय आप चाहते हैं कि वह लगातार चलती रहे और **available** रहे।
+
+### Remote Server में { #in-a-remote-server }
+
+जब आप एक remote server (एक cloud server, एक virtual machine, आदि) setup करते हैं, तो सबसे सरल चीज़ जो आप कर सकते हैं वह है `fastapi run` (जो Uvicorn का उपयोग करता है) या कुछ समान, manually, ठीक उसी तरह जैसे आप local development करते समय करते हैं।
+
+और यह काम करेगा और **development के दौरान** उपयोगी होगा।
+
+लेकिन यदि server से आपका connection खो जाता है, तो **running process** शायद मर जाएगा।
+
+और यदि server restart होता है (उदाहरण के लिए updates के बाद, या cloud provider से migrations के बाद) तो आप शायद **इसे notice नहीं करेंगे**। और इसके कारण, आपको यह भी पता नहीं चलेगा कि आपको process को manually restart करना है। इसलिए, आपकी API बस dead ही रहेगी। 😱
+
+### Startup पर Automatically चलाना { #run-automatically-on-startup }
+
+सामान्यतः, आप शायद चाहेंगे कि server program (जैसे Uvicorn) server startup पर automatically start हो, और किसी **human intervention** की आवश्यकता के बिना, ताकि आपकी API के साथ हमेशा एक process चल रहा हो (जैसे Uvicorn आपकी FastAPI app चला रहा हो)।
+
+### अलग Program { #separate-program }
+
+इसे हासिल करने के लिए, आपके पास सामान्यतः एक **अलग program** होगा जो सुनिश्चित करेगा कि आपकी application startup पर चले। और कई मामलों में, यह यह भी सुनिश्चित करेगा कि अन्य components या applications भी चलें, उदाहरण के लिए, एक database।
+
+### Startup पर चलाने के लिए उदाहरण Tools { #example-tools-to-run-at-startup }
+
+इस काम को करने वाले tools के कुछ उदाहरण हैं:
+
+* Docker
+* Kubernetes
+* Docker Compose
+* Docker in Swarm Mode
+* Systemd
+* Supervisor
+* Cloud provider द्वारा उनकी services के हिस्से के रूप में internally संभाला गया
+* अन्य...
+
+अगले chapters में मैं आपको अधिक ठोस उदाहरण दूँगा।
+
+## Restarts { #restarts }
+
+यह सुनिश्चित करने जैसा कि आपकी application startup पर चले, आप शायद यह भी सुनिश्चित करना चाहेंगे कि failures के बाद उसे **restart** किया जाए।
+
+### हम गलतियाँ करते हैं { #we-make-mistakes }
+
+हम, मनुष्य के रूप में, हर समय **गलतियाँ** करते हैं। Software में लगभग *हमेशा* अलग-अलग जगहों पर **bugs** छिपे होते हैं। 🐛
+
+और हम developers उन bugs को खोजते हुए और नई features implement करते हुए code को बेहतर बनाते रहते हैं (संभवतः नए bugs भी जोड़ते हुए 😅)।
+
+### छोटे Errors Automatically संभाले जाते हैं { #small-errors-automatically-handled }
+
+FastAPI के साथ web APIs बनाते समय, यदि हमारे code में कोई error है, तो FastAPI सामान्यतः उसे उस single request तक सीमित रखेगा जिसने error trigger किया। 🛡
+
+Client को उस request के लिए **500 Internal Server Error** मिलेगा, लेकिन application पूरी तरह crash होने के बजाय अगली requests के लिए काम करती रहेगी।
+
+### बड़े Errors - Crashes { #bigger-errors-crashes }
+
+फिर भी, ऐसे मामले हो सकते हैं जहाँ हम कुछ code लिखते हैं जो **पूरी application को crash** कर देता है, जिससे Uvicorn और Python crash हो जाते हैं। 💥
+
+और फिर भी, आप शायद नहीं चाहेंगे कि application केवल इसलिए dead रहे क्योंकि एक जगह error था, आप शायद चाहेंगे कि वह कम से कम उन *path operations* के लिए **चलती रहे** जो broken नहीं हैं।
+
+### Crash के बाद Restart { #restart-after-crash }
+
+लेकिन उन मामलों में जहाँ वास्तव में खराब errors running **process** को crash कर देते हैं, आप चाहेंगे कि एक external component process को **restart** करने का प्रभारी हो, कम से कम कुछ बार...
+
+/// tip | सुझाव
+
+...हालाँकि यदि पूरी application बस **तुरंत crash** हो रही है तो शायद उसे हमेशा restart करते रहने का कोई अर्थ नहीं है। लेकिन ऐसे मामलों में, आप शायद इसे development के दौरान, या कम से कम deployment के ठीक बाद notice करेंगे।
+
+तो आइए मुख्य मामलों पर focus करें, जहाँ यह **future** में कुछ विशेष मामलों में पूरी तरह crash हो सकती है, और फिर भी उसे restart करना समझ में आता है।
+
+///
+
+आप शायद चाहेंगे कि आपकी application को restart करने का प्रभारी एक **external component** हो, क्योंकि उस point तक, Uvicorn और Python वाली वही application पहले ही crash हो चुकी होती है, इसलिए उसी app के उसी code में ऐसा कुछ नहीं होता जो इसके बारे में कुछ कर सके।
+
+### Automatically Restart करने के लिए उदाहरण Tools { #example-tools-to-restart-automatically }
+
+अधिकांश मामलों में, वही tool जो **startup पर program चलाने** के लिए उपयोग होता है, automatic **restarts** संभालने के लिए भी उपयोग होता है।
+
+उदाहरण के लिए, इसे ये संभाल सकते हैं:
+
+* Docker
+* Kubernetes
+* Docker Compose
+* Docker in Swarm Mode
+* Systemd
+* Supervisor
+* Cloud provider द्वारा उनकी services के हिस्से के रूप में internally संभाला गया
+* अन्य...
+
+## Replication - Processes और Memory { #replication-processes-and-memory }
+
+FastAPI application के साथ, Uvicorn चलाने वाले `fastapi` command जैसे server program का उपयोग करते हुए, उसे **एक process** में एक बार चलाना multiple clients को concurrently serve कर सकता है।
+
+लेकिन कई मामलों में, आप एक ही समय में कई worker processes चलाना चाहेंगे।
+
+### Multiple Processes - Workers { #multiple-processes-workers }
+
+यदि आपके पास single process द्वारा handle किए जा सकने से अधिक clients हैं (उदाहरण के लिए यदि virtual machine बहुत बड़ी नहीं है) और server के CPU में **multiple cores** हैं, तो आप एक ही application के साथ **multiple processes** एक ही समय में चला सकते हैं, और सभी requests को उनके बीच distribute कर सकते हैं।
+
+जब आप उसी API program के **multiple processes** चलाते हैं, तो उन्हें आम तौर पर **workers** कहा जाता है।
+
+### Worker Processes और Ports { #worker-processes-and-ports }
+
+Docs [About HTTPS](https.md) से याद करें कि server में port और IP address के एक combination पर केवल एक process listen कर सकता है?
+
+यह अभी भी सही है।
+
+इसलिए, एक ही समय में **multiple processes** रखने में सक्षम होने के लिए, एक **single process port पर listening** होना चाहिए जो फिर communication को किसी तरीके से प्रत्येक worker process तक transmit करे।
+
+### प्रति Process Memory { #memory-per-process }
+
+अब, जब program memory में चीजें load करता है, उदाहरण के लिए, किसी variable में machine learning model, या किसी बड़े file की contents किसी variable में, तो वह सब server की **memory (RAM) का थोड़ा हिस्सा consume** करता है।
+
+और multiple processes सामान्यतः **कोई memory share नहीं करते**। इसका मतलब है कि प्रत्येक running process की अपनी चीजें, variables, और memory होती है। और यदि आप अपने code में बड़ी मात्रा में memory consume कर रहे हैं, तो **प्रत्येक process** उतनी ही memory consume करेगा।
+
+### Server Memory { #server-memory }
+
+उदाहरण के लिए, यदि आपका code **1 GB size** वाला Machine Learning model load करता है, तो जब आप अपनी API के साथ एक process चलाते हैं, तो वह कम से कम 1 GB RAM consume करेगा। और यदि आप **4 processes** (4 workers) start करते हैं, तो प्रत्येक 1 GB RAM consume करेगा। इसलिए कुल मिलाकर, आपकी API **4 GB RAM** consume करेगी।
+
+और यदि आपके remote server या virtual machine में केवल 3 GB RAM है, तो 4 GB से अधिक RAM load करने की कोशिश problems पैदा करेगी। 🚨
+
+### Multiple Processes - एक उदाहरण { #multiple-processes-an-example }
+
+इस उदाहरण में, एक **Manager Process** है जो दो **Worker Processes** start और control करता है।
+
+यह Manager Process शायद IP में **port** पर listen करने वाला होगा। और यह सभी communication को worker processes तक transmit करेगा।
+
+वे worker processes वे होंगे जो आपकी application चला रहे होंगे, वे **request** प्राप्त करने और **response** return करने के लिए मुख्य computations करेंगे, और वे RAM में variables में डाली गई कोई भी चीज़ load करेंगे।
+
+
+
+लेकिन आप `syntaxHighlight` को `False` पर set करके इसे disable कर सकते हैं:
+
+{* ../../docs_src/configure_swagger_ui/tutorial001_py310.py hl[3] *}
+
+...और फिर Swagger UI अब syntax highlighting नहीं दिखाएगा:
+
+
+
+## Theme बदलें { #change-the-theme }
+
+इसी तरह आप key `"syntaxHighlight.theme"` के साथ syntax highlighting theme set कर सकते हैं (ध्यान दें कि इसके बीच में एक dot है):
+
+{* ../../docs_src/configure_swagger_ui/tutorial002_py310.py hl[3] *}
+
+वह configuration syntax highlighting color theme बदल देगी:
+
+
+
+## Default Swagger UI Parameters बदलें { #change-default-swagger-ui-parameters }
+
+FastAPI में ज़्यादातर use cases के लिए उपयुक्त कुछ default configuration parameters शामिल हैं।
+
+इसमें ये default configurations शामिल हैं:
+
+{* ../../fastapi/openapi/docs.py ln[9:24] hl[18:24] *}
+
+आप `swagger_ui_parameters` argument में अलग value set करके इनमें से किसी को भी override कर सकते हैं।
+
+उदाहरण के लिए, `deepLinking` disable करने के लिए आप ये settings `swagger_ui_parameters` में pass कर सकते हैं:
+
+{* ../../docs_src/configure_swagger_ui/tutorial003_py310.py hl[3] *}
+
+## अन्य Swagger UI Parameters { #other-swagger-ui-parameters }
+
+आप जिन अन्य सभी संभावित configurations का उपयोग कर सकते हैं, उन्हें देखने के लिए आधिकारिक [Swagger UI parameters के docs](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/) पढ़ें।
+
+## केवल JavaScript settings { #javascript-only-settings }
+
+Swagger UI अन्य configurations को **केवल JavaScript** objects (उदाहरण के लिए, JavaScript functions) होने की भी अनुमति देता है।
+
+FastAPI में ये केवल JavaScript `presets` settings भी शामिल हैं:
+
+```JavaScript
+presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIBundle.SwaggerUIStandalonePreset
+]
+```
+
+ये **JavaScript** objects हैं, strings नहीं, इसलिए आप इन्हें सीधे Python code से pass नहीं कर सकते।
+
+अगर आपको ऐसी केवल JavaScript configurations का उपयोग करना है, तो आप ऊपर दिए गए methods में से किसी एक का उपयोग कर सकते हैं। पूरी Swagger UI *path operation* को override करें और आपको जो भी JavaScript चाहिए उसे manually लिखें।
diff --git a/docs/hi/docs/how-to/custom-docs-ui-assets.md b/docs/hi/docs/how-to/custom-docs-ui-assets.md
new file mode 100644
index 000000000..5f22186df
--- /dev/null
+++ b/docs/hi/docs/how-to/custom-docs-ui-assets.md
@@ -0,0 +1,185 @@
+# कस्टम Docs UI Static Assets (Self-Hosting) { #custom-docs-ui-static-assets-self-hosting }
+
+API docs **Swagger UI** और **ReDoc** का उपयोग करते हैं, और उनमें से प्रत्येक को कुछ JavaScript और CSS files की जरूरत होती है।
+
+Default रूप से, वे files एक CDN से serve की जाती हैं।
+
+लेकिन इसे customize करना संभव है, आप कोई विशिष्ट CDN set कर सकते हैं, या files को स्वयं serve कर सकते हैं।
+
+## JavaScript और CSS के लिए कस्टम CDN { #custom-cdn-for-javascript-and-css }
+
+मान लें कि आप कोई अलग CDN उपयोग करना चाहते हैं, उदाहरण के लिए आप `https://unpkg.com/` उपयोग करना चाहते हैं।
+
+यह उपयोगी हो सकता है अगर, उदाहरण के लिए, आप ऐसे देश में रहते हैं जो कुछ URLs को restrict करता है।
+
+### Automatic docs को disable करें { #disable-the-automatic-docs }
+
+पहला step automatic docs को disable करना है, क्योंकि default रूप से, वे default CDN का उपयोग करते हैं।
+
+उन्हें disable करने के लिए, अपना `FastAPI` app बनाते समय उनके URLs को `None` पर set करें:
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[8] *}
+
+### कस्टम docs शामिल करें { #include-the-custom-docs }
+
+अब आप कस्टम docs के लिए *path operations* बना सकते हैं।
+
+आप docs के लिए HTML pages बनाने हेतु FastAPI के internal functions को reuse कर सकते हैं, और उन्हें जरूरी arguments pass कर सकते हैं:
+
+* `openapi_url`: वह URL जहां docs के लिए HTML page आपके API के लिए OpenAPI schema प्राप्त कर सकता है। आप यहां attribute `app.openapi_url` का उपयोग कर सकते हैं।
+* `title`: आपके API का title।
+* `oauth2_redirect_url`: default उपयोग करने के लिए आप यहां `app.swagger_ui_oauth2_redirect_url` का उपयोग कर सकते हैं।
+* `swagger_js_url`: वह URL जहां आपके Swagger UI docs के लिए HTML **JavaScript** file प्राप्त कर सकता है। यह कस्टम CDN URL है।
+* `swagger_css_url`: वह URL जहां आपके Swagger UI docs के लिए HTML **CSS** file प्राप्त कर सकता है। यह कस्टम CDN URL है।
+
+और ReDoc के लिए भी इसी तरह...
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[2:6,11:19,22:24,27:33] *}
+
+/// tip | सुझाव
+
+`swagger_ui_redirect` के लिए *path operation* तब एक helper है जब आप OAuth2 का उपयोग करते हैं।
+
+यदि आप अपने API को किसी OAuth2 provider के साथ integrate करते हैं, तो आप authenticate कर पाएंगे और प्राप्त credentials के साथ API docs पर वापस आ पाएंगे। और वास्तविक OAuth2 authentication का उपयोग करके उससे interact कर पाएंगे।
+
+Swagger UI आपके लिए इसे behind the scenes handle करेगा, लेकिन इसके लिए इस "redirect" helper की जरूरत होती है।
+
+///
+
+### इसे test करने के लिए एक *path operation* बनाएं { #create-a-path-operation-to-test-it }
+
+अब, यह test करने के लिए कि सब कुछ काम करता है, एक *path operation* बनाएं:
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[36:38] *}
+
+### इसे test करें { #test-it }
+
+अब, आप अपने docs पर [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) जा सकेंगे, और page reload करने पर, यह उन assets को नए CDN से load करेगा।
+
+## Docs के लिए JavaScript और CSS की Self-hosting { #self-hosting-javascript-and-css-for-docs }
+
+JavaScript और CSS की self-hosting उपयोगी हो सकती है अगर, उदाहरण के लिए, आपको चाहिए कि आपका app offline रहने पर भी, खुले Internet access के बिना, या local network में काम करता रहे।
+
+यहां आप देखेंगे कि उन files को स्वयं, उसी FastAPI app में कैसे serve किया जाए, और docs को उनका उपयोग करने के लिए कैसे configure किया जाए।
+
+### Project file structure { #project-file-structure }
+
+मान लें आपके project की file structure ऐसी दिखती है:
+
+```
+.
+├── app
+│ ├── __init__.py
+│ ├── main.py
+```
+
+अब उन static files को store करने के लिए एक directory बनाएं।
+
+आपकी नई file structure ऐसी दिख सकती है:
+
+```
+.
+├── app
+│ ├── __init__.py
+│ ├── main.py
+└── static/
+```
+
+### Files download करें { #download-the-files }
+
+Docs के लिए जरूरी static files download करें और उन्हें उस `static/` directory में रखें।
+
+आप शायद प्रत्येक link पर right-click करके "Save link as..." जैसा कोई option select कर सकते हैं।
+
+**Swagger UI** files का उपयोग करता है:
+
+* [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js)
+* [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css)
+
+और **ReDoc** file का उपयोग करता है:
+
+* [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js)
+
+उसके बाद, आपकी file structure ऐसी दिख सकती है:
+
+```
+.
+├── app
+│ ├── __init__.py
+│ ├── main.py
+└── static
+ ├── redoc.standalone.js
+ ├── swagger-ui-bundle.js
+ └── swagger-ui.css
+```
+
+### Static files serve करें { #serve-the-static-files }
+
+* `StaticFiles` import करें।
+* किसी विशिष्ट path में `StaticFiles()` instance को "Mount" करें।
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[7,11] *}
+
+### Static files को test करें { #test-the-static-files }
+
+अपना application start करें और [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js) पर जाएं।
+
+आपको **ReDoc** के लिए एक बहुत लंबी JavaScript file दिखनी चाहिए।
+
+यह कुछ इस तरह से शुरू हो सकती है:
+
+```JavaScript
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
+...
+```
+
+यह confirm करता है कि आप अपने app से static files serve कर पा रहे हैं, और आपने docs के लिए static files को सही जगह पर रखा है।
+
+अब हम app को docs के लिए उन static files का उपयोग करने के लिए configure कर सकते हैं।
+
+### Static files के लिए automatic docs को disable करें { #disable-the-automatic-docs-for-static-files }
+
+कस्टम CDN का उपयोग करने जैसा ही, पहला step automatic docs को disable करना है, क्योंकि वे default रूप से CDN का उपयोग करते हैं।
+
+उन्हें disable करने के लिए, अपना `FastAPI` app बनाते समय उनके URLs को `None` पर set करें:
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[9] *}
+
+### Static files के लिए कस्टम docs शामिल करें { #include-the-custom-docs-for-static-files }
+
+और कस्टम CDN की तरह ही, अब आप कस्टम docs के लिए *path operations* बना सकते हैं।
+
+फिर से, आप docs के लिए HTML pages बनाने हेतु FastAPI के internal functions को reuse कर सकते हैं, और उन्हें जरूरी arguments pass कर सकते हैं:
+
+* `openapi_url`: वह URL जहां docs के लिए HTML page आपके API के लिए OpenAPI schema प्राप्त कर सकता है। आप यहां attribute `app.openapi_url` का उपयोग कर सकते हैं।
+* `title`: आपके API का title।
+* `oauth2_redirect_url`: default उपयोग करने के लिए आप यहां `app.swagger_ui_oauth2_redirect_url` का उपयोग कर सकते हैं।
+* `swagger_js_url`: वह URL जहां आपके Swagger UI docs के लिए HTML **JavaScript** file प्राप्त कर सकता है। **यह वही है जिसे अब आपका अपना app serve कर रहा है**।
+* `swagger_css_url`: वह URL जहां आपके Swagger UI docs के लिए HTML **CSS** file प्राप्त कर सकता है। **यह वही है जिसे अब आपका अपना app serve कर रहा है**।
+
+और ReDoc के लिए भी इसी तरह...
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[2:6,14:22,25:27,30:36] *}
+
+/// tip | सुझाव
+
+`swagger_ui_redirect` के लिए *path operation* तब एक helper है जब आप OAuth2 का उपयोग करते हैं।
+
+यदि आप अपने API को किसी OAuth2 provider के साथ integrate करते हैं, तो आप authenticate कर पाएंगे और प्राप्त credentials के साथ API docs पर वापस आ पाएंगे। और वास्तविक OAuth2 authentication का उपयोग करके उससे interact कर पाएंगे।
+
+Swagger UI आपके लिए इसे behind the scenes handle करेगा, लेकिन इसके लिए इस "redirect" helper की जरूरत होती है।
+
+///
+
+### Static files को test करने के लिए एक *path operation* बनाएं { #create-a-path-operation-to-test-static-files }
+
+अब, यह test करने के लिए कि सब कुछ काम करता है, एक *path operation* बनाएं:
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[39:41] *}
+
+### Static Files UI को test करें { #test-static-files-ui }
+
+अब, आप अपना WiFi disconnect कर सकेंगे, अपने docs पर [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) जा सकेंगे, और page reload कर सकेंगे।
+
+और Internet के बिना भी, आप अपने API के docs देख पाएंगे और उससे interact कर पाएंगे।
diff --git a/docs/hi/docs/how-to/custom-request-and-route.md b/docs/hi/docs/how-to/custom-request-and-route.md
new file mode 100644
index 000000000..97743d169
--- /dev/null
+++ b/docs/hi/docs/how-to/custom-request-and-route.md
@@ -0,0 +1,109 @@
+# Custom Request और APIRoute class { #custom-request-and-apiroute-class }
+
+कुछ मामलों में, आप `Request` और `APIRoute` classes द्वारा उपयोग किए जाने वाले logic को override करना चाह सकते हैं।
+
+विशेष रूप से, यह middleware में logic का एक अच्छा विकल्प हो सकता है।
+
+उदाहरण के लिए, अगर आप request body को आपके application द्वारा process किए जाने से पहले पढ़ना या manipulate करना चाहते हैं।
+
+/// danger | खतरा
+
+यह एक "advanced" feature है।
+
+अगर आप अभी-अभी **FastAPI** के साथ शुरुआत कर रहे हैं, तो शायद आप इस section को छोड़ना चाहेंगे।
+
+///
+
+## Use cases { #use-cases }
+
+कुछ use cases में शामिल हैं:
+
+* non-JSON request bodies को JSON में convert करना (जैसे [`msgpack`](https://msgpack.org/index.html)).
+* gzip-compressed request bodies को decompress करना।
+* सभी request bodies को automatically log करना।
+
+## Custom request body encodings को संभालना { #handling-custom-request-body-encodings }
+
+आइए देखें कि gzip requests को decompress करने के लिए custom `Request` subclass का उपयोग कैसे करें।
+
+और उस custom request class का उपयोग करने के लिए एक `APIRoute` subclass।
+
+### Custom `GzipRequest` class बनाएँ { #create-a-custom-gziprequest-class }
+
+/// tip | सुझाव
+
+यह दिखाने के लिए एक सरल उदाहरण है कि यह कैसे काम करता है, अगर आपको Gzip support चाहिए, तो आप दिए गए [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware) का उपयोग कर सकते हैं।
+
+///
+
+सबसे पहले, हम एक `GzipRequest` class बनाते हैं, जो उपयुक्त header की मौजूदगी में body को decompress करने के लिए `Request.body()` method को overwrite करेगी।
+
+अगर header में `gzip` नहीं है, तो यह body को decompress करने की कोशिश नहीं करेगी।
+
+इस तरह, वही route class gzip compressed या uncompressed requests को संभाल सकती है।
+
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[9:16] *}
+
+### Custom `GzipRoute` class बनाएँ { #create-a-custom-gziproute-class }
+
+इसके बाद, हम `fastapi.routing.APIRoute` की एक custom subclass बनाते हैं जो `GzipRequest` का उपयोग करेगी।
+
+इस बार, यह `APIRoute.get_route_handler()` method को overwrite करेगी।
+
+यह method एक function return करता है। और वही function एक request प्राप्त करेगा और response return करेगा।
+
+यहाँ हम इसका उपयोग original request से `GzipRequest` बनाने के लिए करते हैं।
+
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[19:27] *}
+
+/// note | तकनीकी विवरण
+
+एक `Request` में `request.scope` attribute होता है, जो बस एक Python `dict` है जिसमें request से संबंधित metadata होता है।
+
+एक `Request` में `request.receive` भी होता है, जो request की body को "receive" करने के लिए एक function है।
+
+`scope` `dict` और `receive` function दोनों ASGI specification का हिस्सा हैं।
+
+और ये दो चीजें, `scope` और `receive`, नई `Request` instance बनाने के लिए आवश्यक हैं।
+
+`Request` के बारे में अधिक जानने के लिए [Requests के बारे में Starlette के docs](https://www.starlette.dev/requests/) देखें।
+
+///
+
+`GzipRequest.get_route_handler` द्वारा return किए गए function का केवल एक अलग काम है: `Request` को `GzipRequest` में convert करना।
+
+ऐसा करने से, हमारा `GzipRequest` data को हमारे *path operations* तक पास करने से पहले decompress करने का ध्यान रखेगा (अगर आवश्यक हो)।
+
+उसके बाद, processing logic सब वही रहता है।
+
+लेकिन `GzipRequest.body` में हमारे बदलावों की वजह से, request body जरूरत पड़ने पर **FastAPI** द्वारा load किए जाने पर automatically decompress हो जाएगी।
+
+## Exception handler में request body तक पहुँचना { #accessing-the-request-body-in-an-exception-handler }
+
+/// tip | सुझाव
+
+इसी समस्या को हल करने के लिए, `RequestValidationError` के custom handler में `body` का उपयोग करना शायद बहुत आसान है ([Errors संभालना](../tutorial/handling-errors.md#use-the-requestvalidationerror-body))।
+
+लेकिन यह उदाहरण अभी भी valid है और यह दिखाता है कि internal components के साथ कैसे interact करें।
+
+///
+
+हम इसी approach का उपयोग exception handler में request body तक पहुँचने के लिए भी कर सकते हैं।
+
+हमें बस request को `try`/`except` block के अंदर संभालना है:
+
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[14,16] *}
+
+अगर कोई exception होता है, तो `Request` instance अभी भी scope में होगी, इसलिए error संभालते समय हम request body को पढ़ सकते हैं और उसका उपयोग कर सकते हैं:
+
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[17:19] *}
+
+## Router में custom `APIRoute` class { #custom-apiroute-class-in-a-router }
+
+आप `APIRouter` का `route_class` parameter भी set कर सकते हैं:
+
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[26] *}
+
+इस उदाहरण में, `router` के अंतर्गत *path operations* custom `TimedRoute` class का उपयोग करेंगे, और response में एक अतिरिक्त `X-Response-Time` header होगा जिसमें response generate करने में लगा समय होगा:
+
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[13:20] *}
diff --git a/docs/hi/docs/how-to/extending-openapi.md b/docs/hi/docs/how-to/extending-openapi.md
new file mode 100644
index 000000000..f3bebfa66
--- /dev/null
+++ b/docs/hi/docs/how-to/extending-openapi.md
@@ -0,0 +1,88 @@
+# OpenAPI को विस्तारित करना { #extending-openapi }
+
+कुछ मामलों में आपको generated OpenAPI schema को संशोधित करने की ज़रूरत हो सकती है।
+
+इस section में आप देखेंगे कि कैसे।
+
+## सामान्य process { #the-normal-process }
+
+सामान्य (default) process इस प्रकार है।
+
+एक `FastAPI` application (instance) में एक `.openapi()` method होता है, जिससे OpenAPI schema return करने की अपेक्षा की जाती है।
+
+application object बनाने के हिस्से के रूप में, `/openapi.json` के लिए (या आपने अपने `openapi_url` में जो भी set किया है उसके लिए) एक *path operation* registered होता है।
+
+यह बस application के `.openapi()` method के result के साथ एक JSON response return करता है।
+
+Default रूप से, method `.openapi()` जो करता है वह यह है कि property `.openapi_schema` को check करता है कि उसमें contents हैं या नहीं, और उन्हें return करता है।
+
+अगर नहीं हैं, तो यह उन्हें `fastapi.openapi.utils.get_openapi` में utility function का उपयोग करके generate करता है।
+
+और वह function `get_openapi()` parameters के रूप में ये प्राप्त करता है:
+
+* `title`: OpenAPI title, जो docs में दिखाया जाता है।
+* `version`: आपके API का version, जैसे `2.5.0`।
+* `openapi_version`: उपयोग की गई OpenAPI specification का version। Default रूप से, latest: `3.1.0`।
+* `summary`: API का एक छोटा summary।
+* `description`: आपके API का description, इसमें markdown शामिल हो सकता है और यह docs में दिखाया जाएगा।
+* `routes`: application से routes, जो `app.routes` से लिए जाते हैं। FastAPI इन्हें registered *path operations* collect करने के लिए उपयोग करता है, जिनमें included routers से आने वाले भी शामिल हैं।
+
+/// tip | तकनीकी विवरण
+
+`app.routes` एक lower-level route tree है। इसमें route candidates शामिल हो सकते हैं जिन्हें FastAPI internally included routers के लिए उपयोग करता है, केवल final `APIRoute` objects ही नहीं।
+
+आप फिर भी `app.routes` को `get_openapi()` में pass कर सकते हैं। FastAPI effective path operations collect करने के लिए उस route tree को traverse करेगा।
+
+///
+
+/// note | नोट
+
+parameter `summary` OpenAPI 3.1.0 और उससे ऊपर में उपलब्ध है, जिसे FastAPI 0.99.0 और उससे ऊपर support करता है।
+
+///
+
+## Defaults को override करना { #overriding-the-defaults }
+
+ऊपर दी गई जानकारी का उपयोग करके, आप OpenAPI schema generate करने और अपनी ज़रूरत के अनुसार प्रत्येक हिस्से को override करने के लिए उसी utility function का उपयोग कर सकते हैं।
+
+उदाहरण के लिए, आइए [custom logo शामिल करने के लिए ReDoc का OpenAPI extension](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo) जोड़ें।
+
+### सामान्य **FastAPI** { #normal-fastapi }
+
+सबसे पहले, अपनी पूरी **FastAPI** application सामान्य रूप से लिखें:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[1,4,7:9] *}
+
+### OpenAPI schema generate करें { #generate-the-openapi-schema }
+
+फिर, `custom_openapi()` function के अंदर, OpenAPI schema generate करने के लिए उसी utility function का उपयोग करें:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[2,15:21] *}
+
+### OpenAPI schema को संशोधित करें { #modify-the-openapi-schema }
+
+अब आप OpenAPI schema में `info` "object" में custom `x-logo` जोड़कर ReDoc extension जोड़ सकते हैं:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[22:24] *}
+
+### OpenAPI schema को cache करें { #cache-the-openapi-schema }
+
+आप अपनी generated schema store करने के लिए property `.openapi_schema` को "cache" के रूप में उपयोग कर सकते हैं।
+
+इस तरह, जब भी कोई user आपके API docs खोलेगा, आपकी application को हर बार schema generate नहीं करना पड़ेगा।
+
+यह केवल एक बार generate होगा, और फिर अगली requests के लिए वही cached schema उपयोग किया जाएगा।
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[13:14,25:26] *}
+
+### Method को override करें { #override-the-method }
+
+अब आप `.openapi()` method को अपने नए function से replace कर सकते हैं।
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[29] *}
+
+### इसे check करें { #check-it }
+
+जब आप [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) पर जाएंगे, तो आप देखेंगे कि आप अपना custom logo उपयोग कर रहे हैं (इस उदाहरण में, **FastAPI** का logo):
+
+
diff --git a/docs/hi/docs/how-to/general.md b/docs/hi/docs/how-to/general.md
new file mode 100644
index 000000000..95c8bb653
--- /dev/null
+++ b/docs/hi/docs/how-to/general.md
@@ -0,0 +1,43 @@
+# सामान्य - How To - Recipes { #general-how-to-recipes }
+
+सामान्य या अक्सर पूछे जाने वाले प्रश्नों के लिए, docs में अन्य जगहों के कई pointers यहाँ दिए गए हैं।
+
+## Data फ़िल्टर करें - सुरक्षा { #filter-data-security }
+
+यह सुनिश्चित करने के लिए कि आप जितना data लौटाना चाहिए उससे अधिक न लौटाएँ, [Tutorial - Response Model - Return Type](../tutorial/response-model.md) के docs पढ़ें।
+
+## Response Performance को optimize करें - Response Model - Return Type { #optimize-response-performance-response-model-return-type }
+
+JSON data लौटाते समय performance को optimize करने के लिए, return type या response model का उपयोग करें, इस तरह Pydantic JSON में serialization को Rust side पर संभालेगा, Python से गुज़रे बिना। अधिक पढ़ें [Tutorial - Response Model - Return Type](../tutorial/response-model.md) के docs में।
+
+## Documentation Tags - OpenAPI { #documentation-tags-openapi }
+
+अपने *path operations* में tags जोड़ने और उन्हें docs UI में group करने के लिए, [Tutorial - Path Operation Configurations - Tags](../tutorial/path-operation-configuration.md#tags) के docs पढ़ें।
+
+## Documentation Summary और Description - OpenAPI { #documentation-summary-and-description-openapi }
+
+अपने *path operations* में summary और description जोड़ने, और उन्हें docs UI में दिखाने के लिए, [Tutorial - Path Operation Configurations - Summary and Description](../tutorial/path-operation-configuration.md#summary-and-description) के docs पढ़ें।
+
+## Documentation Response description - OpenAPI { #documentation-response-description-openapi }
+
+response का description define करने के लिए, जो docs UI में दिखाया जाता है, [Tutorial - Path Operation Configurations - Response description](../tutorial/path-operation-configuration.md#response-description) के docs पढ़ें।
+
+## Documentation में *Path Operation* को Deprecate करें - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
+
+किसी *path operation* को deprecate करने और उसे docs UI में दिखाने के लिए, [Tutorial - Path Operation Configurations - Deprecation](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) के docs पढ़ें।
+
+## किसी भी Data को JSON-compatible में convert करें { #convert-any-data-to-json-compatible }
+
+किसी भी data को JSON-compatible में convert करने के लिए, [Tutorial - JSON Compatible Encoder](../tutorial/encoder.md) के docs पढ़ें।
+
+## OpenAPI Metadata - Docs { #openapi-metadata-docs }
+
+अपने OpenAPI schema में metadata जोड़ने के लिए, जिसमें license, version, contact, आदि शामिल हैं, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md) के docs पढ़ें।
+
+## OpenAPI Custom URL { #openapi-custom-url }
+
+OpenAPI URL को customize करने (या हटाने) के लिए, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#openapi-url) के docs पढ़ें।
+
+## OpenAPI Docs URLs { #openapi-docs-urls }
+
+अपने-आप generate किए गए docs user interfaces के लिए उपयोग किए जाने वाले URLs को update करने के लिए, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#docs-urls) के docs पढ़ें।
diff --git a/docs/hi/docs/how-to/graphql.md b/docs/hi/docs/how-to/graphql.md
new file mode 100644
index 000000000..7a8fbdb3d
--- /dev/null
+++ b/docs/hi/docs/how-to/graphql.md
@@ -0,0 +1,60 @@
+# GraphQL { #graphql }
+
+क्योंकि **FastAPI** **ASGI** standard पर आधारित है, इसलिए ASGI के साथ compatible किसी भी **GraphQL** library को integrate करना बहुत आसान है।
+
+आप उसी application में सामान्य FastAPI *path operations* को GraphQL के साथ combine कर सकते हैं।
+
+/// tip | सुझाव
+
+**GraphQL** कुछ बहुत specific use cases को solve करता है।
+
+Common **web APIs** की तुलना में इसके **advantages** और **disadvantages** हैं।
+
+सुनिश्चित करें कि आप evaluate करें कि आपके use case के लिए **benefits**, **drawbacks** की भरपाई करते हैं या नहीं। 🤓
+
+///
+
+## GraphQL Libraries { #graphql-libraries }
+
+यहाँ कुछ **GraphQL** libraries हैं जिनमें **ASGI** support है। आप उन्हें **FastAPI** के साथ उपयोग कर सकते हैं:
+
+* [Strawberry](https://strawberry.rocks/) 🍓
+ * [FastAPI के लिए docs](https://strawberry.rocks/docs/integrations/fastapi) के साथ
+* [Ariadne](https://ariadnegraphql.org/)
+ * [FastAPI के लिए docs](https://ariadnegraphql.org/docs/fastapi-integration) के साथ
+* [Tartiflette](https://tartiflette.io/)
+ * ASGI integration प्रदान करने के लिए [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) के साथ
+* [Graphene](https://graphene-python.org/)
+ * [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) के साथ
+
+## Strawberry के साथ GraphQL { #graphql-with-strawberry }
+
+यदि आपको **GraphQL** के साथ काम करने की ज़रूरत है या आप करना चाहते हैं, तो [**Strawberry**](https://strawberry.rocks/) **recommended** library है क्योंकि इसका design **FastAPI** के design के सबसे करीब है, यह पूरी तरह **type annotations** पर आधारित है।
+
+आपके use case के आधार पर, आप कोई अलग library उपयोग करना पसंद कर सकते हैं, लेकिन अगर आप मुझसे पूछें, तो मैं शायद सुझाव दूँगा कि आप **Strawberry** आज़माएँ।
+
+यहाँ एक छोटा preview है कि आप Strawberry को FastAPI के साथ कैसे integrate कर सकते हैं:
+
+{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
+
+आप [Strawberry documentation](https://strawberry.rocks/) में Strawberry के बारे में और जान सकते हैं।
+
+और [FastAPI के साथ Strawberry](https://strawberry.rocks/docs/integrations/fastapi) के बारे में docs भी।
+
+## Starlette से पुराना `GraphQLApp` { #older-graphqlapp-from-starlette }
+
+Starlette के पिछले versions में [Graphene](https://graphene-python.org/) के साथ integrate करने के लिए एक `GraphQLApp` class शामिल थी।
+
+इसे Starlette से deprecated कर दिया गया था, लेकिन यदि आपके पास ऐसा code है जो इसका उपयोग करता था, तो आप आसानी से [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) पर **migrate** कर सकते हैं, जो वही use case cover करता है और जिसका **लगभग identical interface** है।
+
+/// tip | सुझाव
+
+यदि आपको GraphQL की ज़रूरत है, तो मैं फिर भी recommend करूँगा कि आप [Strawberry](https://strawberry.rocks/) देखें, क्योंकि यह custom classes और types की बजाय type annotations पर आधारित है।
+
+///
+
+## और जानें { #learn-more }
+
+आप [official GraphQL documentation](https://graphql.org/) में **GraphQL** के बारे में और जान सकते हैं।
+
+आप ऊपर वर्णित उन libraries में से प्रत्येक के बारे में उनके links में और भी पढ़ सकते हैं।
diff --git a/docs/hi/docs/how-to/index.md b/docs/hi/docs/how-to/index.md
new file mode 100644
index 000000000..c42c2dd0c
--- /dev/null
+++ b/docs/hi/docs/how-to/index.md
@@ -0,0 +1,13 @@
+# कैसे करें - रेसिपी { #how-to-recipes }
+
+यहाँ आप **कई topics** के लिए अलग-अलग recipes या "how to" guides देखेंगे।
+
+इनमें से ज़्यादातर ideas कमोबेश **स्वतंत्र** होंगे, और ज़्यादातर मामलों में आपको इन्हें केवल तभी पढ़ने की ज़रूरत होगी जब वे सीधे **आपके project** पर लागू होते हों।
+
+अगर कुछ आपके project के लिए रोचक और उपयोगी लगता है, तो आगे बढ़कर उसे देखें, लेकिन नहीं तो आप शायद उन्हें छोड़ सकते हैं।
+
+/// tip | सुझाव
+
+अगर आप **FastAPI सीखना** structured तरीके से चाहते हैं (recommended), तो इसके बजाय [ट्यूटोरियल - यूज़र गाइड](../tutorial/index.md) को अध्याय-दर-अध्याय पढ़ें।
+
+///
diff --git a/docs/hi/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/hi/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
new file mode 100644
index 000000000..68bc07e30
--- /dev/null
+++ b/docs/hi/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
@@ -0,0 +1,153 @@
+# Pydantic v1 से Pydantic v2 में माइग्रेट करें { #migrate-from-pydantic-v1-to-pydantic-v2 }
+
+अगर आपके पास कोई पुराना FastAPI app है, तो हो सकता है कि आप Pydantic version 1 का उपयोग कर रहे हों।
+
+FastAPI version 0.100.0 में Pydantic v1 या v2, दोनों में से किसी के लिए support था। यह वही उपयोग करता था जो आपने install किया हुआ था।
+
+FastAPI version 0.119.0 ने Pydantic v2 के अंदर से Pydantic v1 के लिए आंशिक support पेश किया (`pydantic.v1` के रूप में), ताकि v2 में migration आसान हो सके।
+
+FastAPI 0.126.0 ने Pydantic v1 के लिए support हटा दिया, लेकिन थोड़े समय के लिए `pydantic.v1` को support करना जारी रखा।
+
+FastAPI 0.128.0 ने `pydantic.v1` के लिए support भी हटा दिया, इसलिए FastAPI के नवीनतम versions के लिए Pydantic v2 required है।
+
+/// warning | चेतावनी
+
+Pydantic team ने **Python 3.14** से शुरू करते हुए, Python के नवीनतम versions के लिए Pydantic v1 का support बंद कर दिया।
+
+इसमें `pydantic.v1` भी शामिल है, जो अब Python 3.14 और उससे ऊपर में supported नहीं है।
+
+अगर आप Python की नवीनतम features का उपयोग करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि आप Pydantic v2 का उपयोग करें।
+
+///
+
+अगर आपके पास Pydantic v1 वाला कोई पुराना FastAPI app है, तो यहाँ मैं आपको दिखाऊँगा कि उसे Pydantic v2 में कैसे migrate करें, और gradual migration में मदद के लिए **FastAPI 0.119.0 की features** भी दिखाऊँगा।
+
+## आधिकारिक गाइड { #official-guide }
+
+Pydantic के पास v1 से v2 के लिए एक आधिकारिक [Migration Guide](https://docs.pydantic.dev/latest/migration/) है।
+
+इसमें यह भी शामिल है कि क्या बदला है, validations अब कैसे अधिक सही और strict हैं, संभावित caveats आदि।
+
+क्या बदला है इसे बेहतर समझने के लिए आप इसे पढ़ सकते हैं।
+
+## Tests { #tests }
+
+सुनिश्चित करें कि आपके app के लिए [tests](../tutorial/testing.md) हैं और आप उन्हें continuous integration (CI) पर चलाते हैं।
+
+इस तरह, आप upgrade कर सकते हैं और सुनिश्चित कर सकते हैं कि सब कुछ अभी भी अपेक्षा के अनुसार काम कर रहा है।
+
+## `bump-pydantic` { #bump-pydantic }
+
+कई मामलों में, जब आप customizations के बिना regular Pydantic models का उपयोग करते हैं, तो आप Pydantic v1 से Pydantic v2 में migration की अधिकांश प्रक्रिया automate कर पाएँगे।
+
+आप उसी Pydantic team का [`bump-pydantic`](https://github.com/pydantic/bump-pydantic) उपयोग कर सकते हैं।
+
+यह tool आपको उस अधिकांश code को अपने आप बदलने में मदद करेगा जिसे बदलने की ज़रूरत है।
+
+इसके बाद, आप tests चला सकते हैं और जाँच सकते हैं कि सब कुछ काम करता है या नहीं। अगर करता है, तो आपका काम हो गया। 😎
+
+## v2 में Pydantic v1 { #pydantic-v1-in-v2 }
+
+Pydantic v2 में Pydantic v1 की सभी चीज़ें `pydantic.v1` submodule के रूप में शामिल हैं। लेकिन यह Python 3.13 से ऊपर के versions में अब supported नहीं है।
+
+इसका मतलब है कि आप Pydantic v2 का नवीनतम version install कर सकते हैं और इस submodule से पुराने Pydantic v1 components को import और उपयोग कर सकते हैं, जैसे कि आपके पास पुराना Pydantic v1 install हो।
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial001_an_py310.py hl[1,4] *}
+
+### v2 में Pydantic v1 के लिए FastAPI support { #fastapi-support-for-pydantic-v1-in-v2 }
+
+/// warning | चेतावनी
+
+`pydantic.v1` models के लिए यह FastAPI support **FastAPI 0.119.0** में जोड़ा गया था और **FastAPI 0.128.0** में हटा दिया गया। इसका उद्देश्य Pydantic v2 में migration के लिए अस्थायी सहायता होना था।
+
+FastAPI के वर्तमान versions में, अपने app में `pydantic.v1` model का उपयोग करने पर error आएगा।
+
+इस section का बाकी हिस्सा केवल उन पुराने versions में उपलब्ध अस्थायी support का वर्णन करता है।
+
+///
+
+FastAPI 0.119.0 से, Pydantic v2 के अंदर से Pydantic v1 के लिए आंशिक support भी है, ताकि v2 में migration आसान हो सके।
+
+इसलिए, आप Pydantic को नवीनतम version 2 में upgrade कर सकते थे, और imports को `pydantic.v1` submodule का उपयोग करने के लिए बदल सकते थे, और कई मामलों में यह बस काम कर जाता।
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial002_an_py310.py hl[2,5,15] *}
+
+/// warning | चेतावनी
+
+ध्यान रखें कि Pydantic team अब Python के हाल के versions में Pydantic v1 को support नहीं करती, Python 3.14 से शुरू करते हुए, इसलिए `pydantic.v1` का उपयोग भी Python 3.14 और उससे ऊपर में supported नहीं है।
+
+///
+
+### एक ही app में Pydantic v1 और v2 { #pydantic-v1-and-v2-on-the-same-app }
+
+Pydantic द्वारा यह **supported नहीं है** कि Pydantic v2 का कोई model हो जिसके अपने fields Pydantic v1 models के रूप में defined हों, या इसका उल्टा।
+
+```mermaid
+graph TB
+ subgraph "❌ Not Supported"
+ direction TB
+ subgraph V2["Pydantic v2 Model"]
+ V1Field["Pydantic v1 Model"]
+ end
+ subgraph V1["Pydantic v1 Model"]
+ V2Field["Pydantic v2 Model"]
+ end
+ end
+
+ style V2 fill:#f9fff3
+ style V1 fill:#fff6f0
+ style V1Field fill:#fff6f0
+ style V2Field fill:#f9fff3
+```
+
+...लेकिन आपके पास एक ही app में अलग-अलग models हो सकते हैं, कुछ Pydantic v1 का उपयोग करते हुए और कुछ Pydantic v2 का उपयोग करते हुए।
+
+```mermaid
+graph TB
+ subgraph "✅ Supported"
+ direction TB
+ subgraph V2["Pydantic v2 Model"]
+ V2Field["Pydantic v2 Model"]
+ end
+ subgraph V1["Pydantic v1 Model"]
+ V1Field["Pydantic v1 Model"]
+ end
+ end
+
+ style V2 fill:#f9fff3
+ style V1 fill:#fff6f0
+ style V1Field fill:#fff6f0
+ style V2Field fill:#f9fff3
+```
+
+कुछ मामलों में, आपके FastAPI app में एक ही **path operation** में Pydantic v1 और v2 दोनों models होना भी संभव है:
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py hl[2:3,6,12,21:22] *}
+
+ऊपर दिए गए इस उदाहरण में, input model एक Pydantic v1 model है, और output model (`response_model=ItemV2` में defined) एक Pydantic v2 model है।
+
+### Pydantic v1 parameters { #pydantic-v1-parameters }
+
+अगर आपको Pydantic v1 models के साथ parameters के लिए FastAPI-specific tools जैसे `Body`, `Query`, `Form` आदि का उपयोग करना है, तो Pydantic v2 में migration पूरा करते समय आप उन्हें `fastapi.temp_pydantic_v1_params` से import कर सकते हैं:
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial004_an_py310.py hl[4,18] *}
+
+### चरणों में माइग्रेट करें { #migrate-in-steps }
+
+/// warning | चेतावनी
+
+नीचे वर्णित, एक ही app में Pydantic v1 और v2 दोनों models का उपयोग करके gradual migration केवल **FastAPI 0.119.0 से 0.127.x** में काम करता है। इसे **FastAPI 0.128.0** में हटा दिया गया, नवीनतम versions के लिए **Pydantic v2** models required हैं।
+
+///
+
+/// tip | सुझाव
+
+पहले `bump-pydantic` के साथ कोशिश करें, अगर आपके tests pass हो जाते हैं और वह काम करता है, तो आपका काम एक command में हो गया। ✨
+
+///
+
+अगर `bump-pydantic` आपके use case के लिए काम नहीं करता, तो आप Pydantic v2 में gradual migration करने के लिए एक ही app में Pydantic v1 और v2 दोनों models के support का उपयोग कर सकते हैं।
+
+आप पहले Pydantic को नवीनतम version 2 का उपयोग करने के लिए upgrade कर सकते हैं, और अपने सभी models के लिए `pydantic.v1` का उपयोग करने के लिए imports बदल सकते हैं।
+
+फिर, आप gradual steps में, groups के रूप में अपने models को Pydantic v1 से v2 में migrate करना शुरू कर सकते हैं। 🚶
diff --git a/docs/hi/docs/how-to/separate-openapi-schemas.md b/docs/hi/docs/how-to/separate-openapi-schemas.md
new file mode 100644
index 000000000..c5d2b17a0
--- /dev/null
+++ b/docs/hi/docs/how-to/separate-openapi-schemas.md
@@ -0,0 +1,102 @@
+# Input और Output के लिए अलग OpenAPI Schemas या नहीं { #separate-openapi-schemas-for-input-and-output-or-not }
+
+जबसे **Pydantic v2** रिलीज़ हुआ है, generated OpenAPI पहले की तुलना में थोड़ा अधिक सटीक और **सही** है। 😎
+
+वास्तव में, कुछ मामलों में, एक ही Pydantic model के लिए OpenAPI में **दो JSON Schemas** भी होंगे, input और output के लिए, इस पर निर्भर करते हुए कि उनमें **default values** हैं या नहीं।
+
+आइए देखते हैं कि यह कैसे काम करता है और अगर आपको ज़रूरत हो तो इसे कैसे बदलना है।
+
+## Input और Output के लिए Pydantic Models { #pydantic-models-for-input-and-output }
+
+मान लीजिए आपके पास default values वाला एक Pydantic model है, जैसे यह:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:7] hl[7] *}
+
+### Input के लिए Model { #model-for-input }
+
+अगर आप इस model को यहाँ की तरह input के रूप में उपयोग करते हैं:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:15] hl[14] *}
+
+...तो `description` field **required नहीं होगा**। क्योंकि इसका default value `None` है।
+
+### Docs में Input Model { #input-model-in-docs }
+
+आप docs में इसकी पुष्टि कर सकते हैं, `description` field के पास **लाल asterisk** नहीं है, इसे required के रूप में mark नहीं किया गया है:
+
+
+
+
+
+
+
+
+/// tip | Authorize बटन!
+
+आपके पास पहले से ही एक चमकदार नया "Authorize" बटन है।
+
+और आपकी *path operation* के ऊपर-दाएँ कोने में एक छोटा-सा lock है जिस पर आप click कर सकते हैं।
+
+///
+
+और अगर आप उस पर click करते हैं, तो आपके पास `username` और `password` (और अन्य optional fields) type करने के लिए एक छोटा authorization form होगा:
+
+
+
+/// note | नोट
+
+आप form में क्या type करते हैं, इससे कोई फर्क नहीं पड़ता, यह अभी काम नहीं करेगा। लेकिन हम वहाँ तक पहुँचेंगे।
+
+///
+
+यह निश्चित रूप से final users के लिए frontend नहीं है, लेकिन यह आपके पूरे API को interactively document करने के लिए एक शानदार automatic tool है।
+
+इसे frontend team द्वारा उपयोग किया जा सकता है (जो आप खुद भी हो सकते हैं)।
+
+इसे third party applications और systems द्वारा उपयोग किया जा सकता है।
+
+और इसे आप खुद भी उसी application को debug, check और test करने के लिए उपयोग कर सकते हैं।
+
+## `password` flow { #the-password-flow }
+
+अब थोड़ा पीछे चलते हैं और समझते हैं कि यह सब क्या है।
+
+`password` "flow", OAuth2 में परिभाषित उन तरीकों ("flows") में से एक है, जिनका उपयोग security और authentication संभालने के लिए किया जाता है।
+
+OAuth2 को इस तरह design किया गया था कि backend या API उस server से independent हो सके जो user को authenticate करता है।
+
+लेकिन इस case में, वही **FastAPI** application API और authentication दोनों संभालेगा।
+
+तो, आइए इसे उस simplified दृष्टिकोण से review करें:
+
+* User frontend में `username` और `password` type करता है, और `Enter` दबाता है।
+* Frontend (जो user के browser में चल रहा है) उस `username` और `password` को हमारे API के एक specific URL पर भेजता है (`tokenUrl="token"` के साथ declare किया गया)।
+* API उस `username` और `password` को check करता है, और एक "token" के साथ respond करता है (हमने अभी तक इनमें से कुछ भी implement नहीं किया है)।
+ * एक "token" बस कुछ content वाली string है जिसका उपयोग हम बाद में इस user को verify करने के लिए कर सकते हैं।
+ * सामान्यतः, token को कुछ समय बाद expire होने के लिए set किया जाता है।
+ * इसलिए, user को बाद में किसी समय फिर से log in करना होगा।
+ * और अगर token चोरी हो जाता है, तो risk कम होता है। यह किसी permanent key जैसा नहीं है जो हमेशा काम करेगी (अधिकांश cases में)।
+* Frontend उस token को अस्थायी रूप से कहीं store करता है।
+* User frontend web app के किसी दूसरे section में जाने के लिए frontend में click करता है।
+* Frontend को API से कुछ और data fetch करने की आवश्यकता होती है।
+ * लेकिन उस specific endpoint के लिए इसे authentication चाहिए।
+ * इसलिए, हमारे API के साथ authenticate करने के लिए, यह `Authorization` header भेजता है जिसकी value `Bearer ` plus token होती है।
+ * अगर token में `foobar` है, तो `Authorization` header का content होगा: `Bearer foobar`.
+
+## **FastAPI** का `OAuth2PasswordBearer` { #fastapis-oauth2passwordbearer }
+
+**FastAPI** इन security features को implement करने के लिए abstraction के अलग-अलग levels पर कई tools देता है।
+
+इस उदाहरण में हम **OAuth2** का उपयोग करने जा रहे हैं, **Password** flow के साथ, **Bearer** token का उपयोग करते हुए। हम यह `OAuth2PasswordBearer` class का उपयोग करके करते हैं।
+
+/// note | नोट
+
+"bearer" token एकमात्र विकल्प नहीं है।
+
+लेकिन हमारे use case के लिए यह सबसे अच्छा है।
+
+और यह अधिकांश use cases के लिए सबसे अच्छा हो सकता है, जब तक कि आप OAuth2 expert न हों और ठीक-ठीक न जानते हों कि कोई दूसरा विकल्प आपकी आवश्यकताओं के लिए बेहतर क्यों है।
+
+उस case में, **FastAPI** आपको इसे बनाने के लिए tools भी देता है।
+
+///
+
+जब हम `OAuth2PasswordBearer` class का instance बनाते हैं तो हम `tokenUrl` parameter pass करते हैं। इस parameter में वह URL होता है जिसका उपयोग client (user के browser में चल रहा frontend) token पाने के लिए `username` और `password` भेजने में करेगा।
+
+{* ../../docs_src/security/tutorial001_an_py310.py hl[8] *}
+
+/// tip | सुझाव
+
+यहाँ `tokenUrl="token"` एक relative URL `token` को refer करता है जिसे हमने अभी तक बनाया नहीं है। क्योंकि यह relative URL है, यह `./token` के equivalent है।
+
+क्योंकि हम relative URL का उपयोग कर रहे हैं, अगर आपका API `https://example.com/` पर स्थित था, तो यह `https://example.com/token` को refer करेगा। लेकिन अगर आपका API `https://example.com/api/v1/` पर स्थित था, तो यह `https://example.com/api/v1/token` को refer करेगा।
+
+Relative URL का उपयोग करना महत्वपूर्ण है ताकि यह सुनिश्चित हो सके कि आपका application [Proxy के पीछे](../../advanced/behind-a-proxy.md) जैसे advanced use case में भी काम करता रहे।
+
+///
+
+यह parameter उस endpoint / *path operation* को create नहीं करता, बल्कि declare करता है कि URL `/token` वही होगा जिसका उपयोग client को token पाने के लिए करना चाहिए। उस जानकारी का उपयोग OpenAPI में किया जाता है, और फिर interactive API documentation systems में।
+
+हम जल्द ही वास्तविक path operation भी बनाएँगे।
+
+/// note | नोट
+
+अगर आप बहुत strict "Pythonista" हैं, तो आपको parameter name `tokenUrl` की style `token_url` के बजाय पसंद न आए।
+
+ऐसा इसलिए है क्योंकि यह OpenAPI spec जैसा ही name उपयोग कर रहा है। ताकि अगर आपको इनमें से किसी भी security scheme के बारे में और अधिक जाँच करनी हो, तो आप बस इसे copy और paste करके इसके बारे में और जानकारी खोज सकें।
+
+///
+
+`oauth2_scheme` variable `OAuth2PasswordBearer` का instance है, लेकिन यह एक "callable" भी है।
+
+इसे इस तरह call किया जा सकता है:
+
+```Python
+oauth2_scheme(some, parameters)
+```
+
+तो, इसे `Depends` के साथ उपयोग किया जा सकता है।
+
+### इसका उपयोग करें { #use-it }
+
+अब आप उस `oauth2_scheme` को `Depends` के साथ dependency में pass कर सकते हैं।
+
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
+
+यह dependency एक `str` प्रदान करेगी जिसे *path operation function* के parameter `token` को assign किया जाता है।
+
+**FastAPI** जान जाएगा कि यह OpenAPI schema (और automatic API docs) में "security scheme" define करने के लिए इस dependency का उपयोग कर सकता है।
+
+/// note | तकनीकी विवरण
+
+**FastAPI** जान जाएगा कि यह OpenAPI में security scheme define करने के लिए `OAuth2PasswordBearer` class (जो dependency में declare की गई है) का उपयोग कर सकता है क्योंकि यह `fastapi.security.oauth2.OAuth2` से inherit करती है, जो बदले में `fastapi.security.base.SecurityBase` से inherit करती है।
+
+OpenAPI (और automatic API docs) के साथ integrate होने वाली सभी security utilities `SecurityBase` से inherit करती हैं, इसी तरह **FastAPI** जान सकता है कि उन्हें OpenAPI में कैसे integrate करना है।
+
+///
+
+## यह क्या करता है { #what-it-does }
+
+यह request में उस `Authorization` header को खोजेगा, check करेगा कि value `Bearer ` plus कोई token है या नहीं, और token को `str` के रूप में return करेगा।
+
+अगर इसे `Authorization` header नहीं दिखता, या value में `Bearer ` token नहीं है, तो यह सीधे 401 status code error (`UNAUTHORIZED`) के साथ respond करेगा।
+
+Error return करने के लिए आपको यह भी check करने की आवश्यकता नहीं है कि token मौजूद है या नहीं। आप निश्चिंत हो सकते हैं कि अगर आपकी function execute होती है, तो उस token में एक `str` होगा।
+
+आप इसे अभी interactive docs में आज़मा सकते हैं:
+
+
+
+हम अभी token की validity verify नहीं कर रहे हैं, लेकिन यह पहले से ही एक शुरुआत है।
+
+## Recap { #recap }
+
+तो, केवल 3 या 4 अतिरिक्त lines में, आपके पास पहले से ही security का कुछ primitive form है।
diff --git a/docs/hi/docs/tutorial/security/get-current-user.md b/docs/hi/docs/tutorial/security/get-current-user.md
new file mode 100644
index 000000000..403d6e7d5
--- /dev/null
+++ b/docs/hi/docs/tutorial/security/get-current-user.md
@@ -0,0 +1,105 @@
+# Current User प्राप्त करें { #get-current-user }
+
+पिछले अध्याय में security system (जो dependency injection system पर आधारित है) *path operation function* को `str` के रूप में एक `token` दे रहा था:
+
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
+
+लेकिन वह अभी भी इतना उपयोगी नहीं है।
+
+आइए इसे हमें current user देने वाला बनाते हैं।
+
+## एक user model बनाएँ { #create-a-user-model }
+
+पहले, एक Pydantic user model बनाते हैं।
+
+जिस तरह हम bodies declare करने के लिए Pydantic का उपयोग करते हैं, उसी तरह हम इसे कहीं और भी उपयोग कर सकते हैं:
+
+{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
+
+## एक `get_current_user` dependency बनाएँ { #create-a-get-current-user-dependency }
+
+आइए एक dependency `get_current_user` बनाएँ।
+
+याद है कि dependencies की sub-dependencies हो सकती हैं?
+
+`get_current_user` के पास उसी `oauth2_scheme` के साथ एक dependency होगी जिसे हमने पहले बनाया था।
+
+ठीक वैसे ही जैसे हम पहले सीधे *path operation* में कर रहे थे, हमारी नई dependency `get_current_user` sub-dependency `oauth2_scheme` से `str` के रूप में एक `token` प्राप्त करेगी:
+
+{* ../../docs_src/security/tutorial002_an_py310.py hl[25] *}
+
+## user प्राप्त करें { #get-the-user }
+
+`get_current_user` हमारे द्वारा बनाई गई एक (fake) utility function का उपयोग करेगी, जो token को `str` के रूप में लेती है और हमारा Pydantic `User` model लौटाती है:
+
+{* ../../docs_src/security/tutorial002_an_py310.py hl[19:22,26:27] *}
+
+## current user inject करें { #inject-the-current-user }
+
+तो अब हम *path operation* में अपने `get_current_user` के साथ वही `Depends` उपयोग कर सकते हैं:
+
+{* ../../docs_src/security/tutorial002_an_py310.py hl[31] *}
+
+ध्यान दें कि हम `current_user` का type Pydantic model `User` के रूप में declare करते हैं।
+
+यह function के अंदर completion और type checks में हमारी मदद करेगा।
+
+/// tip | टिप
+
+आपको याद होगा कि request bodies भी Pydantic models के साथ declare की जाती हैं।
+
+यहाँ **FastAPI** confuse नहीं होगा क्योंकि आप `Depends` का उपयोग कर रहे हैं।
+
+///
+
+/// tip | टिप
+
+जिस तरह यह dependency system design किया गया है, वह हमें अलग-अलग dependencies (अलग-अलग "dependables") रखने देता है जो सभी एक `User` model लौटाती हैं।
+
+हम केवल एक dependency तक सीमित नहीं हैं जो उस type का data लौटा सकती है।
+
+///
+
+## अन्य models { #other-models }
+
+अब आप *path operation functions* में सीधे current user प्राप्त कर सकते हैं और `Depends` का उपयोग करके **Dependency Injection** स्तर पर security mechanisms संभाल सकते हैं।
+
+और आप security requirements के लिए कोई भी model या data उपयोग कर सकते हैं (इस मामले में, Pydantic model `User`)।
+
+लेकिन आप किसी विशेष data model, class या type का उपयोग करने तक सीमित नहीं हैं।
+
+क्या आप अपने model में `id` और `email` रखना चाहते हैं और कोई `username` नहीं रखना चाहते? बिल्कुल। आप इन्हीं tools का उपयोग कर सकते हैं।
+
+क्या आप केवल एक `str` रखना चाहते हैं? या केवल एक `dict`? या सीधे database class model instance? सब कुछ उसी तरह काम करता है।
+
+असल में आपके application में login करने वाले users नहीं हैं, बल्कि robots, bots, या अन्य systems हैं, जिनके पास बस एक access token है? फिर भी, सब कुछ उसी तरह काम करता है।
+
+बस अपने application के लिए जिस भी प्रकार का model, जिस भी प्रकार की class, जिस भी प्रकार का database चाहिए, उसका उपयोग करें। **FastAPI** dependency injection system के साथ आपकी ज़रूरतें पूरी करता है।
+
+## Code size { #code-size }
+
+यह example verbose लग सकता है। ध्यान रखें कि हम security, data models, utility functions और *path operations* को उसी file में मिला रहे हैं।
+
+लेकिन यहाँ मुख्य बात है।
+
+security और dependency injection से जुड़ी चीज़ें एक बार लिखी जाती हैं।
+
+और आप इसे जितना चाहें उतना complex बना सकते हैं। फिर भी, यह केवल एक बार, एक ही जगह पर, पूरी flexibility के साथ लिखा जाता है।
+
+लेकिन आपके पास उसी security system का उपयोग करने वाले हजारों endpoints (*path operations*) हो सकते हैं।
+
+और वे सभी (या उनका कोई भी हिस्सा जिसे आप चाहें) इन dependencies या आपके द्वारा बनाई गई किसी भी अन्य dependencies को फिर से उपयोग करने का लाभ उठा सकते हैं।
+
+और ये सभी हजारों *path operations* सिर्फ 3 lines जितने छोटे हो सकते हैं:
+
+{* ../../docs_src/security/tutorial002_an_py310.py hl[30:32] *}
+
+## Recap { #recap }
+
+अब आप अपने *path operation function* में सीधे current user प्राप्त कर सकते हैं।
+
+हम पहले ही आधे रास्ते तक पहुँच चुके हैं।
+
+हमें बस user/client के लिए एक *path operation* जोड़ना है ताकि वह वास्तव में `username` और `password` भेज सके।
+
+वह आगे आता है।
diff --git a/docs/hi/docs/tutorial/security/index.md b/docs/hi/docs/tutorial/security/index.md
new file mode 100644
index 000000000..43fbd0a9b
--- /dev/null
+++ b/docs/hi/docs/tutorial/security/index.md
@@ -0,0 +1,105 @@
+# Security { #security }
+
+security, authentication और authorization को handle करने के कई तरीके हैं।
+
+और यह सामान्यतः एक जटिल और "कठिन" विषय होता है।
+
+कई frameworks और systems में केवल security और authentication को handle करने में ही बहुत अधिक effort और code लग जाता है (कई मामलों में यह लिखे गए पूरे code का 50% या उससे अधिक हो सकता है)।
+
+**FastAPI** आपको **Security** से आसानी से, तेज़ी से, standard तरीके से निपटने में मदद करने के लिए कई tools प्रदान करता है, बिना सभी security specifications को पढ़ने और सीखने की ज़रूरत के।
+
+लेकिन पहले, आइए कुछ छोटे concepts देखते हैं।
+
+## जल्दी में हैं? { #in-a-hurry }
+
+अगर आपको इन terms की परवाह नहीं है और आपको बस username और password पर आधारित authentication के साथ security *अभी* जोड़नी है, तो अगले chapters पर जाएँ।
+
+## OAuth2 { #oauth2 }
+
+OAuth2 एक specification है जो authentication और authorization को handle करने के कई तरीके define करती है।
+
+यह काफ़ी विस्तृत specification है और कई जटिल use cases को cover करती है।
+
+इसमें "third party" का उपयोग करके authenticate करने के तरीके शामिल हैं।
+
+यही चीज़ अंदर से उन सभी systems में इस्तेमाल होती है जिनमें "login with Facebook, Google, X (Twitter), GitHub" होता है।
+
+### OAuth 1 { #oauth-1 }
+
+OAuth 1 भी था, जो OAuth2 से बहुत अलग और अधिक जटिल था, क्योंकि इसमें communication को encrypt करने के तरीके पर direct specifications शामिल थीं।
+
+आजकल यह बहुत लोकप्रिय या इस्तेमाल में नहीं है।
+
+OAuth2 यह specify नहीं करता कि communication को कैसे encrypt करना है, यह अपेक्षा करता है कि आपकी application HTTPS के साथ serve की जा रही हो।
+
+/// tip | सुझाव
+
+**deployment** वाले section में आप देखेंगे कि Traefik और Let's Encrypt का उपयोग करके HTTPS को मुफ्त में कैसे setup किया जाता है।
+
+///
+
+## OpenID Connect { #openid-connect }
+
+OpenID Connect एक और specification है, जो **OAuth2** पर आधारित है।
+
+यह OAuth2 को बस extend करता है और कुछ ऐसी चीज़ें specify करता है जो OAuth2 में तुलनात्मक रूप से ambiguous हैं, ताकि इसे अधिक interoperable बनाया जा सके।
+
+उदाहरण के लिए, Google login OpenID Connect का उपयोग करता है (जो अंदर से OAuth2 का उपयोग करता है)।
+
+लेकिन Facebook login OpenID Connect को support नहीं करता। उसका अपना OAuth2 flavor है।
+
+### OpenID ("OpenID Connect" नहीं) { #openid-not-openid-connect }
+
+एक "OpenID" specification भी थी। उसने वही समस्या हल करने की कोशिश की जो **OpenID Connect** करता है, लेकिन वह OAuth2 पर आधारित नहीं थी।
+
+इसलिए, वह एक पूरा अतिरिक्त system था।
+
+आजकल यह बहुत लोकप्रिय या इस्तेमाल में नहीं है।
+
+## OpenAPI { #openapi }
+
+OpenAPI (पहले Swagger के नाम से जाना जाता था) APIs बनाने के लिए open specification है (अब Linux Foundation का हिस्सा)।
+
+**FastAPI** **OpenAPI** पर आधारित है।
+
+इसी वजह से कई automatic interactive documentation interfaces, code generation, आदि होना संभव होता है।
+
+OpenAPI कई security "schemes" define करने का तरीका देता है।
+
+इनका उपयोग करके, आप इन सभी standard-based tools का लाभ उठा सकते हैं, जिनमें ये interactive documentation systems भी शामिल हैं।
+
+OpenAPI निम्नलिखित security schemes define करता है:
+
+* `apiKey`: एक application-specific key जो यहाँ से आ सकती है:
+ * एक query parameter.
+ * एक header.
+ * एक cookie.
+* `http`: standard HTTP authentication systems, जिनमें शामिल हैं:
+ * `bearer`: एक header `Authorization` जिसमें `Bearer ` plus एक token का value होता है। यह OAuth2 से inherited है।
+ * HTTP Basic authentication.
+ * HTTP Digest, आदि।
+* `oauth2`: security handle करने के सभी OAuth2 तरीके (जिन्हें "flows" कहा जाता है)।
+ * इनमें से कई flows OAuth 2.0 authentication provider बनाने के लिए उपयुक्त हैं (जैसे Google, Facebook, X (Twitter), GitHub, आदि):
+ * `implicit`
+ * `clientCredentials`
+ * `authorizationCode`
+ * लेकिन एक specific "flow" है जिसे उसी application में सीधे authentication handle करने के लिए पूरी तरह इस्तेमाल किया जा सकता है:
+ * `password`: कुछ अगले chapters इसके examples cover करेंगे।
+* `openIdConnect`: इसमें OAuth2 authentication data को automatically discover करने का तरीका होता है।
+ * यह automatic discovery वही है जो OpenID Connect specification में define की गई है।
+
+/// tip | सुझाव
+
+Google, Facebook, X (Twitter), GitHub, आदि जैसे अन्य authentication/authorization providers को integrate करना भी संभव और तुलनात्मक रूप से आसान है।
+
+सबसे जटिल समस्या उन जैसे authentication/authorization provider बनाना है, लेकिन **FastAPI** आपको इसे आसानी से करने के लिए tools देता है, और आपके लिए heavy lifting करता है।
+
+///
+
+## **FastAPI** utilities { #fastapi-utilities }
+
+FastAPI इन security schemes में से प्रत्येक के लिए `fastapi.security` module में कई tools प्रदान करता है, जो इन security mechanisms का उपयोग आसान बनाते हैं।
+
+अगले chapters में आप देखेंगे कि **FastAPI** द्वारा प्रदान किए गए उन tools का उपयोग करके अपनी API में security कैसे जोड़ें।
+
+और आप यह भी देखेंगे कि यह interactive documentation system में automatically कैसे integrate हो जाता है।
diff --git a/docs/hi/docs/tutorial/security/oauth2-jwt.md b/docs/hi/docs/tutorial/security/oauth2-jwt.md
new file mode 100644
index 000000000..2066d8f5a
--- /dev/null
+++ b/docs/hi/docs/tutorial/security/oauth2-jwt.md
@@ -0,0 +1,277 @@
+# Password के साथ OAuth2 (और hashing), JWT tokens के साथ Bearer { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
+
+अब जब हमारे पास पूरा security flow है, तो आइए JWT tokens और secure password hashing का उपयोग करके application को वास्तव में secure बनाते हैं।
+
+यह code ऐसा है जिसे आप अपनी application में सच में उपयोग कर सकते हैं, password hashes को अपने database में save कर सकते हैं, आदि।
+
+हम पिछले chapter में जहाँ छोड़ा था, वहीं से शुरू करेंगे और उसे आगे बढ़ाएँगे।
+
+## JWT के बारे में { #about-jwt }
+
+JWT का मतलब है "JSON Web Tokens"।
+
+यह एक JSON object को बिना spaces वाली लंबी dense string में codify करने का standard है। यह ऐसा दिखता है:
+
+```
+eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+```
+
+यह encrypted नहीं है, इसलिए कोई भी contents से जानकारी वापस प्राप्त कर सकता है।
+
+लेकिन यह signed है। इसलिए, जब आपको कोई token मिलता है जिसे आपने issue किया था, तो आप verify कर सकते हैं कि उसे आपने ही issue किया था।
+
+इस तरह, आप एक token बना सकते हैं जिसकी expiration, मान लीजिए, 1 week हो। और फिर जब user अगले दिन token के साथ वापस आता है, तो आपको पता होता है कि वह user अभी भी आपके system में logged in है।
+
+एक week के बाद, token expired हो जाएगा और user authorized नहीं होगा और नया token पाने के लिए उसे फिर से sign in करना होगा। और अगर user (या कोई third party) expiration बदलने के लिए token को modify करने की कोशिश करे, तो आप इसे पता लगा पाएँगे, क्योंकि signatures match नहीं होंगे।
+
+अगर आप JWT tokens के साथ प्रयोग करना चाहते हैं और देखना चाहते हैं कि वे कैसे काम करते हैं, तो [https://jwt.io](https://jwt.io/) देखें।
+
+## `PyJWT` install करें { #install-pyjwt }
+
+Python में JWT tokens generate और verify करने के लिए हमें `PyJWT` install करना होगा।
+
+सुनिश्चित करें कि आप एक [virtual environment](../../virtual-environments.md) बनाएँ, उसे activate करें, और फिर `pyjwt` install करें:
+
+
+
+Application को पहले की तरह ही authorize करें।
+
+Credentials का उपयोग करते हुए:
+
+Username: `johndoe`
+Password: `secret`
+
+/// tip | सुझाव
+
+ध्यान दें कि code में कहीं भी plaintext password "`secret`" नहीं है, हमारे पास केवल hashed version है।
+
+///
+
+
+
+Endpoint `/users/me/` call करें, आपको response इस तरह मिलेगा:
+
+```JSON
+{
+ "username": "johndoe",
+ "email": "johndoe@example.com",
+ "full_name": "John Doe",
+ "disabled": false
+}
+```
+
+
+
+अगर आप developer tools खोलते हैं, तो आप देख सकते हैं कि भेजे गए data में केवल token शामिल है, password केवल पहले request में user को authenticate करने और वह access token पाने के लिए भेजा जाता है, लेकिन उसके बाद नहीं:
+
+
+
+/// note | नोट
+
+`Authorization` header पर ध्यान दें, जिसका value `Bearer ` से शुरू होता है।
+
+///
+
+## `scopes` के साथ advanced उपयोग { #advanced-usage-with-scopes }
+
+OAuth2 में "scopes" की धारणा है।
+
+आप उनका उपयोग JWT token में permissions का specific set जोड़ने के लिए कर सकते हैं।
+
+फिर आप यह token सीधे किसी user या third party को दे सकते हैं, ताकि वे restrictions के set के साथ आपकी API से interact कर सकें।
+
+आप बाद में **Advanced User Guide** में सीख सकते हैं कि उनका उपयोग कैसे करें और वे **FastAPI** में कैसे integrated हैं।
+
+## Recap { #recap }
+
+अब तक आपने जो देखा है, उससे आप OAuth2 और JWT जैसे standards का उपयोग करके एक secure **FastAPI** application setup कर सकते हैं।
+
+लगभग किसी भी framework में security संभालना काफ़ी जल्दी एक जटिल विषय बन जाता है।
+
+कई packages जो इसे बहुत सरल बनाते हैं, उन्हें data model, database, और available features के साथ कई compromises करने पड़ते हैं। और इनमें से कुछ packages जो चीज़ों को बहुत अधिक सरल बना देते हैं, उनके अंदर वास्तव में security flaws होते हैं।
+
+---
+
+**FastAPI** किसी भी database, data model या tool के साथ कोई compromise नहीं करता।
+
+यह आपको उन चीज़ों को चुनने की पूरी flexibility देता है जो आपके project के लिए सबसे अच्छी हों।
+
+और आप सीधे कई well maintained और widely used packages जैसे `pwdlib` और `PyJWT` का उपयोग कर सकते हैं, क्योंकि **FastAPI** external packages integrate करने के लिए किसी complex mechanism की मांग नहीं करता।
+
+लेकिन यह आपको process को जितना संभव हो उतना सरल बनाने के लिए tools देता है, बिना flexibility, robustness, या security से compromise किए।
+
+और आप OAuth2 जैसे secure, standard protocols को अपेक्षाकृत simple तरीके से उपयोग और implement कर सकते हैं।
+
+आप **Advanced User Guide** में और सीख सकते हैं कि अधिक fine-grained permission system के लिए OAuth2 "scopes" का उपयोग कैसे करें, इन्हीं standards का पालन करते हुए। Scopes के साथ OAuth2 वह mechanism है जिसका उपयोग कई बड़े authentication providers, जैसे Facebook, Google, GitHub, Microsoft, X (Twitter), आदि करते हैं, ताकि third party applications को अपने users की ओर से उनकी APIs के साथ interact करने के लिए authorize किया जा सके।