Start here
Read the run
get_run and look at status, failure_reason, and errors. Agent runs also have failure_category.Watch it
app_url in the app, or download the recording. Most failures are obvious once you see the page the agent saw.Find the cause below
Failure categories
When an agent run ends infailed, terminated, or timed_out, Skyvern classifies the cause. The app shows the label as a badge on the run. The API and webhooks return the code in failure_category[0].category.
error_code_mapping codes, shown as is.
Common problems
Run results
Run completed, but the output is wrong or empty
Run completed, but the output is wrong or empty
screenshot_final to confirm the page. Add descriptions to your schema fields, such as "description": "Price in USD, without the currency symbol". Add a visual hint: “The price is in bold under the product title.”Output contains data that isn't on the page
Output contains data that isn't on the page
"Reached the maximum steps"
"Reached the maximum steps"
max_steps budget. Status is failed and errors contains REACH_MAX_STEPS. Common reasons: the goal has no clear finish line, the agent is looping, or the task really needs more steps.Fix: add a completion rule (“COMPLETE when you see ‘Order confirmed’”). Watch the recording for a repeating pattern. Raise max_steps (tasks) or max_steps_override (agent runs), or split the work into several blocks.Run timed out
Run timed out
max_elapsed_time_minutes (default 240).Fix: narrow the goal, split the agent, or raise the limit (maximum 480).Agent stops too early, or never stops
Agent stops too early, or never stops
Run stays in queued
Run stays in queued
API returns 400 and no run is created
API returns 400 and no run is created
detail message names the input.Fix: correct the request. Retrying unchanged returns the same 400.Page and element problems
Element not found, or the wrong element clicked
Element not found, or the wrong element clicked
max_screenshot_scrolls so the agent scrolls before reading. Check visible_elements_tree to see whether Skyvern detected the element at all. If a visible, standard element is never detected, report it.Autocomplete field keeps changing
Autocomplete field keeps changing
Dates entered in the wrong format
Dates entered in the wrong format
Download didn't happen, or the wrong file downloaded
Download didn't happen, or the wrong file downloaded
downloaded_files on the run.A keyboard shortcut is needed
A keyboard shortcut is needed
await page.keyboard.press("Escape").Site shows the wrong language or region
Site shows the wrong language or region
proxy_location, or open a language-specific URL such as https://example.com/en/.Login and 2FA
Login never happened
Login never happened
GET /v1/credentials/{credential_id}, and that the Login block uses it. For Bitwarden or 1Password, check the vault connection. See Credentials and 2FA."Invalid username or password"
"Invalid username or password"
2FA code rejected or expired
2FA code rejected or expired
errors shows OTP_EXPIRED in this case.2FA code never arrives
2FA code never arrives
totp_identifier differs between the run and the push, or your totp_url endpoint returns errors. errors shows OTP_TIMEOUT or OTP_ERROR.Fix: list received codes with GET /v1/credentials/totp?totp_identifier=.... Make sure the identifier matches exactly. See Credentials and 2FA.Sign in with Google or Microsoft fails
Sign in with Google or Microsoft fails
Bot checks, proxies, and sessions
Blocked by a CAPTCHA or bot check
Blocked by a CAPTCHA or bot check
504 when creating a browser session
504 when creating a browser session
Webhook never arrived
Webhook never arrived
get_run, since the result is stored either way. Then fix the endpoint and call retry_run_webhook. See Retries and replay.Self-hosted
API returns 403 "Invalid credentials"
API returns 403 "Invalid credentials"
x-api-key header, exactly as generated, with no trailing newline. With Docker Compose, the key is the cred value in .skyvern/credentials.toml.Container exits right after starting
Container exits right after starting
docker compose logs skyvern. The usual causes are a missing LLM key or a database that isn’t healthy yet (docker compose ps).UI is blank or can't reach the API
UI is blank or can't reach the API
VITE_API_BASE_URL and VITE_WSS_BASE_URL in skyvern-frontend/.env, then docker compose restart skyvern-ui.Server keeps calling OpenAI after switching models
Server keeps calling OpenAI after switching models
LLM_KEY to your provider’s key (for example OLLAMA) and enable that provider, then restart. See Self-host.Connection refused to a model or browser on the host
Connection refused to a model or browser on the host
localhost is the container.Fix: use http://host.docker.internal:<port>.Use artifacts
Every run records what happened: a video, screenshots, the AI’s prompts and answers, the page structure it saw, logs, and network traffic. Fetch them withget_run_artifacts, optionally filtered by type.
signed_url links for screenshots and recordings expire after 1 hour; other links follow your organization’s Artifact URL Expiry (12 hours by default). Call again for fresh ones. On a self-hosted server with local storage, signed_url is the file’s location on the server’s disk.
get_run_timeline.
Get help
Send support therun_id, what you expected, and what happened. Use the chat in the app, email support@skyvern.com, or ask on Discord.
Next
- Going to production: webhooks, error codes, proxies
- Credentials and 2FA
- Browsers: sessions and profiles

