Step-by-step tutorials and best practices for getting the most out of Omni.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Omni Docs","colors":{"primary":"#FF5FA2","light":"#FF5FA2","dark":"#4D122C"},"logo":{"light":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a","dark":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-white.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=18b529bed326b4f1be9d58ac65b9e002"},"favicon":"https://mintcdn.com/omni-e7402367/WTWdmWXPOMD5jOUY/favicon.png?fit=max\u0026auto=format\u0026n=WTWdmWXPOMD5jOUY\u0026q=85\u0026s=775ee4acbc06107599e3471e50161a2b","background":{"color":{"light":"#FCFCF7","dark":"#0e0b0e"}},"navbar":{"links":[{"href":"https://community.omni.co","label":"Community"}],"primary":{"type":"button","label":"Try Omni!","href":"https://omni.co/demo"}},"footer":{},"seo":{"metatags":{"canonical":"https://docs.omni.co"}},"fonts":{"heading":{"family":"Cal Sans","weight":400},"body":{"family":"IBM Plex Sans"}},"integrations":{"ga4":{"measurementId":"G-ZMG0QT2W9L"}},"banner":{"content":"Need help? Get answers from the docs with Omni's in-app AI! Log in to your Omni instance and open the [Omni Agent](/ai/chat) in the sidebar.","dismissible":true},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/omni-e7402367/J1q2UvTSjLHOwJ3G/images/og/og-background.png?fit=max\u0026auto=format\u0026n=J1q2UvTSjLHOwJ3G\u0026q=85\u0026s=63ad1c86bdbf4da4196959c391afb21f","fonts":{"family":"IBM Plex Sans"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"omni-e7402367","hasAudioNarration":false,"actualSubdomain":"omni-e7402367","customDomains":["docs.omni.co"],"gitSource":{"type":"github","owner":"exploreomni","repo":"mintlify-omni","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adccb5975476ff3698df5ab","collectionId":"99562c80-1312-4c38-aab3-b6ff4534ecfb","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adccb5975476ff3698df5ab"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adccb5975476ff3698df5ab","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Docs","count":502},{"language":"default","tag":"Developers","count":367},{"language":"default","tag":"Model data","count":302},{"language":"default","tag":"REST APIs","count":250},{"language":"default","tag":"Parameters","count":187},{"language":"default","tag":"Product updates","count":159},{"language":"default","tag":"Demos","count":155},{"language":"default","tag":"Admin","count":122},{"language":"default","tag":"Visualize \u0026 present","count":99},{"language":"default","tag":"Embedding","count":79}],"searchSettings":{"isFiltersEnabled":true,"maxResults":10}},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":false}},"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"img{border:1px solid;border-color:rgb(var(--gray-200))}.nav-logo,.no-border{border:0}#banner{color:#fcfcf7;font-weight:600}#topbar-cta-button,[data-testid=rss-feed-button]{transition:background-color .2s ease,transform .1s ease}#topbar-cta-button{background-color:#ff5fa2;color:#fcfcf7!important;padding:2px 16px;border-radius:160px;text-decoration:none;font-weight:800;display:inline-block;cursor:pointer}#topbar-cta-button>*{padding-left:7px}#topbar-cta-button *{color:#fcfcf7!important}#topbar-cta-button:hover{background-color:#ff5fa2;transform:translateY(-1px)}#topbar-cta-button:active{transform:translateY(0)}#topbar-cta-button svg{display:none!important}.navbar-link a{border-radius:160px!important}[data-testid=rss-feed-button]{border-color:#ff5fa2!important;color:#ff5fa2!important;border-radius:160px!important;gap:6px}[data-testid=rss-feed-button]::after{content:\"Subscribe\";font-size:14px;font-weight:600}[data-testid=rss-feed-button] svg{stroke:#ff5fa2}[data-testid=rss-feed-button]:hover{background-color:rgba(255,95,162,.05)!important;transform:translateY(-1px)}.dark [data-testid=rss-feed-button]:hover{background-color:rgba(255,95,162,.1)!important}[class*=cursor-copy][class*=max-h-]{max-height:20px!important}:has(>.guide-header){position:relative;max-width:1100px;margin:0 auto;padding:24px 24px 72px calc(200px + 48px + 24px);color:rgb(var(--gray-700))}.dark :has(>.guide-header){color:rgb(var(--gray-400))}.guide-header{position:sticky;top:var(--scroll-mt, 9.5rem);z-index:20;background-color:#fcfcf7;padding:0 0 1px;margin-bottom:35px;box-shadow:0 -10rem 0 10rem #fcfcf7}.dark .guide-header{background-color:#0e0b0e;box-shadow:0 -10rem 0 10rem #0e0b0e}.guide-title{font-size:2.5rem;font-weight:700;color:rgb(var(--gray-900));margin:0;line-height:1.3}.dark .guide-title{color:rgb(var(--gray-50))}.guide-sidebar{position:absolute;left:24px;top:24px;bottom:0;width:200px}.guide-sidebar-content{position:sticky;top:calc(var(--scroll-mt, 9.5rem) + 10px)}.guide-sidebar-back{display:flex;align-items:center;gap:8px;color:rgb(var(--gray-500));text-decoration:none;font-size:14px;font-weight:500;margin-bottom:24px;transition:color .15s ease}.guide-sidebar-back:hover,.guide-sidebar-links a{color:rgb(var(--primary))}.guide-sidebar-section{margin-bottom:20px}.guide-sidebar-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:rgb(var(--gray-500));margin-bottom:6px}.guide-sidebar-category{display:flex;align-items:center;gap:6px;font-size:14px;color:rgb(var(--gray-700));text-transform:capitalize}.dark .guide-sidebar-category{color:rgb(var(--gray-300))}.guide-sidebar-date{font-size:14px;color:rgb(var(--gray-600))}.dark .guide-sidebar-date,.dark .guide-sidebar-progress-text{color:rgb(var(--gray-400))}.guide-sidebar-links{list-style:none;padding:0;margin:0}.guide-sidebar-links li{margin-bottom:6px}.guide-sidebar-progress{display:flex;align-items:center;gap:12px}.guide-mascot{flex-shrink:0}.guide-mascot svg{display:block}.guide-sidebar-progress-text{font-size:14px;font-weight:600;color:rgb(var(--gray-600))}.guide-sidebar-links a{font-size:14px;text-decoration:none}:has(>.guide-header) .guide-sidebar a{border-bottom:none;font-weight:inherit}:has(>.guide-header) a.guide-sidebar-back{color:rgb(var(--gray-500));font-weight:500}:has(>.guide-header) .guide-sidebar-links a,:has(>.guide-header) a.guide-sidebar-back:hover{color:rgb(var(--primary))}:has(>.guide-header) .guide-sidebar-links a:hover{text-decoration:underline}@media (max-width:768px){:has(>.guide-header){padding:24px 24px 72px}.guide-sidebar{position:static;width:100%;margin-bottom:24px}.guide-sidebar-content{position:static;display:flex;flex-wrap:wrap;align-items:center;gap:12px}.guide-sidebar-back{width:100%;margin-bottom:4px}.guide-sidebar-section{margin-bottom:0}.guide-sidebar-section:has(.guide-sidebar-links),.guide-sidebar-section:has(.guide-sidebar-progress){display:none}.guide-sidebar-label{display:none}.guide-sidebar-category,.guide-sidebar-date{font-size:12px;padding:4px 10px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guide-sidebar-category,.dark .guide-sidebar-date{background-color:rgba(255,255,255,.03);color:#faf5f7}.guide-header{position:static;box-shadow:none}.guide-sticky-header{padding:12px 16px}.guide-progress-track{margin:-12px -16px 12px}.guide-sticky-title{font-size:1.5rem}}:has(>.guide-header) h1,:has(>.guide-header) h2,:has(>.guide-header) h3{color:rgb(var(--gray-900))}.dark :has(>.guide-header) a,.dark :has(>.guide-header) h1,.dark :has(>.guide-header) h2,.dark :has(>.guide-header) h3,.dark :has(>.guide-header) strong{color:rgb(var(--gray-50))}:has(>.guide-header) h1{font-size:2.25rem;margin:0 0 16px}:has(>.guide-header) h2{font-size:1.5rem;font-weight:600;margin:32px 0 16px;line-height:1.3}:has(>.guide-header) [data-component-part=step-title]{margin:0 0 16px}:has(>.guide-header) h3{font-size:1.25rem;font-weight:600;margin:24px 0 12px;line-height:1.4}:has(>.guide-header) [data-as=p],:has(>.guide-header) p{display:block;margin:16px 0;line-height:1.7}:has(>.guide-header)>.guide-header+[data-as=p],:has(>.guide-header)>.guide-header+p{margin-top:0}:has(>.guide-header) ol:not(.not-prose),:has(>.guide-header) ul:not(.not-prose){margin:16px 0;padding-left:24px}:has(>.guide-header) ul:not(.not-prose){list-style-type:disc}:has(>.guide-header) ol:not(.not-prose){list-style-type:decimal!important}:has(>.guide-header) :not(.not-prose)>li{margin-bottom:8px;line-height:1.6}:has(>.guide-header) .prose ul:not(.not-prose){list-style-type:none;padding-left:0}:has(>.guide-header) .prose :not(.not-prose)>li{margin-bottom:0}:has(>.guide-header) a{color:#111827;text-decoration:none;font-weight:600;border-bottom:1px solid rgb(var(--primary))}:has(>.guide-header) a:hover{border-bottom-width:2px}:has(>.guide-header) strong,:has(>.guide-header) th{font-weight:600;color:rgb(var(--gray-900))}:has(>.guide-header) code{font-size:.9em}:has(>.guide-header) table{width:100%;border-collapse:collapse;margin:16px 0}:has(>.guide-header) th{text-align:left;padding:8px 16px 8px 0;border-bottom:1px solid rgb(var(--gray-200))}.dark :has(>.guide-header) th{color:rgb(var(--gray-50))}:has(>.guide-header) td{padding:12px 16px 12px 0;border-bottom:1px solid rgb(var(--gray-200));vertical-align:top}.dark :has(>.guide-header) td,.dark :has(>.guide-header) th{border-bottom-color:rgb(var(--gray-700))}:has(>.guide-header) img{margin:16px 0;border-radius:8px}:has(>.guide-header) [data-component-part=card-title]{font-size:1rem!important;margin:4px 0 0!important}:has(>.guide-header) [data-component-part=card-content]{font-size:.875rem!important;line-height:1.5!important}:has(>.guide-header) [data-component-part=card-content] [data-as=p]{font-size:.875rem!important;margin:4px 0!important;line-height:1.5!important}.guides-container{max-width:1200px;margin:0 auto;padding:48px 24px}.guides-title{font-size:2.5rem;font-weight:700;color:#1e191a;margin-bottom:16px}.dark .guides-title{color:#e6e1e2}.guides-description{font-size:1.125rem;color:#1e191a;margin-bottom:32px}.dark .guides-description,.dark .guides-filter-label{color:#cbd5e1}.guides-layout{display:flex;gap:48px}.guides-sidebar{width:220px;flex-shrink:0}.guides-filters{position:sticky;top:100px;max-height:calc(100vh - 124px);overflow-y:auto;scrollbar-width:thin}.guides-filters::-webkit-scrollbar{width:6px}.guides-filters::-webkit-scrollbar-thumb{background:rgba(128,128,128,.35);border-radius:3px}.guides-filter-group{margin-bottom:24px}.guides-filter-label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#1e191a;margin-bottom:8px}.guides-filter-input{width:100%;padding:8px 12px;border-top-left-radius:9999px;border-top-right-radius:9999px;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-color:#e6e1e2;font-size:14px;box-sizing:border-box;background-color:rgba(17,12,14,.03);color:#777274}.dark .guides-filter-input{background-color:rgba(255,255,255,.03);border-color:#334155;color:rgba(255,255,255,.5)}.guides-filter-input:focus{outline:0;border-color:#ff5fa2}.dark .guides-filter-input::placeholder{color:rgba(255,255,255,.5)}.guides-clear-button,.guides-filter-button{width:100%;border:1px solid #e2e8f0;border-radius:160px;color:#334155;font-size:14px;cursor:pointer;transition:all .15s ease}.guides-filter-button{display:block;padding:8px 12px;margin-bottom:4px;background:0 0;text-align:left}.dark .guides-filter-button{color:#cbd5e1;border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px}.guides-filter-button:hover{background-color:#f8fafc}.dark .guides-filter-button:hover{background-color:#0e0b0e;border-color:#ff5fa2}.guides-filter-button.active{border-color:#ff5fa2;background-color:#fff0f6;color:#ff5fa2}.dark .guides-filter-button.active{background-color:rgba(255,95,162,.15)}.guides-clear-button{padding:10px 12px;margin-bottom:16px;background:#f8fafc;font-weight:500}.dark .guides-clear-button{background:#0e0b0e;color:#e2e8f0;border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px}.guides-clear-button:hover{background:#f1f5f9;border-color:#cbd5e1}.dark .guides-clear-button:hover{background:#0e0b0e;border-color:#ff5fa2}.guides-content{flex:1;min-width:0}.guides-results-count{font-size:14px;color:#1e191a;margin-bottom:16px}.dark .guides-results-count{color:#cbd5e1}.guides-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.guides-card{border:1px solid #e2e8f0;border-radius:16px;padding:20px;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:12px;transition:border-color .15s ease,box-shadow .15s ease;background-color:#fcfcf7}.dark .guides-card{border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px;background-color:#0e0b0e}.guides-card:hover{border-color:#ff5fa2;box-shadow:0 2px 8px rgba(0,0,0,.08)}.dark .guides-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.3)}.guides-card-icon{margin-bottom:4px}.guides-card-title{font-size:16px;font-weight:600;color:#1e191a;margin:0;line-height:1.3}.dark .guides-card-title{color:#fcfcf7}.guides-card-description{font-size:16px;color:#575254;margin:0;line-height:1.5;flex-grow:1}.dark .guides-card-description{color:#a6a1a2}.guides-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.guides-card-tag{font-size:12px;padding:2px 8px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guides-card-tag{background-color:rgba(255,255,255,.03);color:#faf5f7}.guides-no-results{text-align:center;padding:48px 24px;color:#1e191a}.dark .guides-no-results{color:#cbd5e1}@media (max-width:768px){.guides-layout{flex-direction:column;gap:24px}.guides-sidebar{width:100%}.guides-filters{position:static;max-height:none;overflow-y:visible}.guides-filter-button{display:inline-block;width:auto;margin-right:8px}}.badge-color{background-color:#ff5fa2;color:#fcfcf7!important}.lib-page{--lib-muted:#575254;color:#1e191a}.dark .lib-page{--lib-muted:#a6a1a2;color:#e6e1e2}.lib-page a{color:#ff5fa2}.lib-card:hover{border-color:#ff5fa2!important}.lib-panel{background-color:#fcfcf7;color:#1e191a}.dark .lib-panel{background-color:#0e0b0e;color:#e6e1e2}.lib-logo-chip{display:inline-flex;align-items:center;justify-content:center;flex:none;overflow:hidden}.dark .lib-logo-chip{padding:3px 5px;border-radius:5px;background-color:#fff}.lib-logo-chip img{border:0;border-radius:0}.endpoint-table{table-layout:fixed}.endpoint-table td:first-child,.endpoint-table th:first-child{width:18rem;min-width:18rem;max-width:18rem}.endpoint-table td:last-child,.endpoint-table th:last-child{width:8rem;min-width:8rem;max-width:8rem}.icon{border:0}.icons{background-color:#000}.dark .icons{background-color:rgb(var(--gray-50))}.icon-position{display:inline;vertical-align:middle}[data-component-part=accordion-icon] svg{display:block!important}.side-by-side{display:flex;align-items:flex-start;gap:1.5rem;margin:1.5rem 0}.side-by-side-reverse{flex-direction:row-reverse}.side-by-side-divider{padding-bottom:1.5rem;border-bottom:1px solid rgb(var(--gray-200))}.dark .side-by-side-divider{border-bottom-color:rgb(var(--gray-700))}.side-by-side-media{flex:0 0 45%;display:flex;justify-content:center}.side-by-side-media img{width:auto;height:auto;max-width:100%;max-height:var(--side-by-side-height, 220px);margin:0}.side-by-side-body{flex:1;min-width:0}.side-by-side-body [data-as=p],.side-by-side-body p{display:block;margin:1rem 0}.side-by-side-body .side-by-side-title{margin:0 0 .5rem;font-weight:600;color:rgb(var(--gray-900))}.dark .side-by-side-body .side-by-side-title{color:rgb(var(--gray-50))}.side-by-side-body>:first-child{margin-top:0}.side-by-side-body>:last-child{margin-bottom:0}@media (max-width:768px){.side-by-side,.side-by-side-reverse{flex-direction:column;align-items:stretch}.side-by-side-media{flex:1 1 auto}}#page-title,.guides-title,:has(>.guide-header) h1{font-weight:400;line-height:1;letter-spacing:0;text-wrap:pretty}#page-title{font-size:2rem}@media (min-width:40rem){#page-title{font-size:2.625rem}}h2,h3,h4,h5,h6{font-family:var(--font-family-body-custom)}.mdx-content :is(h2, h3, h4, h5, h6):not([data-component-part]):not(.not-prose){font-weight:500;line-height:1.15;letter-spacing:0;text-wrap:pretty}.mdx-content h2:not([data-component-part]):not(.not-prose){font-size:1.5rem}"}],"page":{"pagePath":"guides","slug":"/guides","pageMetadata":{"title":"Guides","description":"Step-by-step tutorials and best practices for getting the most out of Omni.","mode":"custom","isLandingPage":"true","href":"/guides/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Step-by-step tutorials and best practices for getting the most out of Omni.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const guides=[{\"title\":`Improving AI answer quality`,\"description\":`Learn practical steps to improve AI answer quality in Omni by optimizing data modeling, testing AI responses, and monitoring usage patterns.`,\"href\":`/guides/ai/improve-ai-answer-quality`,\"tags\":[`ai`]},{\"title\":`Tuning Omni AI for cost and quality`,\"description\":`Balance AI cost and quality for your organization by combining LLM settings and ai_settings parameters into profiles that fit your use cases.`,\"href\":`/guides/ai/tuning-cost-quality`,\"tags\":[`ai`,`modeling`]},{\"title\":`Bulk update model YAML files with the API`,\"description\":`Use a model branch to batch programmatic YAML updates into a single git sync.`,\"href\":`/guides/api/bulk-update-model-yaml`,\"tags\":[`api`,`modeling`]},{\"title\":`Set up connection environments with the API`,\"description\":`Configure dev and prod connection environments with the API.`,\"href\":`/guides/api/connection-environments`,\"tags\":[`api`]},{\"title\":`Build a data lineage integration with the Omni API`,\"description\":`Build OpenMetadata / DataHub integrations using the Omni REST API`,\"href\":`/guides/api/data-lineage-integration`,\"tags\":[`api`,`patterns`]},{\"title\":`Port SQL queries into an Omni workbook via API`,\"description\":`Use a bash script to build Omni tabs and tiles via the Omni API.`,\"href\":`/guides/api/port-sql-queries-omni-api`,\"tags\":[`api`]},{\"title\":`Rotate Git SSH deploy keys with the API`,\"description\":`Use the API to rotate SSH deploy keys without interrupting Git operations.`,\"href\":`/guides/api/rotate-ssh-deploy-keys`,\"tags\":[`git`,`api`]},{\"title\":`Run document queries with the Query API`,\"description\":`Programmatically run document queries with the Omni API.`,\"href\":`/guides/api/run-document-queries`,\"tags\":[`api`]},{\"title\":`Enforce database RBAC in Omni with connection environments`,\"description\":`Use database-level roles to manage data access, audit logging, and resource allocation in Omni.`,\"href\":`/guides/connections/enforce-database-rbac`,\"tags\":[`connections`]},{\"title\":`Filter dashboard charts with calculated fields`,\"description\":`Create a dashboard filter using a calculated field in the underlying query.`,\"href\":`/guides/dashboards/calculated-field-filter`,\"tags\":[`dashboards`,`filters`]},{\"title\":`Dashboard best practices`,\"description\":`Tips and patterns from the Omni team to help you build dashboards your whole org actually wants to use.`,\"href\":`/guides/dashboards/dashboarding-best-practices`,\"tags\":[`dashboards`,`design`,`best practices`]},{\"title\":`Embed dbt platform data health tiles in Omni dashboards and apps`,\"description\":`Embed data health tiles from the dbt platform (formerly dbt Cloud) in Omni dashboards and apps to show data freshness and quality at a glance.`,\"href\":`/guides/dashboards/dbt-data-health-tiles`,\"tags\":[`dashboards`,`dbt`,`apps`]},{\"title\":`Swap dashboard identifiers`,\"description\":`Reuse a documents identifier so an old bookmarked URL opens its replacement instead of the original.`,\"href\":`/guides/dashboards/swap-dashboard-identifiers`,\"tags\":[`dashboards`,`apps`,`sharing`]},{\"title\":`Choosing your deployment`,\"description\":`This guide will help you to identify the right Omni deployment pattern for your environment based on your infrastructure, team structure, and content governance requirements`,\"href\":`/guides/deployment/choosing-your-deployment`,\"tags\":[`deployment`]},{\"title\":`Deploying Omni: Multiple instances across multiple regions`,\"description\":`Manage a full DEV/STAGE/PROD deployment across multiple geographic regions using git follower mode — for enterprise teams with data residency requirements or globally distributed operations`,\"href\":`/guides/deployment/multi-instance-multi-region`,\"tags\":[`deployment`]},{\"title\":`Deploying Omni: Multiple instances (Prod/Stage)`,\"description\":`Set up and manage separate staging and production Omni instances using git follower mode — the recommended pattern for teams that require full environment isolation`,\"href\":`/guides/deployment/multi-instance-prod-stage`,\"tags\":[`deployment`]},{\"title\":`Deploying Omni at scale with shared model extensions`,\"description\":`Learn how to use Shared Model Extensions to manage large Omni deployments across multiple data teams.`,\"href\":`/guides/deployment/scaled-deployments-shared-model-extensions`,\"tags\":[`modeling`,`deployment`]},{\"title\":`Deploying Omni: Single instance with dynamic connections`,\"description\":`Set up and manage Omni in a single instance with dynamic connection environments for development and production database switching`,\"href\":`/guides/deployment/single-instance-dynamic-connections`,\"tags\":[`deployment`]},{\"title\":`Deploying Omni: Single instance deployment with git and dbt`,\"description\":`Set up and manage Omni in a single instance, single connection environment with git version control and dbt integration — the most common Omni deployment pattern.`,\"href\":`/guides/deployment/single-instance-git-dbt`,\"tags\":[`deployment`]},{\"title\":`Connect a chat agent to Omni AI for embed experiences`,\"description\":`Use the Omni AI API or MCP Server to connect a custom chat agent that queries data on behalf of embed users, scoped to each users permissions.`,\"href\":`/guides/embed/ai-chat-agent`,\"tags\":[`embed`,`ai`]},{\"title\":`Embed environment architecture`,\"description\":`How to structure staging and production Omni instances for external embed, including the CI/CD workflow, content promotion, and permission guardrails.`,\"href\":`/guides/embed/embed-development-production-setup`,\"tags\":[`embed`]},{\"title\":`Embedding Omni into internal applications`,\"description\":`Embed Omni into internal apps such as wikis, Salesforce, Notion, or any other website that supports iframes.`,\"href\":`/guides/embed/omni-in-internal-app`,\"tags\":[`embed`]},{\"title\":`Embedding Omni in your Notion instance`,\"description\":`Embed Omni dashboards in Notion documents using iframes.`,\"href\":`/guides/embed/omni-in-notion`,\"tags\":[`embed`]},{\"title\":`Embedding Omni in your Salesforce instance`,\"description\":`Embed static and dynamic Omni dashboards in Salesforce using Visualforce pages and tabs.`,\"href\":`/guides/embed/omni-in-salesforce`,\"tags\":[`embed`]},{\"title\":`Triage Failed to fetch browser errors`,\"description\":`Diagnose and resolve Failed to fetch browser errors caused by extensions, firewalls, proxies, or VPNs.`,\"href\":`/guides/errors/failed-to-fetch`,\"tags\":[`errors`]},{\"title\":`Resolve Join fans out data without primary key errors`,\"description\":`Learn to account for fan out in table joins.`,\"href\":`/guides/errors/fan-out-without-pk`,\"tags\":[`errors`]},{\"title\":`Migrating Looker dashboards to Omni`,\"description\":`Programmatically migrate Looker dashboards to Omni with Python, agent skills, and the Omni CLIs.`,\"href\":`/guides/migrations/looker-to-omni-skill`,\"tags\":[`migration`]},{\"title\":`Set up a custom calendar`,\"description\":`Group, filter, and compare dates by your own fiscal periods, such as a retail 4-5-4 calendar.`,\"href\":`/guides/modeling/custom-calendars`,\"tags\":[`modeling`]},{\"title\":`Improving date flexibility with templated filters`,\"description\":`A guide to going beyond the out of the box controls to give users more flexibility to manipulate dates by utilizing templated filters.`,\"href\":`/guides/modeling/date-flexibility-templated-filters`,\"tags\":[`modeling`]},{\"title\":`Customizing filter suggestions`,\"description\":`Learn where filter suggestion values come from, and how to change their source, faceting, and caching behavior.`,\"href\":`/guides/modeling/filter-suggestions`,\"tags\":[`modeling`]},{\"title\":`Count GA4 events exactly, including today`,\"description\":`Use a SQL view that reads intraday GA4 tables only for days with no daily export yet, so no day is counted twice.`,\"href\":`/guides/modeling/ga4-exact-counts-with-intraday`,\"tags\":[`modeling`]},{\"title\":`Join to the same table twice`,\"description\":`Use aliases to build tables named with language already familiar to your users.`,\"href\":`/guides/modeling/join-to-same-table`,\"tags\":[`modeling`]},{\"title\":`Local development with the model editor CLI`,\"description\":`Edit Omni model YAML files locally in your preferred editor with real-time sync back to Omni.`,\"href\":`/guides/modeling/local-development`,\"tags\":[`modeling`,`ai`]},{\"title\":`Organize fields with nested groups`,\"description\":`Keep workbook field browsers navigable by grouping related fields.`,\"href\":`/guides/modeling/nested-field-groups`,\"tags\":[`modeling`]},{\"title\":`Preview dbt changes in Omni before merging to production`,\"description\":`Preview dbt model changes, including net-new tables and views, in an Omni development environment before merging to production.`,\"href\":`/guides/modeling/preview-dbt-changes`,\"tags\":[`modeling`,`dbt`]},{\"title\":`Push Omni topics to Databricks as metric views`,\"description\":`Use the Omni Python SDK to generate Databricks metric view DDL from an Omni topic.`,\"href\":`/guides/modeling/push-to-databricks-metric-views`,\"tags\":[`modeling`]},{\"title\":`Safely rename a git-connected shared model`,\"description\":`Rename a git-connected shared models display name without breaking its git sync folder or losing synced files.`,\"href\":`/guides/modeling/rename-git-connected-shared-model`,\"tags\":[`modeling`,`git`]},{\"title\":`Apply a filter to a single measure`,\"description\":`Add a filter to just one measure in a given query.`,\"href\":`/guides/modeling/single-field-filter`,\"tags\":[`modeling`]},{\"title\":`Using Level of Detail functions for cohorting analysis`,\"description\":`Utilize Level of Detail fields to create a cohort analysis for determining how different cohorts of user perform over time.`,\"href\":`/guides/patterns/build-cohort-analysis-using-level-of-detail`,\"tags\":[`patterns`]},{\"title\":`Using AI to build a cohort analysis with month offset`,\"description\":`Use the Omni Agent to create a cohort analysis that tracks user behavior over time using monthly offsets.`,\"href\":`/guides/patterns/cohort-analysis-month-offset-ai`,\"tags\":[`patterns`]},{\"title\":`Building a dynamic pivot query view`,\"description\":`Build a query view that cross-joins sparse key-value data so every entity has a row for every attribute, then exposes it as a pivotable query view.`,\"href\":`/guides/patterns/dynamic-pivot-query-view`,\"tags\":[`patterns`,`modeling`]},{\"title\":`Choosing between LOD fields, window functions, CTEs, and Excel`,\"description\":`Compare Omni LOD fields, SQL window functions, CTEs, and Excel for multi-level aggregation and cohort analysis.`,\"href\":`/guides/patterns/level-of-detail-build-comparison`,\"tags\":[`patterns`]},{\"title\":`Report opening and closing balances from a ledger`,\"description\":`Turn a transactional ledger into opening, closing, and movement balances that stay correct across any dimension, using a daily snapshot and omni_dimensionalize.`,\"href\":`/guides/patterns/opening-closing-balances`,\"tags\":[`patterns`]},{\"title\":`Optimizing AI context for fintech and banking`,\"description\":`A hands-on guide to configuring AI context at the model, topic, and view levels using a fintech example.`,\"href\":`/guides/patterns/optimizing-ai-context-for-fintech`,\"tags\":[`patterns`,`ai`]},{\"title\":`Optimizing AI context for retail and ecommerce`,\"description\":`A hands-on guide to configuring AI context at the model, topic, and view levels using a retail and ecommerce example.`,\"href\":`/guides/patterns/optimizing-ai-context-for-retail-and-ecommerce`,\"tags\":[`patterns`,`ai`]},{\"title\":`Optimizing AI context for SaaS and sales operations`,\"description\":`A hands-on guide to configuring AI context at the model, topic, and view levels using a SaaS and Salesforce example.`,\"href\":`/guides/patterns/optimizing-ai-context-for-saas-and-sales-operations`,\"tags\":[`patterns`,`ai`]},{\"title\":`Optimizing AI context for support operations`,\"description\":`Configure AI context across model, topic, and view levels to optimize Omnis AI for support operations.`,\"href\":`/guides/patterns/optimizing-ai-context-for-support-operations`,\"tags\":[`patterns`,`ai`]},{\"title\":`Optimizing AI context for Media and AdTech`,\"description\":`A hands-on guide to configuring AI context at the model, topic, and view levels using a Media and AdTech example.`,\"href\":`/guides/patterns/optimizing-ai-context-media-and-adtech`,\"tags\":[`patterns`,`ai`]},{\"title\":`Use public images in Omni content and AI branding`,\"description\":`Customize your Omni content and AI agent branding with publicly accessible images.`,\"href\":`/guides/patterns/public-image-urls`,\"tags\":[`patterns`,`ai`,`design`]},{\"title\":`Building a basic cohort analysis with pivots`,\"description\":`Build a cohort analysis using pivots in Omni to track user retention, engagement, and behavior over time.`,\"href\":`/guides/patterns/simple-cohort-analysis-pivot`,\"tags\":[`patterns`]},{\"title\":`Cohort analysis using a thin spine`,\"description\":`Build cohort analyses using thin dimensional spines.`,\"href\":`/guides/patterns/spine-cohort-analysis`,\"tags\":[`patterns`]},{\"title\":`Thin dimensional spine for multi-fact event analysis`,\"description\":`Analyze multiple event streams together without fanout using a thin dimensional spine.`,\"href\":`/guides/patterns/thin-dimension-spine`,\"tags\":[`patterns`]},{\"title\":`Add links to visualizations`,\"description\":`Encourage self-service data exploration by adding links to other dashboards to your visualizations.`,\"href\":`/guides/visualizations/add-links`,\"tags\":[`visualizations`]},{\"title\":`Combine GeoJSON files with AI to build custom region maps`,\"description\":`Merge separate GeoJSON boundary files with an AI coding tool to build region maps that span geographies Omni doesnt support out of the box.`,\"href\":`/guides/visualizations/combine-geojson-files-with-ai`,\"tags\":[`visualizations`,`maps`,`ai`]},{\"title\":`Customize drill fields`,\"description\":`Curate the columns displayed to users when drilling.`,\"href\":`/guides/workbooks/custom-drill-fields`,\"tags\":[`workbooks`]},{\"title\":`Point-in-time snapshots with parameters`,\"description\":`How to use Mustache syntax to dynamically modify a query view`,\"href\":`/guides/workbooks/snapshots-with-parameters`,\"tags\":[`workbooks`]}];const categoryIcons={\"administration\":`lock`,\"api\":`terminal`,\"connections\":`database`,\"dashboards\":`table-columns`,\"embed\":`code`,\"errors\":`exclamation`,\"migration\":`angles-right`,\"modeling\":`wrench`,\"patterns\":`plus`,\"schedules \u0026 alerts\":`envelope`,\"visualizations\":`chart-column`,\"workbooks\":`book`};const GuidesFilter=({guides,categoryIcons})=>{const _components={a:`a`,..._provideComponents()},{Icon}=_components;if(!Icon)_missingMdxReference(`Icon`,true);const getIconForGuide=guide=>{const category=guide.tags.find(tag=>categoryIcons[tag.toLowerCase()]);return category?categoryIcons[category.toLowerCase()]:`book`};const allTags=[...new Set(guides.flatMap(g=>g.tags))].sort();const getInitialState=()=>{if(typeof window===`undefined`)return{search:``,tags:[]};const params=new URLSearchParams(window.location.search);const tagParam=params.get(`tags`);const requestedTags=tagParam?tagParam.split(`,`).map(t=>t.trim().toLowerCase()):[];const tags=allTags.filter(tag=>requestedTags.includes(tag.toLowerCase()));return{search:params.get(`search`)||``,tags}};const initialState=getInitialState();const[search,setSearch]=React.useState(initialState.search);const[selectedTags,setSelectedTags]=React.useState(initialState.tags);React.useEffect(()=>{if(typeof window===`undefined`)return;const params=new URLSearchParams(window.location.search);if(search)params.set(`search`,search);else params.delete(`search`);if(selectedTags.length>0)params.set(`tags`,selectedTags.join(`,`));else params.delete(`tags`);const query=params.toString();const newUrl=`${window.location.pathname}${query?`?${query}`:``}${window.location.hash}`;window.history.replaceState(null,``,newUrl)},[search,selectedTags]);const toggleTag=tag=>{setSelectedTags(prev=>prev.includes(tag)?prev.filter(t=>t!==tag):[...prev,tag])};const filteredGuides=React.useMemo(()=>{return guides.filter(guide=>{if(search){const searchLower=search.toLowerCase();const matchesSearch=guide.title.toLowerCase().includes(searchLower)||guide.description.toLowerCase().includes(searchLower)||guide.tags.some(tag=>tag.toLowerCase().includes(searchLower));if(!matchesSearch)return false}if(selectedTags.length>0\u0026\u0026!selectedTags.some(tag=>guide.tags.includes(tag)))return false;return true})},[search,selectedTags]);const hasActiveFilters=search||selectedTags.length>0;const clearFilters=()=>{setSearch(``);setSelectedTags([])};return _jsxs(`div`,{className:`guides-layout`,children:[_jsx(`aside`,{className:`guides-sidebar`,children:_jsxs(`div`,{className:`guides-filters`,children:[hasActiveFilters\u0026\u0026_jsx(`button`,{onClick:clearFilters,className:`guides-clear-button`,children:`Clear all filters`}),_jsxs(`div`,{className:`guides-filter-group`,children:[_jsx(`label`,{className:`guides-filter-label`,children:`Search`}),_jsx(`input`,{type:`text`,placeholder:`Search guides...`,value:search,onChange:e=>setSearch(e.target.value),className:`guides-filter-input`})]}),_jsxs(`div`,{className:`guides-filter-group`,children:[_jsx(`label`,{className:`guides-filter-label`,children:`Topics`}),allTags.map(tag=>_jsx(`button`,{onClick:()=>toggleTag(tag),className:selectedTags.includes(tag)?`guides-filter-button active`:`guides-filter-button`,children:tag},tag))]})]})}),_jsxs(`main`,{className:`guides-content`,children:[_jsxs(`div`,{className:`guides-results-count`,children:[filteredGuides.length,` `,filteredGuides.length===1?`guide`:`guides`]}),filteredGuides.length>0?_jsx(`div`,{className:`guides-grid`,children:filteredGuides.map(guide=>_jsxs(_components.a,{href:guide.href,className:`guides-card`,children:[_jsx(`div`,{className:`guides-card-icon`,children:_jsx(Icon,{icon:getIconForGuide(guide),iconType:`solid`,color:`#FF5FA2`,size:24})}),_jsx(`h3`,{className:`guides-card-title`,children:guide.title}),guide.description\u0026\u0026_jsx(`p`,{className:`guides-card-description`,children:guide.description}),guide.tags.length>0\u0026\u0026_jsx(`div`,{className:`guides-card-meta`,children:guide.tags.slice(0,3).map(tag=>_jsx(`span`,{className:`guides-card-tag`,children:tag},tag))})]},guide.href))}):_jsxs(`div`,{className:`guides-no-results`,children:[_jsx(`p`,{children:`No guides match your filters.`}),_jsx(`button`,{onClick:clearFilters,className:`guides-clear-button`,children:`Clear filters`})]})]})]})};function _createMdxContent(props){const _components={p:`p`,..._provideComponents(),...props.components},{_MdxComponentBoundary}=_components;if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(`div`,{className:`guides-container`,children:[_jsx(`h1`,{className:`guides-title`,children:`Guides`}),_jsx(`p`,{className:`guides-description`,children:_jsx(_components.p,{children:`Step-by-step tutorials and best practices for getting the most out of Omni.`})}),_jsx(_MdxComponentBoundary,{name:`GuidesFilter`,children:_jsx(GuidesFilter,{guides,categoryIcons})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{guides,categoryIcons,GuidesFilter,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Guides","description":"Step-by-step tutorials and best practices for getting the most out of Omni.","mode":"custom","isLandingPage":"true","href":"/guides/index"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[122,18479,"undefined;const categoryIcons=undefined;const GuidesFilter=()=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"subdomain":"omni-e7402367","siteName":"Omni Docs","title":"Guides - Omni Docs","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"manual"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T10:14:18.072Z","originalFileLocation":"guides/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Step-by-step tutorials and best practices for getting the most out of Omni.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Guides - Omni Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Step-by-step tutorials and best practices for getting the most out of Omni.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Omni Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.omni.co/guides\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Guides\u0026amp;description=Step-by-step+tutorials+and+best+practices+for+getting+the+most+out+of+Omni.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=4e7eb56fc72900f8ce7bea1dc996d7b8eccc35b8265fdd4005725b09157d7037\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Guides - Omni Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Step-by-step tutorials and best practices for getting the most out of Omni.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Guides\u0026amp;description=Step-by-step+tutorials+and+best+practices+for+getting+the+most+out+of+Omni.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=4e7eb56fc72900f8ce7bea1dc996d7b8eccc35b8265fdd4005725b09157d7037\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF5FA2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.omni.co/guides\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.omni.co/#organization\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.omni.co#website\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.omni.co/guides#webpage\",\"url\":\"https://docs.omni.co/guides\",\"name\":\"Guides\",\"description\":\"Step-by-step tutorials and best practices for getting the most out of Omni.\",\"dateModified\":\"2026-10-23T10:14:18.072Z\",\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.omni.co/guides#article\",\"headline\":\"Guides\",\"name\":\"Guides\",\"description\":\"Step-by-step tutorials and best practices for getting the most out of Omni.\",\"url\":\"https://docs.omni.co/guides\",\"mainEntityOfPage\":{\"@id\":\"https://docs.omni.co/guides#webpage\"},\"dateModified\":\"2026-10-23T10:14:18.072Z\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Omni Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Omni Docs","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":""}]},{"tab":"Admin","pages":[{"title":"Admin","href":"/administration"}]},{"tab":"Guides","pages":[{"title":"Guides","mode":"custom","href":"/guides"},{"title":"Improving AI answer quality","description":"Learn practical steps to improve AI answer quality in Omni by optimizing data modeling, testing AI responses, and monitoring usage patterns.","mode":"custom","href":"/guides/ai/improve-ai-answer-quality"},{"title":"Tuning Omni AI for cost and quality","mode":"custom","href":"/guides/ai/tuning-cost-quality"},{"title":"Bulk update model YAML files with the API","mode":"custom","href":"/guides/api/bulk-update-model-yaml"},{"title":"Set up connection environments with the API","mode":"custom","href":"/guides/api/connection-environments"},{"title":"Build a data lineage integration with the Omni API","mode":"custom","href":"/guides/api/data-lineage-integration"},{"title":"Port SQL queries into an Omni workbook via API","mode":"custom","href":"/guides/api/port-sql-queries-omni-api"},{"title":"Rotate Git SSH deploy keys with the API","mode":"custom","href":"/guides/api/rotate-ssh-deploy-keys"},{"title":"Run document queries with the Query API","mode":"custom","href":"/guides/api/run-document-queries"},{"title":"Enforce database RBAC in Omni with connection environments","mode":"custom","href":"/guides/connections/enforce-database-rbac"},{"title":"Filter dashboard charts with calculated fields","mode":"custom","href":"/guides/dashboards/calculated-field-filter"},{"title":"Dashboard best practices","mode":"custom","href":"/guides/dashboards/dashboarding-best-practices"},{"title":"Embed dbt platform data health tiles in Omni dashboards and apps","mode":"custom","href":"/guides/dashboards/dbt-data-health-tiles"},{"title":"Swap dashboard identifiers","mode":"custom","href":"/guides/dashboards/swap-dashboard-identifiers"},{"title":"Choosing your deployment","mode":"custom","href":"/guides/deployment/choosing-your-deployment"},{"title":"Deploying Omni: Multiple instances across multiple regions","mode":"custom","href":"/guides/deployment/multi-instance-multi-region"},{"title":"Deploying Omni: Multiple instances (Prod/Stage)","mode":"custom","href":"/guides/deployment/multi-instance-prod-stage"},{"title":"Deploying Omni at scale with shared model extensions","mode":"custom","href":"/guides/deployment/scaled-deployments-shared-model-extensions"},{"title":"Deploying Omni: Single instance with dynamic connections","href":"/guides/deployment/single-instance-dynamic-connections"},{"title":"Deploying Omni: Single instance deployment with git and dbt","mode":"custom","href":"/guides/deployment/single-instance-git-dbt"},{"title":"Connect a chat agent to Omni AI for embed experiences","mode":"custom","href":"/guides/embed/ai-chat-agent"},{"title":"Embed environment architecture","mode":"custom","href":"/guides/embed/embed-development-production-setup"},{"title":"Embedding Omni into internal applications","mode":"custom","href":"/guides/embed/omni-in-internal-app"},{"title":"Embedding Omni in your Notion instance","mode":"custom","href":"/guides/embed/omni-in-notion"},{"title":"Embedding Omni in your Salesforce instance","mode":"custom","href":"/guides/embed/omni-in-salesforce"},{"title":"Triage 'Failed to fetch' browser errors","mode":"custom","href":"/guides/errors/failed-to-fetch"},{"title":"Resolve 'Join fans out data without primary key' errors","mode":"custom","href":"/guides/errors/fan-out-without-pk"},{"title":"Migrating Looker dashboards to Omni","mode":"custom","href":"/guides/migrations/looker-to-omni-skill"},{"title":"Set up a custom calendar","mode":"custom","href":"/guides/modeling/custom-calendars"},{"title":"Improving date flexibility with templated filters","mode":"custom","href":"/guides/modeling/date-flexibility-templated-filters"},{"title":"Customizing filter suggestions","mode":"custom","href":"/guides/modeling/filter-suggestions"},{"title":"Count GA4 events exactly, including today","mode":"custom","href":"/guides/modeling/ga4-exact-counts-with-intraday"},{"title":"Join to the same table twice","mode":"custom","href":"/guides/modeling/join-to-same-table"},{"title":"Local development with the model editor CLI","mode":"custom","href":"/guides/modeling/local-development"},{"title":"Organize fields with nested groups","mode":"custom","href":"/guides/modeling/nested-field-groups"},{"title":"Preview dbt changes in Omni before merging to production","mode":"custom","href":"/guides/modeling/preview-dbt-changes"},{"title":"Push Omni topics to Databricks as metric views","mode":"custom","href":"/guides/modeling/push-to-databricks-metric-views"},{"title":"Safely rename a git-connected shared model","mode":"custom","href":"/guides/modeling/rename-git-connected-shared-model"},{"title":"Apply a filter to a single measure","mode":"custom","href":"/guides/modeling/single-field-filter"},{"title":"Using Level of Detail functions for cohorting analysis","mode":"custom","href":"/guides/patterns/build-cohort-analysis-using-level-of-detail"},{"title":"Using AI to build a cohort analysis with month offset","mode":"custom","href":"/guides/patterns/cohort-analysis-month-offset-ai"},{"title":"Building a dynamic pivot query view","mode":"custom","href":"/guides/patterns/dynamic-pivot-query-view"},{"title":"Choosing between LOD fields, window functions, CTEs, and Excel","mode":"custom","href":"/guides/patterns/level-of-detail-build-comparison"},{"title":"Report opening and closing balances from a ledger","mode":"custom","href":"/guides/patterns/opening-closing-balances"},{"title":"Optimizing AI context for fintech and banking","mode":"custom","href":"/guides/patterns/optimizing-ai-context-for-fintech"},{"title":"Optimizing AI context for retail and ecommerce","mode":"custom","href":"/guides/patterns/optimizing-ai-context-for-retail-and-ecommerce"},{"title":"Optimizing AI context for SaaS and sales operations","mode":"custom","href":"/guides/patterns/optimizing-ai-context-for-saas-and-sales-operations"},{"title":"Optimizing AI context for support operations","mode":"custom","href":"/guides/patterns/optimizing-ai-context-for-support-operations"},{"title":"Optimizing AI context for Media and AdTech","mode":"custom","href":"/guides/patterns/optimizing-ai-context-media-and-adtech"},{"title":"Use public images in Omni content and AI branding","mode":"custom","href":"/guides/patterns/public-image-urls"},{"title":"Building a basic cohort analysis with pivots","mode":"custom","href":"/guides/patterns/simple-cohort-analysis-pivot"},{"title":"Cohort analysis using a thin spine","mode":"custom","href":"/guides/patterns/spine-cohort-analysis"},{"title":"Thin dimensional spine for multi-fact event analysis","mode":"custom","href":"/guides/patterns/thin-dimension-spine"},{"title":"Add links to visualizations","mode":"custom","href":"/guides/visualizations/add-links"},{"title":"Combine GeoJSON files with AI to build custom region maps","mode":"custom","href":"/guides/visualizations/combine-geojson-files-with-ai"},{"title":"Customize drill fields","mode":"custom","href":"/guides/workbooks/custom-drill-fields"},{"title":"Point-in-time snapshots with parameters","mode":"custom","href":"/guides/workbooks/snapshots-with-parameters"}]},{"tab":"Library","pages":[{"title":"Library","href":"/library"}]},{"tab":"Developers","menu":[{"item":"REST APIs","icon":"cloud","description":"Programmatically interact with Omni","pages":[{"title":"REST APIs","href":"/api"}]},{"item":"Embedding","icon":"chart-column","description":"Embed Omni's analytics \u0026 AI in apps","pages":[{"title":"Embedding","href":"/embed"}]},{"item":"CLI","icon":"terminal","description":"Interact with Omni APIs from the terminal","pages":[{"title":"CLI","href":"/developers/cli"}]},{"item":"Agent skills","icon":"robot","description":"Bring Omni workflows into your agent environment","pages":[{"title":"Agent skills","href":"/developers/agent-skills"}]}],"pages":[{"title":"Developers","href":"/api"}]},{"tab":"Product updates","menu":[{"item":"Demos","icon":"rocket","description":"Weekly updates of upcoming and experimental features","pages":[{"title":"Demos","href":"/demos"}]},{"item":"Changelog","icon":"file-lines","description":"New features, improvements, and bug fixes","pages":[{"title":"Changelog","href":"/changelog"}]}],"pages":[{"title":"Product updates","href":"/demos"}]}]},"title":"Guides - Omni Docs","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["10e4515597"],"chunks":["BannerMarkdown-cfwQA_n9.js","dist-2LoAhjKH.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-DZLdJUrt.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}