[{"data":1,"prerenderedAt":1053},["ShallowReactive",2],{"navigation":3,"\u002Fbuild\u002Frouters-and-prefixes":189,"\u002Fbuild\u002Frouters-and-prefixes-surround":1048},[4,34,60,116,137,153],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":33},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,18,23,28],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":5,"path":16,"stem":17,"icon":6},"\u002Fgetting-started\u002Fgetting-started","1.getting-started\u002F2.getting-started",{"title":19,"path":20,"stem":21,"icon":22},"Choosing a Preset","\u002Fgetting-started\u002Fchoosing-a-preset","1.getting-started\u002F3.choosing-a-preset","i-lucide-git-branch",{"title":24,"path":25,"stem":26,"icon":27},"Deployment","\u002Fgetting-started\u002Fdeployment","1.getting-started\u002F4.deployment","i-lucide-cloud",{"title":29,"path":30,"stem":31,"icon":32},"Background Maintenance","\u002Fgetting-started\u002Fbackground-maintenance","1.getting-started\u002F5.background-maintenance","i-lucide-timer-reset",false,{"title":35,"icon":36,"path":37,"stem":38,"children":39,"page":33},"Build","i-lucide-wrench","\u002Fbuild","2.build",[40,45,50,55],{"title":41,"path":42,"stem":43,"icon":44},"Routers & Prefixes","\u002Fbuild\u002Frouters-and-prefixes","2.build\u002F1.routers-and-prefixes","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Configuration","\u002Fbuild\u002Fconfiguration","2.build\u002F2.configuration","i-lucide-settings",{"title":51,"path":52,"stem":53,"icon":54},"Authorization Dependencies","\u002Fbuild\u002Fauthorization-dependencies","2.build\u002F3.authorization-dependencies","i-lucide-shield-check",{"title":56,"path":57,"stem":58,"icon":59},"Command Line","\u002Fbuild\u002Fcli","2.build\u002F4.cli","i-lucide-terminal",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":33},"Auth","i-lucide-lock","\u002Fauth","3.auth",[66,71,76,81,86,91,96,101,106,111],{"title":67,"path":68,"stem":69,"icon":70},"OAuth & Social Login","\u002Fauth\u002Foauth-and-social-login","3.auth\u002F1.oauth-and-social-login","i-lucide-log-in",{"title":72,"path":73,"stem":74,"icon":75},"Multi-Frontend Support","\u002Fauth\u002Fmulti-frontend","3.auth\u002F10.multi-frontend","i-lucide-layout-grid",{"title":77,"path":78,"stem":79,"icon":80},"Sessions & Audit","\u002Fauth\u002Fsessions-and-audit","3.auth\u002F2.sessions-and-audit","i-lucide-monitor-smartphone",{"title":82,"path":83,"stem":84,"icon":85},"Passwordless & Messaging","\u002Fauth\u002Fpasswordless-and-messaging","3.auth\u002F3.passwordless-and-messaging","i-lucide-mail",{"title":87,"path":88,"stem":89,"icon":90},"JWT Tokens","\u002Fauth\u002Fjwt-tokens","3.auth\u002F4.jwt-tokens","i-lucide-key-round",{"title":92,"path":93,"stem":94,"icon":95},"User Management API","\u002Fauth\u002Fuser-management-api","3.auth\u002F5.user-management-api","i-lucide-users",{"title":97,"path":98,"stem":99,"icon":100},"User Invitations","\u002Fauth\u002Fuser-invitations","3.auth\u002F6.user-invitations","i-lucide-send",{"title":102,"path":103,"stem":104,"icon":105},"Roles & Permissions","\u002Fauth\u002Froles-and-permissions","3.auth\u002F7.roles-and-permissions","i-lucide-shield",{"title":107,"path":108,"stem":109,"icon":110},"ABAC","\u002Fauth\u002Fabac","3.auth\u002F8.abac","i-lucide-filter",{"title":112,"path":113,"stem":114,"icon":115},"User Status","\u002Fauth\u002Fuser-status","3.auth\u002F9.user-status","i-lucide-user-cog",{"title":117,"icon":118,"path":119,"stem":120,"children":121,"page":33},"Enterprise","i-lucide-building-2","\u002Fenterprise","4.enterprise",[122,127,132],{"title":123,"path":124,"stem":125,"icon":126},"Core Authorization Concepts","\u002Fenterprise\u002Fcore-authorization-concepts","4.enterprise\u002F1.core-authorization-concepts","i-lucide-network",{"title":128,"path":129,"stem":130,"icon":131},"Entities","\u002Fenterprise\u002Fentities","4.enterprise\u002F2.entities","i-lucide-folder-tree",{"title":133,"path":134,"stem":135,"icon":136},"Entity Memberships","\u002Fenterprise\u002Fentity-memberships","4.enterprise\u002F3.entity-memberships","i-lucide-user-plus",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":33},"Integrations","i-lucide-plug","\u002Fintegrations","5.integrations",[143,148],{"title":144,"path":145,"stem":146,"icon":147},"API Keys","\u002Fintegrations\u002Fapi-keys","5.integrations\u002F1.api-keys","i-lucide-key",{"title":149,"path":150,"stem":151,"icon":152},"OutlabsAuth UI","\u002Fintegrations\u002Foutlabsauth-ui","5.integrations\u002F2.outlabsauth-ui","i-lucide-layout-dashboard",{"title":154,"icon":155,"path":156,"stem":157,"children":158,"page":33},"Reference","i-lucide-book-marked","\u002Freference","6.reference",[159,164,169,174,179,184],{"title":160,"path":161,"stem":162,"icon":163},"Data Models","\u002Freference\u002Fdata-models","6.reference\u002F1.data-models","i-lucide-database",{"title":165,"path":166,"stem":167,"icon":168},"Activity Tracking","\u002Freference\u002Factivity-tracking","6.reference\u002F2.activity-tracking","i-lucide-activity",{"title":170,"path":171,"stem":172,"icon":173},"Testing","\u002Freference\u002Ftesting","6.reference\u002F3.testing","i-lucide-flask-conical",{"title":175,"path":176,"stem":177,"icon":178},"Observability","\u002Freference\u002Fobservability","6.reference\u002F4.observability","i-lucide-eye",{"title":180,"path":181,"stem":182,"icon":183},"Metrics Reference","\u002Freference\u002Fmetrics-reference","6.reference\u002F5.metrics-reference","i-lucide-chart-bar",{"title":185,"path":186,"stem":187,"icon":188},"Log Events Reference","\u002Freference\u002Flog-events-reference","6.reference\u002F6.log-events-reference","i-lucide-scroll-text",{"id":190,"title":41,"body":191,"description":1041,"extension":1042,"links":1043,"meta":1044,"navigation":1045,"path":42,"seo":1046,"stem":43,"__hash__":1047},"docs\u002F2.build\u002F1.routers-and-prefixes.md",{"type":192,"value":193,"toc":1030},"minimark",[194,208,218,223,230,320,347,375,379,386,603,615,618,655,659,664,695,699,789,793,918,922,970,974,981,1006,1012,1026],[195,196,197,198,202,203,207],"p",{},"OutlabsAuth ships ",[199,200,201],"strong",{},"router factories"," (",[204,205,206],"code",{},"get_*_router","). You choose which ones to\nmount and under which URL prefix — nothing is mounted automatically.",[209,210,211],"tip",{},[195,212,213,214,217],{},"For a first login only, mount ",[204,215,216],{},"get_auth_router",". For an admin console, mount the\nfuller sets below.",[219,220,222],"h2",{"id":221},"convention","Convention",[195,224,225,226,229],{},"Pick a ",[199,227,228],{},"base prefix"," for the auth surface and keep it consistent:",[231,232,233,255],"table",{},[234,235,236],"thead",{},[237,238,239,243,246,249],"tr",{},[240,241,242],"th",{},"Context",[240,244,245],{},"Common base",[240,247,248],{},"Auth login path",[240,250,251,252],{},"UI ",[204,253,254],{},"authApiPrefix",[256,257,258,282,301],"tbody",{},[237,259,260,264,268,273],{},[261,262,263],"td",{},"Quickstart",[261,265,266],{},[204,267,63],{},[261,269,270],{},[204,271,272],{},"\u002Fauth\u002Flogin",[261,274,275,278,279,281],{},[204,276,277],{},"\"\""," (or auth-only under ",[204,280,63],{},")",[237,283,284,287,292,297],{},[261,285,286],{},"Examples",[261,288,289],{},[204,290,291],{},"\u002Fv1",[261,293,294],{},[204,295,296],{},"\u002Fv1\u002Fauth\u002Flogin",[261,298,299],{},[204,300,291],{},[237,302,303,306,311,316],{},[261,304,305],{},"Production",[261,307,308],{},[204,309,310],{},"\u002Fiam",[261,312,313],{},[204,314,315],{},"\u002Fiam\u002Fauth\u002Flogin",[261,317,318],{},[204,319,310],{},[321,322,323],"warning",{},[195,324,325,326,329,330,332,333,335,336,338,339,342,343,346],{},"If you mount ",[204,327,328],{},"get_auth_router(..., prefix=\"\u002Fv1\u002Fauth\")",", set the UI’s\n",[204,331,254],{}," to ",[204,334,291],{}," (the parent of ",[204,337,63],{},"), ",[199,340,341],{},"not"," ",[204,344,345],{},"\u002Fv1\u002Fauth",".",[195,348,349,352,353,356,357,359,360,363,364,367,368,367,371,374],{},[350,351,149],"a",{"href":150}," joins ",[204,354,355],{},"apiBaseUrl"," +\n",[204,358,254],{}," + resource paths. With ",[204,361,362],{},"authApiPrefix: \"\u002Fv1\""," it calls\n",[204,365,366],{},"\u002Fv1\u002Fauth\u002Fconfig",", ",[204,369,370],{},"\u002Fv1\u002Fusers",[204,372,373],{},"\u002Fv1\u002Froles",", and so on.",[219,376,378],{"id":377},"which-routers-exist","Which routers exist?",[195,380,381,382,385],{},"Imported from ",[204,383,384],{},"outlabs_auth.routers"," unless noted.",[231,387,388,401],{},[234,389,390],{},[237,391,392,395,398],{},[240,393,394],{},"Factory",[240,396,397],{},"Typical prefix",[240,399,400],{},"Role",[256,402,403,421,435,452,469,483,498,513,528,543,558,573,588],{},[237,404,405,409,413],{},[261,406,407],{},[204,408,216],{},[261,410,411],{},[204,412,345],{},[261,414,415,416],{},"Login, register, refresh, logout, password reset, invites, magic link \u002F access code, ",[199,417,418],{},[204,419,420],{},"GET \u002Fconfig",[237,422,423,428,432],{},[261,424,425],{},[204,426,427],{},"get_users_router",[261,429,430],{},[204,431,370],{},[261,433,434],{},"Admin user management + sessions \u002F social",[237,436,437,442,445],{},[261,438,439],{},[204,440,441],{},"get_self_service_users_router",[261,443,444],{},"host-chosen",[261,446,447,448,451],{},"Minimal ",[204,449,450],{},"\u002Fme"," + permission names",[237,453,454,459,463],{},[261,455,456],{},[204,457,458],{},"get_session_router",[261,460,461],{},[204,462,345],{},[261,464,465,466,468],{},"Login \u002F refresh \u002F logout only — ",[199,467,341],{}," session inventory",[237,470,471,476,480],{},[261,472,473],{},[204,474,475],{},"get_roles_router",[261,477,478],{},[204,479,373],{},[261,481,482],{},"Role CRUD and permission assignment",[237,484,485,490,495],{},[261,486,487],{},[204,488,489],{},"get_permissions_router",[261,491,492],{},[204,493,494],{},"\u002Fv1\u002Fpermissions",[261,496,497],{},"Permission catalog",[237,499,500,505,510],{},[261,501,502],{},[204,503,504],{},"get_api_keys_router",[261,506,507],{},[204,508,509],{},"\u002Fv1\u002Fapi-keys",[261,511,512],{},"Personal \u002F self-service API keys",[237,514,515,520,525],{},[261,516,517],{},[204,518,519],{},"get_api_key_admin_router",[261,521,522],{},[204,523,524],{},"\u002Fv1\u002Fadmin\u002Fentities",[261,526,527],{},"Entity-anchored key inventory",[237,529,530,535,540],{},[261,531,532],{},[204,533,534],{},"get_integration_principals_router",[261,536,537],{},[204,538,539],{},"\u002Fv1\u002Fadmin",[261,541,542],{},"System integration principals",[237,544,545,550,555],{},[261,546,547],{},[204,548,549],{},"get_entities_router",[261,551,552],{},[204,553,554],{},"\u002Fv1\u002Fentities",[261,556,557],{},"Entity hierarchy (Enterprise)",[237,559,560,565,570],{},[261,561,562],{},[204,563,564],{},"get_memberships_router",[261,566,567],{},[204,568,569],{},"\u002Fv1\u002Fmemberships",[261,571,572],{},"User–entity memberships (Enterprise)",[237,574,575,580,585],{},[261,576,577],{},[204,578,579],{},"get_config_router",[261,581,582],{},[204,583,584],{},"\u002Fv1\u002Fconfig",[261,586,587],{},"Entity-type vocabulary",[237,589,590,595,600],{},[261,591,592],{},[204,593,594],{},"get_audit_router",[261,596,597],{},[204,598,599],{},"\u002Fv1\u002Faudit-events",[261,601,602],{},"Cross-user audit search",[195,604,605,606,608,609,611,612,346],{},"Sessions and social accounts live on ",[204,607,427],{}," —\n",[350,610,77],{"href":78},",\n",[350,613,614],{"href":68},"OAuth",[195,616,617],{},"OAuth factories (module imports):",[231,619,620,629],{},[234,621,622],{},[237,623,624,626],{},[240,625,394],{},[240,627,628],{},"Module",[256,630,631,643],{},[237,632,633,638],{},[261,634,635],{},[204,636,637],{},"get_oauth_router",[261,639,640],{},[204,641,642],{},"outlabs_auth.routers.oauth",[237,644,645,650],{},[261,646,647],{},[204,648,649],{},"get_oauth_associate_router",[261,651,652],{},[204,653,654],{},"outlabs_auth.routers.oauth_associate",[219,656,658],{"id":657},"what-should-i-mount","What should I mount?",[660,661,663],"h3",{"id":662},"minimum-auth-only","Minimum (auth only)",[665,666,672],"pre",{"className":667,"code":668,"filename":669,"language":670,"meta":671,"style":671},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from outlabs_auth.routers import get_auth_router\n\napp.include_router(get_auth_router(auth, prefix=\"\u002Fv1\u002Fauth\"))\n","main.py","python","",[204,673,674,682,689],{"__ignoreMap":671},[675,676,679],"span",{"class":677,"line":678},"line",1,[675,680,681],{},"from outlabs_auth.routers import get_auth_router\n",[675,683,685],{"class":677,"line":684},2,[675,686,688],{"emptyLinePlaceholder":687},true,"\n",[675,690,692],{"class":677,"line":691},3,[675,693,694],{},"app.include_router(get_auth_router(auth, prefix=\"\u002Fv1\u002Fauth\"))\n",[660,696,698],{"id":697},"simplerbac-admin-uifriendly","SimpleRBAC + admin UI–friendly",[665,700,702],{"className":667,"code":701,"filename":669,"language":670,"meta":671,"style":671},"from outlabs_auth.routers import (\n    get_api_keys_router,\n    get_auth_router,\n    get_integration_principals_router,\n    get_permissions_router,\n    get_roles_router,\n    get_users_router,\n)\n\napp.include_router(get_auth_router(auth, prefix=\"\u002Fv1\u002Fauth\"))\napp.include_router(get_users_router(auth, prefix=\"\u002Fv1\u002Fusers\"))\napp.include_router(get_roles_router(auth, prefix=\"\u002Fv1\u002Froles\"))\napp.include_router(get_permissions_router(auth, prefix=\"\u002Fv1\u002Fpermissions\"))\napp.include_router(get_api_keys_router(auth, prefix=\"\u002Fv1\u002Fapi-keys\"))\napp.include_router(get_integration_principals_router(auth, prefix=\"\u002Fv1\u002Fadmin\"))\n",[204,703,704,709,714,719,725,731,737,743,749,754,759,765,771,777,783],{"__ignoreMap":671},[675,705,706],{"class":677,"line":678},[675,707,708],{},"from outlabs_auth.routers import (\n",[675,710,711],{"class":677,"line":684},[675,712,713],{},"    get_api_keys_router,\n",[675,715,716],{"class":677,"line":691},[675,717,718],{},"    get_auth_router,\n",[675,720,722],{"class":677,"line":721},4,[675,723,724],{},"    get_integration_principals_router,\n",[675,726,728],{"class":677,"line":727},5,[675,729,730],{},"    get_permissions_router,\n",[675,732,734],{"class":677,"line":733},6,[675,735,736],{},"    get_roles_router,\n",[675,738,740],{"class":677,"line":739},7,[675,741,742],{},"    get_users_router,\n",[675,744,746],{"class":677,"line":745},8,[675,747,748],{},")\n",[675,750,752],{"class":677,"line":751},9,[675,753,688],{"emptyLinePlaceholder":687},[675,755,757],{"class":677,"line":756},10,[675,758,694],{},[675,760,762],{"class":677,"line":761},11,[675,763,764],{},"app.include_router(get_users_router(auth, prefix=\"\u002Fv1\u002Fusers\"))\n",[675,766,768],{"class":677,"line":767},12,[675,769,770],{},"app.include_router(get_roles_router(auth, prefix=\"\u002Fv1\u002Froles\"))\n",[675,772,774],{"class":677,"line":773},13,[675,775,776],{},"app.include_router(get_permissions_router(auth, prefix=\"\u002Fv1\u002Fpermissions\"))\n",[675,778,780],{"class":677,"line":779},14,[675,781,782],{},"app.include_router(get_api_keys_router(auth, prefix=\"\u002Fv1\u002Fapi-keys\"))\n",[675,784,786],{"class":677,"line":785},15,[675,787,788],{},"app.include_router(get_integration_principals_router(auth, prefix=\"\u002Fv1\u002Fadmin\"))\n",[660,790,792],{"id":791},"enterpriserbac-admin-uifriendly","EnterpriseRBAC + admin UI–friendly",[665,794,796],{"className":667,"code":795,"filename":669,"language":670,"meta":671,"style":671},"from outlabs_auth.routers import (\n    get_api_key_admin_router,\n    get_api_keys_router,\n    get_audit_router,\n    get_auth_router,\n    get_config_router,\n    get_entities_router,\n    get_integration_principals_router,\n    get_memberships_router,\n    get_permissions_router,\n    get_roles_router,\n    get_users_router,\n)\n\napp.include_router(get_auth_router(auth, prefix=\"\u002Fv1\u002Fauth\"))\napp.include_router(get_users_router(auth, prefix=\"\u002Fv1\u002Fusers\"))\napp.include_router(get_audit_router(auth, prefix=\"\u002Fv1\u002Faudit-events\"))\napp.include_router(get_api_keys_router(auth, prefix=\"\u002Fv1\u002Fapi-keys\"))\napp.include_router(get_api_key_admin_router(auth, prefix=\"\u002Fv1\u002Fadmin\u002Fentities\"))\napp.include_router(get_integration_principals_router(auth, prefix=\"\u002Fv1\u002Fadmin\"))\napp.include_router(get_roles_router(auth, prefix=\"\u002Fv1\u002Froles\"))\napp.include_router(get_permissions_router(auth, prefix=\"\u002Fv1\u002Fpermissions\"))\napp.include_router(get_entities_router(auth, prefix=\"\u002Fv1\u002Fentities\"))\napp.include_router(get_memberships_router(auth, prefix=\"\u002Fv1\u002Fmemberships\"))\napp.include_router(get_config_router(auth, prefix=\"\u002Fv1\u002Fconfig\"))\n",[204,797,798,802,807,811,816,820,825,830,834,839,843,847,851,855,859,863,868,874,879,885,890,895,900,906,912],{"__ignoreMap":671},[675,799,800],{"class":677,"line":678},[675,801,708],{},[675,803,804],{"class":677,"line":684},[675,805,806],{},"    get_api_key_admin_router,\n",[675,808,809],{"class":677,"line":691},[675,810,713],{},[675,812,813],{"class":677,"line":721},[675,814,815],{},"    get_audit_router,\n",[675,817,818],{"class":677,"line":727},[675,819,718],{},[675,821,822],{"class":677,"line":733},[675,823,824],{},"    get_config_router,\n",[675,826,827],{"class":677,"line":739},[675,828,829],{},"    get_entities_router,\n",[675,831,832],{"class":677,"line":745},[675,833,724],{},[675,835,836],{"class":677,"line":751},[675,837,838],{},"    get_memberships_router,\n",[675,840,841],{"class":677,"line":756},[675,842,730],{},[675,844,845],{"class":677,"line":761},[675,846,736],{},[675,848,849],{"class":677,"line":767},[675,850,742],{},[675,852,853],{"class":677,"line":773},[675,854,748],{},[675,856,857],{"class":677,"line":779},[675,858,688],{"emptyLinePlaceholder":687},[675,860,861],{"class":677,"line":785},[675,862,694],{},[675,864,866],{"class":677,"line":865},16,[675,867,764],{},[675,869,871],{"class":677,"line":870},17,[675,872,873],{},"app.include_router(get_audit_router(auth, prefix=\"\u002Fv1\u002Faudit-events\"))\n",[675,875,877],{"class":677,"line":876},18,[675,878,782],{},[675,880,882],{"class":677,"line":881},19,[675,883,884],{},"app.include_router(get_api_key_admin_router(auth, prefix=\"\u002Fv1\u002Fadmin\u002Fentities\"))\n",[675,886,888],{"class":677,"line":887},20,[675,889,788],{},[675,891,893],{"class":677,"line":892},21,[675,894,770],{},[675,896,898],{"class":677,"line":897},22,[675,899,776],{},[675,901,903],{"class":677,"line":902},23,[675,904,905],{},"app.include_router(get_entities_router(auth, prefix=\"\u002Fv1\u002Fentities\"))\n",[675,907,909],{"class":677,"line":908},24,[675,910,911],{},"app.include_router(get_memberships_router(auth, prefix=\"\u002Fv1\u002Fmemberships\"))\n",[675,913,915],{"class":677,"line":914},25,[675,916,917],{},"app.include_router(get_config_router(auth, prefix=\"\u002Fv1\u002Fconfig\"))\n",[219,919,921],{"id":920},"two-different-config-endpoints","Two different “config” endpoints",[231,923,924,937],{},[234,925,926],{},[237,927,928,931,934],{},[240,929,930],{},"Endpoint",[240,932,933],{},"Router",[240,935,936],{},"Purpose",[256,938,939,956],{},[237,940,941,946,950],{},[261,942,943],{},[204,944,945],{},"GET {base}\u002Fauth\u002Fconfig",[261,947,948],{},[204,949,216],{},[261,951,952,953],{},"Preset + feature flags — ",[199,954,955],{},"required for OutlabsAuth UI",[237,957,958,963,967],{},[261,959,960],{},[204,961,962],{},"GET\u002FPUT {base}\u002Fconfig\u002Fentity-types",[261,964,965],{},[204,966,579],{},[261,968,969],{},"Entity-type vocabulary (Enterprise)",[219,971,973],{"id":972},"when-to-mount","When to mount",[195,975,976,977,980],{},"Router factories resolve ",[204,978,979],{},"auth.deps"," at call time. Either:",[982,983,984,996],"ol",{},[985,986,987,988,991,992,995],"li",{},"Call ",[204,989,990],{},"auth.prime_fastapi_routing()"," before ",[204,993,994],{},"include_router(...)"," at import time, or",[985,997,998,999,1002,1003],{},"Mount inside ",[204,1000,1001],{},"lifespan"," after ",[204,1004,1005],{},"await auth.initialize()",[195,1007,1008,1009,346],{},"Also call ",[204,1010,1011],{},"auth.instrument_fastapi(app)",[1013,1014,1015],"note",{},[195,1016,1017,1018,1021,1022,1025],{},"When docs and code disagree, trust live OpenAPI at ",[204,1019,1020],{},"{your-api}\u002Fdocs"," and the\n",[204,1023,1024],{},"examples\u002F"," mounts.",[1027,1028,1029],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":671,"searchDepth":678,"depth":684,"links":1031},[1032,1033,1034,1039,1040],{"id":221,"depth":684,"text":222},{"id":377,"depth":684,"text":378},{"id":657,"depth":684,"text":658,"children":1035},[1036,1037,1038],{"id":662,"depth":691,"text":663},{"id":697,"depth":691,"text":698},{"id":791,"depth":691,"text":792},{"id":920,"depth":684,"text":921},{"id":972,"depth":684,"text":973},"Which get_*_router factories to mount and how prefixes work.","md",null,{},{"icon":44},{"title":41,"description":1041},"8Wbd7oJ4oGR2Yi9N7kE78AnmVs7OFv16FVQvxovNjTU",[1049,1051],{"title":29,"path":30,"stem":31,"description":1050,"icon":32,"children":-1},"Run cleanup and sync work safely outside FastAPI processes.",{"title":46,"path":47,"stem":48,"description":1052,"icon":49,"children":-1},"Secrets, schema, Redis, cache backends, and CLI.",1787472744721]