<host>, stands for text that varies. Each fix links to the section that explains it.
For an error that isn’t listed, see Troubleshoot builds and deployments, Troubleshoot Ingot builds, Troubleshoot HTTP errors, Troubleshoot runtime errors and Troubleshoot databases.
Repository and API requests
| Error | Cause | Fix |
|---|---|---|
Cannot access repository <url>: Repository not found or you don't have access. | No Git account connected to Sevalla can read the repository, or Sevalla’s GitHub App doesn’t have access to it. The request to create the application gets 400. | Connect the Git account under My account, and give the GitHub App access to the repository. The message links to both pages. See Deploy an agent with the OpenAI Agents SDK. |
GraphQL: Could not resolve to a Repository with the name '<owner>/<repository>'. (repository) | The repository name is misspelled, or the GitHub token can’t reach the repository. | Fix the name, or add the repository to the token, then deploy. See Run Claude Code on Sevalla. |
gh: Bad credentials (HTTP 401) | The GitHub token in GH_TOKEN is wrong, revoked or expired. | Create a new token, update GH_TOKEN, then deploy. See Run Claude Code on Sevalla. |
Request doesn't match the schema | The API answers 400 because a field is missing or breaks the operation’s rules. For example, the request to createProcessV3 has no scaling_strategy, or a db_name is shorter than 2 characters. | Check each field against the operation’s reference, then send the request again. See Deploy an agent with the OpenAI Agents SDK and Deploy Langfuse. |
jobStartPolicy must be provided if the process type is job. | The request to createProcessV3 creates a job without job_start_policy. | Send job_start_policy with every job. See Deploy an agent with the OpenAI Agents SDK. |
Environment variable with key "<key>" already exists | The application already has a variable with that key, so the request to create it gets 400. | Change the value with update environment variable (updateEnvironmentVariableV3) instead. See Run Ollama. |
Deployments and jobs
| Error | Cause | Fix |
|---|---|---|
Migrate has failed | The deployment’s Migrate job exited with an error: the migration raised one, or the application can’t reach the database. | On the Logs tab, choose the Migrate process to read its output. Check that the internal connection exists and that DB_URL is set, then deploy again. See A job has failed or timed out and Deploy a Django application. |
Failed to deploy <process>. | The new instances of the process didn’t become ready within 20 minutes, so Sevalla kept the previous version running. The process kept crashing, ran out of memory, or failed its readiness probe. | Read the deployment’s Runtime logs, or App health on the application, to see why the instances stopped. Fix the cause, then deploy again. See Failed to deploy a process and Deploy n8n. |
Requests and timeouts
| Error | Cause | Fix |
|---|---|---|
524: A timeout occurred | The application sent no bytes before Cloudflare’s timeout ran out, so Cloudflare closed the request. A slow query, an external API that hangs, or a long task inside the request causes it. | Move long work to a background worker and answer at once, or stream the response so that bytes keep arriving. See 504 Gateway Timeout and Cloudflare error 524 and Deploy an agent with the Claude Agent SDK. |
upstream connect error or disconnect/reset before headers. reset reason: <reason> | Sevalla reached an instance of the web process, but nothing accepted the connection on its port. The server listens on another port or only on localhost, isn’t listening yet, or crashed. During a deployment without a readiness probe, a new instance gets requests before its server listens, and they fail with 503. | Make the server listen on 0.0.0.0 and on the PORT environment variable, and add a readiness probe so that instances get traffic only once they answer. See 502 Bad Gateway and upstream connect error and Build RAG with pgvector. |
no healthy upstream | No instance of the web process is ready, so requests get 503. The process has 0 instances, is crashing, is still starting, or fails its readiness probe, for example while its database restarts. | Check App health and the Processes tab. When the probe fails because the database is down, the application answers again once the database is back, without a deployment. See 503 Service Unavailable and Build RAG with pgvector. |
Memory and sizes
| Error | Cause | Fix |
|---|---|---|
The app exited with code 137 (OOMKilled, SIGKILL). | The process used more memory than its instance size allows, so it was killed. Strapi on H1 does this, and its domain returns 503. | Update the process to a size with more memory, such as S1 or larger for Strapi, then deploy. See The process runs out of memory and Deploy a Strapi application. |
no healthy upstream, and the process’s exit code is 137 | The web process is too small, so the application runs out of memory while it starts: n8n on H1, or Langflow on a size smaller than M1. | Use S1 or larger for n8n, and M1 or larger for Langflow. See Deploy n8n and Deploy Langflow. |
Databases
| Error | Cause | Fix |
|---|---|---|
server closed the connection unexpectedly | The database closed the connection. A restart, resize, password change or restore is running, or the database’s external hostname appeared less than a minute ago and doesn’t accept connections yet. | Wait until the database’s status is Ready, then connect again. Retry a new external hostname for about a minute. See Connections drop and Deploy an MCP server with TypeScript. |
password authentication failed for user "<user>" | The password in the application’s variables is out of date, for example after the database’s password changed. Changing the password doesn’t update connected applications. | Put the current password in DB_URL and DB_PASSWORD, then deploy. See Authentication fails and Build RAG with pgvector. |
WRONGPASS invalid username-password pair or user is disabled. | The Redis or Valkey password in the application’s variables is out of date. The variables are copies, so changing the database’s password doesn’t update them. | Update REDIS_PASSWORD and REDIS_URL with the current password, then deploy. See Authentication fails and Use Redis from Node.js. |
AUTH failed: WRONGPASS invalid username-password pair or user is disabled. | The valkey-cli client from Debian 13 connects with -u and the valkey:// URL, and sends an empty user name. | Pass the password in REDISCLI_AUTH, and the host and port with -h and -p. See Run a swarm of agents. |
NOAUTH HELLO must be called with the client already authenticated | The application connects to Redis without a password, because REDIS_PASSWORD isn’t set. | Add REDIS_PASSWORD with the database’s password, then deploy. See Use Redis from Node.js. |
remaining connection slots are reserved for roles with the SUPERUSER attribute | Every connection the database accepts is in use. Each instance of each process opens its own pool, and PostgreSQL keeps 3 connections for administration. | Add up the pools of every process at its largest instance count, and lower the pool size per instance when the total gets close to the database’s max_connections. See Use PostgreSQL from Node.js with Prisma. |
DUMP payload version or checksum are wrong | The Sevalla database runs an older Redis version than the database the data comes from, such as Heroku’s, so RESTORE fails. | Create the Sevalla database with a newer version, then copy the data again. See Migrate from Heroku. |
permission denied to create extension "vector" and Must be superuser to create this extension. | The database was created without Enable pgvector extension, which you can turn on only when you create a database. | Create a database with the extension turned on, connect the application to it, remove the connection to the old one, and deploy. See Build RAG with pgvector. |
expected 1536 dimensions, not 3072 | The embedding model returns vectors of another size than the vector(1536) column. | Use a model with 1,536 dimensions, or request them with dimensions=1536. See Build RAG with pgvector. |
column cannot have more than 2000 dimensions for hnsw index | An HNSW index on a vector column takes up to 2,000 dimensions, so the index on vector(3072) for text-embedding-3-large fails. | Pass dimensions=1536 to client.embeddings.create() to get shorter vectors from that model. See Build RAG with pgvector. |
hnsw graph no longer fits into maintenance_work_mem after <n> tuples | The index build has little memory: DB1 gives it 15 MB (maintenance_work_mem), so a large build slows down. This is a notice, not an error. | Don’t raise maintenance_work_mem on DB1. Give a large first load a larger database size. See Build RAG with pgvector. |
Ingot builds
| Error | Cause | Fix |
|---|---|---|
Ingot couldn't tell what kind of application this is | The repository has no application code that Ingot recognizes, for example only a config.yaml and a Dockerfile. | Choose the Dockerfile build strategy before the first deployment. See Deploy the LiteLLM proxy. |
No start command found | Nothing in the build path tells Ingot how to start the application. A Bun project without a committed bun.lock gets it too, because Ingot then builds it with npm and Node.js. | Set the web process’s start command, INGOT_START_CMD, start in ingot.json, or a web entry in a Procfile. For Bun, commit bun.lock. See Troubleshoot Ingot builds and Deploy a Bun application. |
This workspace has several applications and no start script at its root: <applications> | The application has no INGOT_APP variable, or the variable isn’t Available during buildtime, so Ingot doesn’t know which application of the workspace to build. | Add INGOT_APP with the application’s folder, such as apps/web, select Available during buildtime, then deploy. See Deploy a Turborepo monorepo. |
✗ go.mod: no go version in this Ingot release satisfies ">=1.28.0" (newest known: 1.27.3) | The go line in go.mod asks for a newer Go than Ingot knows, usually because a newer Go on your computer ran go mod init or go get. | Set the line to a release Ingot knows, for example with go mod edit -go=1.27.0, check that go build passes, and commit go.mod. See Deploy a Gin application. |
✗ rust-toolchain.toml asks for the "nightly" toolchain | Ingot builds with stable Rust releases only. | Set channel to a stable line such as "1.99", or to "stable". See Deploy an Axum application. |
global.json asks for SDK <version>, and its rollForward policy doesn't allow <versions> | No .NET SDK that Microsoft services matches sdk.version and rollForward in global.json. | Set rollForward to latestFeature, or sdk.version to one of the SDKs the message lists. See Deploy .NET applications. |
✗ go.mod requires modules, but go.sum is missing | The repository has no go.sum. | Run go mod tidy and commit go.sum. See Deploy a Gin application. |
✗ mvnw has Windows (CRLF) line endings, so the build would fail running it | The mvnw script was committed from Windows without line-ending normalization. | Add mvnw text eol=lf to .gitattributes, run git add --renormalize mvnw, and commit. See Deploy a Spring Boot application. |
SvelteKit has no adapter that runs in a container | The project still uses adapter-auto or another platform’s adapter. | Switch to the Node.js adapter with npx sv add sveltekit-adapter="adapter:node" --install npm, then commit and push. See Deploy a SvelteKit application. |
TanStack Start has no server to run | The project doesn’t have Nitro. | Run npm install nitro, add nitro() to the plugins in vite.config.ts, then commit and push. See Deploy a TanStack Start application. |
Qwik City has no server adapter, so its build makes nothing to run | The project has no server adapter. | Run npx qwik add node-server --skipConfirmation=true, then commit and push. See Deploy a Qwik City application. |
Astro builds for Vercel with @astrojs/vercel, which no server in the image can run | The project still has another platform’s adapter. The message can also name Netlify or Cloudflare Workers. | Remove the adapter, and add the Node.js adapter with npx astro add node. See Deploy an Astro site. |
nuxt.config.ts sets Nitro's preset to "vercel", which builds for that platform rather than a server Ingot can run | The Nuxt config sets nitro.preset to another platform’s preset. | Remove nitro.preset, so that Nitro builds its default Node.js server. See Deploy a Nuxt application. |
x509: certificate signed by unknown authority | Ingot’s Node.js image has no root certificates for programs other than Node.js, such as gh. | Add ca-certificates to packages.run in ingot.json. See Run Claude Code on Sevalla. |
JavaScript
| Error | Cause | Fix |
|---|---|---|
Middleware "strapi::session": App keys are required. | The application has no APP_KEYS variable. | Add the six secrets the Strapi guide lists, then deploy. See Deploy a Strapi application. |
EACCES: permission denied, mkdir '/app/.tmp' | With the Dockerfile, DATABASE_CLIENT isn’t set, so Strapi tries to create a SQLite database in the read-only application folder. | Set DATABASE_CLIENT to postgres, then deploy. See Deploy a Strapi application. |
Error: missing secret key. A secret key is needed to secure Payload. | The application has no PAYLOAD_SECRET variable, so pages return 500. | Add PAYLOAD_SECRET, then deploy. See Deploy a Payload application. |
EnvValidationException: Validation failed for one or more environment variables, followed by lines such as Missing environment variable "APP_KEY" | A variable that start/env.ts requires isn’t set, or isn’t Available during runtime. | Add it on the Environment variables tab, then deploy. The database variables come from the internal connection. See Deploy an AdonisJS application. |
Value for environment variable "APP_URL" must be a valid URL, instead received "https://" | The APP_URL variable was set before the application had its domain, so it holds only https://. | Set APP_URL to https:// and the domain, such as https://storefront-x7k2m.sevalla.app, then deploy. See Deploy an AdonisJS application. |
Cannot find package '@iconify-json/lucide' | The icon set is still in devDependencies, which a production install leaves out. | Run npm install --save-prod @iconify-json/lucide, and commit package.json and package-lock.json. See Deploy an AdonisJS application. |
Missing manifest file. Make sure to first create a build | With the Dockerfile, manifestFile in config/vite.ts is a relative path, and the image holds only build/. | Resolve the path with app.makePath(). See Deploy an AdonisJS application. |
Header "host" with value "<host>" is not allowed. | The domain isn’t in NG_ALLOWED_HOSTS, so Angular’s server answers 400. | Add the domain to NG_ALLOWED_HOSTS, then deploy: variables apply at the next deployment. See Deploy an Angular application. |
Received "x-forwarded-proto" header but "trustProxyHeaders" was not set up to allow it. | The headers that Sevalla’s proxy adds aren’t in NG_TRUST_PROXY_HEADERS, so Angular’s server ignores them and logs this for each one. | Set NG_TRUST_PROXY_HEADERS to x-forwarded-for,x-forwarded-proto, then deploy. See Deploy an Angular application. |
Error: Invariant: PPR cannot be enabled in export mode | The static export still turns on cacheComponents, which needs a server. | Remove cacheComponents and partialPrefetching from the Next.js config. See Deploy a Next.js application. |
NotCapable | The Deno server needs a permission that Ingot’s start command doesn’t grant, such as --allow-write. | Add a start task to deno.json that runs main.ts with the permissions it needs. See Deploy a Deno application. |
Could not find Chrome | The image has no Chrome. | Check that puppeteer is in dependencies, not devDependencies, then deploy. See Run Puppeteer. |
The table `public.Product` does not exist in the current database. | No migration ran, because the deployment has no Migrate job. | Create the Migrate job, then deploy. See Use PostgreSQL from Node.js with Prisma. |
Can't reach database server at 127.0.0.1:5432 | The running application has no DATABASE_URL variable. | Rename DB_URL to DATABASE_URL on the Environment variables tab, or add the internal connection with its variables, then deploy. See Use PostgreSQL from Node.js with Prisma. |
DATABASE_URL is not set | The internal connection was added without its variables, so EmDash has no DB_URL. | Disconnect the database, add the internal connection again with Add environment variables to the application turned on, then deploy. See Deploy an EmDash site. |
Port should be >= 0 and < 65536. Received type number (NaN). | The REDIS_* variables aren’t set in the running application. | Add the internal connection with Add environment variables to the application turned on, then deploy. See Run background jobs with BullMQ. |
Protocol - valkey: - is not a valid Redis protocol. Expected redis: or rediss: | The redis client got the REDIS_URL of a Valkey database, which starts with valkey://. | Pass REDIS_HOST, REDIS_PORT and REDIS_PASSWORD to the client instead of the URL. See Run a Socket.IO server. |
{"code":1,"message":"Session ID unknown"} | The web process runs more than one instance, and the Socket.IO client starts with long-polling. A poll that reaches another instance gets 400, because each instance knows only the sessions it created. | Connect over WebSocket only, with io({ transports: ["websocket"] }). See Run a Socket.IO server. |
No value provided for input HTTP label: Bucket. | The S3_* variables aren’t set in the running application. | Add them on the Environment variables tab with Available during runtime selected, then deploy. See Use object storage from Node.js. |
Python
| Error | Cause | Fix |
|---|---|---|
Bad Request (400) | The domain isn’t in ALLOWED_HOSTS. With DEBUG off, Django doesn’t log the rejected host. | Add the domain to ALLOWED_HOSTS, then deploy. See Deploy a Django application. |
Set the SECRET_KEY environment variable | The SECRET_KEY variable isn’t set, or isn’t Available during runtime. | Add or update the variable, then deploy. See Deploy a Django application. |
CSRF verification failed. Request aborted. | With your own Dockerfile, Gunicorn doesn’t trust the X-Forwarded-Proto header from Sevalla’s proxy, so Django sees the HTTPS form post as HTTP and rejects its origin. | Set FORWARDED_ALLOW_IPS="*" in the Dockerfile. See Deploy a Django application. |
ImproperlyConfigured: Set the S3_BUCKET environment variable | The build runs collectstatic, which loads the settings, and the bucket variables aren’t available to it. | With Ingot, select Available during buildtime on the variables. With your own Dockerfile, give collectstatic placeholder values for them, next to the placeholder SECRET_KEY. See Store Django media in object storage. |
django.db.utils.ProgrammingError: relation "customers_client" does not exist | The migration of the customers app isn’t committed, so the Migrate job can’t create its tables. | Run python manage.py makemigrations customers shop, commit the migration, and push. See Build a multitenant Django application. |
PermissionError: [Errno 13] Permission denied: 'celerybeat-schedule' | With your own Dockerfile, /app is read-only, and Celery beat writes its schedule file to the working directory. | Start beat with --schedule /tmp/celerybeat-schedule. See Run Django background tasks. |
Cannot connect to redis://localhost:6379/0 | The worker has no REDIS_URL, so Celery falls back to the local default from the settings. | Check the internal connection on the Networking tab, then deploy. See Run Django background tasks. |
KeyError: 'DB_URL' | The application has no internal connection to the database, so the Migrate job has no DB_URL. | Add the connection with Add environment variables to the application turned on, then deploy again. See Deploy an agent with the OpenAI Agents SDK. |
{"detail":"Not authenticated"} | The request has no Authorization header, so FastAPI answers 401. | Send Authorization: Bearer and the value of the application’s token variable, such as API_TOKEN. See Deploy an agent with the OpenAI Agents SDK. |
{"detail":"Invalid token"} | The token in the request doesn’t match the application’s token variable, such as API_TOKEN. | Check the variable on the Environment variables tab. A change applies at the next deployment. See Deploy an agent with the OpenAI Agents SDK. |
PHP
| Error | Cause | Fix |
|---|---|---|
Database file at path [/app/database/database.sqlite] does not exist | The DB_CONNECTION variable isn’t set, so Laravel uses its default, SQLite. | Add DB_CONNECTION with the value pgsql, then deploy. See Deploy a Laravel application. |
production.ERROR: No application encryption key has been specified. | The APP_KEY variable isn’t set, so every page returns 500. | Add APP_KEY with the output of php artisan key:generate --show, then deploy. See Deploy a Laravel application. |
Invalid URI., after In Request.php line 395: | The APP_URL variable has no domain, for example https://, so the Migrate job fails. | Set APP_URL to https:// and the application’s domain, then deploy. See Deploy a Laravel application. |
production.ERROR: read error on connection to tcp://<host>:6379 | The application has no internal connection to the Redis database. | Add the internal connection on the application’s Networking tab. It applies at once, without a deployment. See Cache Laravel with Redis. |
App\Jobs\<job> has been attempted too many times. | The worker’s start command has no exec, so the shell ignores the stop signal, and Sevalla stops the instance 30 s after the shutdown began, often in the middle of a job. That job fails once retry_after (90 s) has passed. | Start the worker with exec. See Run Laravel queues and scheduled tasks. |
GetObjectAcl not implemented | The bucket doesn’t keep per-file visibility: public access applies to the whole bucket, so Storage::getVisibility() fails. | Keep private files in a second, private bucket, with a second disk in config/filesystems.php. See Store Laravel files in object storage. |
connection to server at "127.0.0.1", port 5432 failed: Connection refused | The DATABASE_URL variable isn’t set, so Doctrine uses the local default from .env. | Check that DATABASE_URL exists on the Environment variables tab. If the internal connection added DB_URL instead, add DATABASE_URL with the same value, then deploy. See Deploy a Symfony application. |
Error establishing a database connection | The DB_* variables are missing or wrong, or the database isn’t Ready. | Check the internal connection on the Networking tab and the DB_* variables on the Environment variables tab, then deploy. See Deploy a WordPress site. |
Ruby
| Error | Cause | Fix |
|---|---|---|
Blocked hosts: <host> | The domain isn’t in ALLOWED_HOSTS, so every page returns 403. | Add the domain to ALLOWED_HOSTS, then deploy. See Deploy a Rails application. |
ArgumentError: Missing `secret_key_base` for 'production' environment | The SECRET_KEY_BASE variable isn’t set, or isn’t Available during runtime. | Add the variable, then deploy. See Deploy a Rails application. |
PG::DuplicateTable: ERROR: relation "products" already exists | The file config/database.yml still has the cache, queue and cable databases, all pointing at the one database. | Replace the production section of config/database.yml with one database, and move the Solid Cache, Solid Queue and Solid Cable tables into a migration. See Deploy a Rails application. |
SolidQueue::Processes::ProcessPrunedError | The worker’s start command is bin/jobs without exec, so the old instance was killed with the job running. | Set the worker’s start command to exec bin/jobs, then deploy. See Run Rails background jobs. |
ArgumentError: Unknown URL scheme | The cache got a valkey:// URL, and the redis gem accepts only redis://, rediss:// and unix:// URLs. | Keep the .sub(/\Avalkey:/, "redis:") in config.cache_store. See Cache a Rails application. |
Aws::S3::Errors::InvalidRequest (You can only specify one non-default checksum at a time.) | The file config/storage.yml lacks the two checksum options. | Add them and deploy. Variants that failed keep a record without a file: delete the records with bin/rails runner "ActiveStorage::VariantRecord.delete_all" in the web terminal. See Store Rails uploads in object storage. |
Go
| Error | Cause | Fix |
|---|---|---|
go: go.mod requires go >= 1.28.0 (running go 1.27.3; GOTOOLCHAIN=local) | In a Dockerfile build, the go line in go.mod is newer than the Go in the golang:1.27 image, which doesn’t download a newer one. | Lower the go line, for example with go mod edit -go=1.27.0, or build on a newer golang image when one exists. See Deploy a Gin application. |
Rust
| Error | Cause | Fix |
|---|---|---|
"/Cargo.lock": not found | The Dockerfile copies Cargo.lock, which isn’t in the repository. | Commit Cargo.lock. See Deploy an Axum application. |
Java and Kotlin
| Error | Cause | Fix |
|---|---|---|
Terminating due to java.lang.OutOfMemoryError: Java heap space | The JVM heap is full, so instances restart. | Choose a larger size. See Deploy a Spring Boot application and Size the JVM memory. |
"/pom.xml": not found | A Dockerfile build fails at COPY pom.xml ./, because the repository still has the .dockerignore that code.quarkus.io generates, which leaves out everything but target/. | Replace it with the .dockerignore from the Quarkus guide’s Dockerfile section. See Deploy a Quarkus application. |
.NET
| Error | Cause | Fix |
|---|---|---|
Cannot load library libgssapi_krb5.so.2 | The connection string doesn’t turn off GssEncryptionMode, so Npgsql tries to load Kerberos, which Microsoft’s runtime images don’t include. | Set GssEncryptionMode = GssEncryptionMode.Disable. See Deploy an ASP.NET Core application. |
error NU1004: The package references have changed for net10.0. Lock file's package references: Microsoft.AspNetCore.App.Internal.Assets | In a Dockerfile build, dotnet restore runs before the .razor files are copied, so the SDK leaves out the package of Blazor’s scripts that the lock file lists. | Add -p:RequiresAspNetWebAssets=true to dotnet restore. See Deploy a Blazor application. |
Elixir
| Error | Cause | Fix |
|---|---|---|
Could not check origin for Phoenix.Socket transport. | The page’s domain isn’t PHX_HOST or in check_origin, so LiveView pages load but don’t react. | Set PHX_HOST to the domain, or list every domain in check_origin, then deploy. See Deploy a Phoenix application. |
environment variable DATABASE_URL is missing. or environment variable SECRET_KEY_BASE is missing. | The variable isn’t set, or isn’t Available during runtime. | Add or update the variable, then deploy. See Deploy a Phoenix application. |
AI applications
| Error | Cause | Fix |
|---|---|---|
Error code: 401 - Incorrect API key provided | The key in OPENAI_API_KEY is wrong or revoked. | Create a key in the OpenAI dashboard, update the variable, and deploy. See Deploy an agent with the OpenAI Agents SDK. |
insufficient_quota | The OpenAI account has no credit left. | Add credit on the OpenAI account, then deploy again. See Build RAG with pgvector. |
OpenAIError: Missing credentials | The OpenAI SDK has no key, because OPENROUTER_API_KEY isn’t set. The message names OPENAI_API_KEY. | Add OPENROUTER_API_KEY with Available during runtime selected, then deploy. See Use OpenRouter on Sevalla. |
401 User not found. | The OpenRouter key is wrong or deleted, so requests get 502. | Copy the key again, or create one, then update OPENROUTER_API_KEY and deploy. See Use OpenRouter on Sevalla. |
<model> is not a valid model ID | A model ID in MODEL or FALLBACKS doesn’t exist on OpenRouter. One unknown ID fails the whole request with 400, even as a fallback. | Copy the ID from openrouter.ai/models. OpenRouter’s IDs can differ from the provider’s own. See Use OpenRouter on Sevalla. |
402 This request requires more credits, or fewer max_tokens. | The account’s balance, or the key’s credit limit, doesn’t cover the request’s largest possible cost. | Add credits, raise the key’s limit, or lower max_tokens. See Use OpenRouter on Sevalla. |
429 Provider returned error | A free model is rate limited at its provider, or the account reached its free-model limit. | Retry later, add a paid model to FALLBACKS, or use the paid model. See Use OpenRouter on Sevalla. |
No endpoints found for <model>. Every candidate endpoint was removed during routing | The request’s provider settings leave no provider that hosts the model, for example "order": ["deepinfra"] with "allow_fallbacks": false. OpenRouter answers 404. | Change the provider settings so that at least one provider that hosts the model remains. See Use OpenRouter on Sevalla. |
An empty answer, with finish_reason length | The model spent max_tokens on reasoning. | Lower reasoning.effort or raise max_tokens. See Use OpenRouter on Sevalla. |
Not logged in · Please run /login | The agent has no ANTHROPIC_API_KEY at runtime, so a task fails with this result. | Add the variable on the Environment variables tab with Available during runtime selected, then deploy. See Deploy an agent with the Claude Agent SDK. |
Native CLI binary for linux-x64 not found. Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, or set options.pathToClaudeCodeExecutable. | The image was built without optional dependencies. | Remove --omit=optional or --no-optional from the install command. See Deploy an agent with the Claude Agent SDK. |
error_max_turns | The agent used its 10 turns (maxTurns) without finishing. | Raise maxTurns in agent.ts, or give the agent a narrower task. See Deploy an agent with the Claude Agent SDK. |
Permission to use Read has been denied because Claude Code is running in don't ask mode. | The agent tried a call that isn’t pre-approved, such as reading outside its folder, and permissionMode: "dontAsk" denied it. Grep and Glob get the same message. | Nothing to fix: this is the agent’s guard working. Never give a public agent Bash, Write or Edit. See Deploy an agent with the Claude Agent SDK. |
`tool_use` ids were found without `tool_result` blocks immediately after | A message reached a LangGraph thread whose last run stopped between Claude’s tool call and the tool’s result. | Finish the run first, as thread_state does: await graph.ainvoke(None, thread(thread_id)). See Deploy a LangGraph agent. |
{"detail":"The thread is waiting for a decision"} | The thread is paused at a refund, so a new message gets 409. | Send the decision to /threads/<thread_id>/resume first. See Deploy a LangGraph agent. |
{"detail":"The thread has no decision to make"} | The thread isn’t paused, so a request to its /resume route gets 409. | Send a message to /threads/<thread_id>/messages instead. See Deploy a LangGraph agent. |
Anthropic API key is missing | The ANTHROPIC_API_KEY variable isn’t set or isn’t Available during runtime, so the chat answers An error occurred. | Add the variable, then deploy. See Deploy an AI chatbot with the AI SDK. |
Sign in required | The CHAT_USERNAME or CHAT_PASSWORD variable isn’t set, isn’t Available during runtime, or doesn’t match what you type, so requests get 401. | Check both variables on the Environment variables tab, then deploy. See Deploy an AI chatbot with the AI SDK. |
PostgresStore: invalid config. Provide either {pool}, {connectionString}, {host,port,database,user,password}, or a pg ClientConfig | The DB_URL variable isn’t set or isn’t Available during runtime. | Connect the database with Add environment variables to the application turned on, then deploy. See Deploy a Mastra agent. |
{"error":"Invalid or expired token"} | The request has no token or the wrong one, or MASTRA_API_TOKEN isn’t set on the application. Every API request gets 401. | Send Authorization: Bearer and the value of MASTRA_API_TOKEN. Check the variable on the Environment variables tab, then deploy. See Deploy a Mastra agent. |
Set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN | Neither key is set for runtime. | Add one of them, then deploy. See Run Claude Code on Sevalla. |
Error: Insufficient permissions to install update | The command claude update ran in the instance, where the global npm folder belongs to root. The version comes only from the image. | Change CLAUDE_CODE_VERSION in the Dockerfile, commit and push, then click Deploy now when no task is running. See Run Claude Code on Sevalla. |
#<number>: no verdict: Invalid API key · Fix external API key | Claude Code couldn’t finish the review, here because ANTHROPIC_API_KEY is wrong. Other causes print their own message after no verdict:. | Fix the cause the message names, then restart the reviewer. See Run a swarm of agents. |
{"error":"invalid_token"} | The MCP client sends no Authorization header, or a different token, so requests get 401. | Send Authorization: Bearer <token> with the value of MCP_TOKEN. After you change the token, deploy and update every client. See Deploy an MCP server with TypeScript. |
{"jsonrpc":"2.0","error":{"code":-32001,"message":"Session not found"},"id":null} | The MCP server keeps sessions in memory and runs more than one instance. Sevalla has no session affinity, so a request that reaches another instance gets 404. | Use a handler that keeps no session, such as createMcpHandler, and keep anything a tool must remember in the database. See Deploy an MCP server with TypeScript. |
421 Misdirected Request and Invalid Host header | The MCP Python SDK accepts only localhost, because streamable_http_app() has no transport_security. | Pass transport_security=TransportSecuritySettings(enable_dns_rebinding_protection=False). See Deploy an MCP server with Python. |
cannot execute DELETE in a read-only transaction | An MCP tool writes to the database through the read-only pool. INSERT and UPDATE get the same message. | Give tools that write a second pg.Pool without options, and mark them with readOnlyHint: false so that clients ask before they run. See Deploy an MCP server with TypeScript. |
relation "orders" does not exist | The tables from schema.sql aren’t in the database the MCP server connects to. | Run schema.sql in the database’s SQL studio, or with psql. See Deploy an MCP server with TypeScript. |
Please choose a secure password by combining letters, numbers, and special characters. | The Langfuse password has only letters and digits. | Add a special character. See Deploy Langfuse. |
Sign up is disabled. | The Langfuse web application has AUTH_DISABLE_SIGNUP=true, which also blocks invited people who don’t have an account yet. | Create your team’s accounts before you turn sign-up off. See Deploy Langfuse. |
ClickhouseWriter: Max attempts reached, dropped 1 events_full record(s) | A deployment of ClickHouse stopped it, and the Langfuse worker dropped the traces it couldn’t write after 3 attempts. | Before you deploy ClickHouse, set the worker’s Instance count to 0 and deploy the worker, so that new traces wait in the Redis queue. See Deploy Langfuse. |
Queue full, dropping Span. | A script creates spans faster than the Langfuse Python SDK sends them. | Call langfuse.flush() every few hundred traces in batch scripts. See Deploy Langfuse. |
Unexpected Response: 401 (Unauthorized) with Invalid API key or JWT | The request to Qdrant has no API key, or the wrong one. | Check QDRANT_API_KEY against the qdrant application’s QDRANT__SERVICE__API_KEY. See Deploy Qdrant. |
Snapshot is not compatible with existing collection | The collection’s vector settings differ from the snapshot’s. | Delete the collection, and let restore create it with the right settings. See Deploy Qdrant. |
UNAVAILABLE | A gRPC request reached Qdrant right after a deployment, while Qdrant was still starting. | Add the readiness probe on /readyz. See Deploy Qdrant. |
Deployment key 'signing.hmac' cannot be read with this instance encryption key | The N8N_ENCRYPTION_KEY variable changed since n8n first started, so n8n restarts in a loop. | Set the variable back to the original key, then deploy. See Deploy n8n. |
ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). | The N8N_PROXY_HOPS variable isn’t set. | Set it to 2 in OCI locations or 3 in Google Cloud locations, then deploy. See Deploy n8n. |
The requested webhook "<method> <path>" is not registered. | The workflow isn’t published, or the path or method differs, so the call gets 404. | Publish the workflow, and use the Production URL that the Webhook node shows. See Deploy n8n. |
{"code":0,"message":"No item to return was found"} | The workflow runs in n8n’s legacy execution order, so the agent gets an empty result from every tool. Workflows created through n8n’s API without the setting run this way. | Set "executionOrder": "v1" in the workflow’s settings. See Deploy n8n. |
Shutdown timed out after 20 seconds | A deployment replaced the n8n worker during an execution. The execution stays Running and never finishes. | Set N8N_WORKER_SUSPEND_EXECUTIONS_ON_SHUTDOWN to true, so that the worker suspends the execution and the new worker continues it. See Deploy n8n. |
Invalid database_url provided: 'postgres://***:***@...' | The LANGFLOW_DATABASE_URL variable starts with postgres://, which SQLAlchemy doesn’t know. | Change the start to postgresql://, then deploy. See Deploy Langflow. |
Error building Component Language Model: A model selection is required | The Langflow flow has no saved model. | Choose the model in the Language Model component again. See Deploy Langflow. |
API key decryption failed after retry. This may indicate a corrupted key or SECRET_KEY mismatch. | The LANGFLOW_SECRET_KEY variable changed, so Langflow can’t read the global variables created in its settings. | Put the original key back, then deploy. See Deploy Langflow. |
Authentication Error, No api key passed in. | The request to LiteLLM has no Authorization: Bearer header. | Send a virtual key. See Deploy the LiteLLM proxy. |
key_model_access_denied | The LiteLLM key was created with a models list that doesn’t include the model, so the request gets 403. | Create a key without models, or with the model in the list. See Deploy the LiteLLM proxy. |
401, message='Unauthorized', url='https://api.openai.com/v1/embeddings' | The RAG_EMBEDDING_ENGINE variable is openai without RAG_OPENAI_API_BASE_URL, so Open WebUI sends embeddings to OpenAI and uploads fail. | Use the ollama engine, or set the engine in Admin Panel > Settings > Documents. See Deploy Open WebUI. |