FastAPI - FastAPI Skip to content Deploy on FastAPI Cloud ๐ FastAPI Conf '26 โ Oct 28, 2026, Amsterdam ๐ค Follow @fastapi on X (Twitter) to stay updated Follow FastAPI on LinkedIn to stay updated Subscribe to the FastAPI and friends newsletter ๐ sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor FastAPI FastAPI en - English de - Deutsch es - espaรฑol fr - franรงais hi - เคนเคฟเคจเฅเคฆเฅ ja - ๆฅๆฌ่ช ko - ํ๊ตญ์ด pt - portuguรชs ru - ััััะบะธะน ัะทัะบ tr - Tรผrkรงe uk - ัะบัะฐัะฝััะบะฐ ะผะพะฒะฐ zh - ็ฎไฝไธญๆ zh-hant - ็น้ซไธญๆ Search fastapi/fastapi FastAPI Features Learn Reference Resources About Release Notes FastAPI fastapi/fastapi FastAPI FastAPI On this page Sponsors Keystone Sponsor Gold Sponsors Silver Sponsors Opinions FastAPI mini documentary Typer, the FastAPI of CLIs Requirements Installation Example Create it Run it Check it Interactive API docs Alternative API docs Example upgrade Interactive API docs upgrade Alternative API docs upgrade Recap Deploy your app (optional) About FastAPI Cloud Deploy to other cloud providers Performance Dependencies standard Dependencies Without standard Dependencies Without fastapi-cloud-cli Additional Optional Dependencies License Features Learn Python Types Intro Concurrency and async / await Tutorial - User Guide First Steps Path Parameters Query Parameters Request Body Query Parameters and String Validations Path Parameters and Numeric Validations Query Parameter Models Body - Multiple Parameters Body - Fields Body - Nested Models Declare Request Example Data Extra Data Types Cookie Parameters Header Parameters Cookie Parameter Models Header Parameter Models Response Model - Return Type Extra Models Response Status Code Form Data Form Models Request Files Request Forms and Files Handling Errors Path Operation Configuration JSON Compatible Encoder Body - Updates Dependencies Classes as Dependencies Sub-dependencies Dependencies in path operation decorators Global Dependencies Dependencies with yield Security Security - First Steps Get Current User Simple OAuth2 with Password and Bearer OAuth2 with Password (and hashing), Bearer with JWT tokens Middleware CORS (Cross-Origin Resource Sharing) SQL (Relational) Databases Bigger Applications - Multiple Files Stream JSON Lines Server-Sent Events (SSE) Background Tasks Metadata and Docs URLs Frontend Static Files Testing Debugging Advanced User Guide Stream Data Path Operation Advanced Configuration Additional Status Codes Return a Response Directly Custom Response - HTML, Stream, File, others Additional Responses in OpenAPI Response Cookies Response Headers Response - Change Status Code Advanced Dependencies Advanced Security OAuth2 scopes HTTP Basic Auth Using the Request Directly Using Dataclasses Advanced Middleware Sub Applications - Mounts Behind a Proxy Templates WebSockets Lifespan Events Testing WebSockets Testing Events: lifespan and startup - shutdown Testing Dependencies with Overrides Async Tests Settings and Environment Variables OpenAPI Callbacks OpenAPI Webhooks Including WSGI - Flask, Django, others Generating SDKs Advanced Python Types JSON with Bytes as Base64 Strict Content-Type Checking FastAPI CLI Editor Support Deployment About FastAPI versions FastAPI Cloud About HTTPS Run a Server Manually Deployments Concepts Deploy FastAPI on Cloud Providers Server Workers - Uvicorn with Workers FastAPI in Containers - Docker How To - Recipes General - How To - Recipes Migrate from Pydantic v1 to Pydantic v2 GraphQL Custom Request and APIRoute class Conditional OpenAPI Extending OpenAPI Separate OpenAPI Schemas for Input and Output or Not Custom Docs UI Static Assets (Self-Hosting) Configure Swagger UI Testing a Database Use Old 403 Authentication Error Status Codes Reference FastAPI class Request Parameters Status Codes UploadFile class Exceptions - HTTPException and WebSocketException Dependencies - Depends() and Security() APIRouter class Background Tasks - BackgroundTasks Request class WebSockets HTTPConnection class Response class Custom Response Classes - File, HTML, Redirect, Streaming, etc. Server-Sent Events - EventSourceResponse and ServerSentEvent Middleware OpenAPI OpenAPI docs OpenAPI models Security Tools Encoders - jsonable_encoder Static Files - StaticFiles Templating - Jinja2Templates Test Client - TestClient Resources FastAPI People Help Contributing Translations Full Stack FastAPI Template External Links FastAPI and friends newsletter About Alternatives, Inspiration and Comparisons History, Design and Future Benchmarks Repository Management Release Notes FastAPI Conf '26 October 28, 2026 Amsterdam, NL All about FastAPI, right from the source. Learn more โ On this page Sponsors Keystone Sponsor Gold Sponsors Silver Sponsors Opinions FastAPI mini documentary Typer, the FastAPI of CLIs Requirements Installation Example Create it Run it Check it Interactive API docs Alternative API docs Example upgrade Interactive API docs upgrade Alternative API docs upgrade Recap Deploy your app (optional) About FastAPI Cloud Deploy to other cloud providers Performance Dependencies standard Dependencies Without standard Dependencies Without fastapi-cloud-cli Additional Optional Dependencies License FastAPI Conf '26 October 28, 2026 Amsterdam, NL All about FastAPI, right from the source. Learn more โ FastAPI¶ FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https://github.com/fastapi/fastapi FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints. The key features are: Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available. Fast to code: Increase the speed to develop features by about 200% to 300%. * Fewer bugs: Reduce about 40% of human (developer) induced errors. * Intuitive: Great editor support. Completion everywhere. Less time debugging. Easy: Designed to be easy to use and learn. Less time reading docs. Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. Robust: Get production-ready code. With automatic interactive documentation. Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. * estimation based on tests conducted by an internal development team, building production applications. Sponsors¶ Keystone Sponsor¶ Gold Sponsors¶ Silver Sponsors¶ Other sponsors Opinions¶ "I'm using FastAPI a ton these days. I'm actually planning to use it for all of my team's ML services at Microsoft. Some of them are getting integrated into the core Windows product and some Office products." โ Kabir Khan, Microsoft (ref) "We adopted the FastAPI library to spawn a REST server that can be queried to obtain predictions." [for Ludwig] โ Piero Molino, Yaroslav Dudin, Sai Sumanth Miryala, Uber (ref) "Netflix is pleased to announce the open-source release of our crisis management orchestration framework: Dispatch!" [built with FastAPI] โ Kevin Glisson, Marc Vilanova, Forest Monsen, Netflix (ref) "If anyone is looking to build a production Python API, I would highly recommend FastAPI. It is beautifully designed, simple to use and highly scalable โ it has become a key component in our API-first development strategy." โ Deon Pillsbury, Cisco (ref) "[...] I'm using FastAPI a ton these days. [...] I'm actually planning to use it for all of my team's ML services at Microsoft. Some of them are getting integrated into the core Windows product and some Office products." Kabir Khan - Microsoft (ref) "We adopted the FastAPI library to spawn a REST server that can be queried to obtain predictions. [for Ludwig]" Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref) "Netflix is pleased to announce the open-source release of our crisis management orchestration framework: Dispatch! [built with FastAPI]" Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref) "If anyone is looking to build a production Python API, I would highly recommend FastAPI. It is beautifully designed, simple to use and highly scalable, it has become a key component in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer." Deon Pillsbury - Cisco (ref) FastAPI mini documentary¶ There's a FastAPI mini documentary released at the end of 2025, you can watch it online: Typer, the FastAPI of CLIs¶ If you are building a CLI app to be used in the terminal instead of a web API, check out Typer. Typer is FastAPI's little sibling. And it's intended to be the FastAPI of CLIs. โจ๏ธ ๐ Requirements¶ FastAPI stands on the shoulders of giants: Starlette for the web parts. Pydantic for the data parts. Installation¶ First, install uv, and then add FastAPI to your project: $ uv add "fastapi[standard]" ---> 100% Note: Make sure you put "fastapi[standard]" in quotes to ensure it works in all terminals. If you prefer to use pip, install fastapi[standard] inside a virtual environment. See the installation guide for the alternative steps. Example¶ Create it¶ Create a file main.py with: from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: str | None = None): return {"item_id": item_id, "q": q} Or use async def... If your code uses async / await, use async def: from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") async def read_item(item_id: int, q: str | None = None): return {"item_id": item_id, "q": q} Note: If you don't know, check the "In a hurry?" section about async and await in the docs. Run it¶ Run the server with: $ uv run fastapi dev โญโโโโโโโโโโ FastAPI CLI - Development mode โโโโโโโโโโโโฎ โ โ โ Serving at: http://127.0.0.1:8000 โ โ โ โ API docs: http://127.0.0.1:8000/docs โ โ โ โ Running in development mode, for production use: โ โ โ โ fastapi run โ โ โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [2248755] using WatchFiles INFO: Started server process [2248757] INFO: Waiting for application startup. INFO: Application startup complete. About the command fastapi dev... The command fastapi dev reads your main.py file automatically, detects the FastAPI app in it, and starts a server using Uvicorn. By default, fastapi dev will start with auto-reload enabled for local development. You can read more about it in the FastAPI CLI docs. Check it¶ Open your browser at http://127.0.0.1:8000/items/5?q=somequery. You will see the JSON response as: {"item_id": 5, "q": "somequery"} You already created an API that: Receives HTTP requests in the paths / and /items/{item_id}. Both paths take GET operations (also known as HTTP methods). The path /items/{item_id} has a path parameter item_id that should be an int. The path /items/{item_id} has an optional str query parameter q. Interactive API docs¶ Now go to http://127.0.0.1:8000/docs. You will see the automatic interactive API documentation (provided by Swagger UI): Alternative API docs¶ And now, go to http://127.0.0.1:8000/redoc. You will see the alternative automatic documentation (provided by ReDoc): Example upgrade¶ Now modify the file main.py to receive a body from a PUT request. Declare the body using standard Python types, thanks to Pydantic. from fastapโฆ