FastAPI

Installation
pip install scalar-fastapi
Usage
FastAPI makes it super easy to enable Scalar with their out of the box OpenAPI support.
Basic Usage
from fastapi import FastAPI
from scalar_fastapi import get_scalar_api_reference
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/scalar", include_in_schema=False)
async def scalar_html():
return get_scalar_api_reference(
# Your OpenAPI document
openapi_url=app.openapi_url,
# Avoid CORS issues (optional)
scalar_proxy_url="https://proxy.scalar.com",
)
Multiple OpenAPI Sources
You can now display multiple OpenAPI documents in a single Scalar instance:
from scalar_fastapi import get_scalar_api_reference, OpenAPISource
@app.get("/scalar", include_in_schema=False)
async def scalar_html():
return get_scalar_api_reference(
sources=[
OpenAPISource(
title="User API",
url="/openapi.json",
default=True
),
OpenAPISource(
title="Admin API",
url="/admin/openapi.json"
),
OpenAPISource(
title="External API",
content='{"openapi": "3.0.0", ...}'
)
],
title="My API Documentation"
)
Direct OpenAPI Content
You can pass OpenAPI content directly as a string or dictionary:
@app.get("/scalar", include_in_schema=False)
async def scalar_html():
return get_scalar_api_reference(
content='{"openapi": "3.0.0", "info": {"title": "My API"}}',
title="My API"
)
Configuration
Currently available configuration options are listed below.
Core Configuration
openapi_url
(defaultNone
) - The OpenAPI URL that Scalar should load. Ifcontent
orsources
are provided, this parameter is ignored.content
(defaultNone
) - Directly pass an OpenAPI/Swagger document as a string (JSON or YAML) or as a dictionary. Ifsources
are provided, this parameter is ignored.sources
(defaultNone
) - Add multiple OpenAPI documents to render all of them. Each source can have a title, slug, url, content, and default flag.title
(default"Scalar"
) - The title of the API reference page
OpenAPISource Configuration
When using multiple sources, each OpenAPISource
can be configured with:
title
(defaultNone
) - Display name for the API. If not provided, will fallback to 'API #1', 'API #2', etc.slug
(defaultNone
) - URL identifier for the API. If not provided, will be auto-generated from the title or index.url
(defaultNone
) - URL to the OpenAPI document (JSON or YAML). Mutually exclusive with content.content
(defaultNone
) - Direct OpenAPI content as string (JSON/YAML) or dictionary. Mutually exclusive with url.default
(defaultFalse
) - Whether this source should be the default when multiple sources are provided.
Display Options
layout
(defaultLayout.MODERN
)show_sidebar
(defaultTrue
)hide_models
(defaultFalse
)hide_search
(defaultFalse
) - Whether to show the sidebar search barhide_test_request_button
(defaultFalse
) - Whether to show the "Test Request" buttonhide_download_button
(defaultFalse
) - Deprecated: Usedocument_download_type
insteaddocument_download_type
(defaultDocumentDownloadType.BOTH
) - Sets the file type of the document to download. Options:JSON
,YAML
,BOTH
,NONE
DocumentDownloadType
from scalar_fastapi import DocumentDownloadType
# Available options:
DocumentDownloadType.JSON # Download as JSON only
DocumentDownloadType.YAML # Download as YAML only
DocumentDownloadType.BOTH # Download as both JSON and YAML
DocumentDownloadType.NONE # Hide download button
Theme and Appearance
dark_mode
(defaultTrue
)force_dark_mode_state
(defaultNone
) - Force dark mode state to always be this state. Can be 'dark' or 'light'hide_dark_mode_toggle
(defaultFalse
) - Whether to show the dark mode togglewith_default_fonts
(defaultTrue
) - Whether to use default fonts (Inter and JetBrains Mono)custom_css
(default""
) - Custom CSS string to apply to the API reference
Search and Navigation
search_hot_key
(defaultSearchHotKey.K
)default_open_all_tags
(defaultFalse
)expand_all_model_sections
(defaultFalse
) - Whether to expand all model sections by defaultexpand_all_responses
(defaultFalse
) - Whether to expand all response sections by defaultorder_required_properties_first
(defaultTrue
) - Whether to order required properties first in schema objects
Server Configuration
base_server_url
(default""
) - If you want to prefix all relative servers with a base URLservers
(default[]
)hidden_clients
(default[]
)
Authentication
authentication
(default{}
)hide_client_button
(defaultFalse
) - Whether to show the client button from the reference sidebar and modalpersist_auth
(defaultFalse
) - Whether to persist authentication credentials in local storage
Advanced
scalar_js_url
(default"https://cdn.jsdelivr.net/npm/@scalar/api-reference"
)scalar_proxy_url
(defaultNone
)integration
(defaultNone
)theme
(defaultTheme.DEFAULT
)
Layout
from scalar_fastapi import Layout
# Available options:
Layout.MODERN # Modern layout
Layout.CLASSIC # Classic layout
SearchHotKey
from scalar_fastapi import SearchHotKey
# Available options:
SearchHotKey.K # Use 'K' key
SearchHotKey.CMD_K # Use 'Cmd+K' (Mac) / 'Ctrl+K' (Windows/Linux)
SearchHotKey.NONE # Disable hotkey
Theme
from scalar_fastapi import Theme
# Available options:
Theme.DEFAULT # Default theme
Theme.NONE # No theme