# Cookie Parameter Models { #cookie-parameter-models } If you have a group of **cookies** that are related, you can create a **Pydantic model** to declare them. 🍊 This would allow you to **re-use the model** in **multiple places** and also to declare validations and metadata for all the parameters at once. 😎 /// note This is supported since FastAPI version `0.115.0`. ðŸĪ“ /// /// tip This same technique applies to `Query`, `Cookie`, and `Header`. 😎 /// ## Cookies with a Pydantic Model { #cookies-with-a-pydantic-model } Declare the **cookie** parameters that you need in a **Pydantic model**, and then declare the parameter as `Cookie`: {* ../../docs_src/cookie_param_models/tutorial001_an_py310.py hl[9:12,16] *} **FastAPI** will **extract** the data for **each field** from the **cookies** received in the request and give you the Pydantic model you defined. ## Check the Docs { #check-the-docs } You can see the defined cookies in the docs UI at `/docs`:
/// info Have in mind that, as **browsers handle cookies** in special ways and behind the scenes, they **don't** easily allow **JavaScript** to touch them. If you go to the **API docs UI** at `/docs` you will be able to see the **documentation** for cookies for your *path operations*. But even if you **fill the data** and click "Execute", because the docs UI works with **JavaScript**, the cookies won't be sent, and you will see an **error** message as if you didn't write any values. /// ## Forbid Extra Cookies { #forbid-extra-cookies } In some special use cases (probably not very common), you might want to **restrict** the cookies that you want to receive. Your API now has the power to control its own cookie consent. ðŸĪŠðŸŠ You can use Pydantic's model configuration to `forbid` any `extra` fields: {* ../../docs_src/cookie_param_models/tutorial002_an_py39.py hl[10] *} If a client tries to send some **extra cookies**, they will receive an **error** response. Poor cookie banners with all their effort to get your consent for the API to reject it. 🍊 For example, if the client tries to send a `santa_tracker` cookie with a value of `good-list-please`, the client will receive an **error** response telling them that the `santa_tracker` cookie is not allowed: ```json { "detail": [ { "type": "extra_forbidden", "loc": ["cookie", "santa_tracker"], "msg": "Extra inputs are not permitted", "input": "good-list-please", } ] } ``` ## Summary { #summary } You can use **Pydantic models** to declare **cookies** in **FastAPI**. 😎