1<!DOCTYPE html><html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-providers" data-has-hydrated="false"><head> 2<meta charset="UTF-8"> 3<meta name="generator" content="Docusaurus v3.10.2"> 4<title data-rh="true">Provider Announcements | StackQL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://stackql.io/img/stackql-featured-image.png"><meta data-rh="true" name="twitter:image" content="https://stackql.io/img/stackql-featured-image.png"><meta data-rh="true" property="og:url" content="https://stackql.io/blog/providers"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="robots" content="index,follow"><meta data-rh="true" name="keywords" content="stackql, sql, ai agents, agentic ai, infrastru
4cture as code, cloud services, api, devops, control plane, data plane"><meta data-rh="true" name="twitter:site" content="@stackql"><meta data-rh="true" name="twitter:creator" content="@stackql"><meta data-rh="true" name="twitter:title" content="StackQL - SQL for Cloud Infrastructure and AI Agents"><meta data-rh="true" name="twitter:description" content="StackQL is an open-source infrastructure-as-code tool and the substrate for AI agents to communicate with cloud control planes and data planes using SQL."><meta data-rh="true" name="og:locale" content="en_US"><meta data-rh="true" name="og:site_name" content="StackQL"><meta data-rh="true" name="msapplication-TileColor" content="#2d89ef"><meta data-rh="true" name="theme-color" content="#0f4c81"><meta data-rh="true" name="wot-verification" content="38f4ae79b091dc8046a0"><meta data-rh="true" property="og:title" content="Provider Announcements | StackQL"><meta data-rh="true" name="description" content="New and updated StackQL providers"><meta data-rh="true" property="og:description" content="New and updated StackQL providers"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><link data-rh="true" rel="icon" href="/favicon.ico"><link data-rh="true" rel="canonical" href="https://stackql.io/blog/providers"><link data-rh="true" rel="alternate" href="https://stackql.io/blog/providers" hreflang="en"><link data-rh="true" rel="alternate" href="https://stackql.io/blog/providers" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://HYO8BM1W1Y-dsn.algolia.net" crossorigin="anonymous">
4<script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://stackql.io/blog/providers","mainEntityOfPage":"https://stackql.io/blog/providers","headline":"Provider Announcements","description":"New and updated StackQL providers","blogPost":[{"@type":"BlogPosting","@id":"https://stackql.io/blog/providers/new-typesafe-provider-available","mainEntityOfPage":"https://stackql.io/blog/providers/new-typesafe-provider-available","url":"https://stackql.io/blog/providers/new-typesafe-provider-available","headline":"New TypeSafe Provider Available","name":"New TypeSafe Provider Available","description":"A new StackQL provider for TypeSafe AI that brings Jev, TypeSafe's System One decision model, into StackQL agent routines over MCP - rows from aws, k8s, okta or github become the state, Jev returns a typed decision with a probability or confidence, and a StackQL mutation runs only when the decision clears the routine's threshold. Tagging hygiene, rightsizing, incident triage, access review, public ingress review and audit findings, as SQL.","datePublished":"2026-10-05T00:00:00.000Z","author":{"@type":"Person","name":"Jeffrey Aven","description":"Technologist and Cloud Consultant","url":"https://www.linkedin.com/in/jeffreyaven/"},"image":{"@type":"ImageObject","@id":"https://stackql.io/img/blog/stackql-typesafe-provider-featured-image.png","url":"https://stackql.io/img/blog/stackql-typesafe-provider-featured-image.png","contentUrl":"https://stackql.io/img/blog/stackql-typesafe-provider-featured-image.png","caption":"title image for the blog post: New TypeSafe Provider Available"},"keywords":["stackql","typesafe","jev","system one","provider","mcp","ai agents","agentic infrastructure","finops","greenops","sre","cspm","access review","audit","sql"]},{"@type":"BlogPosting","@id":"https://stackql.io/blog/providers/new-railway-provider-available","mainEntityOfPage":"https://stackql.io/blog/providers/new-railway-provider-available","url":"https://stackql.io/blog/providers/new-railway-provider-available","headline":"New Railway Provider Available","name":"New Railway Provider Available","description":"A new StackQL provider for Railway - query and manage workspaces, projects, environments, services, deployments, variables, domains, volumes and usage using SQL - available in the StackQL Provider Registry now.","datePublished":"2026-09-30T00:00:00.000Z","author":{"@type":"Person","name":"Jeffrey Aven","description":"Technologist and Cloud Consultant","url":"https://www.linkedin.com/in/jeffreyaven/"},"image":{"@type":"ImageObject","@id":"https://stackql.io/img/blog/stackql-railway-provider-featured-image.png","url":"https://stackql.io/img/blog/stackql-railway-provider-featured-image.png","contentUrl":"https://stackql.io/img/blog/stackql-railway-provider-featured-image.png","caption":"title image for the blog post: New Railway Provider Available"},"keywords":["stackql","railway","provider","paas","deployments","environments","variables","finops","infrastructure as code","cloud inventory","sql"]},{"@type":"BlogPosting","@id":"https://stackql.io/blog/providers/new-gitlab-provider-available","mainEntityOfPage":"https://stackql.io/blog/providers/new-gitlab-provider-available","url":"https://stackql.io/blog/providers/new-gitlab-provider-available","headline":"New GitLab Provider Available","name":"New GitLab Provider Available","description":"A new read-only StackQL provider for GitLab, generated from the GitLab GraphQL schema - projects, groups, members, issues, merge requests, pipelines, jobs, runners, releases, environments, packages, vulnerabilities and more as SQL, with transparent Relay pagination and pushed-down filters - available in the StackQL Provider Registry now.","datePublished":"2026-09-26T00:00:00.000Z","author":{"@type":"Person","name":"Jeffrey Aven","description":"Technologist and Cloud Consultant","url":"https://www.linkedin.com/in/jeffreyaven/"},"image":{"@type":"ImageObject","@id":"https://stackql.io/img/blog/stackql-gitlab-provider-featured-image.png","url":"https://stackql.io/img/blog/stackql-gitlab-provider-featured-image.png","contentUrl":"https://stackql.io/img/blog/stackql-gitlab-provider-featured-image.png","caption":"title image for the blog post: New GitLab Provider Available"},"keywords":["stackql","gitlab","provider","graphql","devops","ci/cd","merge requests","pipelines","runners","vulnerabilities","cloud inventory","sql"]},{"@type":"BlogPosting","@id":"https://stackql.io/blog/providers/anthropic-
4providers-update-september-2026","mainEntityOfPage":"https://stackql.io/blog/providers/anthropic-providers-update-september-2026","url":"https://stackql.io/blog/providers/anthropic-providers-update-september-2026","headline":"Anthropic Providers Update - September 2026","name":"Anthropic Providers Update - September 2026","description":"Update to the StackQL anthropic provider regenerated from the current Claude API spec - a new dreams service for memory consolidation jobs, files and skills on their GA endpoints, and workspace-scoped queries through the anthropic-workspace-id parameter. The anthropic_admin provider is unchanged.","datePublished":"2026-09-15T00:00:00.000Z","author":{"@type":"Person","name":"Jeffrey Aven","description":"Technologist and Cloud Consultant","url":"https://www.linkedin.com/in/jeffreyaven/"},"image":{"@type":"ImageObject","@id":"https://stackql.io/img/blog/stackql-claude-featured-image.png","url":"https://stackql.io/img/blog/stackql-claude-featured-image.png","contentUrl":"https://stackql.io/img/blog/stackql-claude-featured-image.png","caption":"title image for the blog post: Anthropic Providers Update - September 2026"},"keywords":["stackql","anthropic","claude","provider","dreams","memory stores","files","skills","workspaces","agents","sql"]},{"@type":"BlogPosting","@id":"https://stackql.io/blog/providers/updated-datadog-provider-available","mainEntityOfPage":"https://stackql.io/blog/providers/updated-datadog-provider-available","url":"https://stackql.io/blog/providers/updated-datadog-provider-available","headline":"Datadog Provider - August 2026","name":"Datadog Provider - August 2026","description":"The StackQL Datadog provider now covers the v1 and v2 REST APIs together - monitors, dashboards, synthetics, SLOs, downtimes, incidents, cases, on-call, logs configuration, metrics, security monitoring, cloud cost, users, roles and keys, integrations, RUM, LLM Observability and fleet automation.","datePublished":"2026-08-26T00:00:00.000Z","author":{"@type":"Person","name":"Jeffrey Aven","description":"Technologist and Cloud Consultant","url":"https://www.linkedin.com/in/jeffreyaven/"},"image":{"@type":"ImageObject","@id":"https://stackql.io/img/blog/stackql-datadog-provider-featured-image.png","url":"https://stackql.io/img/blog/stackql-datadog-provider-featured-image.png","contentUrl":"https://stackql.io/img/blog/stackql-datadog-provider-featured-image.png","caption":"title image for the blog post: Datadog Provider - August 2026"},"keywords":["stackql","datadog","provider","monitors","dashboards","synthetics","slo","observability","security monitoring","cloud cost","infrastructure as code"]}]}</script>
4<link rel="preconnect" href="https://www.google-analytics.com"> 5<link rel="preconnect" href="https://www.googletagmanager.com">
vendor: 67 bytes, lines 5-6
5 6<script async="" src="https://www.googletagmanager.com/gtag/js?id=
6G-M7GH68KJ3F
vendor: 12 bytes, line 6
6"></script>
7<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-M7GH68KJ3F",{anonymize_ip:!0})</script>
7 8 9 10 11<link rel="search" type="application/opensearchdescription+xml" title="StackQL" href="/opensearch.xml"> 12 13 14 15 16<link rel="alternate" type="application/rss+xml" href="/blog/product/rss.xml" title="StackQL Blog - Product Announcements RSS Feed"> 17<link rel="alternate" type="application/atom+xml" href="/blog/product/atom.xml" title="StackQL Blog - Product Announcements Atom Feed"> 18<link rel="alternate" type="application/json" href="/blog/product/feed.json" title="StackQL Blog - Product Announcements JSON Feed"> 19<link rel="alternate" type="application/rss+xml" href="/blog/providers/rss.xml" title="StackQL Blog - Provider Announcements RSS Feed"> 20<link rel="alternate" type="application/atom+xml" href="/blog/providers/atom.xml" title="StackQL Blog - Provider Announcements Atom Feed"> 21<link rel="alternate" type="application/json" href="/blog/providers/feed.json" title="StackQL Blog - Provider Announcements JSON Feed"> 22<link rel="alternate" type="application/rss+xml" href="/blog/tutorials/rss.xml" title="StackQL Blog - Tutorials RSS Feed"> 23<link rel="alternate" type="application/atom+xml" href="/blog/tutorials/atom.xml" title="StackQL Blog - Tutorials Atom Feed"> 24<link rel="alternate" type="application/json" href="/blog/tutorials/feed.json" title="StackQL Blog - Tutorials JSON Feed"> 25 26 27 28<link rel="preconnect" href="https://fonts.googleapis.com"> 29<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"> 30<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> 31<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 32<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 33<link rel="manifest" href="/site.webmanifest"> 34<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0f4c81"><link rel="stylesheet" href="/assets/css/styles.5ab6893d.css">
35<script src="/assets/js/runtime~main.69ac757d.js" defer="defer"></script>
vendor: 1 bytes, line 35
35
36<script src="/assets/js/main.55ff9c64.js" defer="defer"></script>
vendor: 1 bytes, line 36
36
37<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","isPartOf":{"@id":"https://stackql.io/#website"},"inLanguage":"en-US","datePublished":"2021-07-01","@id":"https://stackql.io/blog/providers/#webpage","url":"https://stackql.io/blog/providers","name":"Provider Announcements","description":"New and updated StackQL providers","dateModified":"2026-10-05T03:16:26.881Z","breadcrumb":{"@id":"https://stackql.io/blog/providers/#breadcrumb"},"potentialAction":[{"@type":"ReadAction","target":["https://stackql.io/blog/providers"]}],"speakable":{"@type":"SpeakableSpecification","cssSelector":["h1","article p:first-of-type","[data-speakable]"]}},{"@type":"BreadcrumbList","@id":"https://stackql.io/blog/providers/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"item":"https://stackql.io","name":"Home"},{"@type":"ListItem","position":2,"item":"https://stackql.io/blog","name":"Blog"},{"@type":"ListItem","position":3,"name":"Provider Announcements"}]},{"@type":"WebSite","@id":"https://stackql.io/#website","name":"StackQL","url":"https://stackql.io","description":"The substrate for AI agents to interact with cloud control planes and data planes using SQL","publisher":{"@id":"https://stackql.io/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://stackql.io/search?q={searchTerms}"},"query-input":"required name=searchTerms"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://stackql.io/#organization","name":"StackQL","url":"https://stackql.io","sameAs":["https://twitter.com/stackql","https://www.linkedin.com/company/stackql","https://github.com/stackql","https://www.youtube.com/@stackql","https://hub.docker.com/u/stackql"],"contactPoint":{"@type":"ContactPoint","email":"[email protected]"},"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://stackql.io/#logo","url":"https://stackql.io/android-chrome-512x512.png","contentUrl":"https://stackql.io/android-chrome-512x512.png","width":512,"height":512,"caption":"StackQL"},"address":{"@type":"PostalAddress","addressCountry":"AU","postalCode":"3001","streetAddress":"Level 24, 570 Bourke Street, Melbourne, Victoria"},"taxID":"ABN 65 656 147 054"}]}</script>
37</head> 38<body> 39<svg style="display: none;"><defs> 40<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol> 41</defs></svg>
42<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script>
42<div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo-original.svg" alt="StackQL" class="themedImage_Pn4p themedImage--light_PnYV"><img src="/img/logo-white.svg" alt="StackQL" class="themedImage_Pn4p themedImage--dark_eYgw"></div></a><a class="navbar__item navbar__link" href="/installing-stackql">Install</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">AI Agents</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/command-line-usage/mcp">MCP Server</a></li><li><a class="dropdown__link" href="/mcp">MCP Tools</a></li><li><a class="dropdown__link" href="/mcp/embedded">Embedded MCP</a></li><li><a href="/docs/query-library/" target="_self" rel="noopener noreferrer" class="dropdown__link">Query Library</a></li></ul></div><a class="navbar__item navbar__link" href="/stackql-deploy">stackql-deploy</a><div class="navbar__item dropdown dropdown--hoverable"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/providers">Providers</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/providers/aws">AWS</a></li><li><a class="dropdown__link" href="/providers/azure">Azure</a></li><li><a class="dropdown__link" href="/providers/google">Google</a></li><li><a class="dropdown__link" href="/providers/cloudflare">Cloudflare</a></li><li><a class="dropdown__link" href="/providers/databricks-account">Databricks</a></li><li><a class="dropdown__link" href="/providers/snowflake">Snowflake</a></li><li><a class="dropdown__link" href="/providers/confluent">Confluent</a></li><li><a class="dropdown__link" href="/providers/okta">Okta</a></li><li><a class="dropdown__link" href="/providers/openai">OpenAI</a></li><li><a class="dropdown__link" href="/providers/github">GitHub</a></li><li><a class="dropdown__link" href="/providers">... More</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">More</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/blog/product">ð£ Product Announcements</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/blog/providers">ð£ Provider Announcements</a></li><li><a class="dropdown__link" href="/blog/tutorials">Tutorials</a></li><li><a class="dropdown__link" href="/quick-starts">Quick Starts</a></li></ul></div></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_
42wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">All provider announcements</div><div role="group"><h3 class="yearGroupHeading_rMGB">2026</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-typesafe-provider-available">New TypeSafe Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-railway-provider-available">New Railway Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-gitlab-provider-available">New GitLab Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/anthropic-providers-update-september-2026">Anthropic Providers Update - September 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/updated-datadog-provider-available">Datadog Provider - August 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-kubernetes-provider-available">New Kubernetes Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/aws-provider-update-august-2026">AWS Provider Update - August 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-clickhouse-provider-available">New ClickHouse Cloud Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/google-provider-update-august-2026">Google Provider Update - August 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-gemini-provider-available">New Google Gemini Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/databricks-providers-update-july-2026">Databricks Providers Update - July 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/openai-providers-update-july-2026">OpenAI Providers Update - July 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/azure-provider-update-july-2026">Azure Provider Update - July 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/anthropic-
42providers-update-july-2026">Anthropic Providers Update - July 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/updated-cloudflare-provider-available">Cloudflare Provider - May 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/confluent-provider-may-2026-update">Confluent Provider Update - May 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/github-provider-april-2026-update">GitHub Provider Update - April 2026</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-databricks-providers-available">New Databricks Providers for StackQL Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-awscc-provider-available">New Dedicated AWS Cloud Control Provider Released</a></li></ul></div><div role="group"><h3 class="yearGroupHeading_rMGB">2025</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/google-provider-december-2025-update">Google Provider Update - December 2025</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/latest-datadog-provider-available">Latest Datadog Provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/latest-linode-provider-available">Latest Linode Provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/deno-deploy-provider-available">Deno Deploy Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/latest-digitalocean-provider-available">Latest DigitalOcean Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-okta-provider-released">New Okta Provider Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/updated-google-providers-available">Updated Google Providers for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/snowflake-provider-for-stackql-released">Snowflake Provider for StackQL Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/latest-aws-provider-for-stackql-released">New AWS Provider Available (Jan 2025)</a></li></ul></div><div role="group"><h3 class="yearGroupHeading_rMGB">2024</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/databricks-provider-for-stackql-available">Databricks Provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/confluent-provider-for-stackql-released">Confluent provider for stackql released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/anthropic-provider-for-stackql-available">Anthropic Provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/openai-provider-for-stackql-available">OpenAI Provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/latest-google-provider-available">Updated Google Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-stackql-azure-providers-jun-2024">New Azure Providers Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-google-provider-available">Updated google provider for StackQL available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-azure-providers-for-stackql-available">New Azure Providers for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/stackql-providers-for-datadog-and-pagerduty-now-available">StackQL Providers for DataDog and PagerDuty Now Available</a></li></ul></div><div role="group"><h3 class="yearGroupHeading_rMGB">2023</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/godaddy-provider-for-stackql-now-available">GoDaddy Provider for StackQL Now Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/vercel-provider-for-stackql-available">Vercel provider for StackQL available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/linode-provider-for-stackql-released">StackQL Linode provider Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/digitalocean-provider-for-stackql-released">Digital Ocean provider for StackQL Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/sumologic-provider-for-stackql-now-available">Sumologic Provider for StackQL Now Available</a></li></ul></div><div role="group"><h3 class="yearGroupHeading_rMGB">2022</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/new-functions-and-azure-provider-available">New Functions and Azure Provider Available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/stackql-aws-provider-released">StackQL Provider for AWS Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/azure-provider-for-stackql-released">StackQL provider for Azure is now available</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/kubernetes-provider-for-stackql-released">Kubernetes Provider for StackQL Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/netlify-provider-for-stackql-released">Netlify Provider for StackQL Released</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/providers/github-provider-for-stackql-released">GitHub Provider for StackQL Released</a></li></ul></div></nav></aside><main class="col col--7"><article class="margin-bottom--xl"><header><div class="row_cQ7g"><div class="dropdownWrapper_yQfY"><style data-emotion="css el00xt">.css-el00xt{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-el00xt:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-el00xt:hover{background-color:transparent;}}.css-el00xt.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-el00xt:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><style data-emotion="css p95och">.css-p95och{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
42-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-p95och::-moz-focus-inner{border-style:none;}.css-p95och.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-p95och{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-p95och:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-p95och:hover{background-color:transparent;}}.css-p95och.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-p95och:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-p95och" tabindex="0" type="button" aria-haspopup="menu" aria-expanded="false">Ask AI about this page<style data-emotion="css hqw408">.css-hqw408{display:inherit;margin-right:-2px;margin-left:8px;}.css-hqw408>*:nth-of-type(1){font-size:18px;}</style><span class="MuiButton-icon MuiButton-endIcon MuiButton-iconSizeSmall css-hqw408"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="KeyboardArrowDownIcon"><path d="M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"></path></svg></span></button><style data-emotion="css 17kn40b">.css-17kn40b .MuiPaper-root{font-family:var(--ifm-font-family-base);
42min-width:200px;}</style><style data-emotion="css 1774aau">.css-1774aau .MuiPaper-root{font-family:var(--ifm-font-family-base);min-width:200px;}</style></div></div><h2 class="title_f1Hy"><a href="/blog/providers/new-typesafe-provider-available">New TypeSafe Provider Available</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-10-05T00:00:00.000Z">October 5, 2026</time> · <!-- -->13 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://www.linkedin.com/in/jeffreyaven/" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Jeffrey Aven</span></a></div><small class="authorTitle_nd0D" title="Technologist and Cloud Consultant">Technologist and Cloud Consultant</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>We've released a new StackQL provider for TypeSafe AI:</p> 43<ul> 44<li class=""><a href="https://typesafe-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong><code>typesafe</code></strong></a> - the TypeSafe API: <strong><code>systemone</code></strong> (the evaluation endpoint behind Jev, TypeSafe's flagship model) and <strong><code>models</code></strong> (the models and aliases an API key can use) - 2 services, 2 resources, 2 operations, both <code>SELECT</code></li> 45</ul> 46<p>Jev is a System One model. Instead of generating text it answers typed questions about a <code>state</code> you supply and returns a calibrated probability or distribution for each one: a Noul question is a yes/no with the probability of yes, a Choice picks one option from a set you define with a probability per option and a confidence, and a Score rates the state against an ordered rubric. Any mix of the three runs against the same state in one request, in about a hundred milliseconds, for a fraction of a cent. There is nothing to parse and nothing to coax into JSON.</p> 47<p>That matters most for agents that already run on the <a class="" href="/command-line-usage/mcp">StackQL MCP server</a>. Those agents have every provider's control plane as SQL, and the audit log and approval gates that come with it. What a <code>WHERE</code> clause cannot do is make the judgment call: is this instance production or scratch, does this rule's description justify public ingress, does this account still need an admin role, is a restart the right response to this event. In this provider that call is a <code>SELECT</code> too, so a decision sits between a context query and a mutation as one more governed tool call. The rest of this post is that routine, in the shapes platform, FinOps, SRE and security teams actually run.</p> 48<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="connect">Connect<a href="#connect" class="hash-link" aria-label="Direct link to Connect" title="Direct link to Connect" translate="no">â</a></h2> 49<p>Authentication is a TypeSafe API key, created in the TypeSafe console and read from <code>TYPESAFE_API_KEY</code>, the same variable the TypeSafe SDKs use (there is no Terraform provider for TypeSafe):</p> 50<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">export TYPESAFE_API_KEY=...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql shell</span><br></div></code></pre></div></div> 51<p>Pricing is per input token (<code>$0.042</code> per million at the time of writing; output tokens are free), and the <code>usage</code> column of every row reports what a decision cost. Jev 1.13 allows 80 requests per second and 100K tokens per second; the provider carries the retry policy the vendor SDKs apply by default, so a 429 or a 529 on the first attempt is retried with backoff before it surfaces.</p> 52<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-routine">
52The routine<a href="#the-routine" class="hash-link" aria-label="Direct link to The routine" title="Direct link to The routine" translate="no">â</a></h2> 53<p>An evaluation is a <code>SELECT</code> from <code>typesafe.systemone.evaluations</code>: the <code>state</code>, the <code>model</code> and the <code>questions</code> are the <code>WHERE</code> clause, and the row that comes back carries the versioned model that answered, the <code>answers</code> keyed by the names you chose, and the token usage. Over MCP the routine is three tool calls:</p> 54<ol> 55<li class=""><strong>Context</strong> - <code>run_select_query</code> against the provider that owns the facts (<code>aws</code>, <code>k8s</code>, <code>okta</code>, <code>github</code>, ...). The agent keeps the columns the decision needs.</li> 56<li class=""><strong>Decision</strong> - <code>run_select_query</code> against <code>typesafe.systemone.evaluations</code>, with the record serialised as the JSON <code>state</code> and the routine's questions as <code>questions</code>.</li> 57<li class=""><strong>Action</strong> - <code>run_mutation_query</code> or <code>run_lifecycle_operation</code> against the owning provider, only when the answer clears the threshold the routine sets: a Noul at or above 0.9 (or at or below 0.1), a Choice with <code>confidence</code> at or above 0.9, a Score above a level.</li> 58</ol> 59<p>Every evaluation is a read, so the decision step is allowed in every MCP server mode, including <code>read_only</code>; in the default <code>safe</code> mode the action still goes through the client's approval prompt, and in <code>read_only</code> the routine stops at the recommendation. Every tool call lands in the server's audit log, and because the row names the model version that answered, every automated change can record which model decided it.</p> 60<p>The examples below were run live against the API before publication. Each shows the context query, the decision over one representative record, and the action; the answer Jev gave for that record is under each block.</p> 61<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tagging-hygiene">Tagging hygiene<a href="#tagging-hygiene" class="hash-link" aria-label="Direct link to Tagging hygiene" title="Direct link to Tagging hygiene" translate="no">â</a></h2> 62<p>Platform engineering: classify an instance from its name and existing tags, then write the missing tags back.</p> 63<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 1. context (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> instance_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> instance_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> launch_time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> tags</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> region </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 2. decision (run_select_query): one record from the result as the state</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.environment.choice'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.environment.confidence'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> confidence</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.owner_team.choice'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> owner_team</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> model</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">systemone</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">evaluations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"instance_id": "i-0a1b2c3d4e5f67890", "instance_type": "m5.2xlarge", "launch_time": "2026-03-02T09:14:00Z", "tags": [{"Key": "Name", "Value": "jenkins-agent-prod-2"}, {"Key": "created-by", "Value": "[email protected]"}]}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> model </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'jev-latest'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> questions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "environment": {"type": "choice", "instructions": "Which environment does this instance belong to? Use the Name tag and anything else in the record.",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"production": "Serves live traffic or production pipelines", "staging": "Pre-production, UAT or release testing", "development": "Developer, sandbox or test use", "unknown": "The record does not say"}},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "owner_team": {"type": "choice", "instructions": "Which team most likely owns this instance?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"platform": "CI, build and shared infrastru
63cture", "data": "Analytics and data pipelines", "product": "Customer-facing applications", "unknown": "Cannot tell from the record"}}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> }'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 3. action (run_mutation_query), when confidence >= 0.9</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">tags </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ResourceId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Tag</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'i-0a1b2c3d4e5f67890'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[{"Key": "environment", "Value": "production"}, {"Key": "owner", "Value": "platform"}]'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 64<table><thead><tr><th>environment</th><th>confidence</th><th>owner_team</th><th>model</th></tr></thead><tbody><tr><td>production</td><td>1.0</td><td>platform</td><td>jev-1.13.0</td></tr></tbody></table> 65<p>A routine that walks every untagged instance in the account is a loop over the context rows: one decision call per record, one tag write per record that clears the bar, and the rest left for a person.</p> 66<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="rightsizing-and-off-hours-scheduling">Rightsizing and off-hours scheduling<a href="#rightsizing-and-off-hours-scheduling" class="hash-link" aria-label="Direct link to Rightsizing and off-hours scheduling" title="Direct link to Rightsizing and off-hours scheduling" translate="no">â</a></h2> 67<p>FinOps and GreenOps: given an instance record and the utilisation the agent has gathered, decide between keeping it, stopping it outside business hours, downsizing it or referring it to the owner. A second question asks whether the workload could run at another time or in another region at all, which is the lever carbon-aware scheduling needs.</p> 68<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 1. context (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> instance_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> instance_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> launch_time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> tags</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> region </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 2. decision (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.action.choice'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.action.confidence'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> confidence</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.schedulable.noul'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> p_schedulable</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> model</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">systemone</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">evaluations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"instance_id": "i-0b9c8d7e6f5a43210", "instance_type": "r5.4xlarge", "state": "running", "launch_time": "2025-11-18T03:00:00Z", "tags": [{"Key": "Name", "Value": "nightly-report-builder"}, {"Key": "owner", "Value": "data"}], "avg_cpu_14d_pct": 3.1, "max_cpu_14d_pct": 61.0, "busy_hours_utc": "01:00-03:00"}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> model </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'jev-latest'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> questions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "action": {"type": "choice", "instructions": "What should a cost review do with this instance?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"keep": "Utilisation and purpose justify running it as is", "stop_outside_hours": "It only works in a known window and can be stopped the rest of the time", "downsize": "It is oversized for its sustained load", "review_with_owner": "The record
68is not enough to decide"}},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "schedulable": {"type": "noul", "instructions": "Could this workload run at a different time of day or in a different region without affecting users?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"true": "A batch or scheduled job with no interactive users", "false": "Serves users or other systems on demand"}}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> }'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 3. action (run_lifecycle_operation), when action = 'stop_outside_hours' and confidence >= 0.9</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">instances</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">stop_instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@InstanceId</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'i-0b9c8d7e6f5a43210'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@region</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 69<table><thead><tr><th>action</th><th>confidence</th><th>p_schedulable</th></tr></thead><tbody><tr><td>stop_outside_hours</td><td>0.9</td><td>0.87</td></tr></tbody></table> 70<p>The confidence sat between 0.86 and 0.91 across repeated runs of the same record, which is the point of putting a threshold in the routine rather than in the prompt: at 0.86 this instance goes to the owner instead of being stopped.</p> 71<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="incident-triage">Incident triage<a href="#incident-triage" class="hash-link" aria-label="Direct link to Incident triage" title="Direct link to Incident triage" translate="no">â</a></h2> 72<p>SRE: read the cluster's warning events, let Jev name the likely cause, rate the severity and say whether rescheduling the pod is the right first response.</p> 73<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 1. context (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">involved_object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.namespace'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">involved_object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.kind'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> kind</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">involved_object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> reason</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> message</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> last_timestamp</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> k8s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">core</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">events_all_namespaces</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Warning'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 2. decision (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.cause.choice'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> cause</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.severity.score'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> severity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.reschedule_helps.noul'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> p_reschedule_helps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> model</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">systemone</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">evaluations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"namespace": "payments", "kind": "Pod", "name": "checkout-api-7c9d6f8b5-xk2lp", "reason": "BackOff", "message": "Back-off restarting failed container checkout-api in pod checkout-api-7c9d6f8b5-xk2lp", "count": 14, "last_timestamp": "2026-10-05T02:41:07Z", "recent_log_tail"
73: "FATAL: connection pool exhausted after 30s waiting for a connection to payments-db"}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> model </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'jev-latest'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> questions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "cause": {"type": "choice", "instructions": "What is the most likely cause of this event?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"crash_loop": "The container exits repeatedly on its own error", "out_of_memory": "Killed for exceeding its memory limit", "image_pull": "The image cannot be pulled", "scheduling": "No node can place the pod", "dependency": "A dependency the container needs is unavailable or saturated", "other": "None of the above"}},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "severity": {"type": "score", "instructions": "How severe is this for users?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": ["Informational, no user impact", "Degraded, users may notice", "Outage of a user-facing capability", "Outage with data or payment risk"]},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "reschedule_helps": {"type": "noul", "instructions": "Would deleting the pod so the controller reschedules it most likely resolve this?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"true": "A transient or node-local fault that a fresh pod clears", "false": "A code, configuration or dependency fault a new pod would hit again"}}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> }'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 3. action (run_mutation_query), when p_reschedule_helps >= 0.9 and severity < 2</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">DELETE</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> k8s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">core</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">pods</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> namespace </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'payments'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'checkout-api-7c9d6f8b5-xk2lp'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 74<table><thead><tr><th>
74cause</th><th>severity</th><th>p_reschedule_helps</th></tr></thead><tbody><tr><td>dependency</td><td>2.2</td><td>0.21</td></tr></tbody></table> 75<p>This one is worth reading closely. The event alone looks like a crash loop, and a reflexive runbook would delete the pod. Jev read the log tail, named the saturated database pool as the cause, rated it an outage with payment risk and gave the restart a 0.21, so the routine does not touch the pod and the agent escalates instead.</p> 76<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="public-ingress-review">Public ingress review<a href="#public-ingress-review" class="hash-link" aria-label="Direct link to Public ingress review" title="Direct link to Public ingress review" translate="no">â</a></h2> 77<p>CSPM: list the security group rules open to the internet, let Jev judge whether each rule's description and port make the exposure a deliberate public endpoint or an exposed management or database port, then revoke a rule only when it is judged unjustified.</p> 78<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 1. context (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> security_group_rule_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> group_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> ip_protocol</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> from_port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> to_port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> cidr_ipv_4</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> is_egress</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">security_group_rules</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> region </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> cidr_ipv_4 </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'0.0.0.0/0'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 2. decision (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.justified.noul'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> p_justified</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.exposure.choice'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> exposure</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.exposure.confidence'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> confidence</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> model</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">systemone</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">evaluations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"security_group_rule_id": "sgr-0f1e2d3c4b5a69788", "group_id": "sg-0123456789abcdef0", "group_name": "analytics-db", "ip_protocol": "tcp", "from_port": 5432, "to_port": 5432, "cidr_ipv_4": "0.0.0.0/0", "is_egress": false, "description": "temp access for vendor demo"}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> model </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'jev-latest'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> questions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "justified": {"type": "noul", "instructions": "Do the description, group name and port justify ingress from the whole internet?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"true": "A deliberate public endpoint such as a load balancer or web tier on 80 or 443", "false": "A management, database or internal service port, or a temporary exception"}},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "exposure": {"type": "choice", "instructions": "What kind of exposure is this?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"public_endpoint": "Intended internet-facing service", "management_port": "SSH, RDP, WinRM or similar", "database_port": "A database or cache listener", "unknown": "Cannot tell from the record"}}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> }'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 3. action (run_lifecycle_operation), when p_justified <= 0.1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ec2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">security_groups</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">revoke_security_group_ingress</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@GroupId</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'sg-0123456789abcdef0'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@SecurityGroupRuleId</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'sgr-0f1e2d3c4b5a69788'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@region</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'us-east-1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 79<table><thead><tr><th>
79p_justified</th><th>exposure</th><th>confidence</th></tr></thead><tbody><tr><td>0.04</td><td>database_port</td><td>1.0</td></tr></tbody></table> 80<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="audit-findings">Audit findings<a href="#audit-findings" class="hash-link" aria-label="Direct link to Audit findings" title="Direct link to Audit findings" translate="no">â</a></h2> 81<p>Audit and compliance: the context comes from one provider and the action goes to another. Read the privilege grants from the identity provider's system log, let Jev check each against the change policy written into the question, and open a tracked finding for the ones that fall outside it.</p> 82<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 1. context (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> published</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> eventType</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> displayMessage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> outcome</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> actor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> target</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">logs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">system_log_events</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> subdomain </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-org'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> since </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'2026-10-04T00:00:00Z'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> filter </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'eventType eq "user.account.privilege.grant"'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 2. decision (run_select_query)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.in_policy.noul'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> p_in_policy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.risk.score'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> risk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> model</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">systemone</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">evaluations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"published": "2026-10-04T22:47:13Z", "eventType": "user.account.privilege.grant", "displayMessage": "Grant user privilege", "outcome": "SUCCESS", "actor": {"alternateId": "[email protected]", "type": "User"}, "target": [{"alternateId": "[email protected]", "type": "User"}, {"displayName": "Super Administrator", "type": "ROLE"}], "note": "no change ticket referenced"}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> model </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'jev-latest'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> questions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "in_policy": {"type": "noul", "instructions": "Does this privilege grant comply with the change policy?",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": {"true": "Granted by an identity administrator, between 09:00 and 17:00 UTC on a weekday, with a change ticket referenced", "false": "Outside the change window, by a non-administrator, to a service account, or without a ticket"}},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "risk": {"type": "score", "instructions": "How much risk does this grant carry?",</sp
82an><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "criteria": ["Routine, scoped role", "Elevated role to a person", "Tenant-wide administrative role, or any role to a service account"]}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> }'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">-- 3. action (run_mutation_query), when p_in_policy <= 0.2</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">issues</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">issues </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">owner</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> repo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> labels</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-org'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'security-audit'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Privilege grant outside change policy: [email protected] granted Super Administrator'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Granted 2026-10-04T22:47:13Z by [email protected] with no change ticket referenced. Flagged by jev-1.13.0 (in_policy 0.02, risk 2.0). Review and revoke or document.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'["compliance", "iam"]'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 83<table><thead><tr><th>p_in_policy</th><th>risk</th></tr></thead><tbody><tr><td>0.02</td><td>2.0</td></tr></tbody></table> 84<p>The policy lives in the <code>criteria</code> of one question. Changing the change window or the ticket rule is a diff in that text, reviewed like any other change to the routine, not a retrained classifier.</p> 85<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="writing-the-questions">Writing the questions<a href="#writing-the-questions" class="hash-l
85ink" aria-label="Direct link to Writing the questions" title="Direct link to Writing the questions" translate="no">â</a></h2> 86<p>Two things came out of putting these routines together. First, ask Jev the judgment and compute the facts yourself. An access-review draft asked "Is this account dormant?" with a 90-day rule in the criteria, and the answer drifted between 0.54 and 0.88 however plainly the dates were stated; Jev treats dormancy as a judgment about the person. Asked instead "Do the title and department justify the roles this account holds?" the same record answered 0.16 every time, and "What kind of account is this?" answered contractor with confidence 1.0. Days since the last sign-in is arithmetic, so it stays in SQL, and the suspension (<code>EXEC okta.users.users.suspend_user</code>) runs only when the arithmetic and the judgment agree. The full example is on the <a href="https://typesafe-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">provider docs</a>.</p> 87<p>Second, keep the thresholds in the routine and the model version in the record. Choice confidences and Scores drift a little between identical calls, which is a reason to gate on them rather than to read a single number as a verdict. The <code>model</code> column records which version answered, so an action log can say "stopped by jev-1.13.0 at 0.91", and once a routine's thresholds are tuned the versioned id can be pinned in place of the <code>jev-latest</code> alias.</p> 88<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-the-provider-is-and-is-not">What the provider is and is not<a href="#what-the-provider-is-and-is-not" class="hash-link" aria-label="Direct link to What the provider is and is not" title="Direct link to What the provider is and is not" translate="no">â</a></h2> 89<p>The TypeSafe API is two operations, and the provider maps both. There is no administrative or usage API to map: keys are created and revoked in the TypeSafe console, and usage is reported per request in the <code>usage</code> column rather than through a reporting endpoint. Everything in the API is a read, so the provider has no <code>INSERT</code>, <code>UPDATE</code> or <code>DELETE</code> methods of its own; the mutations in this post belong to the providers that own the resources. The models catalog is the one plain inventory query:</p> 90<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> release_date</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> typesafe</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">models</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">models</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 91<p>Every statement in this post was checked before publication: the typesafe statements ran live, and the aws, k8s, okta and github statements were routed through their providers to the wire against a scratch account. The complete smoke run of the provider costs a fraction of a cent.</p> 92<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">
92Get started<a href="#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">â</a></h2> 93<p>Pull the provider from the public registry:</p> 94<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull typesafe;</span><br></div></code></pre></div></div> 95<p>Provider docs, including the request shape of each question type, the error contract and the full set of agent-routine examples, are at <a href="https://typesafe-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">typesafe-provider.stackql.io</a>. For the MCP server itself, start with <a class="" href="/ai/how-tos/use-stackql-with-ai-agents">How to use StackQL with AI agents</a>. Let us know what you build. Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a>.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/stackql">
95stackql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/typesafe">typesafe</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/jev">jev</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/provider">provider</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/mcp">mcp</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/ai-agents">ai-agents</a></li></ul></div></footer></article><article class="margin-bottom--xl"><header><div class="row_cQ7g"><div class="dropdownWrapper_yQfY"><style data-emotion="css el00xt">.css-el00xt{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-el00xt:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-el00xt:hover{background-color:transparent;}}.css-el00xt.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-el00xt:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><style data-emotion="css p95och">.css-p95och{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-p95och::-moz-focus-inner{border-style:none;}.css-p95och.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-p95och{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-p95och:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-p95och:hover{background-color:transparent;}}.css-p95och.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-p95och:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-p95och" tabindex="0" type="button" aria-haspopup="menu" aria-expanded="false">Ask AI about this page<style data-emotion="css hqw408">.css-hqw408{display:inherit;margin-right:-2px;margin-left:8px;}.css-hqw408>*:nth-of-type(1){font-size:18px;}</style><span class="MuiButton-icon MuiButton-endIcon MuiButton-iconSizeSmall css-hqw408"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="KeyboardArrowDownIcon"><path d="M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"></path></svg></span></button><style data-emotion="css 17kn40b">.css-17kn40b .MuiPaper-root{font-family:var(--ifm-font-family-base);
95min-width:200px;}</style><style data-emotion="css 1774aau">.css-1774aau .MuiPaper-root{font-family:var(--ifm-font-family-base);min-width:200px;}</style></div></div><h2 class="title_f1Hy"><a href="/blog/providers/new-railway-provider-available">New Railway Provider Available</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-09-30T00:00:00.000Z">September 30, 2026</time> · <!-- -->8 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://www.linkedin.com/in/jeffreyaven/" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Jeffrey Aven</span></a></div><small class="authorTitle_nd0D" title="Technologist and Cloud Consultant">Technologist and Cloud Consultant</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>We've released a new StackQL provider for Railway:</p> 96<ul> 97<li class=""><a href="https://railway-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong><code>railway</code></strong></a> - the Railway public API: <strong><code>projects</code></strong>, <strong><code>environments</code></strong>, <strong><code>services</code></strong>, <strong><code>deployments</code></strong>, <strong><code>variables</code></strong>, <strong><code>networking</code></strong>, <strong><code>storage</code></strong>, <strong><code>billing</code></strong>, <strong><code>observability</code></strong>, <strong><code>workspaces</code></strong>, <strong><code>account</code></strong>, <strong><code>templates</code></strong>, <strong><code>integrations</code></strong>, <strong><code>platform</code></strong> and <strong><code>agents</code></strong> (15 services, 151 resources, 396 operations)</li> 98</ul> 99<p>The provider reads and writes. Projects, environments, services, variables, domains and volumes can be queried, created, changed and removed, and deployment operations such as redeploy, restart and rollback are available on the resources they act on. The rest of this post is the questions it answers and the tasks it handles.</p> 100<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="connect">Connect<a href="#connect" class="hash-link" aria-label="Direct link to Connect" title="Direct link to Connect" translate="no">â</a></h2> 101<p>Authentication is a Railway account token or workspace token, read from <code>RAILWAY_TOKEN</code> - the same variable the Terraform Railway provider uses:</p> 102<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">export RAILWAY_TOKEN=...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql shell</span><br></div></code></pre></div></div> 103<p>Tokens are created under Account settings -> Tokens. A project token does not work with the provider. Railway limits API requests per hour by plan (100 on Free, 1000 on Hobby, 10000 on Pro), which is worth keeping in mind for queries that cover many projects or environments.</p> 104<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-deployed-where">What is deployed where<a href="#what-is-deployed-where" class="hash-link" aria-label="Direct link to What is deployed where" title="Direct link to What is deployed where" translate="no">â</a></h2> 105<p>The workspaces a token can reach, the projects in one, and the environments of a project:</p> 106<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain">
106 id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">plan</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> is_ephemeral</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 107<p>A service instance is a service as it is configured in one environment. Listing the instances of an environment shows what runs there, from which image or repository, and how the last deployment went:</p> 108<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> num_replicas</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.image'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> image</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.repo'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> repo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> last_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">
108'$.created_at'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> deployed_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 109<p>An <code>IN</code> list covers several environments in one query, with one request made per environment. Joining to <code>environments</code> puts names on the rows:</p> 110<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">num_replicas</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> last_deployment</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances s</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments e </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">IN</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'<production-environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<staging-environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 111<p>The same works across projects, here for the services of two projects in a workspace:</p> 112<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> service</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services s</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects p </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">IN</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<other-project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 113<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment-health">
113Deployment health<a href="#deployment-health" class="hash-link" aria-label="Direct link to Deployment health" title="Direct link to Deployment health" translate="no">â</a></h2> 114<p>Deployment outcomes for a project, then the ones that failed or crashed, with who triggered them:</p> 115<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> deployments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">GROUP</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">creator</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> deployed_by</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{in: [FAILED, CRASHED]}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 116<p>Services in an environment whose latest deployment is not healthy:</p> 117<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> deployment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">latest_deployment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">NOT</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">IN</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'SUCCESS'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">
117'SLEEPING'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 118<p>From there, the build and runtime logs of a deployment are tables. <code>LIMIT</code> sets how many lines are fetched:</p> 119<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">timestamp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> severity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> message</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">observability</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">build_logs</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> deployment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<deployment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">LIMIT</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">timestamp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> severity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> message</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">observability</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployment_logs</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> deployment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<deployment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> filter </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'error'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">LIMIT</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 120<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drift-between-environments">Drift between environments<a href="#drift-between-environments" class="hash-l
120ink" aria-label="Direct link to Drift between environments" title="Direct link to Drift between environments" translate="no">â</a></h2> 121<p>Variables are one row per variable, so comparing two environments is a join. Variables a service has in production that are missing in staging:</p> 122<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables prod</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">LEFT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables stg</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<production-environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<staging-environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(127, 219, 202)">IS</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">NULL</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(127, 219, 202)">NOT</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">LIKE</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'RAILWAY_%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 123<p>Variables set in both environments with different values:</p> 124<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables prod</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables stg</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<production-environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<staging-environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)"><></span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(127, 219, 202)">NOT</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">LIKE</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'RAILWAY_%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 125<p>The variables Railway provides itself are prefixed <code>RAILWAY_</code> and differ between environments by design, so they are left out. Both queries return names only. Selecting <code>value</code> returns the values in clear, so treat that output as a secret.</p> 126<p>The same approach compares how a service is configured in each environment:</p> 127<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">num_replicas </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> prod_replicas</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">num_replicas </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> staging_replicas</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">region </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> prod_region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">region </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> staging_region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> prod</span><span class="token punctua
127tion" style="color:rgb(199, 146, 234)">.</span><span class="token plain">start_command </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> prod_start_command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">start_command </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> staging_start_command</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances prod</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances stg</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_id</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<production-environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> stg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<staging-environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 128<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="domains-and-certificates">Domains and certificates<a href="#domains-and-certificates" class="hash-link" aria-label="Direct link to Domains and certificates" title="Direct link to Domains and certificates" translate="no">â</a></h2> 129<p>The generated domains of every service in an environment, without going service by service. The <code>custom_domains</code> key of the same column holds the custom ones:</p> 130<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">d</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.domain'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> domain</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">d</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.target_port'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain">
130 target_port</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_each</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">domains</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.service_domains'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> d</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 131<p>Custom domains carry their verification and certificate state, and the DNS records Railway expects to find:</p> 132<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> domain</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.verified'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> verified</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.certificate_status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> certificate_status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.dns_records'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> dns_records</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">networking</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">custom_domains</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 133<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage-and-cost">
133Usage and cost<a href="#usage-and-cost" class="hash-link" aria-label="Direct link to Usage and cost" title="Direct link to Usage and cost" translate="no">â</a></h2> 134<p>Usage for a workspace by measurement, grouped by project, with project names joined in:</p> 135<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">measurement</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">billing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">usage</span><span class="token plain"> u</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects p</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.project_id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">measurements </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[CPU_USAGE, MEMORY_USAGE_GB, NETWORK_TX_GB, DISK_USAGE_GB]'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain">
135 u</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_by </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[PROJECT_ID]'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> measurement</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 136<p><code>start_date</code> and <code>end_date</code> narrow the window. The projected usage for the current billing period, and the billing position of the workspace:</p> 137<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> measurement</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> estimated_value</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">billing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">estimated_usage</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> measurements </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[CPU_USAGE, MEMORY_USAGE_GB]'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> current_usage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> credit_balance</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">billing_period</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.end'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> period_ends</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">usage_limit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.hard_limit'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> hard_limit</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">billing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">customers</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> workspace_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 138<p>Volumes report their allocated and used size per environment:</p> 139<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">volume</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> volume</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> mount_path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> size_mb</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> current_size_mb</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ROUND</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">100.0</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token plain"> current_size_mb </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token plain"> size_mb</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> used_pct</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">storage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">volume_instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 140<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provisioning">
140Provisioning<a href="#provisioning" class="hash-link" aria-label="Direct link to Provisioning" title="Direct link to Provisioning" translate="no">â</a></h2> 141<p>A project is created with one environment. <code>RETURNING</code> gives back the identifiers the next statements need:</p> 142<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">projects </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> workspace_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'orders'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'order processing'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<workspace-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> primary_environment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">
142'staging'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 143<p>A service from a container image or a repository. A service with a source is deployed when it is created, and a running deployment is billed:</p> 144<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'cache'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"image": "redis:7-alpine"}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> branch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'api'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"repo": "my-org/orders-api"}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'main'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain">
144 id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 145<p>Variables are written one at a time or as a set. Writing a variable that exists replaces its value, and <code>skip_deploys</code> keeps the change from triggering a deployment:</p> 146<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> environment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> skip_deploys</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'LOG_LEVEL'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'info'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">variables</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> environment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> variables</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> skip_deploys</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"SENTRY_DSN": "https://example.ingest.sentry.io/1", "FEATURE_FLAGS": "checkout-v2"}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 147<p>A generated domain and a volume for the service:</p> 148<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">
148INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">networking</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_domains </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">environment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> domain</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">storage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">volumes </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> environment_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> service_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> mount_path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'/data'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 149<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="day-two-operations">
149Day-two operations<a href="#day-two-operations" class="hash-link" aria-label="Direct link to Day-two operations" title="Direct link to Day-two operations" translate="no">â</a></h2> 150<p>Changing how a service runs in an environment is an <code>UPDATE</code>. Values in <code>SET</code> are written as quoted strings:</p> 151<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">UPDATE</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SET</span><span class="token plain"> num_replicas </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'2'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> start_command </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'npm run start'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> healthcheck_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'/healthz'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> service_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 152<p>Deployment operations are <code>EXEC</code> methods. The <code>SHOWRESULTS</code> hint returns the API's answer, including a refusal:</p> 153<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">/*+ SHOWRESULTS */</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">redeploy</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@service_id</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<service-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@environment_id</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">/*+ SHOWRESULTS */</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">restart</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@id</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<deployment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">/*+ SHOWRESULTS */</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">rollback</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@id</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<deployment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 154<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preview-environment-cleanup">Preview environment cleanup<a href="#preview-environment-cleanup" class="hash-l
154ink" aria-label="Direct link to Preview environment cleanup" title="Direct link to Preview environment cleanup" translate="no">â</a></h2> 155<p>Pull request environments accumulate. The ephemeral environments of a project, with the pull request each one belongs to:</p> 156<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">meta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.pr_number'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> pr_number</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">meta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.branch'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> branch</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> project_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<project-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> is_ephemeral </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 157<p>Removing one is a <code>DELETE</code>
157. Running the listing again confirms it is gone:</p> 158<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">DELETE</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environments</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 159<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-join-across-providers">A join across providers<a href="#a-join-across-providers" class="hash-link" aria-label="Direct link to A join across providers" title="Direct link to A join across providers" translate="no">â</a></h2> 160<p>Services deployed from a GitHub repository can be matched to the repository itself, for example to find services still deploying from a repository that has been archived or has not been pushed to in some time. This uses the <code>github</code> provider alongside <code>railway</code>:</p> 161<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_name </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> repo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">archived</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">pushed_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> railway</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_instances s</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">repos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">
161repos r</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.repo'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">environment_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<environment-id>'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">org </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-org'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> r</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">pushed_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 162<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">â</a></h2> 163<p>Pull the provider from the public registry:</p> 164<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull railway;</span><br></div></code></pre></div></div> 165<p>Provider docs are at <a href="https://railway-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">railway-provider.stackql.io</a>. Let us know what you build. Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a>.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/stackql">
165stackql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/railway">railway</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/provider">provider</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/paas">paas</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/deployments">deployments</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/finops">finops</a></li></ul></div></footer></article><article class="margin-bottom--xl"><header><div class="row_cQ7g"><div class="dropdownWrapper_yQfY"><style data-emotion="css el00xt">.css-el00xt{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-el00xt:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-el00xt:hover{background-color:transparent;}}.css-el00xt.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-el00xt:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><style data-emotion="css p95och">.css-p95och{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-p95och::-moz-focus-inner{border-style:none;}.css-p95och.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-p95och{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-p95och:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-p95och:hover{background-color:transparent;}}.css-p95och.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-p95och:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-p95och" tabindex="0" type="button" aria-haspopup="menu" aria-expanded="false">Ask AI about this page<style data-emotion="css hqw408">.css-hqw408{display:inherit;margin-right:-2px;margin-left:8px;}.css-hqw408>*:nth-of-type(1){font-size:18px;}</style><span class="MuiButton-icon MuiButton-endIcon MuiButton-iconSizeSmall css-hqw408"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="KeyboardArrowDownIcon"><path d="M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"></path></svg></span></button><style data-emotion="css 17kn40b">.css-17kn40b .MuiPaper-root{font-family:var(--ifm-font-family-base);
165min-width:200px;}</style><style data-emotion="css 1774aau">.css-1774aau .MuiPaper-root{font-family:var(--ifm-font-family-base);min-width:200px;}</style></div></div><h2 class="title_f1Hy"><a href="/blog/providers/new-gitlab-provider-available">New GitLab Provider Available</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-09-26T00:00:00.000Z">September 26, 2026</time> · <!-- -->6 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://www.linkedin.com/in/jeffreyaven/" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Jeffrey Aven</span></a></div><small class="authorTitle_nd0D" title="Technologist and Cloud Consultant">Technologist and Cloud Consultant</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>We've released a new StackQL provider for GitLab:</p> 166<ul> 167<li class=""><a href="https://gitlab-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong><code>gitlab</code></strong></a> - the GitLab GraphQL API as a read-only SQL surface: <strong><code>projects</code></strong>, <strong><code>groups</code></strong>, <strong><code>users</code></strong>, <strong><code>issues</code></strong>, <strong><code>merge_requests</code></strong>, <strong><code>ci</code></strong>, <strong><code>work_items</code></strong>, <strong><code>security</code></strong>, <strong><code>packages</code></strong>, <strong><code>snippets</code></strong>, <strong><code>boards</code></strong>, <strong><code>analytics</code></strong>, <strong><code>audit</code></strong>, <strong><code>metadata</code></strong>, <strong><code>admin</code></strong>, <strong><code>workspaces</code></strong>, <strong><code>ml</code></strong> and <strong><code>duo</code></strong> (18 services, 244 resources, every one of them <code>SELECT</code>)</li> 168</ul> 169<p>The provider is generated from the introspection schema gitlab.com publishes, pinned by content hash and refreshed as a reviewed diff. It works against gitlab.com out of the box and routes to a self-managed instance from an environment variable. It is read-only by architecture: StackQL's GraphQL path is a query path, so there are no <code>INSERT</code>, <code>UPDATE</code>, <code>DELETE</code> or <code>EXEC</code> methods. What it is for is inventory, reporting and cross-provider joins over the GitLab control plane - the questions that otherwise need a script and three API clients.</p> 170<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="connect">Connect<a href="#connect" class="hash-link" aria-label="Direct link to Connect" title="Direct link to Connect" translate="no">â</a></h2> 171<p>Authentication is a personal access token with the <code>read_api</code> scope, read from <code>GITLAB_TOKEN</code> - the same variable the Terraform GitLab provider uses:</p> 172<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">export GITLAB_TOKEN=glpat-...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql shell</span><br></div></code></pre></div></div> 173<p>Public projects and groups on gitlab.com are readable without a token (<code>--auth='{"gitlab": {"type": "null_auth"}}'</code>). For a self-managed instance, set <code>GITLAB_HOST=gitlab.example.com</code> and every query routes there; an explicit <code>WHERE host = ...</code> still wins for addressing another instance in the same session.</p> 174<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="three-scopes-one-shape">Three scopes, one shape<a href="#three-scopes-one-shape" class="hash-link" aria-label="Direct link to Three scopes, one shape" title="Direct link to Three scopes, one shape" translate="no">â</a></h2> 175<p>Resources follow the GraphQL schema. Instance-scoped resources take optional filters only (<code>projects</code>, <code>users</code>, <code>runners</code>); project-scoped resources are prefixed <code>project_</code> and take the project path; group-scoped resources are prefixed <code>group_</code> and take the group path. Columns are snake_case, and the nested identity objects GitLab attaches everywhere (<code>author</code>, <code>namespace</code>, <code>milestone</code>, <code>user</code>) are JSON columns one <code>json_extract</code> away.</p> 176<p>Every project in a group tree, with activity and visibility signals:</p> 177<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> full_path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> visibility</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> archived</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> star_count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> forks_count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> open_issues_count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> open_merge_requests_count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> last_activity_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">groups</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_projects</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'gitlab-org'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> include_subgroups </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> last_activity_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 178<p>GitLab connections are Relay-paginated with a hard page size of 100. StackQL walks the <code>pageInfo</code> cursor chain transparently, so the query above returns the whole tree, not the first page.</p> 179<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filters-are-pushed-down">Filters are pushed down<a href="#filters-are-pushed-down" class="hash-l
179ink" aria-label="Direct link to Filters are pushed down" title="Direct link to Filters are pushed down" translate="no">â</a></h2> 180<p>Every scalar or enum argument a GitLab field accepts is a <code>WHERE</code> parameter rendered into the GraphQL query itself, so the API does the filtering. Open merge requests with their approval state and age:</p> 181<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> iid</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">author</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.username'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> author</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> draft</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> approved</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> approvals_left</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> detailed_merge_status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ROUND</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">julianday</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'now'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain"> julianday</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> age_days</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">merge_requests</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_merge_requests</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'gitlab-org/gitlab-runner'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'opened'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> age_days </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 182<p>Cycle time over a window (<code>merged_after</code> is a filter, <code>merged_at</code> a column):</p> 183<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> iid</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ROUND</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">julianday</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">merged_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain"> julianday</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">24</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> hours_to_merge</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">merge_requests</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_merge_requests</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'gitlab-org/gitlab-runner'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'merged'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> merged_after </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'2026-09-01T00:00:00Z'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> merged_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 184<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pipelines-and-runners">Pipelines and runners<a href="#pipelines-and-runners" class="hash-l
184ink" aria-label="Direct link to Pipelines and runners" title="Direct link to Pipelines and runners" translate="no">â</a></h2> 185<p>Pipeline outcomes for a project, and the same across every project in a group by joining the inventory to each project's pipelines (the engine issues one pipelines request per project):</p> 186<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> pipelines</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ROUND</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token function" style="color:rgb(130, 170, 255)">AVG</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">duration</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">60.0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> avg_minutes</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ci</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_pipelines</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'gitlab-org/gitlab-runner'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">GROUP</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> pipelines</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SUM</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">c</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'FAILED'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> failed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ROUND</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">100.0</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SUM</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">c</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'FAILED'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> failure_pct</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">groups</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_projects p</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ci</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">project_pipelines c </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> c</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">GROUP</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> p</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> failure_pct </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 187<p>Runner fleet status for a group, with contact recency (the instance-wide runner listing is administrator-only on gitlab.com; the group and project listings are what a token can read):</p> 188<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain">
188 id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> runner_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> paused</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> contacted_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> upgrade_status</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ci</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_runners</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> contacted_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 189<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vulnerability-reporting">Vulnerability reporting<a href="#vulnerability-reporting" class="hash-link" aria-label="Direct link to Vulnerability reporting" title="Direct link to Vulnerability reporting" translate="no">â</a></h2> 190<p>Findings across a group by severity and state, then the unresolved criticals with their owning project:</p> 191<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> severity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(127, 219, 202)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> findings</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">security</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_vulnerabilities</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">GROUP</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> severity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.full_path'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> report_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> detected_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> web_url</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">security</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_vulnerabilities</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> severity </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'CRITICAL'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'DETECTED'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> detected_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 192<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="membership-and-a-join-across-providers">Membership, and a join across providers<a href="#membership-and-a-join-across-providers" class="hash-l
192ink" aria-label="Direct link to Membership, and a join across providers" title="Direct link to Membership, and a join across providers" translate="no">â</a></h2> 193<p>Group membership with access level is a table:</p> 194<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.username'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> username</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">access_level</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.string_value'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> access_level</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> expires_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">groups</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_group_members</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 195<p>which makes the offboarding question a <code>LEFT JOIN</code> against the identity provider - GitLab members with no active Okta user, computed locally by the SQL engine after <code>registry pull okta</code>:</p> 196<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">m</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.username'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> gitlab_username</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">m</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> gitlab_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> okta_status</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> gitlab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">groups</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_group_members m</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">LEFT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">JOIN</span><span class="token plain"> okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">users o</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> lower</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">profile</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.login'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> lower</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">m</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.username'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">||</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@example.com'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">subdomain </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-okta-org'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> m</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">full_path </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'my-group'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">IS</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">NULL</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">OR</span><span class="token plain"> o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">!=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'ACTIVE'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 197<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-is-built">
197How it is built<a href="#how-it-is-built" class="hash-link" aria-label="Direct link to How it is built" title="Direct link to How it is built" translate="no">â</a></h2> 198<ul> 199<li class="">The selection set for every resource is generated by one policy from the schema: all scalar and enum fields of the node type plus a fixed allowlist of nested identity objects. The query text and the response schema come from the same field list, so <code>DESCRIBE</code> always matches what the wire returns.</li> 200<li class="">GitLab enforces a query complexity limit (200 anonymous, 250 authenticated on gitlab.com). Every generated query is scored against the live limit as a build gate; the one node type that exceeded it (merge requests, at 245) was trimmed by measured per-field cost, protecting the approval and merge-state columns, to 190.</li> 201<li class="">A handful of resolvers time out on large result sets or answer anonymous callers with a server error. Those fields are excluded by a recorded policy entry rather than left to fail whole pages.</li> 202<li class=""><code>all_services.csv</code> in the repository records which schema field backs every resource and method, and regeneration fails when a mapping moves, so resource names stay stable between provider versions.</li> 203</ul> 204<p>Premium-tier fields (issue weight, health status, epics) read back as null on the free tier, and the schema is gitlab.com's, so an older self-managed instance may reject fields it does not serve.</p> 205<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">â</a></h2> 206<p>Pull the provider from the public registry:</p> 207<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull gitlab;</span><br></div></code></pre></div></div> 208<p>Provider docs are at <a href="https://gitlab-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">gitlab-provider.stackql.io</a>. Let us know what you build. Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a>.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/stackql">
208stackql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/gitlab">gitlab</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/provider">provider</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/graphql">graphql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/devops">devops</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/ci-cd">ci-cd</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/security">security</a></li></ul></div></footer></article><article class="margin-bottom--xl"><header><div class="row_cQ7g"><div class="dropdownWrapper_yQfY"><style data-emotion="css el00xt">.css-el00xt{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-el00xt:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-el00xt:hover{background-color:transparent;}}.css-el00xt.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-el00xt:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><style data-emotion="css p95och">.css-p95och{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-p95och::-moz-focus-inner{border-style:none;}.css-p95och.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-p95och{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-p95och:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-p95och:hover{background-color:transparent;}}.css-p95och.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-p95och:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-p95och" tabindex="0" type="button" aria-haspopup="menu" aria-expanded="false">Ask AI about this page<style data-emotion="css hqw408">.css-hqw408{display:inherit;margin-right:-2px;margin-left:8px;}.css-hqw408>*:nth-of-type(1){font-size:18px;}</style><span class="MuiButton-icon MuiButton-endIcon MuiButton-iconSizeSmall css-hqw408"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="KeyboardArrowDownIcon"><path d="M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"></path></svg></span></button><style data-emotion="css 17kn40b">.css-17kn40b .MuiPaper-root{font-family:var(--ifm-font-family-base);
208min-width:200px;}</style><style data-emotion="css 1774aau">.css-1774aau .MuiPaper-root{font-family:var(--ifm-font-family-base);min-width:200px;}</style></div></div><h2 class="title_f1Hy"><a href="/blog/providers/anthropic-providers-update-september-2026">Anthropic Providers Update - September 2026</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-09-15T00:00:00.000Z">September 15, 2026</time> · <!-- -->4 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://www.linkedin.com/in/jeffreyaven/" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Jeffrey Aven</span></a></div><small class="authorTitle_nd0D" title="Technologist and Cloud Consultant">Technologist and Cloud Consultant</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>We've released an update to the <a href="https://anthropic-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL <code>anthropic</code> provider</strong></a>, regenerated from the current Claude API specification. The provider now covers 12 services, 27 resources and 108 operations (up from 11, 26 and 103 in the <a class="" href="/blog/providers/anthropic-providers-update-july-2026">July release</a>). Changes in this release:</p> 209<ul> 210<li class="">A new <code>dreams</code> service</li> 211<li class="">Files and skills moved to their generally available endpoints</li> 212<li class="">Workspace-scoped queries on most operations through the <code>anthropic-workspace-id</code> parameter</li> 213</ul> 214<p>The <a href="https://anthropic-admin-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong><code>anthropic_admin</code></strong></a> provider (6 services, 11 resources, 27 operations) is unchanged in this release.</p> 215<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dreams">Dreams<a href="#dreams" class="hash-link" aria-label="Direct link to Dreams" title="Direct link to Dreams" translate="no">â</a></h2> 216<p>Dreams are asynchronous memory-consolidation jobs: a dream reads a memory store and a set of session transcripts and writes consolidated memories into an output store. The service is a research preview on the Anthropic side, so the endpoints return a 404 for keys that are not enrolled. The <code>dreams</code> resource maps the surface as follows:</p> 217<table><thead><tr><th>Method</th><th>SQL verb</th><th>Operation</th></tr></thead><tbody><tr><td><code>list</code>, <code>get</code></td><td><code>SELECT</code></td><td>list dreams (cursor-paginated, walked automatically), get a dream</td></tr><tr><td><code>create</code></td><td><code>INSERT</code></td><td>start a dream over one or more inputs</td></tr><tr><td><code>cancel</code>, <code>archive</code></td><td><code>EXEC</code></td><td>lifecycle operations</td></tr></tbody></table> 218<p>Dreams and their status as rows:</p> 219<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> JSON_ARRAY_LENGTH</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">inputs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> input_count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> ended_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dreams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dreams</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 220<p>Starting one is an <code>INSERT</code>. <code>inputs</code> and <code>model</code> are JSON values that the provider passes through as structured request fields:</p> 221<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">
221INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dreams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dreams </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">inputs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> model</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> instructions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[{"type": "memory_store", "memory_store_id": "memstore_01..."}]'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"id": "claude-opus-5"}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Consolidate project decisions and open questions.'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">RETURNING</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 222<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="files-and-skills-on-ga-endpoints">Files and skills on GA endpoints<a href="#files-and-skills-on-ga-endpoints" class="hash-link" aria-label="Direct link to Files and skills on GA endpoints" title="Direct link to Files and skills on GA endpoints" translate="no">â</a></h2> 223<p>The Files API and the Skills API are generally available. The <code>files</code> and <code>skills</code> services now call the GA endpoints (<code>/v1/files</code>, <code>/v1/skills</code>) instead of the beta ones, and no longer send an <code>anthropic-beta</code> header. Resources, methods and SQL verbs are unchanged, so existing queries keep working. One behavioural change: the files list is now cursor-paginated and the provider walks the pages automatically.</p> 224<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> filename</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> mime_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> size_bytes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">files</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">files</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain">
224 id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> display_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> JSON_EXTRACT</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.type'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> latest_version_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> updated_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">skills</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">skills</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> updated_at </span><span class="token keyword" style="color:rgb(127, 219, 202)">DESC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 225<p>Skill versions are a separate resource keyed by the skill:</p> 226<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> skill_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">skills</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">versions</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> skill_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'xlsx'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 227<p>Uploading a file or creating a skill version is a multipart request, which SQL cannot express; those two methods remain documented as <code>EXEC</code> operations, and the rest of each resource (list, get, delete) is plain SQL.</p> 228<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="workspace-scoped-queries">Workspace-scoped queries<a href="#workspace-scoped-queries" class="hash-l
228ink" aria-label="Direct link to Workspace-scoped queries" title="Direct link to Workspace-scoped queries" translate="no">â</a></h2> 229<p>The Claude API added an optional <code>anthropic-workspace-id</code> header to most operations, for credentials that can act on more than one workspace. The provider exposes it as an optional parameter on around 110 operations. It is a hyphenated name, so it is double-quoted in SQL:</p> 230<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> display_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">models</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">models</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"anthropic-workspace-id"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'wrkspc_01CZkZaBF1tNoB5wlCeusgy'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 231<p>The workspace ids are the ones the <code>anthropic_admin</code> provider lists:</p> 232<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> archived_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> anthropic_admin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 233<p>A key that belongs to a single workspace can omit the parameter. The API validates the value: a malformed id is rejected with a 400.</p> 234<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="under-the-hood">Under the hood<a href="#under-the-hood" class="hash-link" aria-label="Direct link to Under the hood" title="Direct link to Under the hood" translate="no">â</a></h2> 235<p>The provider is generated from the OpenAPI specification that Anthropic now bundles with its SDKs. That specification grew from 126 to 244 operations since July, and the SDKs' configured endpoint count from 116 to 201. Beyond the changes above, the growth is the beta twins of the GA files and skills endpoints and the Admin API, which the specification now models but which needs an org-scoped admin key and belongs to the <code>anthropic_admin</code> provider. Every operation in the specification is either mapped or listed in a documented exclusion list, and the build fail
235s when the two do not add up.</p> 236<p>Every documented example query runs in the provider's test suite, and each generated docs page now shows the date it was last regenerated.</p> 237<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication">Authentication<a href="#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">â</a></h2> 238<p>Unchanged. The two providers use different key types, which are disjoint by design:</p> 239<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain"># anthropic - workspace-scoped Claude API key</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export ANTHROPIC_API_KEY=sk-ant-api...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"># anthropic_admin - org-scoped Admin API key (created by org admins)</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export ANTHROPIC_ADMIN_KEY=sk-ant-admin...</span><br></div></code></pre></div></div> 240<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">â</a></h2> 241<p>Pull the latest provider from the public registry:</p> 242<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull anthropic;</span><br></div></code></pre></div></div> 243<p>Provider docs, including required parameters and example queries for every resource, are at <a href="https://anthropic-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">anthropic-provider.stackql.io</a> and <a href="https://anthropic-admin-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">anthropic-admin-provider.stackql.io</a>. Visit us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and let us know how you're using it.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/stackql">
243stackql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/anthropic">anthropic</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/claude">claude</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/provider">provider</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/agents">agents</a></li></ul></div></footer></article><article class="margin-bottom--xl"><header><div class="row_cQ7g"><div class="dropdownWrapper_yQfY"><style data-emotion="css el00xt">.css-el00xt{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-el00xt:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-el00xt:hover{background-color:transparent;}}.css-el00xt.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-el00xt:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><style data-emotion="css p95och">.css-p95och{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(25, 118, 210, 0.5);color:#1976d2;text-transform:none;font-family:var(--ifm-font-family-base);font-weight:600;font-size:0.75rem;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);}.css-p95och::-moz-focus-inner{border-style:none;}.css-p95och.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-p95och{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-p95och:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 118, 210, 0.04);border:1px solid #1976d2;}@media (hover: none){.css-p95och:hover{background-color:transparent;}}.css-p95och.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid rgba(0, 0, 0, 0.12);}.css-p95och:hover{border-color:var(--ifm-color-primary);background-color:rgba(0, 65, 101, 0.04);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-p95och" tabindex="0" type="button" aria-haspopup="menu" aria-expanded="false">Ask AI about this page<style data-emotion="css hqw408">.css-hqw408{display:inherit;margin-right:-2px;margin-left:8px;}.css-hqw408>*:nth-of-type(1){font-size:18px;}</style><span class="MuiButton-icon MuiButton-endIcon MuiButton-iconSizeSmall css-hqw408"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="KeyboardArrowDownIcon"><path d="M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"></path></svg></span></button><style data-emotion="css 17kn40b">.css-17kn40b .MuiPaper-root{font-family:var(--ifm-font-family-base);
243min-width:200px;}</style><style data-emotion="css 1774aau">.css-1774aau .MuiPaper-root{font-family:var(--ifm-font-family-base);min-width:200px;}</style></div></div><h2 class="title_f1Hy"><a href="/blog/providers/updated-datadog-provider-available">Datadog Provider - August 2026</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-08-26T00:00:00.000Z">August 26, 2026</time> · <!-- -->6 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://www.linkedin.com/in/jeffreyaven/" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Jeffrey Aven</span></a></div><small class="authorTitle_nd0D" title="Technologist and Cloud Consultant">Technologist and Cloud Consultant</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>We've released an updated <a href="https://datadog-provider.stackql.io" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL Datadog provider</strong></a> covering the Datadog v1 and v2 REST APIs together: <strong>18 services</strong>, <strong>597 resources</strong> and <strong>1658 operations</strong>, up from 16 services and 575 operations in the previous release.</p> 244<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new">What's new<a href="#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">â</a></h2> 245<p>The previous provider was built from the v2 API alone. Datadog's most-used resources - monitors, dashboards, synthetics, SLOs, hosts, log indexes and pipelines - only exist in the v1 API, so this release merges the two specs into one provider. The v2 surface has also grown considerably since the last build. In summary:</p> 246<ul> 247<li class=""><strong>The v1 API</strong>: monitors (list, search, create, replace, validate, delete), dashboards and dashboard lists, synthetics tests (API, browser and mobile), locations, private locations and global variables, SLOs and SLO corrections, hosts, host totals and host tags, notebooks, log indexes and pipelines, the Azure, PagerDuty, Slack and webhook integrations, and usage metering.</li> 248<li class=""><strong>New v2 surfaces</strong>: cases and case projects, on-call schedules, escalation policies and paging, status pages, incident configuration and responders, feature flags, deployment gates, LLM Observability (projects, datasets, experiments, prompts, annotation queues), Fleet Automation, cloud cost budgets, commitments and tag pipelines, security findings automation, static analysis and SCA, agentless scanning, SIEM historical detections, RUM replay and product analytics, reference tables, org groups and personal access tokens, among others.</li> 249<li class=""><strong>Site from the environment</strong>: the provider addresses <code>https://api.{site}</code>, and <code>site</code> is resolved from <code>DD_SITE</code> when it is set (<code>datadoghq.eu</code>, <code>us5.datadoghq.com</code>, <code>ap2.datadoghq.com</code>, ...), the same convention as the Datadog Agent and API clients. Queries carry no site clause; a <code>WHERE site = '...'</code> still wins for one statement.</li> 250<li class=""><strong>Pagination and pushdown</strong>: cursor-paginated lists (audit events, container images, spans, RUM events, CI events, security signals and findings) are traversed transparently, and a SQL <code>LIMIT</code> is sent as the API's page-size parameter.</li> 251<li class=""><strong>snake_case surface</strong>: columns and <code>WHERE</code> / <code>INSERT</code> keys are snake_case throughout; the few camelCase wire names are aliased.</li> 252<li class=""><strong>Terraform-aligned authentication</strong>: <code>DD_API_KEY</code> and <code>DD_APP_KEY</code>, unchanged.</li> 253</ul> 254<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="service-highlights">Service highlights<a href="#service-highlights" class="hash-link" aria-label="Direct link to Service highlights" title="Direct link to Service highlights" translate="no">â</a></h2> 255<table><thead><tr><th>
255Service</th><th style="text-align:right">Resources</th><th style="text-align:right">Operations</th><th>What it covers</th></tr></thead><tbody><tr><td><code>service_management</code></td><td style="text-align:right">82</td><td style="text-align:right">281</td><td>incidents, cases, on-call, SLOs, downtimes, events, status pages, change management, error tracking</td></tr><tr><td><code>security</code></td><td style="text-align:right">93</td><td style="text-align:right">247</td><td>security monitoring rules, signals and suppressions, findings and automation, vulnerabilities, CSM, agentless scanning, static analysis, SIEM historical detections</td></tr><tr><td><code>organization</code></td><td style="text-align:right">85</td><td style="text-align:right">207</td><td>users, roles, permissions, API and application keys, service accounts, teams, org settings, SAML, audit logs, usage</td></tr><tr><td><code>integrations</code></td><td style="text-align:right">59</td><td style="text-align:right">192</td><td>AWS, GCP, Azure, OCI, Jira, ServiceNow, Slack, Microsoft Teams, Google Chat, PagerDuty, Opsgenie, webhooks, Cloudflare, Confluent, Fastly, Okta, reference tables</td></tr><tr><td><code>monitoring</code></td><td style="text-align:right">39</td><td style="text-align:right">100</td><td>monitors, synthetics, monitor policies, notification rules, service checks</td></tr><tr><td><code>digital_experience</code></td><td style="text-align:right">38</td><td style="text-align:right">98</td><td>RUM applications, events, metrics and retention, replay, product analytics, sourcemaps</td></tr><tr><td><code>llm_observability</code></td><td style="text-align:right">37</td><td style="text-align:right">83</td><td>projects, datasets, experiments, prompts, annotation queues, evaluators, Model Lab</td></tr><tr><td><code>cloud_costs</code></td><td style="text-align:right">37</td><td style="text-align:right">73</td><td>budgets, AWS / Azure / GCP / OCI cost configs, commitments, tag pipelines, cost attribution</td></tr><tr><td><code>software_delivery</code></td><td style="text-align:right">20</td><td style="text-align:right">71</td><td>CI pipelines and tests, DORA, deployment gates, workflows, feature flags, code coverage</td></tr><tr><td><code>dashboards</code></td><td style="text-align:right">16</td><td style="text-align:right">61</td><td>dashboards, dashboard lists, powerpacks, notebooks, widgets, annotations, scheduled reports</td></tr><tr><td><code>logs</code></td><td style="text-align:right">14</td><td style="text-align:right">55</td><td>indexes, pipelines, archives, custom destinations, log metrics, restriction queries, observability pipelines</td></tr><tr><td><code>infrastructure</code></td><td style="text-align:right">28</td><td style="text-align:right">47</td><td>hosts and host tags, containers, processes, network devices, app builder, storage management</td></tr><tr><td><code>metrics</code></td><td style="text-align:right">18</td><td style="text-align:right">42</td><td>metrics and metadata, tag configurations, timeseries and scalar queries, datasets, DDSQL</td></tr><tr><td><code>apm</code></td><td style="text-align:right">10</td><td style="text-align:right">27</td><td>retention filters, spans metrics, scorecards, traces</td></tr><tr><td><code>remote_config</code></td><td style="text-align:right">6</td><td style="text-align:right">27</td><td>CSM Threats agent rules and policies, WAF rules and policies</td></tr><tr><td><code>actions</code></td><td style="text-align:right">6</td><td style="text-align:right">23</td><td>action connections, datastores, execution policies</td></tr><tr><td><code>fleet</code></td><td style="text-align:right">6</td><td style="text-align:right">16</td><td>agents, deployments, schedules, tracers</td></tr><tr><td><code>catalog</code></td><td style="text-align:right">3</td><td style="text-align:right">8</td><td>software catalog entities, kinds, relations</td></tr></tbody></table> 256<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication">Authentication<a href="#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">â</a></h2> 257<p>Export an API key and an application key; set <code>DD_SITE</code> if your organization is not on <code>datadoghq.com</code>:</p> 258<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">export DD_API_KEY=...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export DD_APP_KEY=...</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export DD_SITE=datadoghq.eu # optional, defaults to datadoghq.com</span><br></div></code></pre></div></div> 259<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="monitors">
259Monitors<a href="#monitors" class="hash-link" aria-label="Direct link to Monitors" title="Direct link to Monitors" translate="no">â</a></h2> 260<p>Every monitor with its state:</p> 261<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> overall_state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> tags</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 262<p>Only alerting monitors, using the API's own filter:</p> 263<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> overall_state</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> group_states </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'alert'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 264<p>Monitor search, with the same syntax as the Manage Monitors page:</p> 265<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitor_search_results</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> query </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'type:metric status:alert'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 266<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dashboards-slos-and-synthetics">Dashboards, SLOs and synthetics<a href="#dashboards-slos-and-synthetics" class="hash-l
266ink" aria-label="Direct link to Dashboards, SLOs and synthetics" title="Direct link to Dashboards, SLOs and synthetics" translate="no">â</a></h2> 267<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> layout_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> author_handle</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> modified_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dashboards</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dashboards</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> target_threshold</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> timeframe</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_management</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">slos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> public_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> locations</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">synthetics_tests</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 268<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="users-roles-and-keys">
268Users, roles and keys<a href="#users-roles-and-keys" class="hash-link" aria-label="Direct link to Users, roles and keys" title="Direct link to Users, roles and keys" translate="no">â</a></h2> 269<p>v2 resources return the JSON<!-- -->:API<!-- --> row shape - <code>id</code>, <code>type</code>, <code>attributes</code>, <code>relationships</code> - so attributes are one <code>json_extract</code> away. A user audit:</p> 270<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.email'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.status'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.disabled'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> disabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.created_at'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> created_at</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">users</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 271<p>API keys by age, the input to a rotation policy:</p> 272<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain">
272 id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.created_at'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.last4'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> last4</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">api_keys</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">BY</span><span class="token plain"> created_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
273<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="infrastructure-and-logs">Infrastructure and logs<a href="#infrastructure-and-logs" class="hash-link" aria-label="Direct link to Infrastructure and logs" title="Direct link to Infrastructure and logs" translate="no">â</a></h2> 274<p>Hosts reporting to Datadog, and the log indexes with their retention:</p> 275<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> host_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> up</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> is_muted</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> apps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> last_reported_time</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">infrastructure</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">hosts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> num_retention_days</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> daily_limit</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">logs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">indexes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 276<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="audit-log">Audit log<a href="#audit-log" class="hash-link" aria-label="Direct link to Audit log" title="Direct link to Audit log" translate="no">â</a></h2> 277<p>The audit event list is cursor-paginated and takes the time window as a query parameter:</p> 278<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.timestamp'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">timestamp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.attributes.evt.name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> json_extract</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'$.attributes.usr.email'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><span class="token plain"> actor</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">audit_logs</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"filter[from]"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'now-1d'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 279<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-monitoring-rules">Security monitoring rules<a href="#security-monitoring-rules" class="hash-l
279ink" aria-label="Direct link to Security monitoring rules" title="Direct link to Security monitoring rules" translate="no">â</a></h2> 280<p>Which detection rules are enabled, and who last changed them:</p> 281<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> is_enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> is_default</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> updated_at</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> update_author_id</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">security</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring_rules</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> is_default </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 282<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provisioning">Provisioning<a href="#provisioning" class="hash-link" aria-label="Direct link to Provisioning" title="Direct link to Provisioning" translate="no">â</a></h2> 283<p>Mutations use the same SQL grammar. v1 resources take their fields as columns; v2 resources take the JSON<!-- -->:API<!-- --> <code>data</code> document. A monitor end to end - validate the definition, create it, replace it (the v1 monitor API updates with <code>PUT</code>), delete it:</p> 284<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">EXEC</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">validate_monitor</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@type</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'metric alert'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@query</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} > 90'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token variable" style="color:rgb(214, 222, 235)">@name</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'High CPU on prod hosts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">
284INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> message</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'High CPU on prod hosts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'metric alert'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} > 90'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'CPU above 90% on {{host.name}} @slack-ops'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'["team:web", "managed-by:stackql"]'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">REPLACE</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SET</span><span class="token plain"> name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'High CPU on prod hosts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">type</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'metric alert'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"> query </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} > 95'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> monitor_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">12345678</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">DELETE</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitoring</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">monitors</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> monitor_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">12345678</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 285<p>A downtime for a release window, and a role:</p> 286<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">
286INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">service_management</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">downtimes </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"type": "downtime",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "attributes": {"message": "release window", "scope": "env:prod",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "monitor_identifier": {"monitor_tags": ["team:web"]},</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)"> "schedule": {"start": "2026-09-01T22:00:00Z", "end": "2026-09-01T23:00:00Z"}}}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">INTO</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">roles </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SELECT</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"type": "roles", "attributes": {"name": "read-only-auditors"}}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">UPDATE</span><span class="token plain"> datadog</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">roles</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">SET</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">data</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'{"id": "<role-id>", "type": "roles", "attributes": {"name": "auditors"}}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">WHERE</span><span class="token plain"> role_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'<role-id>'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div> 287<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">
287Get started<a href="#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">â</a></h2> 288<p>Pull the provider from the public registry:</p> 289<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull datadog;</span><br></div></code></pre></div></div> 290<p>Provider docs are at <a href="https://datadog-provider.stackql.io" target="_blank" rel="noopener noreferrer" class="">datadog-provider.stackql.io</a>. Let us know what you build. Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a>.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/stackql">
290stackql</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/datadog">datadog</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/provider">provider</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/observability">observability</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/monitors">monitors</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/security">security</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/providers/tags/finops">finops</a></li></ul></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/blog/providers/page/2"><div class="pagination-nav__label">Older entries</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links" style="align-items:flex-start"><div class="col col--6 footer__col"><a class="footerLogoLink_fGS1" href="/"><img src="/img/logo-original.svg" alt="StackQL" class="themedImage_Pn4p themedImage--light_PnYV footer__logo" width="208" height="70"><img src="/img/logo-white.svg" alt="StackQL" class="themedImage_Pn4p themedImage--dark_eYgw footer__logo" width="208" height="70"></a><p class="footer__subtitle" style="margin-top:0;margin-bottom:0.5rem">A new approach to querying and <br>provisioning cloud services.</p><div style="display:flex;gap:1rem;margin-top:1rem;align-items:center"><a href="https://aaif.io/members/" target="_blank" rel="noopener" class="footerLogoLink_fGS1"><img src="/img/aaif_memberbadge_silver.svg" alt="AAIF Member" style="height:90px"></a><a href="https://www.linuxfoundation.org/about/members" target="_blank" rel="noopener" class="footerLogoLink_fGS1"><img src="/img/LF_MemberLevel_silver.svg" alt="Linux Foundation Member" style="height:90px"></a></div></div><div class="col footer__col"><h4 class="footer__title">StackQL</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/">Documentation</a></li><li class="footer__item"><a class="footer__link-item" href="/installing-stackql">Install</a></li><li class="footer__item"><a class="footer__link-item" href="/contact-us">Contact us</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">More</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/providers">Providers</a></li><li class="footer__item"><a class="footer__link-item" href="/stackql-deploy">stackql-deploy</a></li><li class="footer__item"><a class="footer__link-item" href="/blog/product">Product Announcements</a></li><li class="footer__item"><a class="footer__link-item" href="/blog/providers">Provider Announcements</a></li><li class="footer__item"><a class="footer__link-item" href="/blog/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/quick-starts">Quick Starts</a></li></ul></div></div><div class="divider"></div><div class="footer__bottom text--center"><div class="footer__copyright">© 2026 StackQL Studios ABN 65 656 147 054</div></div><div class="footer__bottom text--center"><style data-emotion="css 1uljsrr">.css-1uljsrr{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1uljsrr:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1uljsrr:hover{background-color:transparent;}}.css-1uljsrr.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1w8s6so">.css-1w8s6so{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
290-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1w8s6so::-moz-focus-inner{border-style:none;}.css-1w8s6so.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-1w8s6so{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-1w8s6so:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1w8s6so:hover{background-color:transparent;}}.css-1w8s6so.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><a class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge footerSocialIconButton css-1w8s6so" tabindex="0" href="https://github.com/stackql" target="_blank" rel="noopener"><span></span></a><style data-emotion="css 1uljsrr">.css-1uljsrr{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1uljsrr:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1uljsrr:hover{background-color:transparent;}}.css-1uljsrr.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1w8s6so">.css-1w8s6so{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1w8s6so::-moz-focus-inner{border-style:none;}.css-1w8s6so.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-1w8s6so{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-1w8s6so:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1w8s6so:hover{background-color:transparent;}}.css-1w8s6so.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><a class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge footerSocialIconButton css-1w8s6so" tabindex="0" href="https://twitter.com/stackql" target="_blank" rel="noopener"><span></span></a><style data-emotion="css 1uljsrr">.css-1uljsrr{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1uljsrr:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1uljsrr:hover{background-color:transparent;}}.css-1uljsrr.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1w8s6so">.css-1w8s6so{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
290-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1w8s6so::-moz-focus-inner{border-style:none;}.css-1w8s6so.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-1w8s6so{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-1w8s6so:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1w8s6so:hover{background-color:transparent;}}.css-1w8s6so.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><a class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge footerSocialIconButton css-1w8s6so" tabindex="0" href="https://www.linkedin.com/company/stackql" target="_blank" rel="noopener"><span></span></a><style data-emotion="css 1uljsrr">.css-1uljsrr{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1uljsrr:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1uljsrr:hover{background-color:transparent;}}.css-1uljsrr.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1w8s6so">.css-1w8s6so{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1w8s6so::-moz-focus-inner{border-style:none;}.css-1w8s6so.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-1w8s6so{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-1w8s6so:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1w8s6so:hover{background-color:transparent;}}.css-1w8s6so.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><a class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge footerSocialIconButton css-1w8s6so" tabindex="0" href="https://discord.com/invite/xVXZ9d5NxN" target="_blank" rel="noopener"><span></span></a><style data-emotion="css 1uljsrr">.css-1uljsrr{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1uljsrr:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1uljsrr:hover{background-color:transparent;}}.css-1uljsrr.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1w8s6so">.css-1w8s6so{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
290-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:12px;font-size:1.75rem;}.css-1w8s6so::-moz-focus-inner{border-style:none;}.css-1w8s6so.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-1w8s6so{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-1w8s6so:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1w8s6so:hover{background-color:transparent;}}.css-1w8s6so.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}</style><a class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge footerSocialIconButton css-1w8s6so" tabindex="0" href="https://join.slack.com/t/stackqlcommunity/shared_invite/zt-1cbdq9s5v-CkY65IMAesCgFqjN6FU6hg" target="_blank" rel="noopener"><span></span></a></div></div></footer></div> 291 292</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.