# Reference

Every app, API call, setting, Helm value, metric and error code, in one list.

## Apps

- [Error](https://docs.gorunner.io/apps/error-trigger): Start a workflow when another workflow fails. · `errortrigger`
- [Form](https://docs.gorunner.io/apps/form): Start a workflow when someone sends a form. · `form`
- [Manual](https://docs.gorunner.io/apps/manual): Run a workflow by hand, with the Run button or the API. · `manual`
- [MCP Tool](https://docs.gorunner.io/apps/mcp-tool): Let an AI app call a workflow as a tool. · `mcptool`
- [Run Finished](https://docs.gorunner.io/apps/run-finished): Start a workflow when another workflow’s run finishes. · `runfinishedtrigger`
- [Schedule](https://docs.gorunner.io/apps/schedule): Start a workflow at set times. · `schedule`
- [Webhook](https://docs.gorunner.io/apps/webhook): Start a workflow when its own web address is called. · `webhook`
- [When Called by Another Workflow](https://docs.gorunner.io/apps/when-called-by-another-workflow): Start a workflow when another workflow runs it as a Sub-flow. · `callable`
- [Approval](https://docs.gorunner.io/apps/approval): Pause the run until someone approves or rejects. · `approval`
- [Branch](https://docs.gorunner.io/apps/branch): Send the run down different paths by condition. · `branch`
- [Code](https://docs.gorunner.io/apps/code): Run your own JavaScript to reshape data. · `code`
- [Delay / Wait](https://docs.gorunner.io/apps/delay-wait): Pause the run for a time, until a time, or until a call resumes it. · `delay`
- [Filter](https://docs.gorunner.io/apps/filter): Stop the run unless its conditions are met. · `filter`
- [Loop](https://docs.gorunner.io/apps/loop): Run steps once for each item in a list. · `loop`
- [No Op](https://docs.gorunner.io/apps/no-op): Do nothing: a placeholder or a note. · `no-op`
- [Stop / Error](https://docs.gorunner.io/apps/stop-error): End the whole run here, cleanly or with an error. · `stop-error`
- [Sub-flow](https://docs.gorunner.io/apps/sub-flow): Run another workflow as a step and use its output. · `subflow`
- [Switch](https://docs.gorunner.io/apps/switch): Send the run to one of several cases by one value. · `switch`
- [Tags](https://docs.gorunner.io/apps/tags): Tag the current run, to filter runs by. · `tags`
- [Airtable](https://docs.gorunner.io/apps/airtable): Create, update, upsert, find and delete records in Airtable, upload files and comment on records, and read or change bases, tables and fields. · `airtable, airtabletrigger`
- [Amazon S3](https://docs.gorunner.io/apps/amazon-s3): Upload, download, copy, move and delete files in Amazon S3 or an S3-compatible store (MinIO, Wasabi, Cloudflare R2, Hetzner, IONOS), list and create buckets and folders, and make temporary download and upload links. · `amazons3, amazons3trigger`
- [Asana](https://docs.gorunner.io/apps/asana): Create, find and update tasks and subtasks in Asana, comment on them, move them between projects and sections, tag them, attach files, and manage projects, sections, tags and users. · `asana, asanatrigger`
- [ClickUp](https://docs.gorunner.io/apps/clickup): Create, find and update ClickUp tasks, lists and folders, comment, track time, and manage checklists, tags, goals and dependencies. · `clickup, clickuptrigger`
- [Compare Datasets](https://docs.gorunner.io/apps/compare-datasets): Compare two lists by a key, row by row. · `compare`
- [Compression](https://docs.gorunner.io/apps/compression): Zip and unzip files, or gzip and gunzip data. · `compression`
- [Crypto](https://docs.gorunner.io/apps/crypto): Hash, sign with HMAC, encode, and make random values. · `crypto`
- [CSV](https://docs.gorunner.io/apps/csv): Read CSV into rows, or write CSV from data. · `csv`
- [Date & Time](https://docs.gorunner.io/apps/date-time): Format dates, add time, and find the time between two dates. · `date-helper`
- [Dropbox](https://docs.gorunner.io/apps/dropbox): Upload, download, copy, move and delete files and folders in Dropbox, list and search them, and share them by link. · `dropbox, dropboxtrigger`
- [Edit Fields](https://docs.gorunner.io/apps/edit-fields): Set, build or reshape fields for later steps. · `data-mapper`
- [Files Helper](https://docs.gorunner.io/apps/files-helper): Create, read, inspect and convert files. · `file-helper`
- [FTP/SFTP](https://docs.gorunner.io/apps/ftp-sftp): Move files to and from a server over SFTP, FTPS or FTP. · `sftp, sftptrigger`
- [GitHub](https://docs.gorunner.io/apps/github): Open and update issues and pull requests, review and merge, commit files, create branches and releases, run Actions workflows, and read repositories, organizations and users on GitHub. · `github, githubtrigger`
- [GitLab](https://docs.gorunner.io/apps/gitlab): Open and update issues and merge requests, merge, commit files, create branches and releases, run CI/CD pipelines, and read projects on GitLab.com or your own GitLab. · `gitlab, gitlabtrigger`
- [Google Analytics](https://docs.gorunner.io/apps/google-analytics): Run Google Analytics 4 reports and realtime reports, and look up accounts, properties, data streams and the dimensions and metrics a property offers. · `googleanalytics`
- [Google BigQuery](https://docs.gorunner.io/apps/google-bigquery): Run SQL in Google BigQuery with query parameters, stream rows into tables, read table rows and schemas, and list projects, datasets, tables and jobs. · `googlebigquery`
- [Google Calendar](https://docs.gorunner.io/apps/google-calendar): Create, update and find events in Google Calendar. · `googlecalendar, googlecalendartrigger`
- [Google Docs](https://docs.gorunner.io/apps/google-docs): Create, read and edit documents in Google Docs. · `googledocs`
- [Google Drive](https://docs.gorunner.io/apps/google-drive): Upload, download, move, share and search files in Google Drive. · `googledrive, googledrivetrigger`
- [Google Forms](https://docs.gorunner.io/apps/google-forms): Read Google Forms responses with their answers by question, create forms, add or remove questions, and open or close a form to responses. · `googleforms, googleformstrigger`
- [Google Sheets](https://docs.gorunner.io/apps/google-sheets): Read, add and update rows in Google Sheets. · `googlesheets, googlesheetstrigger`
- [Google Slides](https://docs.gorunner.io/apps/google-slides): Create presentations, read slides and their text, fill in placeholder text and images, add or delete slides, and get slide thumbnails in Google Slides. · `googleslides`
- [Google Tasks](https://docs.gorunner.io/apps/google-tasks): Create, find, update, move, complete and delete tasks in Google Tasks, and manage task lists. · `googletasks`
- [HTML](https://docs.gorunner.io/apps/html): Pick content out of HTML by CSS selector, strip tags, or list links. · `html`
- [HubSpot](https://docs.gorunner.io/apps/hubspot): Create, find and update contacts, companies, deals and tickets in HubSpot, log notes, tasks, calls, emails and meetings, link records, and manage list members. · `hubspot, hubspottrigger`
- [iCalendar](https://docs.gorunner.io/apps/icalendar): Build or read iCalendar (.ics) events. · `icalendar`
- [Image](https://docs.gorunner.io/apps/image): Resize, convert, crop or inspect an image. · `image`
- [Item Helper](https://docs.gorunner.io/apps/item-helper): Sort, limit, deduplicate, group and reshape lists of items. · `items`
- [Jira Software](https://docs.gorunner.io/apps/jira-software): Create, find, update and move Jira issues from status to status, and work with their comments, attachments, worklogs and links, and with users. · `jira, jiratrigger`
- [Jotform](https://docs.gorunner.io/apps/jotform): Read, add, edit and delete Jotform submissions, and look up forms, their questions and the account. · `jotform, jotformtrigger`
- [JSON](https://docs.gorunner.io/apps/json): Read, set, merge and pick fields in JSON. · `json`
- [JWT](https://docs.gorunner.io/apps/jwt): Sign, verify and decode JSON Web Tokens. · `jwt`
- [Linear](https://docs.gorunner.io/apps/linear): Create, find, update and archive Linear issues, comment on them, link and relate them, manage projects and project updates, and look up teams, people, statuses, labels and cycles. · `linear`
- [Linear Trigger](https://docs.gorunner.io/apps/linear-trigger): Start a workflow when an issue, comment, project, cycle or another Linear record is created, updated or removed. · `lineartrigger`
- [Markdown](https://docs.gorunner.io/apps/markdown): Convert between Markdown and HTML. · `markdown`
- [Math Helper](https://docs.gorunner.io/apps/math-helper): Add, divide, round and total numbers. · `math`
- [Merge](https://docs.gorunner.io/apps/merge): Combine two lists: append, join by key, or pair by position. · `merge`
- [Microsoft Excel 365](https://docs.gorunner.io/apps/microsoft-excel-365): Read, add and update rows in Excel workbooks in OneDrive or SharePoint, by sheet or by table, and create and organize workbooks and sheets. · `microsoftexcel`
- [Microsoft OneDrive](https://docs.gorunner.io/apps/microsoft-onedrive): Upload, download, copy, move, share and organize files and folders in OneDrive. · `microsoftonedrive, onedrivetrigger`
- [Microsoft SharePoint](https://docs.gorunner.io/apps/microsoft-sharepoint): Create, find, update and delete SharePoint list items, read lists and sites, and upload, download and organize files in document libraries. · `microsoftsharepoint, sharepointtrigger`
- [Microsoft To Do](https://docs.gorunner.io/apps/microsoft-to-do): Create, update and find tasks and task lists in Microsoft To Do, with their steps, links back to their source and file attachments. · `microsofttodo, microsofttodotrigger`
- [monday.com](https://docs.gorunner.io/apps/monday): Create, find and update items and subitems on monday.com boards, post updates, and manage boards, groups, columns and their labels. · `monday, mondaytrigger`
- [MongoDB](https://docs.gorunner.io/apps/mongodb): Find, insert, update, delete and aggregate documents in MongoDB. · `mongodb`
- [MySQL](https://docs.gorunner.io/apps/mysql): Run SQL against a MySQL or MariaDB database. · `mysql`
- [Ninox](https://docs.gorunner.io/apps/ninox): Create, find, update and delete records in Ninox databases, attach and download files, and run Ninox scripts. · `ninox, ninoxtrigger`
- [Notion](https://docs.gorunner.io/apps/notion): Create, find and update pages in Notion databases, write and read page content as Markdown or blocks, comment, and look up databases, data sources and users. · `notion, notiontrigger`
- [Odoo](https://docs.gorunner.io/apps/odoo): Create, find, update and delete contacts, CRM opportunities, activities and records of any Odoo model, and log notes on records. · `odoo, odootrigger`
- [PDF](https://docs.gorunner.io/apps/pdf): Read the text of a PDF, or count its pages. · `pdf`
- [Personio](https://docs.gorunner.io/apps/personio): Create and update employees, record absences and working time, manage projects, and upload or download employee documents in Personio. · `personio, personiotrigger`
- [Pipedrive](https://docs.gorunner.io/apps/pipedrive): Create, find and update deals, people, organizations, leads, activities, notes, products and files in Pipedrive. · `pipedrive, pipedrivetrigger`
- [PostgreSQL](https://docs.gorunner.io/apps/postgresql): Read and change rows in a PostgreSQL database with SQL. · `postgres`
- [QR Code](https://docs.gorunner.io/apps/qr-code): Make a QR code image from text. · `qrcode`
- [Queue](https://docs.gorunner.io/apps/queue): Push items into a queue and pull them out in order. · `queue`
- [Redis](https://docs.gorunner.io/apps/redis): Run a Redis command. · `redis`
- [RSS Feed](https://docs.gorunner.io/apps/rss-feed): Read the items of an RSS or Atom feed. · `rss`
- [Salesforce](https://docs.gorunner.io/apps/salesforce): Create, find, update and delete Salesforce accounts, contacts, leads, opportunities, cases, tasks and records of any object, query with SOQL, search text, upload files and start flows. · `salesforce, salesforcetrigger`
- [SeaTable](https://docs.gorunner.io/apps/seatable): Work with a SeaTable base, or query it with SQL. · `seatable, seatabletrigger`
- [Spreadsheet](https://docs.gorunner.io/apps/spreadsheet): Read or write an .xlsx spreadsheet. · `spreadsheet`
- [Storage](https://docs.gorunner.io/apps/storage): Keep values between runs, each under its own key. · `store`
- [Supabase](https://docs.gorunner.io/apps/supabase): Create, find, update and delete rows in a Supabase project's tables, call its database functions, and store files in Supabase Storage. · `supabase, supabasetrigger`
- [Tally](https://docs.gorunner.io/apps/tally): Read and delete Tally submissions, create, change and delete forms, and look up questions and workspaces. · `tally, tallytrigger`
- [Text Helper](https://docs.gorunner.io/apps/text-helper): Join, replace, split, trim and change the case of text. · `text`
- [Todoist](https://docs.gorunner.io/apps/todoist): Create, update, complete and move tasks in Todoist, read completed tasks, and manage projects, sections, comments, labels and reminders. · `todoist, todoisttrigger`
- [TOTP / 2FA](https://docs.gorunner.io/apps/totp-2fa): Make or check two-factor one-time codes (TOTP). · `totp`
- [Trello](https://docs.gorunner.io/apps/trello): Create, move and update Trello cards, comment on them, manage checklists, labels, attachments and custom fields, and work with lists, boards and board members. · `trello, trellotrigger`
- [Typeform](https://docs.gorunner.io/apps/typeform): Read and delete Typeform responses, create and change forms, and manage workspaces and images. · `typeform, typeformtrigger`
- [WordPress](https://docs.gorunner.io/apps/wordpress): Create, find, update and delete posts, pages, users, media, categories and tags on a WordPress site. · `wordpress`
- [XML](https://docs.gorunner.io/apps/xml): Read XML into data, or build XML from data. · `xml`
- [YouTube](https://docs.gorunner.io/apps/youtube): Upload, find, update and rate YouTube videos, manage playlists and their videos, update your channel, and read, post or reply to comments. · `youtube`
- [Zoho CRM](https://docs.gorunner.io/apps/zoho-crm): Create, find, update and delete Zoho CRM leads, contacts, accounts, deals, quotes, orders, invoices, products, vendors and records of any module, add notes, and query with COQL. · `zohocrm`
- [GraphQL](https://docs.gorunner.io/apps/graphql): Send queries and mutations to any GraphQL API. · `graphql`
- [HTTP Request](https://docs.gorunner.io/apps/http-request): Call any web address or API. · `http`
- [Anthropic](https://docs.gorunner.io/apps/anthropic): Ask Claude for text or JSON, with images, PDFs, uploaded files, web search and web fetch; count tokens; manage files; and send message batches at half the price. · `anthropic`
- [Azure OpenAI](https://docs.gorunner.io/apps/azure-openai): Message the models deployed in an Azure OpenAI (Microsoft Foundry) resource, ask about images, and create embeddings. · `azureopenai`
- [DeepL](https://docs.gorunner.io/apps/deepl): Translate text and documents with DeepL, keep glossaries, improve text with DeepL Write, and check the account's usage. · `deepl`
- [DeepSeek](https://docs.gorunner.io/apps/deepseek): Message DeepSeek's models with or without thinking mode, ask about images, and check the account balance. · `deepseek`
- [ElevenLabs](https://docs.gorunner.io/apps/elevenlabs): Turn text into lifelike speech and recordings into text with ElevenLabs, and look up voices, models, past generations and the account's usage. · `elevenlabs`
- [Google Gemini](https://docs.gorunner.io/apps/google-gemini): Ask Gemini for text or JSON about text, images, audio, documents and video; generate and edit images; generate videos; make embeddings; and manage files and file search stores. · `googlegemini`
- [Groq](https://docs.gorunner.io/apps/groq): Message the open models Groq serves, ask about images, and turn speech into text with Whisper. · `groq`
- [Mistral AI](https://docs.gorunner.io/apps/mistral-ai): Chat with Mistral models (text, images, JSON), extract text from PDFs and images with Mistral OCR, make embeddings, check text for policy violations, transcribe and speak audio with Voxtral, run agents, and manage files. · `mistralai`
- [Ollama](https://docs.gorunner.io/apps/ollama): Message models on your own Ollama server or Ollama's cloud, ask about images, create embeddings, and manage the server's models. · `ollama`
- [OpenAI](https://docs.gorunner.io/apps/openai): Ask OpenAI models for text or JSON (with files, images, web search and code interpreter), check text for policy violations, make embeddings, generate and edit images, turn text into speech, transcribe and translate audio, and manage files and conversations. · `openai`
- [OpenRouter](https://docs.gorunner.io/apps/openrouter): Message models from many providers through one OpenRouter key, with fallbacks, provider routing and web search; create embeddings; check costs and credit. · `openrouter`
- [Perplexity](https://docs.gorunner.io/apps/perplexity): Get cited, web-searched answers from Perplexity's agent, search the web, and create embeddings. · `perplexity`
- [ActiveCampaign](https://docs.gorunner.io/apps/activecampaign): Keep ActiveCampaign contacts, accounts and deals up to date, put contacts on lists, tags and automations, and sync e-commerce customers and orders. · `activecampaign, activecampaigntrigger`
- [Brevo](https://docs.gorunner.io/apps/brevo): Send transactional email and SMS through Brevo, keep contacts, lists and attributes up to date, and create and send email campaigns. · `brevo, brevotrigger`
- [Calendly](https://docs.gorunner.io/apps/calendly): Read and cancel Calendly bookings, book invitees, mark no-shows, make single-use scheduling links, and read event types and availability. · `calendly, calendlytrigger`
- [Discord](https://docs.gorunner.io/apps/discord): Send, edit, pin and react to messages from your Discord bot or a channel webhook, and manage channels, members, roles, timeouts and bans. · `discord`
- [Email (IMAP)](https://docs.gorunner.io/apps/email-imap): Read, search and manage email in an IMAP mailbox. · `imap`
- [Email (SMTP)](https://docs.gorunner.io/apps/email-smtp): Send email through an SMTP server. · `email`
- [Freshdesk](https://docs.gorunner.io/apps/freshdesk): Create, update and find Freshdesk tickets, reply and add notes, and manage contacts and companies. · `freshdesk, freshdesktrigger`
- [Gmail](https://docs.gorunner.io/apps/gmail): Send, read and label email in Gmail. · `gmail, gmailtrigger`
- [Google Contacts](https://docs.gorunner.io/apps/google-contacts): Create, find, update and delete contacts in Google Contacts, and sort them into labels. · `googlecontacts`
- [Intercom](https://docs.gorunner.io/apps/intercom): Manage Intercom contacts and companies, reply to, assign and close conversations, handle tickets, and publish help center articles. · `intercom, intercomtrigger`
- [KlickTipp](https://docs.gorunner.io/apps/klicktipp): Subscribe, update, tag and untag contacts in KlickTipp, find them by email, and manage tags, opt-in processes and data fields. · `klicktipp, klicktipptrigger`
- [Mailchimp](https://docs.gorunner.io/apps/mailchimp): Add, update and tag audience members, create, schedule and send campaigns, manage templates, and read campaign reports in Mailchimp. · `mailchimp, mailchimptrigger`
- [MailerLite](https://docs.gorunner.io/apps/mailerlite): Add, update and find subscribers in MailerLite, sort them into groups, manage custom fields, and create, schedule and read campaigns. · `mailerlite, mailerlitetrigger`
- [Microsoft Outlook](https://docs.gorunner.io/apps/microsoft-outlook): Send, find and organize mail in Outlook, work with drafts, attachments and folders, and manage calendar events and contacts. · `microsoftoutlook, outlooktrigger`
- [Microsoft Teams](https://docs.gorunner.io/apps/microsoft-teams): Post and read messages in Teams channels and chats, ask for an approval in a chat, manage channels, chat members, online meetings and Planner tasks, and send activity feed notifications. · `microsoftteams, teamstrigger`
- [SendGrid](https://docs.gorunner.io/apps/sendgrid): Send email through SendGrid, with attachments and dynamic templates, and manage Marketing Campaigns contacts and lists. · `sendgrid`
- [Slack](https://docs.gorunner.io/apps/slack): Post, schedule, update and search messages, manage channels, upload files, react, and look up users and user groups in Slack. · `slack, slacktrigger`
- [Telegram](https://docs.gorunner.io/apps/telegram): Send messages, photos, documents, albums, polls and rich messages from a Telegram bot, edit, pin and react to messages, manage chats and download files. · `telegram, telegramtrigger`
- [Twilio](https://docs.gorunner.io/apps/twilio): Send SMS, MMS and WhatsApp messages and place calls with Twilio, look up phone numbers, and send and check verification codes. · `twilio, twiliotrigger`
- [WhatsApp Business](https://docs.gorunner.io/apps/whatsapp-business): Send WhatsApp messages: text, media, buttons, lists and approved templates. From your WhatsApp Business number, and upload and download media. · `whatsapp, whatsapptrigger`
- [Zendesk](https://docs.gorunner.io/apps/zendesk): Create, update and find Zendesk tickets, reply and add internal notes, apply macros, and manage users and organizations. · `zendesk, zendesktrigger`
- [bexio](https://docs.gorunner.io/apps/bexio): Create and find contacts, write invoices (Rechnungen), quotes (Offerten) and orders (Aufträge) and issue, send or invoice them, download their PDF, book payments, and manage articles, projects, timesheets and manual entries in bexio. · `bexio, bexiotrigger`
- [Lexware Office](https://docs.gorunner.io/apps/lexware-office): Create and find contacts and articles, write invoices (Rechnungen), quotations (Angebote), order confirmations, delivery notes, credit notes and dunnings as drafts or finalized and download their PDF, record bookkeeping vouchers (Belege) with their files, and read payments in Lexware Office (formerly lexoffice). · `lexoffice, lexofficetrigger`
- [PayPal](https://docs.gorunner.io/apps/paypal): Take and refund PayPal payments: orders, authorizations and captures, refunds, payouts, invoices and subscriptions. · `paypal, paypaltrigger`
- [sevdesk](https://docs.gorunner.io/apps/sevdesk): Create and find contacts, write invoices (Rechnungen) and send, book or cancel them, create quotes, order confirmations and delivery notes, record vouchers (Belege) with their receipt, and manage parts, bank accounts and transactions in sevdesk. · `sevdesk, sevdesktrigger`
- [Shopify](https://docs.gorunner.io/apps/shopify): Manage a Shopify store: orders, products and variants, customers, inventory, locations and fulfillments. · `shopify, shopifytrigger`
- [Stripe](https://docs.gorunner.io/apps/stripe): Take payments and manage billing in Stripe: payment intents, checkout sessions and payment links, customers, charges and refunds, invoices, subscriptions, products, prices and coupons. · `stripe, stripetrigger`
- [weclapp](https://docs.gorunner.io/apps/weclapp): Create, find and change customers and contacts, articles, sales orders (Aufträge), invoices (Rechnungen), quotations (Angebote) and tickets in weclapp, download their PDF, and invoice an order. · `weclapp, weclapptrigger`
- [WooCommerce](https://docs.gorunner.io/apps/woocommerce): Manage a WooCommerce store: orders, order notes and refunds, products and their variations, customers and coupons. · `woocommerce, woocommercetrigger`

## API

- [List workflows](https://docs.gorunner.io/api/workflows/list-workflows): Workflows · `GET/api/workflows`
- [List tags](https://docs.gorunner.io/api/workflows/list-workflow-tags): Workflows · `GET/api/workflows/tags`
- [Create a workflow](https://docs.gorunner.io/api/workflows/create-workflow): Workflows · `POST/api/workflows`
- [Check a definition](https://docs.gorunner.io/api/workflows/validate-workflow-definition): Workflows · `POST/api/workflows/validate`
- [Import a workflow](https://docs.gorunner.io/api/workflows/import-workflow): Workflows · `POST/api/workflows/import`
- [Preview an import](https://docs.gorunner.io/api/workflows/preview-workflow-import): Workflows · `POST/api/workflows/import/preview`
- [Change many workflows at once](https://docs.gorunner.io/api/workflows/bulk-update-workflows): Workflows · `POST/api/workflows/bulk`
- [Get a workflow](https://docs.gorunner.io/api/workflows/get-workflow): Workflows · `GET/api/workflows/{id}`
- [Update a workflow’s draft](https://docs.gorunner.io/api/workflows/update-workflow): Workflows · `PUT/api/workflows/{id}`
- [Delete a workflow](https://docs.gorunner.io/api/workflows/delete-workflow): Workflows · `DELETE/api/workflows/{id}`
- [Export a workflow](https://docs.gorunner.io/api/workflows/export-workflow): Workflows · `GET/api/workflows/{id}/export`
- [Set a workflow’s tags](https://docs.gorunner.io/api/workflows/replace-workflow-tags): Workflows · `PUT/api/workflows/{id}/tags`
- [Move a workflow to a folder](https://docs.gorunner.io/api/workflows/move-workflow-to-folder): Workflows · `PUT/api/workflows/{id}/folder`
- [Duplicate a workflow](https://docs.gorunner.io/api/workflows/duplicate-workflow): Workflows · `POST/api/workflows/{id}/duplicate`
- [Convert a Code step to 2.0.0](https://docs.gorunner.io/api/workflows/upgrade-code-step): Workflows · `POST/api/code-steps/upgrade`
- [List versions](https://docs.gorunner.io/api/publish/list-workflow-versions): Publish and versions · `GET/api/workflows/{id}/versions`
- [Publish a workflow](https://docs.gorunner.io/api/publish/publish-workflow): Publish and versions · `POST/api/workflows/{id}/publish`
- [Review what publishing changes](https://docs.gorunner.io/api/publish/get-publish-review): Publish and versions · `GET/api/workflows/{id}/publish-review`
- [Unpublish a workflow](https://docs.gorunner.io/api/publish/unpublish-workflow): Publish and versions · `POST/api/workflows/{id}/unpublish`
- [Get a new webhook address](https://docs.gorunner.io/api/publish/rotate-workflow-webhook-token): Publish and versions · `POST/api/workflows/{id}/webhook/rotate`
- [List variables](https://docs.gorunner.io/api/publish/get-workflow-variables): Publish and versions · `GET/api/workflows/{id}/variables`
- [Replace variables](https://docs.gorunner.io/api/publish/replace-workflow-variables): Publish and versions · `PUT/api/workflows/{id}/variables`
- [Get a version](https://docs.gorunner.io/api/publish/get-workflow-version): Publish and versions · `GET/api/workflows/{id}/versions/{versionId}`
- [Go back to a version](https://docs.gorunner.io/api/publish/restore-workflow-version): Publish and versions · `POST/api/workflows/{id}/versions/{versionId}/restore`
- [List runs](https://docs.gorunner.io/api/runs/list-runs): Runs · `GET/api/runs`
- [List waiting runs](https://docs.gorunner.io/api/runs/list-waiting-runs): Runs · `GET/api/runs/waiting`
- [List a workflow’s runs](https://docs.gorunner.io/api/runs/list-workflow-runs): Runs · `GET/api/workflows/{id}/runs`
- [Get a run](https://docs.gorunner.io/api/runs/get-run): Runs · `GET/api/runs/{id}`
- [Delete a run](https://docs.gorunner.io/api/runs/delete-run): Runs · `DELETE/api/runs/{id}`
- [Stream a run](https://docs.gorunner.io/api/runs/stream-run): Runs · `GET/api/runs/{id}/stream`
- [Cancel a run](https://docs.gorunner.io/api/runs/cancel-run): Runs · `POST/api/runs/{id}/cancel`
- [Approve or reject a held run](https://docs.gorunner.io/api/runs/decide-run): Runs · `POST/api/runs/{id}/decision`
- [Delete many runs](https://docs.gorunner.io/api/runs/delete-runs-bulk): Runs · `POST/api/runs/delete`
- [Run a workflow](https://docs.gorunner.io/api/runs/run-workflow): Runs · `POST/api/workflows/{id}/run`
- [Count a workflow’s waiting runs](https://docs.gorunner.io/api/runs/count-waiting-runs): Runs · `GET/api/workflows/{id}/runs/waiting`
- [Cancel waiting runs](https://docs.gorunner.io/api/runs/cancel-waiting-runs): Runs · `POST/api/workflows/{id}/runs/cancel-waiting`
- [Run a run again](https://docs.gorunner.io/api/runs/rerun-run): Runs · `POST/api/runs/{id}/rerun`
- [Run many runs again](https://docs.gorunner.io/api/runs/rerun-runs-bulk): Runs · `POST/api/runs/rerun`
- [Cancel many runs](https://docs.gorunner.io/api/runs/cancel-runs-bulk): Runs · `POST/api/runs/cancel`
- [Deliver to a webhook](https://docs.gorunner.io/api/runs/deliver-webhook): Runs · `POST/api/webhooks/{token}`
- [Group failed runs](https://docs.gorunner.io/api/stats/list-run-failure-groups): Run stats · `GET/api/runs/failures`
- [Runs in flight](https://docs.gorunner.io/api/stats/get-stats): Run stats · `GET/api/stats`
- [Run summary with trend](https://docs.gorunner.io/api/stats/get-stats-summary): Run stats · `GET/api/stats/summary`
- [The last 7 days](https://docs.gorunner.io/api/stats/get-stats-week): Run stats · `GET/api/stats/week`
- [Overview figures](https://docs.gorunner.io/api/stats/get-stats-overview): Run stats · `GET/api/stats/overview`
- [Runs over time](https://docs.gorunner.io/api/stats/get-stats-timeseries): Run stats · `GET/api/stats/timeseries`
- [Count runs by state](https://docs.gorunner.io/api/stats/count-runs): Run stats · `GET/api/runs/counts`
- [Summarize a range of runs](https://docs.gorunner.io/api/stats/summarize-run-range): Run stats · `GET/api/runs/range`
- [Usual run times](https://docs.gorunner.io/api/stats/get-usual-run-times): Run stats · `GET/api/runs/usual`
- [List apps](https://docs.gorunner.io/api/apps/list-apps): Apps · `GET/api/pieces`
- [Catalog status](https://docs.gorunner.io/api/apps/get-catalog-status): Apps · `GET/api/pieces/catalog-status`
- [Get an app](https://docs.gorunner.io/api/apps/get-app): Apps · `GET/api/pieces/{id}`
- [Get an action’s fields](https://docs.gorunner.io/api/apps/get-app-action): Apps · `GET/api/pieces/{id}/actions/{actionId}`
- [Get a trigger’s fields](https://docs.gorunner.io/api/apps/get-app-trigger): Apps · `GET/api/pieces/{id}/triggers/{triggerId}`
- [Get a field’s sub-fields](https://docs.gorunner.io/api/apps/resolve-dynamic-properties): Apps · `POST/api/pieces/{id}/actions/{actionId}/properties/{propertyName}`
- [Get a field’s options](https://docs.gorunner.io/api/apps/resolve-dynamic-options): Apps · `POST/api/pieces/{id}/actions/{actionId}/options/{propertyName}`
- [Get a trigger’s sample data](https://docs.gorunner.io/api/apps/get-trigger-sample): Apps · `POST/api/pieces/{id}/triggers/{triggerId}/sample`
- [Preview a schedule](https://docs.gorunner.io/api/apps/preview-schedule-next-runs): Apps · `POST/api/pieces/schedule/next-runs`
- [List connections](https://docs.gorunner.io/api/connections/list-connections): Connections · `GET/api/connections`
- [Create a connection](https://docs.gorunner.io/api/connections/create-connection): Connections · `POST/api/connections`
- [See which workflows use each connection](https://docs.gorunner.io/api/connections/get-connection-usage): Connections · `GET/api/connections/usage`
- [Test sign-in details before saving](https://docs.gorunner.io/api/connections/test-connection-draft): Connections · `POST/api/connections/test`
- [Start a sign-in for a new connection](https://docs.gorunner.io/api/connections/start-connection-oauth2-draft): Connections · `POST/api/connections/oauth2/start`
- [Check a sign-in](https://docs.gorunner.io/api/connections/get-connection-oauth2-attempt-any): Connections · `GET/api/connections/oauth2/attempts/{attemptId}`
- [Stop a sign-in](https://docs.gorunner.io/api/connections/cancel-connection-oauth2-attempt): Connections · `POST/api/connections/oauth2/attempts/{attemptId}/cancel`
- [Open a sign-in in this tab](https://docs.gorunner.io/api/connections/launch-connection-oauth2-here): Connections · `POST/api/connections/oauth2/attempts/{attemptId}/go`
- [Get a connection](https://docs.gorunner.io/api/connections/get-connection): Connections · `GET/api/connections/{id}`
- [Rename or update a connection](https://docs.gorunner.io/api/connections/update-connection): Connections · `PUT/api/connections/{id}`
- [Delete a connection](https://docs.gorunner.io/api/connections/delete-connection): Connections · `DELETE/api/connections/{id}`
- [Get a connection’s settings](https://docs.gorunner.io/api/connections/get-connection-settings): Connections · `GET/api/connections/{id}/settings`
- [Test a connection](https://docs.gorunner.io/api/connections/test-connection): Connections · `POST/api/connections/{id}/test`
- [Move workflows to another connection](https://docs.gorunner.io/api/connections/replace-connection-references): Connections · `POST/api/connections/{id}/replace`
- [Start a sign-in for a connection](https://docs.gorunner.io/api/connections/start-connection-oauth2): Connections · `POST/api/connections/{id}/oauth2/start`
- [Check a connection’s sign-in](https://docs.gorunner.io/api/connections/get-connection-oauth2-attempt): Connections · `GET/api/connections/{id}/oauth2/attempts/{attemptId}`
- [List folders](https://docs.gorunner.io/api/folders/list-folders): Folders · `GET/api/folders`
- [Create a folder](https://docs.gorunner.io/api/folders/create-folder): Folders · `POST/api/folders`
- [Rename or move a folder](https://docs.gorunner.io/api/folders/update-folder): Folders · `PUT/api/folders/{id}`
- [Delete a folder](https://docs.gorunner.io/api/folders/delete-folder): Folders · `DELETE/api/folders/{id}`
- [List templates](https://docs.gorunner.io/api/templates/list-templates): Templates · `GET/api/templates`
- [Save a workflow as a template](https://docs.gorunner.io/api/templates/create-template): Templates · `POST/api/templates`
- [Count templates](https://docs.gorunner.io/api/templates/count-templates): Templates · `GET/api/templates/count`
- [Preview saving a template](https://docs.gorunner.io/api/templates/preview-template-save): Templates · `POST/api/templates/save-preview`
- [Get a template](https://docs.gorunner.io/api/templates/get-template): Templates · `GET/api/templates/{id}`
- [Update a template](https://docs.gorunner.io/api/templates/update-template): Templates · `PUT/api/templates/{id}`
- [Delete a template](https://docs.gorunner.io/api/templates/delete-template): Templates · `DELETE/api/templates/{id}`
- [Update a template’s steps](https://docs.gorunner.io/api/templates/replace-template-steps): Templates · `PUT/api/templates/{id}/definition`
- [Make a workflow from a template](https://docs.gorunner.io/api/templates/use-template): Templates · `POST/api/templates/{id}/use`
- [Preview using a template](https://docs.gorunner.io/api/templates/preview-template-use): Templates · `POST/api/templates/{id}/use/preview`

## Partner API

- [Start a session](https://docs.gorunner.io/embed/api/sign-in/start-session): Sign-in · `POST/api/embed/v1/sessions`
- [Make a login code](https://docs.gorunner.io/embed/api/sign-in/issue-login-code): Sign-in · `POST/api/embed/v1/login-codes`
- [Check the installation can be embedded](https://docs.gorunner.io/embed/api/sign-in/bootstrap): Sign-in · `GET/api/embed/v1/bootstrap`
- [End a session](https://docs.gorunner.io/embed/api/sign-in/end-session): Sign-in · `DELETE/api/embed/v1/sessions/current`
- [Turn switches off for a session](https://docs.gorunner.io/embed/api/sign-in/narrow-session): Sign-in · `POST/api/embed/v1/sessions/current/turn-off`
- [Renew a session](https://docs.gorunner.io/embed/api/sign-in/renew-session): Sign-in · `POST/api/embed/v1/sessions/current/renew`
- [List accounts](https://docs.gorunner.io/embed/api/accounts/list-accounts): Accounts · `GET/api/embed/v1/accounts`
- [Get an account](https://docs.gorunner.io/embed/api/accounts/get-account): Accounts · `GET/api/embed/v1/accounts/{accountId}`
- [Create or update an account](https://docs.gorunner.io/embed/api/accounts/put-account): Accounts · `PUT/api/embed/v1/accounts/{accountId}`
- [Suspend an account](https://docs.gorunner.io/embed/api/accounts/suspend-account): Accounts · `POST/api/embed/v1/accounts/{accountId}/suspend`
- [Resume an account](https://docs.gorunner.io/embed/api/accounts/resume-account): Accounts · `POST/api/embed/v1/accounts/{accountId}/resume`
- [Restore an account](https://docs.gorunner.io/embed/api/accounts/restore-account): Accounts · `POST/api/embed/v1/accounts/{accountId}/restore`
- [Delete an account](https://docs.gorunner.io/embed/api/accounts/delete-account): Accounts · `DELETE/api/embed/v1/accounts/{accountId}`
- [List an account’s tokens](https://docs.gorunner.io/embed/api/tokens/list-tokens): Tokens · `GET/api/embed/v1/accounts/{accountId}/tokens`
- [Make a token](https://docs.gorunner.io/embed/api/tokens/create-token): Tokens · `POST/api/embed/v1/accounts/{accountId}/tokens`
- [Revoke a token](https://docs.gorunner.io/embed/api/tokens/revoke-token): Tokens · `DELETE/api/embed/v1/accounts/{accountId}/tokens/{tokenId}`
- [List an account’s websites](https://docs.gorunner.io/embed/api/websites/list-account-websites): Websites · `GET/api/embed/v1/accounts/{accountId}/websites`
- [List allowed websites](https://docs.gorunner.io/embed/api/websites/list-websites): Websites · `GET/api/embed/v1/websites`
- [Replace an account’s websites](https://docs.gorunner.io/embed/api/websites/put-account-websites): Websites · `PUT/api/embed/v1/accounts/{accountId}/websites`
- [Allow a website for one account](https://docs.gorunner.io/embed/api/websites/add-account-website): Websites · `POST/api/embed/v1/accounts/{accountId}/websites`
- [Allow a website](https://docs.gorunner.io/embed/api/websites/add-website): Websites · `POST/api/embed/v1/websites`
- [Stop allowing a website for one account](https://docs.gorunner.io/embed/api/websites/remove-account-website): Websites · `DELETE/api/embed/v1/accounts/{accountId}/websites/{origin}`
- [Stop allowing a website](https://docs.gorunner.io/embed/api/websites/remove-website): Websites · `DELETE/api/embed/v1/websites/{origin}`
- [List workspaces](https://docs.gorunner.io/embed/api/workspaces/list-workspaces): Workspaces · `GET/api/embed/v1/accounts/{accountId}/workspaces`
- [Get a workspace](https://docs.gorunner.io/embed/api/workspaces/get-workspace): Workspaces · `GET/api/embed/v1/accounts/{accountId}/workspaces/{workspaceId}`
- [Create or rename a workspace](https://docs.gorunner.io/embed/api/workspaces/put-workspace): Workspaces · `PUT/api/embed/v1/accounts/{accountId}/workspaces/{workspaceId}`
- [Delete a workspace](https://docs.gorunner.io/embed/api/workspaces/delete-workspace): Workspaces · `DELETE/api/embed/v1/accounts/{accountId}/workspaces/{workspaceId}`
- [List an account’s members](https://docs.gorunner.io/embed/api/people/list-members): People · `GET/api/embed/v1/accounts/{accountId}/members`
- [Get a person](https://docs.gorunner.io/embed/api/people/get-user): People · `GET/api/embed/v1/users/{userId}`
- [Give a person a role](https://docs.gorunner.io/embed/api/people/put-member): People · `PUT/api/embed/v1/accounts/{accountId}/members/{userId}`
- [Create or update a person](https://docs.gorunner.io/embed/api/people/put-user): People · `PUT/api/embed/v1/users/{userId}`
- [Remove a member](https://docs.gorunner.io/embed/api/people/remove-member): People · `DELETE/api/embed/v1/accounts/{accountId}/members/{userId}`
- [Delete a person](https://docs.gorunner.io/embed/api/people/delete-user): People · `DELETE/api/embed/v1/users/{userId}`
- [List connections](https://docs.gorunner.io/embed/api/connections/list-connections): Connections · `GET/api/embed/v1/accounts/{accountId}/connections`
- [Get a managed connection](https://docs.gorunner.io/embed/api/connections/get-connection): Connections · `GET/api/embed/v1/accounts/{accountId}/connections/{connectionKey}`
- [Check how a connection sign-in ended](https://docs.gorunner.io/embed/api/connections/get-connection-sign-in): Connections · `GET/api/embed/v1/accounts/{accountId}/connections/oauth2/attempts/{attemptId}`
- [Create or replace a managed connection](https://docs.gorunner.io/embed/api/connections/put-connection): Connections · `PUT/api/embed/v1/accounts/{accountId}/connections/{connectionKey}`
- [Start a connection sign-in from your own button](https://docs.gorunner.io/embed/api/connections/start-connection-sign-in): Connections · `POST/api/embed/v1/accounts/{accountId}/connections/oauth2/start`
- [Delete a managed connection](https://docs.gorunner.io/embed/api/connections/delete-connection): Connections · `DELETE/api/embed/v1/accounts/{accountId}/connections/{connectionKey}`
- [List templates customers can install](https://docs.gorunner.io/embed/api/workflows/list-templates): Workflows · `GET/api/embed/v1/templates`
- [List workflows](https://docs.gorunner.io/embed/api/workflows/list-workflows): Workflows · `GET/api/embed/v1/accounts/{accountId}/workflows`
- [Get a workflow](https://docs.gorunner.io/embed/api/workflows/get-workflow): Workflows · `GET/api/embed/v1/accounts/{accountId}/workflows/{workflowId}`
- [Install a template](https://docs.gorunner.io/embed/api/workflows/install-workflow): Workflows · `POST/api/embed/v1/accounts/{accountId}/workflows`
- [Enable a workflow](https://docs.gorunner.io/embed/api/workflows/enable-workflow): Workflows · `POST/api/embed/v1/accounts/{accountId}/workflows/{workflowId}/enable`
- [Disable a workflow](https://docs.gorunner.io/embed/api/workflows/disable-workflow): Workflows · `POST/api/embed/v1/accounts/{accountId}/workflows/{workflowId}/disable`
- [Cancel a workflow’s waiting runs](https://docs.gorunner.io/embed/api/workflows/cancel-waiting-runs): Workflows · `POST/api/embed/v1/accounts/{accountId}/workflows/{workflowId}/cancel-waiting`
- [List runs](https://docs.gorunner.io/embed/api/runs/list-runs): Runs · `GET/api/embed/v1/accounts/{accountId}/runs`
- [Get a run](https://docs.gorunner.io/embed/api/runs/get-run): Runs · `GET/api/embed/v1/accounts/{accountId}/runs/{runId}`
- [Cancel a run](https://docs.gorunner.io/embed/api/runs/cancel-run): Runs · `POST/api/embed/v1/accounts/{accountId}/runs/{runId}/cancel`
- [Run a run again](https://docs.gorunner.io/embed/api/runs/rerun-run): Runs · `POST/api/embed/v1/accounts/{accountId}/runs/{runId}/rerun`
- [List every account’s usage](https://docs.gorunner.io/embed/api/usage/list-usage): Usage · `GET/api/embed/v1/usage`
- [Get an account’s usage](https://docs.gorunner.io/embed/api/usage/get-account-usage): Usage · `GET/api/embed/v1/accounts/{accountId}/usage`
- [List an account’s AI apps](https://docs.gorunner.io/embed/api/ai-apps/list-ai-apps): AI apps · `GET/api/embed/v1/accounts/{accountId}/ai-apps`
- [Read a sign-in request](https://docs.gorunner.io/embed/api/ai-apps/get-oauth-request): AI apps · `GET/api/embed/v1/oauth-requests/{requestId}`
- [Sign a person in for an AI app](https://docs.gorunner.io/embed/api/ai-apps/complete-oauth-request): AI apps · `POST/api/embed/v1/oauth-requests/{requestId}/complete`
- [Turn a sign-in request down](https://docs.gorunner.io/embed/api/ai-apps/deny-oauth-request): AI apps · `POST/api/embed/v1/oauth-requests/{requestId}/deny`
- [Disconnect an AI app](https://docs.gorunner.io/embed/api/ai-apps/revoke-ai-app): AI apps · `DELETE/api/embed/v1/accounts/{accountId}/ai-apps/{grantId}`
- [Disconnect an account’s AI apps](https://docs.gorunner.io/embed/api/ai-apps/revoke-account-ai-apps): AI apps · `POST/api/embed/v1/accounts/{accountId}/ai-apps/revoke`
- [Disconnect every AI app](https://docs.gorunner.io/embed/api/ai-apps/revoke-all-ai-apps): AI apps · `POST/api/embed/v1/ai-apps/revoke`

## Settings

- [PUBLIC_URL](https://docs.gorunner.io/self-host/settings?q=PUBLIC_URL): The full address people open, such as https://automations.example.com, with the port when it is not 443. · `.env`
- [ENCRYPTION_KEY](https://docs.gorunner.io/self-host/settings?q=ENCRYPTION_KEY): Opens every password, API key and connection GoRunner stores: 64 hexadecimal characters (openssl rand -hex 32). · `.env`
- [GORUNNER_ROLE](https://docs.gorunner.io/self-host/settings?q=GORUNNER_ROLE): all: everything on this server. · `default all`
- [POSTGRES_PASSWORD](https://docs.gorunner.io/self-host/settings?q=POSTGRES_PASSWORD): The built-in database's password. · `.env`
- [REDIS_PASSWORD](https://docs.gorunner.io/self-host/settings?q=REDIS_PASSWORD): The built-in queue's password. · `.env`
- [S3_ACCESS_KEY](https://docs.gorunner.io/self-host/settings?q=S3_ACCESS_KEY): The keys of the built-in object storage (S3). · `.env`
- [S3_SECRET_KEY](https://docs.gorunner.io/self-host/settings?q=S3_SECRET_KEY): The keys of the built-in object storage (S3). · `.env`
- [GORUNNER_PROXY_MODE](https://docs.gorunner.io/self-host/settings?q=GORUNNER_PROXY_MODE): How people reach GoRunner. · `.env`
- [GORUNNER_APP_BIND](https://docs.gorunner.io/self-host/settings?q=GORUNNER_APP_BIND): Only with your own proxy: where it reaches GoRunner, [IP:]PORT. · `.env`
- [APP_TRUSTED_PROXIES](https://docs.gorunner.io/self-host/settings?q=APP_TRUSTED_PROXIES): Who may tell GoRunner the caller's address. · `.env`
- [GORUNNER_DOMAIN](https://docs.gorunner.io/self-host/settings?q=GORUNNER_DOMAIN): The name people open, such as automations.example.com. · `.env`
- [GORUNNER_TLS](https://docs.gorunner.io/self-host/settings?q=GORUNNER_TLS): acme (the default): a free certificate from Let's Encrypt. · `default acme`
- [GORUNNER_HSTS](https://docs.gorunner.io/self-host/settings?q=GORUNNER_HSTS): on: every page tells browsers to use https for this address for a year (Strict-Transport-Security: max-age=31536000, this name only, not its subdomains). The setup writes on when it gets a certificate from Let’s Encrypt. · `default off`
- [PUBLIC_HTTP_PORT](https://docs.gorunner.io/self-host/settings?q=PUBLIC_HTTP_PORT): The server ports Caddy listens on. · `default 80`
- [PUBLIC_HTTPS_PORT](https://docs.gorunner.io/self-host/settings?q=PUBLIC_HTTPS_PORT): The server ports Caddy listens on. · `default 443`
- [GORUNNER_TRUSTED_PROXIES](https://docs.gorunner.io/self-host/settings?q=GORUNNER_TRUSTED_PROXIES): Only when a proxy of yours stands in front of Caddy: that proxy's own address or range. · `.env`
- [GORUNNER_EDGE_NET](https://docs.gorunner.io/self-host/settings?q=GORUNNER_EDGE_NET): The private networks GoRunner keeps for Caddy, as three numbers such as 172.29.253: one joins Caddy to the app, the other carries Caddy's published ports. · `.env`
- [RESEND_API_KEY](https://docs.gorunner.io/self-host/settings?q=RESEND_API_KEY): A Resend API key. Used when set. · `.env`
- [SMTP_HOST](https://docs.gorunner.io/self-host/settings?q=SMTP_HOST): Any SMTP server, used when there is no Resend key. · `.env`
- [SMTP_PORT](https://docs.gorunner.io/self-host/settings?q=SMTP_PORT): Any SMTP server, used when there is no Resend key. · `default 587`
- [SMTP_USER](https://docs.gorunner.io/self-host/settings?q=SMTP_USER): Any SMTP server, used when there is no Resend key. · `.env`
- [SMTP_PASSWORD](https://docs.gorunner.io/self-host/settings?q=SMTP_PASSWORD): Any SMTP server, used when there is no Resend key. · `.env`
- [SMTP_SECURE](https://docs.gorunner.io/self-host/settings?q=SMTP_SECURE): How the connection is encrypted. · `.env`
- [MAIL_FROM](https://docs.gorunner.io/self-host/settings?q=MAIL_FROM): The sender, such as GoRunner \<no-reply@example.com>. · `.env`
- [GORUNNER_ADMIN_EMAIL](https://docs.gorunner.io/self-host/settings?q=GORUNNER_ADMIN_EMAIL): Optional. Set it, and only this address can create the first admin account, even with the setup code. · `.env`
- [AUTH_ENABLED](https://docs.gorunner.io/self-host/settings?q=AUTH_ENABLED): true. Leave it: GoRunner refuses to start without sign-in on a server. · `.env`
- [ALLOW_SIGNUP](https://docs.gorunner.io/self-host/settings?q=ALLOW_SIGNUP): false: nobody can sign up on their own, and people join by invitation. · `.env`
- [ADMIN_EMAIL_REQUIRED](https://docs.gorunner.io/self-host/settings?q=ADMIN_EMAIL_REQUIRED): true: with GORUNNER_ADMIN_EMAIL empty, nobody may create the first admin. · `.env`
- [PLATFORM_ADMIN_SECRET](https://docs.gorunner.io/self-host/settings?q=PLATFORM_ADMIN_SECRET): Not set by default, which keeps it closed. · `.env`
- [LICENSE_KEY](https://docs.gorunner.io/self-host/settings?q=LICENSE_KEY): Not needed: load the license in the dashboard instead, or paste it when the setup asks. · `.env`
- [GORUNNER_POSTGRES](https://docs.gorunner.io/self-host/settings?q=GORUNNER_POSTGRES): bundled: the built-in database on this server. · `.env`
- [POSTGRES_HOST](https://docs.gorunner.io/self-host/settings?q=POSTGRES_HOST): Your own database, as separate fields. · `.env`
- [POSTGRES_PORT](https://docs.gorunner.io/self-host/settings?q=POSTGRES_PORT): Your own database, as separate fields. · `.env`
- [POSTGRES_DB](https://docs.gorunner.io/self-host/settings?q=POSTGRES_DB): Your own database, as separate fields. · `.env`
- [POSTGRES_USER](https://docs.gorunner.io/self-host/settings?q=POSTGRES_USER): Your own database, as separate fields. · `.env`
- [POSTGRES_PASSWORD](https://docs.gorunner.io/self-host/settings?q=POSTGRES_PASSWORD): Your own database, as separate fields. · `.env`
- [POSTGRES_SSLMODE](https://docs.gorunner.io/self-host/settings?q=POSTGRES_SSLMODE): disable, require, verify-ca or verify-full. · `.env`
- [POSTGRES_CA_FILE](https://docs.gorunner.io/self-host/settings?q=POSTGRES_CA_FILE): The certificate authority to check the database's certificate with, as a file in certs/: /certs/rds.pem. · `.env`
- [DATABASE_URL](https://docs.gorunner.io/self-host/settings?q=DATABASE_URL): Your own database as one address instead, such as postgresql://user:password@host:5432/gorunner?sslmode=require. · `.env`
- [POSTGRES_MAX_CONNECTIONS](https://docs.gorunner.io/self-host/settings?q=POSTGRES_MAX_CONNECTIONS): The built-in database's connection limit. · `default 200`
- [GORUNNER_REDIS](https://docs.gorunner.io/self-host/settings?q=GORUNNER_REDIS): bundled or external, as for the database. · `.env`
- [REDIS_HOST](https://docs.gorunner.io/self-host/settings?q=REDIS_HOST): Your own Redis, as separate fields. · `.env`
- [REDIS_PORT](https://docs.gorunner.io/self-host/settings?q=REDIS_PORT): Your own Redis, as separate fields. · `.env`
- [REDIS_DB](https://docs.gorunner.io/self-host/settings?q=REDIS_DB): Your own Redis, as separate fields. · `.env`
- [REDIS_USER](https://docs.gorunner.io/self-host/settings?q=REDIS_USER): Your own Redis, as separate fields. · `.env`
- [REDIS_PASSWORD](https://docs.gorunner.io/self-host/settings?q=REDIS_PASSWORD): Your own Redis, as separate fields. · `.env`
- [REDIS_TLS](https://docs.gorunner.io/self-host/settings?q=REDIS_TLS): true for an encrypted connection, as most managed Redis services need. · `.env`
- [REDIS_URL](https://docs.gorunner.io/self-host/settings?q=REDIS_URL): Your own Redis as one address instead, such as redis://user:password@host:6379/0 (rediss:// for TLS). · `.env`
- [GORUNNER_STORAGE](https://docs.gorunner.io/self-host/settings?q=GORUNNER_STORAGE): bundled: the built-in object storage (S3). · `.env`
- [S3_ENDPOINT](https://docs.gorunner.io/self-host/settings?q=S3_ENDPOINT): Your bucket: the store's address (such as https://s3.eu-central-1.amazonaws.com), the bucket (gorunner) and its region (us-east-1). · `.env`
- [S3_BUCKET](https://docs.gorunner.io/self-host/settings?q=S3_BUCKET): Your bucket: the store's address (such as https://s3.eu-central-1.amazonaws.com), the bucket (gorunner) and its region (us-east-1). · `default gorunner`
- [S3_REGION](https://docs.gorunner.io/self-host/settings?q=S3_REGION): Your bucket: the store's address (such as https://s3.eu-central-1.amazonaws.com), the bucket (gorunner) and its region (us-east-1). · `default us-east-1`
- [S3_FORCE_PATH_STYLE](https://docs.gorunner.io/self-host/settings?q=S3_FORCE_PATH_STYLE): true for MinIO and SeaweedFS, false for AWS S3. · `.env`
- [STORAGE_INLINE_THRESHOLD_KB](https://docs.gorunner.io/self-host/settings?q=STORAGE_INLINE_THRESHOLD_KB): Step data larger than this many KB goes to storage; smaller stays in the database. · `default 0`
- [S3_OP_TIMEOUT_SECONDS](https://docs.gorunner.io/self-host/settings?q=S3_OP_TIMEOUT_SECONDS): How long one storage call may take (15 seconds), and how often it is tried (4). · `.env`
- [S3_MAX_ATTEMPTS](https://docs.gorunner.io/self-host/settings?q=S3_MAX_ATTEMPTS): How long one storage call may take (15 seconds), and how often it is tried (4). · `.env`
- [AWS_REQUEST_CHECKSUM_CALCULATION](https://docs.gorunner.io/self-host/settings?q=AWS_REQUEST_CHECKSUM_CALCULATION): when_required, for an S3-compatible store that refuses the checksums newer AWS clients add. · `.env`
- [AWS_RESPONSE_CHECKSUM_VALIDATION](https://docs.gorunner.io/self-host/settings?q=AWS_RESPONSE_CHECKSUM_VALIDATION): when_required, for an S3-compatible store that refuses the checksums newer AWS clients add. · `.env`
- [WORKER_REPLICAS](https://docs.gorunner.io/self-host/settings?q=WORKER_REPLICAS): How many worker containers run on this server. · `default 1`
- [WORKER_CONCURRENCY](https://docs.gorunner.io/self-host/settings?q=WORKER_CONCURRENCY): How many runs one worker runs at once. · `default 4`
- [WORKER_INTERACTIVE_CONCURRENCY](https://docs.gorunner.io/self-host/settings?q=WORKER_INTERACTIVE_CONCURRENCY): How many Test step and connection tests from the editor one worker serves at once. · `default 2`
- [KEEL_CONCURRENCY](https://docs.gorunner.io/self-host/settings?q=KEEL_CONCURRENCY): How many Keel conversations one worker serves at once. · `default 2`
- [NOTIFY_CONCURRENCY](https://docs.gorunner.io/self-host/settings?q=NOTIFY_CONCURRENCY): How many notifications to your server one worker sends at once. · `default 4`
- [WORKER_MEMORY_LIMIT](https://docs.gorunner.io/self-host/settings?q=WORKER_MEMORY_LIMIT): The memory one worker may use. · `default 2g`
- [WORKER_STOP_GRACE](https://docs.gorunner.io/self-host/settings?q=WORKER_STOP_GRACE): How long a worker may finish its runs during an update before it is stopped. · `default 300s`
- [API_MEMORY_LIMIT](https://docs.gorunner.io/self-host/settings?q=API_MEMORY_LIMIT): The memory each of the app's two copies may use. · `default 1g`
- [DB_MAX_CONNS](https://docs.gorunner.io/self-host/settings?q=DB_MAX_CONNS): The most database connections each GoRunner process keeps. The setup and the update size it from the check; empty means 50. · `default 50`
- [DB_ADMIN_HEADROOM](https://docs.gorunner.io/self-host/settings?q=DB_ADMIN_HEADROOM): How many database connections the check keeps free beside GoRunner's own, for pg_dump and an administrator's session. · `default 5`
- [DB_MIN_CONNS](https://docs.gorunner.io/self-host/settings?q=DB_MIN_CONNS): The fewest each process keeps open. · `default 5`
- [GOMEMLIMIT](https://docs.gorunner.io/self-host/settings?q=GOMEMLIMIT): A soft memory goal for every GoRunner process, below the memory limits above, such as 900MiB. · `default none`
- [TZ](https://docs.gorunner.io/self-host/settings?q=TZ): The time zone of the processes' logs, and of the time a password lockout ends. · `default UTC`
- [WORKFLOW_PRIVATE_NETWORKS](https://docs.gorunner.io/self-host/settings?q=WORKFLOW_PRIVATE_NETWORKS): Empty (the default): no private address. · `.env`
- [HTTPS_PROXY](https://docs.gorunner.io/self-host/settings?q=HTTPS_PROXY): The proxy for everything GoRunner calls outside, such as http://user:password@proxy.example.com:3128. · `.env`
- [HTTP_PROXY](https://docs.gorunner.io/self-host/settings?q=HTTP_PROXY): The proxy for everything GoRunner calls outside, such as http://user:password@proxy.example.com:3128. · `.env`
- [NO_PROXY](https://docs.gorunner.io/self-host/settings?q=NO_PROXY): Names reached directly, separated by commas. · `.env`
- [EGRESS_PROXY_CONNECT](https://docs.gorunner.io/self-host/settings?q=EGRESS_PROXY_CONNECT): name (the default) or ip: what the proxy is asked to connect to, for the addresses other people chose. · `.env`
- [RUN_RETENTION_DAYS](https://docs.gorunner.io/self-host/settings?q=RUN_RETENTION_DAYS): Runs that finished longer ago than this are deleted every hour, with their data. · `default 90`
- [AUDIT_RETENTION_DAYS](https://docs.gorunner.io/self-host/settings?q=AUDIT_RETENTION_DAYS): Audit log rows older than this many days are deleted every hour. · `default 0`
- [AUDIT_CREDENTIAL_USE_RETENTION_DAYS](https://docs.gorunner.io/self-host/settings?q=AUDIT_CREDENTIAL_USE_RETENTION_DAYS): Credential use GoRunner itself recorded (a run, a schedule or a poll using a connection) older than this many days is deleted every hour. · `default 0`
- [EVENT_STREAMING_ENABLED](https://docs.gorunner.io/self-host/settings?q=EVENT_STREAMING_ENABLED): false stops every organization's event streaming on this installation. · `default true`
- [MAX_STEP_OUTPUT_BYTES](https://docs.gorunner.io/self-host/settings?q=MAX_STEP_OUTPUT_BYTES): The largest input or output one step may hold. · `default 16 MB`
- [API_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=API_RATE_LIMIT): Requests a minute to the API for one caller: an API token, a signed-in session or an embed session, else one address. · `default 1200`
- [WEBHOOK_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=WEBHOOK_RATE_LIMIT): Requests a minute from one address to webhooks, and to a connection sign-in’s launch and return pages. · `default 3000`
- [OAUTH_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=OAUTH_RATE_LIMIT): Requests a minute from one address to AI app sign-in: discovery, register, authorize and token. · `default 120`
- [EMBED_API_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=EMBED_API_RATE_LIMIT): Requests a minute for one embed API key, counted across every app process. · `default 3000`
- [EMBED_ACCOUNT_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=EMBED_ACCOUNT_RATE_LIMIT): Requests a minute for one embedded account, counted across every app process. · `default 300`
- [EMBED_PERSON_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=EMBED_PERSON_RATE_LIMIT): Login codes a minute for one person of one embedded account, so one page reloading in a loop stops at that person. · `default 20`
- [EMBED_RENEW_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=EMBED_RENEW_RATE_LIMIT): Renewals a minute for one embed session and the sessions renewed from it. · `default 4`
- [EMBED_SESSION_MAX_HOURS](https://docs.gorunner.io/self-host/settings?q=EMBED_SESSION_MAX_HOURS): How long the embed may keep renewing its own session after a login code, from 1 to 24 hours. · `default 12`
- [API_CORS_ORIGINS](https://docs.gorunner.io/self-host/settings?q=API_CORS_ORIGINS): Other websites allowed to call the API from a browser, separated by commas. · `default none`
- [RUNS_WAITING_PER_ORG](https://docs.gorunner.io/self-host/settings?q=RUNS_WAITING_PER_ORG): How many runs of one organization may wait in line for a free slot. · `default 10000`
- [RUNS_WAITING_PER_WORKFLOW](https://docs.gorunner.io/self-host/settings?q=RUNS_WAITING_PER_WORKFLOW): How many runs of one workflow may wait in line, so one flooded webhook cannot fill its organization's room. · `default 1000`
- [LOG_LEVEL](https://docs.gorunner.io/self-host/settings?q=LOG_LEVEL): How much the log says: debug, info, warn or error. · `default info`
- [LOG_FORMAT](https://docs.gorunner.io/self-host/settings?q=LOG_FORMAT): text, or json for a log collector. · `default text`
- [OTEL_EXPORTER_OTLP_ENDPOINT](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_ENDPOINT): Your OpenTelemetry tool's address and key: metrics, traces and logs. · `default not set`
- [OTEL_EXPORTER_OTLP_HEADERS](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_HEADERS): Your OpenTelemetry tool's address and key: metrics, traces and logs. · `default not set`
- [OTEL_SERVICE_NAME](https://docs.gorunner.io/self-host/settings?q=OTEL_SERVICE_NAME): The name GoRunner appears under in your tool. · `default gorunner-api, gorunner-worker`
- [OTEL_TRACES_SAMPLER](https://docs.gorunner.io/self-host/settings?q=OTEL_TRACES_SAMPLER): Keep fewer traces on a busy installation. · `default every trace`
- [OTEL_TRACES_SAMPLER_ARG](https://docs.gorunner.io/self-host/settings?q=OTEL_TRACES_SAMPLER_ARG): Keep fewer traces on a busy installation. · `default every trace`
- [METRICS_ENABLED](https://docs.gorunner.io/self-host/settings?q=METRICS_ENABLED): A /metrics page for Prometheus, inside the Docker network, behind the token. · `default off`
- [METRICS_TOKEN](https://docs.gorunner.io/self-host/settings?q=METRICS_TOKEN): A /metrics page for Prometheus, inside the Docker network, behind the token. · `default off`
- [SENTRY_DSN](https://docs.gorunner.io/self-host/settings?q=SENTRY_DSN): Crashes and errors to your Sentry project. · `default not set`
- [ACCESS_LOG](https://docs.gorunner.io/self-host/settings?q=ACCESS_LOG): true: the app's line for each request also names the caller's address (as your proxy reported it, from a trusted proxy only) and its browser, and requests for unknown addresses are logged too. · `default off`
- [GORUNNER_ACCESS_LOG](https://docs.gorunner.io/self-host/settings?q=GORUNNER_ACCESS_LOG): With automatic HTTPS, on: Caddy writes one line for each request with the caller's address. · `default off`
- [HEALTH_DETAILS](https://docs.gorunner.io/self-host/settings?q=HEALTH_DETAILS): /api/health and /api/ready say only ok or unavailable to anyone but the server itself. · `default not set`
- [OAUTH_MANAGED_GOOGLE_CLIENT_ID](https://docs.gorunner.io/self-host/settings?q=OAUTH_MANAGED_GOOGLE_CLIENT_ID): Not needed: set up the Google sign-in app under Platform › Settings › OAuth apps instead, which takes its place. · `.env`
- [OAUTH_MANAGED_GOOGLE_CLIENT_SECRET](https://docs.gorunner.io/self-host/settings?q=OAUTH_MANAGED_GOOGLE_CLIENT_SECRET): Not needed: set up the Google sign-in app under Platform › Settings › OAuth apps instead, which takes its place. · `.env`
- [OUTBOUND_ALLOW_PRIVATE](https://docs.gorunner.io/self-host/settings?q=OUTBOUND_ALLOW_PRIVATE): Off. Notification addresses and your own OAuth apps' token addresses must be https on the public internet. · `.env`
- [KEEL_COMPILE](https://docs.gorunner.io/self-host/settings?q=KEEL_COMPILE): Empty. off: the assistant builds without its compile step. · `.env`
- [GORUNNER_TAG](https://docs.gorunner.io/self-host/settings?q=GORUNNER_TAG): The installed version. · `.env`
- [GORUNNER_REGISTRY](https://docs.gorunner.io/self-host/settings?q=GORUNNER_REGISTRY): Where the images come from, such as registry.example.com/ralve-org. · `default ghcr.io/ralve-org`
- [COMPOSE_PROFILES](https://docs.gorunner.io/self-host/settings?q=COMPOSE_PROFILES): What runs on this server: the role, one name for each built-in store (postgres, redis, storage), and caddy with automatic HTTPS. · `.env`
- [GORUNNER_GATE_TAG](https://docs.gorunner.io/self-host/settings?q=GORUNNER_GATE_TAG): Written by the setup and the update (the relay's tag by the update only) for two small containers that must never restart during an update: the one that holds the app's address open, and the one in front of the object storage. · `.env`
- [GORUNNER_GATE_SYSCTL](https://docs.gorunner.io/self-host/settings?q=GORUNNER_GATE_SYSCTL): The kernel setting of the container that holds the app’s address open. The update writes it. · `default net.ipv4.tcp_migrate_req=1`
- [GORUNNER_RELAY_TAG](https://docs.gorunner.io/self-host/settings?q=GORUNNER_RELAY_TAG): Written by the setup and the update (the relay's tag by the update only) for two small containers that must never restart during an update: the one that holds the app's address open, and the one in front of the object storage. · `.env`
- [COMPOSE_PROJECT_NAME](https://docs.gorunner.io/self-host/settings?q=COMPOSE_PROJECT_NAME): The prefix of the container and volume names. · `.env`
- [WORKER_RUN_GATE](https://docs.gorunner.io/self-host/settings?q=WORKER_RUN_GATE): off: a worker takes runs while it has slots, whatever its memory and sandbox say. · `.env`
- [EMBED_OAUTH_REQUEST_RATE_LIMIT](https://docs.gorunner.io/self-host/settings?q=EMBED_OAUTH_REQUEST_RATE_LIMIT): Requests a minute for one embed API key to the AI app sign-in requests (oauth-requests/*), counted across every app process, in their own window apart from EMBED_API_RATE_LIMIT. A Docker install passes it to the app from v2026.10.31; before, only the default applied. · `default 600`
- [SCRIPT_MEMORY_LIMIT_MB](https://docs.gorunner.io/self-host/settings?q=SCRIPT_MEMORY_LIMIT_MB): Memory one Code step or {{ }} expression may use, in MB (256; 64 to 16384). · `default 256`
- [GORUNNER_JSBOX_SEAL](https://docs.gorunner.io/self-host/settings?q=GORUNNER_JSBOX_SEAL): The sandbox around Code steps and expressions. · `.env`
- [GORUNNER_JSBOX_SHIP_ALL](https://docs.gorunner.io/self-host/settings?q=GORUNNER_JSBOX_SHIP_ALL): 1: hand every script every earlier step, instead of only the ones it reads. · `.env`
- [API_INFLIGHT_MB](https://docs.gorunner.io/self-host/settings?q=API_INFLIGHT_MB): Request bodies and whole payload reads one API holds at once, in MB (0: no limit). · `default 256`
- [SYNC_WAITS_MAX](https://docs.gorunner.io/self-host/settings?q=SYNC_WAITS_MAX): Synchronous callers (webhooks, forms, ?wait=) one API waits for at once, one organization's share of them (default an eighth), and the MB of their answers it builds at once. · `default 4096`
- [SYNC_WAITS_PER_ORG](https://docs.gorunner.io/self-host/settings?q=SYNC_WAITS_PER_ORG): Synchronous callers (webhooks, forms, ?wait=) one API waits for at once, one organization's share of them (default an eighth), and the MB of their answers it builds at once. · `default 512`
- [SYNC_ANSWER_MB](https://docs.gorunner.io/self-host/settings?q=SYNC_ANSWER_MB): Synchronous callers (webhooks, forms, ?wait=) one API waits for at once, one organization's share of them (default an eighth), and the MB of their answers it builds at once. · `default 128`
- [AUDIT_IP_RETENTION_DAYS](https://docs.gorunner.io/self-host/settings?q=AUDIT_IP_RETENTION_DAYS): The client IP address on audit rows older than this many days is removed hourly; the rows stay. · `default 0`
- [OTEL_EXPORTER_OTLP_PROTOCOL](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_PROTOCOL): http/protobuf (default) or grpc. · `default http/protobuf`
- [OTEL_EXPORTER_OTLP_TRACES_ENDPOINT](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_TRACES_ENDPOINT): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_EXPORTER_OTLP_TRACES_HEADERS](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_TRACES_HEADERS): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_EXPORTER_OTLP_METRICS_ENDPOINT](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_METRICS_ENDPOINT): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_EXPORTER_OTLP_METRICS_HEADERS](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_METRICS_HEADERS): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_EXPORTER_OTLP_LOGS_ENDPOINT](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_LOGS_ENDPOINT): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_EXPORTER_OTLP_LOGS_HEADERS](https://docs.gorunner.io/self-host/settings?q=OTEL_EXPORTER_OTLP_LOGS_HEADERS): One signal elsewhere: a full address (used as given) and its own headers. · `.env`
- [OTEL_TRACES_EXPORTER](https://docs.gorunner.io/self-host/settings?q=OTEL_TRACES_EXPORTER): none turns one signal off (default otlp). · `default otlp`
- [OTEL_METRICS_EXPORTER](https://docs.gorunner.io/self-host/settings?q=OTEL_METRICS_EXPORTER): none turns one signal off (default otlp). · `default otlp`
- [OTEL_LOGS_EXPORTER](https://docs.gorunner.io/self-host/settings?q=OTEL_LOGS_EXPORTER): none turns one signal off (default otlp). · `default otlp`
- [OTEL_RESOURCE_ATTRIBUTES](https://docs.gorunner.io/self-host/settings?q=OTEL_RESOURCE_ATTRIBUTES): Extra resource attributes, key=value,key=value, such as team=platform. · `.env`
- [OTEL_METRIC_EXPORT_INTERVAL](https://docs.gorunner.io/self-host/settings?q=OTEL_METRIC_EXPORT_INTERVAL): How often metrics are pushed, in milliseconds. · `default 60000`
- [OTEL_SDK_DISABLED](https://docs.gorunner.io/self-host/settings?q=OTEL_SDK_DISABLED): true: OpenTelemetry never starts, whatever else is set. · `default false`
- [TELEMETRY_DB_SPANS](https://docs.gorunner.io/self-host/settings?q=TELEMETRY_DB_SPANS): Database and Redis calls as spans (they multiply trace volume), and a traceparent header on the HTTP calls steps make. · `default false`
- [TELEMETRY_PROPAGATE_OUTBOUND](https://docs.gorunner.io/self-host/settings?q=TELEMETRY_PROPAGATE_OUTBOUND): Database and Redis calls as spans (they multiply trace volume), and a traceparent header on the HTTP calls steps make. · `default false`
- [METRICS_ADDR](https://docs.gorunner.io/self-host/settings?q=METRICS_ADDR): A /metrics page for Prometheus on every API and worker container (port 9464 on this network, not published). · `default :9464`
- [METRICS_WORKFLOW_LABELS](https://docs.gorunner.io/self-host/settings?q=METRICS_WORKFLOW_LABELS): Add workflow_id to the run and step metrics (one series per workflow: costly). · `default false`
- [SENTRY_ENVIRONMENT](https://docs.gorunner.io/self-host/settings?q=SENTRY_ENVIRONMENT): Crashes and errors (the server's, and the dashboard's relayed through it) to Sentry. · `default production`
- [CLIENT_ERRORS_ENABLED](https://docs.gorunner.io/self-host/settings?q=CLIENT_ERRORS_ENABLED): false: drop the dashboard's browser error reports instead of logging them. · `default true`
- [OAUTH_PUBLIC_CORS](https://docs.gorunner.io/self-host/settings?q=OAUTH_PUBLIC_CORS): AI apps that sign in with OAuth (ChatGPT, Claude, VS Code, Cursor…): their discovery documents, /oauth/register, /oauth/token and /oauth/revoke answer any website (CORS *, no cookies), so an app running in a browser can sign in. · `default on`
- [OAUTH_EXTRA_REDIRECT_URIS](https://docs.gorunner.io/self-host/settings?q=OAUTH_EXTRA_REDIRECT_URIS): More app callbacks AI apps may register: whole URIs, comma-separated, no query, for an app whose callback GoRunner does not know (https, loopback, Cursor's and Raycast's need nothing here). · `.env`

## Helm values

- [image.repository](https://docs.gorunner.io/self-host/helm-values#image.repository): Where the image comes from. Change it for a mirror inside your company. · `values.yaml`
- [image.tag](https://docs.gorunner.io/self-host/helm-values#image.tag): The version to run. Leave it empty: each chart version runs its own release. · `values.yaml`
- [image.digest](https://docs.gorunner.io/self-host/helm-values#image.digest): sha256:… pins the exact image, and wins over the tag. · `values.yaml`
- [image.pullPolicy](https://docs.gorunner.io/self-host/helm-values#image.pullPolicy): When the cluster downloads the image again. · `values.yaml`
- [imagePullSecrets](https://docs.gorunner.io/self-host/helm-values#imagePullSecrets): The Secret with the registry’s user name and token, such as [{name: ghcr}]. GoRunner’s image is private, so this is needed. The chart is private for now too: sign Helm in first (helm registry login ghcr.io). Every pod that runs GoRunner’s image uses it, the bundled file store’s relay included. · `values.yaml`
- [publicUrl](https://docs.gorunner.io/self-host/helm-values#publicUrl): The address people open. Every email, approval page and OAuth redirect is built from it. Empty: ingress.host, with https when ingress.tls.enabled. · `values.yaml`
- [ingress.enabled](https://docs.gorunner.io/self-host/helm-values#ingress.enabled): Make an Ingress. Off: route to the \<release>-api Service yourself, on port 80. · `values.yaml`
- [ingress.className](https://docs.gorunner.io/self-host/helm-values#ingress.className): The IngressClass, such as nginx, traefik or alb. Empty: the cluster’s default. · `values.yaml`
- [ingress.host](https://docs.gorunner.io/self-host/helm-values#ingress.host): The domain name. Required with an Ingress. · `values.yaml`
- [ingress.path](https://docs.gorunner.io/self-host/helm-values#ingress.path): GoRunner needs the whole host; a sub-path isn’t supported. With ingress.pathType, Prefix. · `values.yaml`
- [ingress.tls.enabled](https://docs.gorunner.io/self-host/helm-values#ingress.tls.enabled): Serve the address over https. Turn it on unless something in front ends https. · `values.yaml`
- [ingress.tls.secretName](https://docs.gorunner.io/self-host/helm-values#ingress.tls.secretName): The certificate’s Secret, or the one cert-manager writes. · `values.yaml`
- [ingress.nginxDefaults](https://docs.gorunner.io/self-host/helm-values#ingress.nginxDefaults): With className: nginx: no response buffering, an hour’s read and send timeout, and a 6 MiB body. · `values.yaml`
- [api.trustedProxies](https://docs.gorunner.io/self-host/helm-values#api.trustedProxies): Who may name the caller’s address. Empty trusts every private address, safe only while the network policy is on. · `values.yaml`
- [admin.email](https://docs.gorunner.io/self-host/helm-values#admin.email): Only this address can make the first account. Optional without existingSecret; with it, see admin.allowOpenFirstSignup. It does nothing once an account exists. · `values.yaml`
- [admin.allowOpenFirstSignup](https://docs.gorunner.io/self-host/helm-values#admin.allowOpenFirstSignup): With existingSecret and no admin.email: true lets whoever has the setup code be first. · `values.yaml`
- [auth.allowSignup](https://docs.gorunner.io/self-host/helm-values#auth.allowSignup): false: people join by invitation. true: anyone who can open the address can make an account. · `values.yaml`
- [deployMode](https://docs.gorunner.io/self-host/helm-values#deployMode): Leave it. · `values.yaml`
- [existingSecret](https://docs.gorunner.io/self-host/helm-values#existingSecret): Your own Secret, its keys the setting names. Set, the chart writes none, and every secret value here is ignored. · `values.yaml`
- [encryptionKey](https://docs.gorunner.io/self-host/helm-values#encryptionKey): 64 hex characters (openssl rand -hex 32). Opens every stored credential. The chart never makes one up. · `values.yaml`
- [licenseKey](https://docs.gorunner.io/self-host/helm-values#licenseKey): The license. Optional: the first admin is asked for one after signing in. One loaded in the dashboard comes first while in force. · `values.yaml`
- [platformAdminSecret](https://docs.gorunner.io/self-host/helm-values#platformAdminSecret): The key to the operator console at /admin. Empty keeps it closed; set it only when GoRunner asks. · `values.yaml`
- [mail.backend](https://docs.gorunner.io/self-host/helm-values#mail.backend): none: people sign in with a password. resend or smtp: sign-in by emailed link. · `values.yaml`
- [mail.from](https://docs.gorunner.io/self-host/helm-values#mail.from): The sender, on a domain your mail service may send for. · `values.yaml`
- [mail.resendApiKey](https://docs.gorunner.io/self-host/helm-values#mail.resendApiKey): With backend: resend. · `values.yaml`
- [mail.smtp.host](https://docs.gorunner.io/self-host/helm-values#mail.smtp.host): With backend: smtp. · `values.yaml`
- [mail.smtp.port](https://docs.gorunner.io/self-host/helm-values#mail.smtp.port): 587, or 465 for TLS from the first byte. · `values.yaml`
- [mail.smtp.secure](https://docs.gorunner.io/self-host/helm-values#mail.smtp.secure): starttls, tls or none. Empty: tls on 465, otherwise STARTTLS. · `values.yaml`
- [mail.smtp.user](https://docs.gorunner.io/self-host/helm-values#mail.smtp.user): With mail.smtp.password. Leave both empty for a server with no sign-in. · `values.yaml`
- [postgresql.url](https://docs.gorunner.io/self-host/helm-values#postgresql.url): Your database, PostgreSQL 15 or newer, as one address. It wins over the fields below. · `values.yaml`
- [postgresql.host](https://docs.gorunner.io/self-host/helm-values#postgresql.host): The host alone, without its port. With port (5432), database (gorunner), user and password. · `values.yaml`
- [postgresql.sslmode](https://docs.gorunner.io/self-host/helm-values#postgresql.sslmode): disable, require, verify-ca or verify-full. · `values.yaml`
- [postgresql.caFile](https://docs.gorunner.io/self-host/helm-values#postgresql.caFile): The CA for verify-ca or verify-full, as a path in the pods, such as /certs/rds.pem. · `values.yaml`
- [postgresql.maxConnectionsPerProcess](https://docs.gorunner.io/self-host/helm-values#postgresql.maxConnectionsPerProcess): The most connections each pod keeps (DB_MAX_CONNS). All pods, plus one of each while an upgrade rolls, must fit max_connections. · `values.yaml`
- [postgresql.adminHeadroom](https://docs.gorunner.io/self-host/helm-values#postgresql.adminHeadroom): Connections the check keeps free for backups and an admin, at least 5. · `values.yaml`
- [postgresql.bundled.enabled](https://docs.gorunner.io/self-host/helm-values#postgresql.bundled.enabled): Run the chart’s own PostgreSQL 15.6: one pod, an 8Gi volume, no backups. Evaluation only. · `values.yaml`
- [redis.url](https://docs.gorunner.io/self-host/helm-values#redis.url): Your Redis 6.2 or newer as one address, rediss:// for TLS. Not in cluster mode, with noeviction. · `values.yaml`
- [redis.host](https://docs.gorunner.io/self-host/helm-values#redis.host): Separate fields: port (6379), db (0), user, password. · `values.yaml`
- [redis.tls](https://docs.gorunner.io/self-host/helm-values#redis.tls): true for an encrypted connection. · `values.yaml`
- [redis.bundled.enabled](https://docs.gorunner.io/self-host/helm-values#redis.bundled.enabled): Run the chart’s own Redis: one pod, a 2Gi volume, no replica. Evaluation only. · `values.yaml`
- [objectStorage.mode](https://docs.gorunner.io/self-host/helm-values#objectStorage.mode): none: step data stays in PostgreSQL. external: your bucket. bundled: one SeaweedFS pod, evaluation only. · `values.yaml`
- [objectStorage.bucket](https://docs.gorunner.io/self-host/helm-values#objectStorage.bucket): With objectStorage.region, us-east-1. · `values.yaml`
- [objectStorage.inlineThresholdKB](https://docs.gorunner.io/self-host/helm-values#objectStorage.inlineThresholdKB): Step data larger than this goes to the bucket. 0: all of it. · `values.yaml`
- [objectStorage.opTimeoutSeconds](https://docs.gorunner.io/self-host/helm-values#objectStorage.opTimeoutSeconds): How long one storage call may take. maxAttempts: how often it is tried, 4. · `values.yaml`
- [objectStorage.external.endpoint](https://docs.gorunner.io/self-host/helm-values#objectStorage.external.endpoint): Your store’s address. · `values.yaml`
- [objectStorage.external.forcePathStyle](https://docs.gorunner.io/self-host/helm-values#objectStorage.external.forcePathStyle): true for MinIO and SeaweedFS. · `values.yaml`
- [objectStorage.external.accessKey](https://docs.gorunner.io/self-host/helm-values#objectStorage.external.accessKey): With secretKey. · `values.yaml`
- [postgresql.bundled.image.tag](https://docs.gorunner.io/self-host/helm-values#postgresql.bundled.image.tag): docker.io/library/postgres (image.repository). image.digest is empty: a new image string would restart the database. Set it yourself to pin one. · `values.yaml`
- [redis.bundled.image.tag](https://docs.gorunner.io/self-host/helm-values#redis.bundled.image.tag): docker.io/library/redis. The release sets image.digest to the one the tag named when it was tested. · `values.yaml`
- [objectStorage.bundled.image.tag](https://docs.gorunner.io/self-host/helm-values#objectStorage.bundled.image.tag): docker.io/chrislusf/seaweedfs, with its digest set by the release. · `values.yaml`
- [postgresql.bundled.persistence.size](https://docs.gorunner.io/self-host/helm-values#postgresql.bundled.persistence.size): Redis 2Gi, SeaweedFS 10Gi. Each also takes persistence.storageClass (empty: the cluster’s default) and resources. · `values.yaml`
- [postgresql.bundled.password](https://docs.gorunner.io/self-host/helm-values#postgresql.bundled.password): Also redis.bundled.password and objectStorage.bundled.accessKey / secretKey. Empty: made once and kept in the \<release>-bundled Secret, which outlives an uninstall. · `values.yaml`
- [api.replicas](https://docs.gorunner.io/self-host/helm-values#api.replicas): Keep at least 2, so a drain or a crash never leaves nobody to answer. · `values.yaml`
- [api.resources](https://docs.gorunner.io/self-host/helm-values#api.resources): CPU and memory for each. · `values.yaml`
- [api.runRetentionDays](https://docs.gorunner.io/self-host/helm-values#api.runRetentionDays): Runs that finished longer ago than this are deleted hourly, with their data. Each workflow keeps its newest finished run in each environment. · `values.yaml`
- [api.rateLimits.api](https://docs.gorunner.io/self-host/helm-values#api.rateLimits.api): Requests a minute per credential. Also webhook 3000, oauth 120, embedApi 3000, embedAccount 300, embedOauthRequest 600 (from v2026.10.31), embedPerson 20, embedRenew 4. · `values.yaml`
- [api.embedSessionMaxHours](https://docs.gorunner.io/self-host/helm-values#api.embedSessionMaxHours): How long the embed renews its own session, 1 to 24 hours. · `values.yaml`
- [api.corsOrigins](https://docs.gorunner.io/self-host/helm-values#api.corsOrigins): Other websites that may call the API from a browser, separated by commas. · `values.yaml`
- [api.oauthPublicCors](https://docs.gorunner.io/self-host/helm-values#api.oauthPublicCors): off: AI apps’ sign-in addresses (discovery, register, token, revoke) keep the API’s own CORS instead of answering any website. For an installation reached only from your own network (OAUTH_PUBLIC_CORS, from v2026.10.31). · `values.yaml`
- [api.oauthExtraRedirectUris](https://docs.gorunner.io/self-host/helm-values#api.oauthExtraRedirectUris): More app callbacks AI apps may register: whole addresses, separated by commas, no query (OAUTH_EXTRA_REDIRECT_URIS, from v2026.10.31). · `values.yaml`
- [api.accessLog](https://docs.gorunner.io/self-host/helm-values#api.accessLog): Adds the caller’s address and browser to each request’s line (ACCESS_LOG). · `values.yaml`
- [api.healthDetails](https://docs.gorunner.io/self-host/helm-values#api.healthDetails): public: health checks show their details to anyone (HEALTH_DETAILS). · `values.yaml`
- [api.terminationGracePeriodSeconds](https://docs.gorunner.io/self-host/helm-values#api.terminationGracePeriodSeconds): When a pod stops, how long it has to finish requests, after preStopSeconds (10). · `values.yaml`
- [api.pdb.enabled](https://docs.gorunner.io/self-host/helm-values#api.pdb.enabled): Keep at least minAvailable (1) app pod through node drains. · `values.yaml`
- [api.service.type](https://docs.gorunner.io/self-host/helm-values#api.service.type): The Service in front of the app, on port 80, with annotations of your own. · `values.yaml`
- [api.extraEnv](https://docs.gorunner.io/self-host/helm-values#api.extraEnv): More environment variables for the app pods, as a Kubernetes env list. · `values.yaml`
- [worker.replicas](https://docs.gorunner.io/self-host/helm-values#worker.replicas): More workers is the safer way to grow than larger ones. · `values.yaml`
- [worker.concurrency](https://docs.gorunner.io/self-host/helm-values#worker.concurrency): Runs one worker runs at once. Raise its memory limit with it. · `values.yaml`
- [worker.resources](https://docs.gorunner.io/self-host/helm-values#worker.resources): CPU and memory for each. · `values.yaml`
- [worker.keelConcurrency](https://docs.gorunner.io/self-host/helm-values#worker.keelConcurrency): Keel conversations one worker serves at once. 0 turns Keel off on it. · `values.yaml`
- [worker.keelCompile](https://docs.gorunner.io/self-host/helm-values#worker.keelCompile): off: Keel builds without its compile step. Leave it unless GoRunner asks. · `values.yaml`
- [worker.notifyConcurrency](https://docs.gorunner.io/self-host/helm-values#worker.notifyConcurrency): Notifications to your server one worker sends at once. · `values.yaml`
- [worker.interactiveConcurrency](https://docs.gorunner.io/self-host/helm-values#worker.interactiveConcurrency): Test step and connection tests one worker serves at once. · `values.yaml`
- [worker.terminationGracePeriodSeconds](https://docs.gorunner.io/self-host/helm-values#worker.terminationGracePeriodSeconds): How long a stopping worker may finish its runs. After that, another worker picks them up. · `values.yaml`
- [worker.extraEnv](https://docs.gorunner.io/self-host/helm-values#worker.extraEnv): And the same placement values as the app. · `values.yaml`
- [workflows.waitingPerOrg](https://docs.gorunner.io/self-host/helm-values#workflows.waitingPerOrg): Runs of one organization that may wait before new ones are refused. 0: no cap. · `values.yaml`
- [workflows.waitingPerWorkflow](https://docs.gorunner.io/self-host/helm-values#workflows.waitingPerWorkflow): The same for one workflow, editor test runs included. · `values.yaml`
- [migrate.job.enabled](https://docs.gorunner.io/self-host/helm-values#migrate.job.enabled): Run the migrations Job at every install and upgrade. Leave it on. · `values.yaml`
- [migrate.job.args](https://docs.gorunner.io/self-host/helm-values#migrate.job.args): Extra flags, only when GoRunner asks. · `values.yaml`
- [migrate.job.backoffLimit](https://docs.gorunner.io/self-host/helm-values#migrate.job.backoffLimit): Retries. activeDeadlineSeconds: 900 in all. · `values.yaml`
- [migrate.job.ttlSecondsAfterFinished](https://docs.gorunner.io/self-host/helm-values#migrate.job.ttlSecondsAfterFinished): The finished Job and its log go after a day. · `values.yaml`
- [migrate.resources](https://docs.gorunner.io/self-host/helm-values#migrate.resources): CPU and memory for the Job. · `values.yaml`
- [check.enabled](https://docs.gorunner.io/self-host/helm-values#check.enabled): A problem the check finds fails the Job. false: only logged, except one that protects data. · `values.yaml`
- [proxy.https](https://docs.gorunner.io/self-host/helm-values#proxy.https): With proxy.http: the proxy’s address, kept in the Secret. · `values.yaml`
- [proxy.noProxy](https://docs.gorunner.io/self-host/helm-values#proxy.noProxy): Names reached directly. GoRunner adds its own, the cluster’s .svc and .cluster.local among them. · `values.yaml`
- [extraVolumes](https://docs.gorunner.io/self-host/helm-values#extraVolumes): More volumes on every pod, with extraVolumeMounts. Every .pem mounted at /certs is trusted. · `values.yaml`
- [telemetry.logLevel](https://docs.gorunner.io/self-host/helm-values#telemetry.logLevel): LOG_LEVEL. And logFormat: LOG_FORMAT. · `values.yaml`
- [telemetry.otel.endpoint](https://docs.gorunner.io/self-host/helm-values#telemetry.otel.endpoint): OTEL_EXPORTER_OTLP_ENDPOINT. Each telemetry.otel.* value is the OTEL_* setting of the same meaning; headers is kept in the Secret. · `values.yaml`
- [telemetry.metrics.enabled](https://docs.gorunner.io/self-host/helm-values#telemetry.metrics.enabled): METRICS_ENABLED: /metrics on port 9464 of every pod, with token and workflowLabels. · `values.yaml`
- [telemetry.sentry.dsn](https://docs.gorunner.io/self-host/helm-values#telemetry.sentry.dsn): SENTRY_DSN, kept in the Secret, with environment. · `values.yaml`
- [telemetry.clientErrorsEnabled](https://docs.gorunner.io/self-host/helm-values#telemetry.clientErrorsEnabled): CLIENT_ERRORS_ENABLED. Also auditRetentionDays, auditCredentialUseRetentionDays, auditIpRetentionDays and eventStreamingEnabled. · `values.yaml`
- [serviceAccount.create](https://docs.gorunner.io/self-host/helm-values#serviceAccount.create): GoRunner never calls the Kubernetes API, so the account holds no token. Also name and annotations. · `values.yaml`
- [podSecurityContext](https://docs.gorunner.io/self-host/helm-values#podSecurityContext): With the default seccomp profile. · `values.yaml`
- [securityContext](https://docs.gorunner.io/self-host/helm-values#securityContext): No privilege escalation, every capability dropped. · `values.yaml`
- [networkPolicy.enabled](https://docs.gorunner.io/self-host/helm-values#networkPolicy.enabled): Only your controller and helm test reach the app; the workers accept nothing. Needs a plugin that enforces NetworkPolicy. · `values.yaml`
- [networkPolicy.apiFrom](https://docs.gorunner.io/self-host/helm-values#networkPolicy.apiFrom): Who may reach the app. Change it for any other controller, or the app answers nobody. · `values.yaml`
- [networkPolicy.metricsFrom](https://docs.gorunner.io/self-host/helm-values#networkPolicy.metricsFrom): Who may read /metrics on port 9464. · `values.yaml`
- [tests.enabled](https://docs.gorunner.io/self-host/helm-values#tests.enabled): The checks helm test runs. · `values.yaml`
- [nameOverride](https://docs.gorunner.io/self-host/helm-values#nameOverride): With fullnameOverride: other names for the chart’s objects. · `values.yaml`

## Metrics

- [gorunner_runs_started_total](https://docs.gorunner.io/self-host/metrics#gorunner_runs_started_total): Runs that started, by trigger and environment. · `counter`
- [gorunner_runs_finished_total](https://docs.gorunner.io/self-host/metrics#gorunner_runs_finished_total): Runs that ended or paused, by status (completed, failed, cancelled, paused) and environment. · `counter`
- [gorunner_run_duration_seconds](https://docs.gorunner.io/self-host/metrics#gorunner_run_duration_seconds): How long a run took, to its end or its pause, by status. · `histogram`
- [gorunner_steps_finished_total](https://docs.gorunner.io/self-host/metrics#gorunner_steps_finished_total): Steps that finished, by piece (the app, such as http; branch, loop or code) and status. · `counter`
- [gorunner_step_duration_seconds](https://docs.gorunner.io/self-host/metrics#gorunner_step_duration_seconds): How long a step took, by piece. · `histogram`
- [gorunner_runs_paused](https://docs.gorunner.io/self-host/metrics#gorunner_runs_paused): Runs waiting now, by reason: delay, approval or webhook. Counted once a minute. · `gauge`
- [gorunner_queue_waiting_jobs](https://docs.gorunner.io/self-host/metrics#gorunner_queue_waiting_jobs): Jobs waiting for a worker, by queue: jobs (runs) or rpc (editor work). · `gauge`
- [gorunner_queue_oldest_wait_seconds](https://docs.gorunner.io/self-host/metrics#gorunner_queue_oldest_wait_seconds): How long the oldest waiting job has waited, by queue. · `gauge`
- [gorunner_dead_letter_jobs](https://docs.gorunner.io/self-host/metrics#gorunner_dead_letter_jobs): Jobs that never reached a worker. · `gauge`
- [gorunner_worker_slots_busy](https://docs.gorunner.io/self-host/metrics#gorunner_worker_slots_busy): This worker’s run slots in use. · `gauge`
- [gorunner_worker_slots_total](https://docs.gorunner.io/self-host/metrics#gorunner_worker_slots_total): This worker’s run slots (WORKER_CONCURRENCY). · `gauge`
- [gorunner_redis_memory_used_bytes](https://docs.gorunner.io/self-host/metrics#gorunner_redis_memory_used_bytes): The memory Redis uses, read by each API process every 15 seconds. · `gauge`
- [gorunner_redis_memory_limit_bytes](https://docs.gorunner.io/self-host/metrics#gorunner_redis_memory_limit_bytes): Redis’s maxmemory. 0 means no limit. · `gauge`
- [gorunner_http_server_request_duration_seconds](https://docs.gorunner.io/self-host/metrics#gorunner_http_server_request_duration_seconds): API requests, by http_route (the pattern), http_request_method, http_response_status_code and outcome. · `histogram`
- [gorunner_webhooks_received_total](https://docs.gorunner.io/self-host/metrics#gorunner_webhooks_received_total): Webhook deliveries, by outcome: accepted, rejected or sync_reply. · `counter`
- [gorunner_client_errors_total](https://docs.gorunner.io/self-host/metrics#gorunner_client_errors_total): Error reports from people’s browsers. · `counter`
- [gorunner_connection_refresh_failures_total](https://docs.gorunner.io/self-host/metrics#gorunner_connection_refresh_failures_total): OAuth connections whose token couldn’t be renewed, by piece. · `counter`
- [gorunner_oauth_token_resource_mismatch_total](https://docs.gorunner.io/self-host/metrics#gorunner_oauth_token_resource_mismatch_total): OAuth token requests for a resource the grant doesn’t cover (logged, not refused), by grant_type. · `counter`
- [gorunner_events_streamed_total](https://docs.gorunner.io/self-host/metrics#gorunner_events_streamed_total): Tries to deliver streamed events, by kind (webhook, datadog, splunk, syslog, otlp) and outcome (delivered, failed). · `counter`
- [gorunner_audit_events_total](https://docs.gorunner.io/self-host/metrics#gorunner_audit_events_total): Audit log rows written, by action. · `counter`
- [gorunner_payload_deletes_total](https://docs.gorunner.io/self-host/metrics#gorunner_payload_deletes_total): Stored step data the cleanup deleted, or failed to and will retry, by outcome: deleted, failed. · `counter`

## Errors

- [INVALID_BODY](https://docs.gorunner.io/errors#INVALID_BODY): The body is not valid JSON, or not the shape this call takes. · `400`
- [NOT_SUPPORTED](https://docs.gorunner.io/errors#NOT_SUPPORTED): This app declares no dynamic fields or options. · `400`
- [VALIDATION_ERROR](https://docs.gorunner.io/errors#VALIDATION_ERROR): A parameter or the body is not valid; the message names it. · `400`
- [EMBED_SESSION_ENDED](https://docs.gorunner.io/errors#EMBED_SESSION_ENDED): The login code’s person no longer has that access (details.reason says why). · `401`
- [INVALID_CODE](https://docs.gorunner.io/errors#INVALID_CODE): The code is missing, unknown, used or expired. · `401`
- [TOKEN_ENDED](https://docs.gorunner.io/errors#TOKEN_ENDED): A token made inside a partner’s product stopped working: it was revoked or expired, its maker left or lost the editor role, or its account or workspace was deleted (details.reason says which). Make a new token. · `401`
- [UNAUTHORIZED](https://docs.gorunner.io/errors#UNAUTHORIZED): The token is missing, expired or revoked. · `401`
- [ACCOUNT_SUSPENDED](https://docs.gorunner.io/errors#ACCOUNT_SUSPENDED-403): The workspace’s account is suspended. Nothing new starts until it is resumed, and its data is kept. · `403`
- [BROWSER_REQUIRED](https://docs.gorunner.io/errors#BROWSER_REQUIRED): Signing in needs a person in a browser. An API token signs a connection in again through Start a sign-in for a new connection, with connectionId and returnUrl. · `403`
- [EMBED_NOT_ALLOWED](https://docs.gorunner.io/errors#EMBED_NOT_ALLOWED): Only an embedded session can do this. An AI app’s connection or a token can’t, and the embedded view can’t reach this part of the API. · `403`
- [EMBED_NOT_AVAILABLE](https://docs.gorunner.io/errors#EMBED_NOT_AVAILABLE): Embedding is not licensed here, or sign-in is off. The login code is not used up. · `403`
- [EMBED_NOT_LICENSED](https://docs.gorunner.io/errors#EMBED_NOT_LICENSED): This installation's license does not include embedding. · `403`
- [FEATURE_OFF](https://docs.gorunner.io/errors#FEATURE_OFF): In an embedded session, the switch this call needs is off (for example folders). · `403`
- [FORBIDDEN](https://docs.gorunner.io/errors#FORBIDDEN): The token lacks the permission this call needs. · `403`
- [IP_NOT_ALLOWED](https://docs.gorunner.io/errors#IP_NOT_ALLOWED): The key's address allow-list does not include the caller. · `403`
- [KEEL_CLICK_REQUIRED](https://docs.gorunner.io/errors#KEEL_CLICK_REQUIRED): Keel tried to publish without a person pressing its card. A person must press it. · `403`
- [MANAGED_CONNECTION](https://docs.gorunner.io/errors#MANAGED_CONNECTION): The partner manages that connection, so it can’t be changed here. · `403`
- [ORG_LIMIT](https://docs.gorunner.io/errors#ORG_LIMIT): The license’s organization limit is reached. · `403`
- [ORIGIN_NOT_ALLOWED](https://docs.gorunner.io/errors#ORIGIN_NOT_ALLOWED): The page is not one of the allowed websites. The login code is not used up. · `403`
- [PIECE_NOT_ALLOWED](https://docs.gorunner.io/errors#PIECE_NOT_ALLOWED-403): The app is not one this workspace may use. · `403`
- [TOKEN_SURFACE_OFF](https://docs.gorunner.io/errors#TOKEN_SURFACE_OFF): The token wasn’t made to work here: with the API, or with AI apps (details.surface says which). · `403`
- [WORKSPACE_LIMIT](https://docs.gorunner.io/errors#WORKSPACE_LIMIT): The license’s workspace limit is reached. · `403`
- [ALREADY_ANSWERED](https://docs.gorunner.io/errors#ALREADY_ANSWERED): An approval link that was already answered. The run has moved on. · `404`
- [NOT_FOUND](https://docs.gorunner.io/errors#NOT_FOUND): Nothing with that ID in this workspace, or a mistyped path. · `404`
- [OAUTH_REQUEST_NOT_FOUND](https://docs.gorunner.io/errors#OAUTH_REQUEST_NOT_FOUND): No such sign-in request, or it expired. · `404`
- [STEP_NOT_FOUND](https://docs.gorunner.io/errors#STEP_NOT_FOUND): With step: the run has no step of that name. The message lists the ones it has. · `404`
- [TIMED_OUT](https://docs.gorunner.io/errors#TIMED_OUT): An approval link whose wait timed out before anyone answered. · `404`
- [METHOD_NOT_ALLOWED](https://docs.gorunner.io/errors#METHOD_NOT_ALLOWED): The path exists, but not with this method. · `405`
- [ACCOUNT_DELETED](https://docs.gorunner.io/errors#ACCOUNT_DELETED): The workspace’s account was deleted. Restore it first. · `409`
- [ACCOUNT_NOT_DELETED](https://docs.gorunner.io/errors#ACCOUNT_NOT_DELETED): The account is not deleted, so there is nothing to restore. · `409`
- [ACCOUNT_SUSPENDED](https://docs.gorunner.io/errors#ACCOUNT_SUSPENDED-409): The account is suspended, so the run can’t be decided or run again now. · `409`
- [ALREADY_ANSWERED](https://docs.gorunner.io/errors#ALREADY_ANSWERED-409): The approval was already answered. · `409`
- [ALREADY_RETRIED](https://docs.gorunner.io/errors#ALREADY_RETRIED): In Run many runs again’s results: that run already has a retry that worked or is still going, so it was left out. · `409`
- [BUSY](https://docs.gorunner.io/errors#BUSY-409): Something else held the thing this call needs, and the call gave up waiting. Nothing was done. Try again. · `409`
- [CONFLICT](https://docs.gorunner.io/errors#CONFLICT): The request clashes with the current state. If a request with the same Idempotency-Key is still in progress, retry shortly. · `409`
- [DEFAULT_WORKSPACE](https://docs.gorunner.io/errors#DEFAULT_WORKSPACE): An account’s default workspace can’t be deleted. · `409`
- [EDITING_ELSEWHERE](https://docs.gorunner.io/errors#EDITING_ELSEWHERE): The workflow is being edited in another tab. · `409`
- [KEEL_PUBLISH_STALE](https://docs.gorunner.io/errors#KEEL_PUBLISH_STALE): A click on the assistant's publish card named no review, or a draft or base version that has moved since the card was shown. · `409`
- [NAME_TAKEN](https://docs.gorunner.io/errors#NAME_TAKEN): A folder with that name is already in that place, or a workspace with that name is already in the organization. · `409`
- [NOT_A_MEMBER](https://docs.gorunner.io/errors#NOT_A_MEMBER): With provision false, the person is not a member of the workspace. · `409`
- [NOT_WAITING](https://docs.gorunner.io/errors#NOT_WAITING): The run is not waiting for an approval. · `409`
- [OAUTH_REQUEST_ACCOUNT_MISMATCH](https://docs.gorunner.io/errors#OAUTH_REQUEST_ACCOUNT_MISMATCH): The account is not the one the sign-in request is for. The request is not used up. · `409`
- [OAUTH_REQUEST_DONE](https://docs.gorunner.io/errors#OAUTH_REQUEST_DONE): The sign-in request was already completed or turned down. · `409`
- [RENEW_REFUSED](https://docs.gorunner.io/errors#RENEW_REFUSED): The session can’t be renewed (details.reason says why). Ask your server for a new login code. · `409`
- [RESTORE_EXPIRED](https://docs.gorunner.io/errors#RESTORE_EXPIRED): The account was deleted more than 30 days ago and can no longer be restored. · `409`
- [ROLE_DIFFERS](https://docs.gorunner.io/errors#ROLE_DIFFERS): With provision false, the role is not the person’s role there. · `409`
- [RUN_NOT_FINISHED](https://docs.gorunner.io/errors#RUN_NOT_FINISHED): The run is queued, running or held. Cancel it first, or wait. · `409`
- [SIGNIN_NOT_PENDING](https://docs.gorunner.io/errors#SIGNIN_NOT_PENDING): The sign-in was already opened or has ended, or isn’t a tab sign-in. Start it again. · `409`
- [TOKEN_LIMIT](https://docs.gorunner.io/errors#TOKEN_LIMIT): The workspace already has 25 live tokens. · `409`
- [WEBSITE_EXISTS](https://docs.gorunner.io/errors#WEBSITE_EXISTS): The list already holds it. · `409`
- [WORKFLOW_NOT_LIVE](https://docs.gorunner.io/errors#WORKFLOW_NOT_LIVE): A production run whose workflow is paused or a draft. No run is started. · `409`
- [WORKFLOW_NOT_PUBLISHED](https://docs.gorunner.io/errors#WORKFLOW_NOT_PUBLISHED): The workflow is not on, so it has nothing published to run. · `409`
- [PAYLOAD_TOO_LARGE](https://docs.gorunner.io/errors#PAYLOAD_TOO_LARGE): The body is larger than this call accepts. · `413`
- [INVALID_CONTENT_TYPE](https://docs.gorunner.io/errors#INVALID_CONTENT_TYPE): A Content-Type other than application/json (leaving it out is fine). · `415`
- [CONNECTION_MISMATCH](https://docs.gorunner.io/errors#CONNECTION_MISMATCH): A connection named for a slot is for another service (details.slot). · `422`
- [CONNECTION_TEST_FAILED](https://docs.gorunner.io/errors#CONNECTION_TEST_FAILED): With "test": true, the service refused the settings when tested, so nothing was saved (details.cause says why). · `422`
- [INVALID_ORIGIN](https://docs.gorunner.io/errors#INVALID_ORIGIN): The website can’t be allowed as written, or is a wildcard. A customer’s website is one exact address. · `422`
- [PIECE_NOT_ALLOWED](https://docs.gorunner.io/errors#PIECE_NOT_ALLOWED): A step uses an app this workspace may not use. The message names the step. · `422`
- [RETURN_URL_NOT_ALLOWED](https://docs.gorunner.io/errors#RETURN_URL_NOT_ALLOWED): The return address is not on an allowed website. · `422`
- [SECRETS_REQUIRED](https://docs.gorunner.io/errors#SECRETS_REQUIRED): The change moves a where field (a host, server, port, database, URL or connection string) while a stored secret was left blank. · `422`
- [SIGN_IN_ADDRESS_NOT_ALLOWED](https://docs.gorunner.io/errors#SIGN_IN_ADDRESS_NOT_ALLOWED): The AI app sign-in address is not on a website allowed for the installation or for this account. · `422`
- [TOO_MANY_WEBSITES](https://docs.gorunner.io/errors#TOO_MANY_WEBSITES): The list is full: 20 websites for one account, 200 for the installation (details.max says which). · `422`
- [VALIDATION_ERROR](https://docs.gorunner.io/errors#VALIDATION_ERROR-422): A rule the body breaks (the message names it), or an Idempotency-Key reused with a different body. · `422`
- [CONCURRENCY_LIMIT](https://docs.gorunner.io/errors#CONCURRENCY_LIMIT): The workflow is at its concurrency limit and is set to Refuse. Try again when a run finishes. · `429`
- [RATE_LIMITED](https://docs.gorunner.io/errors#RATE_LIMITED): Too many requests from this caller (an API token, a session or an embed session) or this address. Retry-After says when to try again. · `429`
- [RUNS_WAITING_LIMIT](https://docs.gorunner.io/errors#RUNS_WAITING_LIMIT): Too many runs are already waiting in line, for the organization or for this workflow. Try again later. · `429`
- [TOO_MANY_STREAMS](https://docs.gorunner.io/errors#TOO_MANY_STREAMS): This person or token already follows 50 runs on this server. Retry-After says when to try again. · `429`
- [DELETE_FAILED](https://docs.gorunner.io/errors#DELETE_FAILED): The delete did not happen, and the workflow is still there. Try again. · `500`
- [ENQUEUE_FAILED](https://docs.gorunner.io/errors#ENQUEUE_FAILED): The approval could not be handed to a worker. The run is still held. · `500`
- [INTERNAL_ERROR](https://docs.gorunner.io/errors#INTERNAL_ERROR): Something failed on the server. Try again. · `500`
- [RESOLVE_FAILED](https://docs.gorunner.io/errors#RESOLVE_FAILED): The Sub-flow step’s inputs, or the list of workflows to choose from, could not be read. · `500`
- [ACCOUNT_SUSPENDED](https://docs.gorunner.io/errors#ACCOUNT_SUSPENDED): A webhook or form of a suspended account. Nothing ran. Retry-After says an hour. · `503`
- [BUSY](https://docs.gorunner.io/errors#BUSY): This server holds as much request data as it can right now. Nothing was done. Retry after Retry-After. · `503`
- [NO_VERDICT](https://docs.gorunner.io/errors#NO_VERDICT): With "test": true, no worker could test the connection, so nothing was saved. Try again (details.reason says why). · `503`
- [PAUSED](https://docs.gorunner.io/errors#PAUSED): A self-hosted installation without a valid license is paused. Nothing is read, written or run. An API call gets no Retry-After: load a license. A webhook or form gets a Retry-After of an hour. · `503`
- [PIECES_UNAVAILABLE](https://docs.gorunner.io/errors#PIECES_UNAVAILABLE): GoRunner couldn’t check which apps may run. Nothing started. · `503`
- [SERVICE_UNAVAILABLE](https://docs.gorunner.io/errors#SERVICE_UNAVAILABLE): The database or Redis didn’t answer, so the request wasn’t checked and nothing was done. Retry after Retry-After. · `503`
- [STATE_UNAVAILABLE](https://docs.gorunner.io/errors#STATE_UNAVAILABLE): The account's state could not be read, so nothing was started. · `503`
- [STORAGE_UNAVAILABLE](https://docs.gorunner.io/errors#STORAGE_UNAVAILABLE): A webhook that answers in the same call: the run finished, but its step output couldn’t be read back from storage. The run is intact. Retry, or read it with Get a run. · `503`
- [UNAVAILABLE](https://docs.gorunner.io/errors#UNAVAILABLE): This server can’t do it now: no Redis to signal a cancel or record a sign-in, or the installation’s OAuth app for the service can’t be read. · `503`
- [WORKER_UNAVAILABLE](https://docs.gorunner.io/errors#WORKER_UNAVAILABLE): No worker is checked in. · `503`
- [not_allowed_here](https://docs.gorunner.io/errors#sdk-not_allowed_here): Your page's origin is not one of the installation's allowed websites (Platform › Partner keys › Allowed websites), or the page has no web origin at all (a file: page). The browser would block the frame, so the SDK refuses before it is made. · `SDK`
- [licence](https://docs.gorunner.io/errors#sdk-licence): The installation's license does not include Embed, or the installation is paused because its license ended. · `SDK`
- [unavailable](https://docs.gorunner.io/errors#sdk-unavailable): Embedding is turned off on the installation (sign-in is off), or nothing is switched on for this person, so there is no page to show them. · `SDK`
- [code_failed](https://docs.gorunner.io/errors#sdk-code_failed): getCode threw, returned something that is not a code, or did not settle in time. The message carries your error's message. · `SDK`
- [code_expired](https://docs.gorunner.io/errors#sdk-code_expired): The installation refused the code, and the fresh one the frame asked for too: used, or older than 60 seconds. Check that your server asks for a new code on every call rather than handing out a cached one. · `SDK`
- [access_ended](https://docs.gorunner.io/errors#sdk-access_ended): The person no longer has access to this account: they were removed, or the account or the workspace was deleted. A new code for the same account will not help. · `SDK`
- [account_suspended](https://docs.gorunner.io/errors#sdk-account_suspended): This account is suspended: everything can be read, nothing can be changed or run. A warning: the frame stays open, and the error event has fatal: false. · `SDK`
- [not_available](https://docs.gorunner.io/errors#sdk-not_available): The page you mounted is switched off for this person: “The page this embed was asked to open (/overview) is switched off here.” Mount without it, or with one that is on. The frame says this, so every SDK version gets it. · `SDK`
- [session_failed](https://docs.gorunner.io/errors#sdk-session_failed): The session could not be renewed: the host page did not hand over a new sign-in code. · `SDK`
- [unreachable](https://docs.gorunner.io/errors#sdk-unreachable): The frame could not reach the installation while signing in. · `SDK`
- [crashed](https://docs.gorunner.io/errors#sdk-crashed): The frame hit an error it could not recover from. · `SDK`
- [version_mismatch](https://docs.gorunner.io/errors#sdk-version_mismatch): The frame and the SDK share no protocol version. Load /embed.js from the installation, or upgrade the package. · `SDK`
- [timeout](https://docs.gorunner.io/errors#sdk-timeout): The frame did not answer within timeoutMs. The commonest cause is your page's Content-Security-Policy not allowing the installation in frame-src. For a method, the frame did not reply within ten seconds. · `SDK`
- [container_not_found](https://docs.gorunner.io/errors#sdk-container_not_found): No element matches the container selector, or the element given is not in the page. · `SDK`
- [invalid_options](https://docs.gorunner.io/errors#sdk-invalid_options): An option is missing or not what it should be; the message names it. Methods use it for an argument they cannot take, such as a theme that is not one. · `SDK`
- [unmounted](https://docs.gorunner.io/errors#sdk-unmounted): unmount() was called, or the React component went away, before the mount finished. For a method: the instance was unmounted. · `SDK`
- [not_ready](https://docs.gorunner.io/errors#sdk-not_ready): The embed is not ready: still mounting, reconnecting, or ended. · `SDK`
- [not_allowed](https://docs.gorunner.io/errors#sdk-not_allowed): The page is switched off for this person, or making connections is not available to them. · `SDK`
- [not_configured](https://docs.gorunner.io/errors#sdk-not_configured): Connecting that service is not set up on the installation (no OAuth app for its provider). · `SDK`
- [invalid_page](https://docs.gorunner.io/errors#sdk-invalid_page): What you passed to navigate or switchAccount is not a page. · `SDK`
- [piece_not_found](https://docs.gorunner.io/errors#sdk-piece_not_found): connect named a service the installation does not have, or an app id that is not one. · `SDK`
- [busy](https://docs.gorunner.io/errors#sdk-busy): A connection dialog is already open, or the embed is already signing in. · `SDK`
- [invalid_appearance](https://docs.gorunner.io/errors#sdk-invalid_appearance): setAppearance was given something that is not a settings object, one over 16 KB, or one the frame refuses: a value outside the appearance settings, a font service's stylesheet, or an uploaded face whose file is not at the installation's own address or on your page's own website. An appearance in mount() that the frame refuses is ignored, and the embed shows your installation's look. · `SDK`
- [unsupported](https://docs.gorunner.io/errors#sdk-unsupported): The frame answered without the result the method expects — an installation of another release than this SDK. · `SDK`
- [frame_reloaded](https://docs.gorunner.io/errors#sdk-frame_reloaded): The frame document reloaded, or the embed switched account, while the call was waiting for its reply. Call it again once the embed is ready. · `SDK`
- [exit 0](https://docs.gorunner.io/errors#exit-0): Nothing is wrong. Warnings are allowed. · `check`
- [exit 1](https://docs.gorunner.io/errors#exit-1): At least one problem. Each one names the line to change. · `check`
- [exit 2](https://docs.gorunner.io/errors#exit-2): The command line itself was wrong. · `check`
- [exit 4](https://docs.gorunner.io/errors#exit-4): At least one problem that protects data GoRunner already holds, such as an encryption key that is not the installation’s. Setup, deploy and a container’s start never go past it, even when told to skip the check. · `check`

Source: https://docs.gorunner.io/reference
