Actions in Dimension come in two forms — Webhooks and Emails — but the destinations you’ll point them at follow predictable patterns. Here are the integration patterns we see most often.
Webhook patterns
Slack
Microsoft Teams
Jira
ServiceNow
PagerDuty
Custom internal API
Step 1 — In Slack, create an Incoming Webhook for the channel you want messages to land in.Step 2 — In Dimension, create a Webhook Action and tell the Composer:
"Create a webhook action that posts to Slack. The URL is https://hooks.slack.com/services/T00/B00/xxx. The payload format should be Slack Block Kit."
Composer will scaffold a Block Kit payload that you can refine with prompts like:
"Add a button to the message that opens the device's detail page in our portal."
Microsoft Teams Incoming Webhooks use a different payload shape (Adaptive Cards).
"Create a webhook action that posts to Microsoft Teams using an Adaptive Card. URL: <your-teams-webhook-url>."
Composer handles the Card schema. Reference fields with {device.name}-style variables.
Jira REST API for creating issues:
"Create a webhook action that creates a Jira issue. URL: https://yourorg.atlassian.net/rest/api/2/issue. Auth: Basic with the API token below. Project key: SEC. Issue type: Bug."
Composer will prompt for the API token securely (it won’t be visible in the chat history).
ServiceNow Table API for creating incidents:
"Create a webhook action that POSTs to the ServiceNow Incident table. URL: https://yourorg.service-now.com/api/now/table/incident. Auth: OAuth2 with refresh token."
PagerDuty Events API v2 for paging on-call:
"Create a webhook action that triggers a PagerDuty incident via Events API v2. Routing key: <your-routing-key>. Severity should map from the device's risk level."
Any HTTPS endpoint inside your network that you can reach from Dimension.
"Create a webhook action that POSTs to https://soar.internal.example.com/incidents. Auth: Bearer token. JSON body."
For self-hosted endpoints, see Architecture for source IPs and network requirements.
Email patterns
Email Action recipients are tenant-user-only. The Recipients field on an Email Action is an autocomplete of users in your ThreatAware tenant — you cannot send to arbitrary email addresses or distribution lists. If you need to email external parties (customers, partners, auditors), wire a Webhook Action to an email API (SendGrid, Postmark, AWS SES) instead.
Notify a single tenant user
Notify the device owner (if a tenant user)
Internal digest to a security DL
External recipients via Webhook
"Create an email action that emails the on-call security analyst. Recipients: alice@yourorg.com (a tenant user). Subject: 'Critical risk detected — {device.name}'. Body: include the failing controls and a link to the device."
Works only when device owners are themselves ThreatAware tenant users — typical for internal IT teams managing employee assets.
"Create an email action that emails {device.owner.email}. Subject: 'Action required: {device.name}'. Body: explain what they need to do, with a link to the device."
If the owner is not a tenant user, switch to a Webhook Action against your transactional email provider (SendGrid, Postmark, AWS SES).
A digest delivered to multiple tenant users — pick the actual user records from the Recipients picker:
"Create an email action for weekly digests. Recipients: jane@yourorg.com, joe@yourorg.com, ciso@yourorg.com (all tenant users). Subject: 'Weekly Security Summary'. Body: structured HTML with metrics, top risks, top compliance issues."
Combine with auto-refresh in a Studio app to fire weekly.
To email someone who isn’t a ThreatAware user:
"Create a webhook action that sends an email via SendGrid. URL: https://api.sendgrid.com/v3/mail/send. Auth: Bearer token (SendGrid API key). Body: SendGrid v3 JSON with {{input.to}}, {{input.subject}}, {{input.body}} interpolation."
Same approach works for Postmark, AWS SES, Mailgun, or any other email API.
Configuration tips
Don't put secrets in the prompt
Composer prompts for secrets (API keys, OAuth client secrets) separately. They aren’t stored in the Composer chat history.
Use variables for everything dynamic
{device.name}, {user.email}, {trigger.timestamp}, {app.name}, etc. — Composer recognises these and wires them up.
Test against a sandbox first
For webhooks, requestbin.com lets you inspect payloads before pointing the Action at production.
Audit log catches platform changes
Configuration changes show up in Settings → Logs → Audit Log. Outbound requests show up in Settings → Logs → Request History.
See also
Actions Overview
Creating a Webhook or Email Action from scratch
Triggers & Invocation
The three invocation patterns Studio apps use
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dimension Docs","description":"Dimension by ThreatAware is an AI-powered workspace for building security apps on your own data: connect Data Feeds, build Studio apps in conversation or from your AI assistant over MCP, and automate with Actions.","colors":{"primary":"#2E6B3E","light":"#9FD3A8","dark":"#23502F"},"logo":{"light":"https://mintcdn.com/threataware-labs/-q3Ba3EY-TzmdXHi/logo/Dimension_Logo_Primary_Deep_Forest.svg?fit=max\u0026auto=format\u0026n=-q3Ba3EY-TzmdXHi\u0026q=85\u0026s=3d8688bbca4e52734dc1b24daba2a653","dark":"https://mintcdn.com/threataware-labs/-q3Ba3EY-TzmdXHi/logo/Dimension_Logo_Primary_Cloud.svg?fit=max\u0026auto=format\u0026n=-q3Ba3EY-TzmdXHi\u0026q=85\u0026s=fa4888b307d5f56a7a21681459321208"},"favicon":{"light":"https://mintcdn.com/threataware-labs/gHBPDc1nWIuNETeX/logo/dimension_favicon_v5.png?fit=max\u0026auto=format\u0026n=gHBPDc1nWIuNETeX\u0026q=85\u0026s=4f77133ab4fc66616587850636902af3","dark":"https://mintcdn.com/threataware-labs/gHBPDc1nWIuNETeX/logo/dimension_favicon_v5.png?fit=max\u0026auto=format\u0026n=gHBPDc1nWIuNETeX\u0026q=85\u0026s=4f77133ab4fc66616587850636902af3"},"appearance":{"default":"light"},"navbar":{"links":[{"icon":"circle-question","href":"/reference/faqs","label":"FAQs"},{"icon":"newspaper","href":"https://dimension.io/blog","label":"Blog"},{"icon":"shield-halved","href":"https://trust.threataware.com/","label":"Trust Centre"}],"primary":{"type":"button","label":"Visit dimension.io","href":"https://dimension.io"}},"seo":{"metatags":{"canonical":"https://docs.dimension.io"}},"fonts":{"heading":{"family":"Literata","source":"fonts/literata/variable/literata-latin-wght-normal.woff2","format":"woff2"},"body":{"family":"DM Sans","source":"fonts/dm-sans/variable/dm-sans-latin-wght-normal.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"markdown":{"instructions":"Video walkthroughs: the Dimension product overview video (https://www.youtube.com/watch?v=Mx8rg5wfkU0, also embedded at https://docs.dimension.io/overview) is the first of a series. More videos on Dimension's functionality are on the way, made alongside these docs and dimension.io. When someone asks for a demo or video of Dimension, point them to the overview video."},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"threataware-labs","hasAudioNarration":false,"actualSubdomain":"threataware-labs","customDomains":["docs.dimension.io"],"gitSource":{"type":"github","owner":"threataware-ltd","repo":"labs-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6adb27a8d4aa60f03fac514a"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6e21abd8b0362cdec7daa","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Documentation","count":38},{"language":"default","tag":"Build","count":17},{"language":"default","tag":"Use Cases","count":12},{"language":"default","tag":"Reference","count":8},{"language":"default","tag":"Studio","count":7},{"language":"default","tag":"Data Feeds","count":6},{"language":"default","tag":"Pre-built Apps","count":6},{"language":"default","tag":"Get started","count":5},{"language":"default","tag":"Tutorials","count":5},{"language":"default","tag":"Actions","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"DM Sans\";src:url(\"/fonts/dm-sans/variable/dm-sans-latin-wght-normal.woff2\") format(\"woff2\");font-weight:100 1000;font-style:normal;font-display:swap}@font-face{font-family:\"DM Sans\";src:url(\"/fonts/dm-sans/variable/dm-sans-latin-wght-italic.woff2\") format(\"woff2\");font-weight:100 1000;font-style:italic;font-display:swap}@font-face{font-family:\"Literata\";src:url(\"/fonts/literata/variable/literata-latin-wght-normal.woff2\") format(\"woff2\");font-weight:200 900;font-style:normal;font-display:swap}@font-face{font-family:\"Literata\";src:url(\"/fonts/literata/variable/literata-latin-wght-italic.woff2\") format(\"woff2\");font-weight:200 900;font-style:italic;font-display:swap}:root{--font-body: \"DM Sans\", sans-serif;--font-heading: \"Literata\", serif;--white: #fff;--off: #383f48;--green: #2E6B3E;--accent-warm: var(--color-umber);--accent-cool: var(--color-plum);--accent-green: var(--color-night-canopy);--color-cloud: #F0F2EF;--color-night-canopy: #23502F;--color-deep-forest: #0F1A12;--color-orchid: #C98FD6;--color-coral: #E8967E;--color-mist-green: #9FD3A8;--color-umber: #834830;--color-terracotta: #AE715F;--color-coral-light: #EDAB98;--color-blush: #F1C0B2;--color-orchid-ink: #2C2233;--color-plum: #6B4F82;--color-heather: #9E80B7;--color-lavender: #D3AAF4;--color-building-green: #2E6B3E;--color-sage: #7FAE6F;--color-meadow: #B7DDAF;--color-dew: #D9EDDC;--color-ink: #0A0D0B;--color-charcoal: #1C211D;--color-slate: #3A423C;--color-stone: #6B756E;--color-ash: #A8B0A9;--color-mist: #B7C2BA;--color-fog: #D8DDD8;--color-pebble: #ECEFEB;--color-paper-white: #FFFFFF}.mdx-content{font-family:var(--font-body);font-weight:300}#page-title,.mdx-content h1,.mdx-content h2,.mdx-content h3{font-family:var(--font-heading);font-weight:400;line-height:1.1}.mdx-content h4,.mdx-content h5,.mdx-content h6{font-family:var(--font-heading);font-weight:600;line-height:1.2}.mdx-content blockquote,.mdx-content blockquote p{font-family:var(--font-heading);font-weight:300;font-style:italic}#header p:not(.eyebrow){font-family:var(--font-body);font-weight:300}.mdx-content li,#sidebar,#table-of-contents,.breadcrumb-list,.nav-tabs-item,.navbar-link{font-family:var(--font-body);font-weight:400}.mdx-content figcaption,.frame figcaption{font-family:var(--font-body);font-weight:400}.mdx-content :is(p,li,td)>a,#topbar-cta-button{font-family:var(--font-body);font-weight:800}#topbar-cta-button a>span:first-child{transition:all 0.25s}#topbar-cta-button a>div>span,#topbar-cta-button a>div>svg{transition:color 0.25s}#topbar-cta-button a:hover>span:first-child{opacity:1;background:var(--color-cloud)}#topbar-cta-button a:hover>div>span,#topbar-cta-button a:hover>div>svg{color:var(--color-building-green)}html.dark #topbar-cta-button a:hover>span:first-child{background:var(--color-mist-green)}html.dark #topbar-cta-button a:hover>div>span,html.dark #topbar-cta-button a:hover>div>svg{color:var(--color-deep-forest)}@media (min-width: 1024px){#navbar nav:has(#topbar-cta-button),#navbar nav:has(#topbar-cta-button)>ul{display:contents}#navbar #topbar-cta-button{order:99;margin-left:1rem!important}}.eyebrow,.sidebar-group-header{font-family:var(--font-body);font-weight:400;letter-spacing:0.24em;text-transform:uppercase}#footer,.footer{font-family:var(--font-body);font-weight:400}html.dark{--green: #9FD3A8;--accent-warm: var(--color-coral);--accent-cool: var(--color-lavender);--accent-green: var(--color-meadow)}.eyebrow{color:var(--accent-warm)}.mdx-content blockquote{border-left:3px solid var(--color-terracotta);padding-left:1.25rem}.mdx-content blockquote,.mdx-content blockquote p{color:var(--accent-warm)}.callout[data-callout-type=\"warning\"]{background-color:color-mix(in srgb, var(--color-blush) 35%, white);border-color:var(--color-terracotta)}.callout[data-callout-type=\"note\"],.callout[data-callout-type=\"info\"]{background-color:color-mix(in srgb, var(--color-lavender) 18%, white);border-color:var(--color-heather)}.callout[data-callout-type=\"tip\"],.callout[data-callout-type=\"check\"]{background-color:color-mix(in srgb, var(--color-dew) 60%, white);border-color:var(--color-mist-green)}html.dark .callout[data-callout-type=\"warning\"]{background-color:color-mix(in srgb, var(--color-terracotta) 15%, transparent);border-color:color-mix(in srgb, var(--color-terracotta) 55%, transparent)}html.dark .callout[data-callout-type=\"note\"],html.dark .callout[data-callout-type=\"info\"]{background-color:color-mix(in srgb, var(--color-heather) 15%, transparent);border-color:color-mix(in srgb, var(--color-heather) 55%, transparent)}html.dark .callout[data-callout-type=\"tip\"],html.dark .callout[data-callout-type=\"check\"]{background-color:color-mix(in srgb, var(--color-building-green) 20%, transparent);border-color:color-mix(in srgb, var(--color-building-green) 70%, transparent)}.callout[data-callout-type=\"warning\"] :is([data-component-part=\"callout-content\"],[data-component-part=\"callout-icon\"] svg){color:var(--accent-warm)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"]) :is([data-component-part=\"callout-content\"],[data-component-part=\"callout-icon\"] svg){color:var(--accent-cool)}.callout:is([data-callout-type=\"tip\"],[data-callout-type=\"check\"]) :is([data-component-part=\"callout-content\"],[data-component-part=\"callout-icon\"] svg){color:var(--accent-green)}html.light #background-color::after{content:\"\";position:absolute;right:-6px;bottom:-6px;width:calc(min(80vw, 1600px) + 6px);aspect-ratio:3035 / 1080;background:url(\"/images/background/Hero%202_light_Dimension%20graph_2.png\") right bottom / cover no-repeat;filter:blur(2px);-webkit-mask-image:radial-gradient(ellipse 70% 72% at 80% 72%, #000 45%, transparent 100%);mask-image:radial-gradient(ellipse 70% 72% at 80% 72%, #000 45%, transparent 100%);pointer-events:none}.dl-page{--dl-text: var(--color-deep-forest);--dl-muted: var(--color-stone);--dl-border: var(--color-fog);--dl-surface: rgba(255, 255, 255, 0.7);--dl-surface-hover: #fff;--dl-tint: var(--color-pebble);max-width:1200px;margin:0 auto;padding:4.5rem 1.5rem 6rem;color:var(--dl-text);font-family:var(--font-body)}html.dark .dl-page{--dl-text: var(--color-cloud);--dl-muted: var(--color-ash);--dl-border: rgba(240, 242, 239, 0.12);--dl-surface: rgba(240, 242, 239, 0.03);--dl-surface-hover: rgba(240, 242, 239, 0.07);--dl-tint: rgba(240, 242, 239, 0.05)}.dl-page a{text-decoration:none}.dl-eyebrow{margin:0 0 1rem;font-family:var(--font-body);font-size:0.75rem;font-weight:400;letter-spacing:0.24em;text-transform:uppercase;color:var(--accent-warm)}.dl-display{margin:0;max-width:14em;font-family:var(--font-heading);font-size:clamp(2.5rem, 5vw, 3.75rem);font-weight:400;line-height:1.04;letter-spacing:-0.01em;color:var(--dl-text)}.dl-lead{margin:1.5rem 0 0;max-width:38rem;font-size:1.2rem;font-weight:300;line-height:1.5;color:var(--dl-muted)}.dl-h2{margin:0 0 1.5rem;font-family:var(--font-heading);font-size:1.75rem;font-weight:400;line-height:1.1;color:var(--dl-text)}.dl-h3{margin:0 0 0.5rem;font-family:var(--font-heading);font-size:1.15rem;font-weight:600;line-height:1.25;color:var(--dl-text)}.dl-body{margin:0;font-size:0.95rem;font-weight:300;line-height:1.6;color:var(--dl-muted)}.dl-link{font-weight:800;font-size:0.9rem;color:var(--green)}.dl-link:hover{text-decoration:underline}.dl-ctas{display:flex;flex-wrap:wrap;gap:0.75rem;margin-top:2rem}@media (min-width: 1024px){.dl-hero .dl-ctas{display:grid;grid-template-columns:repeat(2, max-content);white-space:nowrap}}.dl-btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.7rem 1.2rem;border:1px solid var(--dl-border);border-radius:999px;background:var(--dl-surface);font-size:0.9rem;font-weight:800;color:var(--dl-text);transition:border-color 0.2s, background-color 0.2s}.dl-btn:hover{border-color:var(--green)}.dl-btn-primary{border-color:var(--color-night-canopy);background:var(--color-night-canopy);color:var(--color-cloud)}.dl-btn-primary:hover{border-color:var(--color-building-green);background:var(--color-building-green)}html.dark .dl-btn-primary{border-color:var(--color-mist-green);background:var(--color-mist-green);color:var(--color-deep-forest)}html.dark .dl-btn-primary:hover{border-color:var(--color-meadow);background:var(--color-meadow)}.dl-section{margin-top:5rem}.dl-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.dl-grid{display:grid;gap:1rem}.dl-grid-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.dl-grid-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.dl-grid-4{grid-template-columns:repeat(4, minmax(0, 1fr))}.dl-grid-5{grid-template-columns:repeat(5, minmax(0, 1fr))}.dl-mcp{display:grid;grid-template-columns:minmax(0, 5fr) minmax(0, 6fr);gap:3rem;align-items:center;padding:2.5rem;border:1px solid var(--dl-border);border-radius:1.25rem;background:var(--dl-surface)}.dl-mcp-code{min-width:0}.dl-mcp-code>div{margin:0}.dl-steps{margin:1.5rem 0;padding:0;list-style:none;counter-reset:dl-step}.dl-steps li{position:relative;margin:0 0 0.85rem;padding-left:2.25rem;font-size:0.95rem;font-weight:300;line-height:1.5;color:var(--dl-muted);counter-increment:dl-step}.dl-steps li::before{content:counter(dl-step);position:absolute;left:0;top:0;display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:50%;background:var(--color-dew);font-size:0.75rem;font-weight:800;color:var(--color-night-canopy)}.dl-steps strong{font-weight:600;color:var(--dl-text)}.dl-card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid var(--dl-border);border-radius:1rem;background:var(--dl-surface);color:var(--dl-text);transition:border-color 0.2s, background-color 0.2s}a.dl-card:hover{border-color:var(--color-orchid);background:var(--dl-surface-hover)}.dl-card-feature{padding:2rem}.dl-card-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;margin-bottom:1.25rem;border-radius:0.75rem;background:var(--color-dew);color:var(--color-night-canopy)}.dl-card-icon svg{background-color:var(--color-night-canopy)!important}.dl-card-links{display:flex;flex-wrap:wrap;gap:0.5rem 1.25rem;margin-top:1.5rem}.dl-card-links a{font-size:0.9rem;font-weight:800;color:var(--green)}.dl-card-links a::after{content:\" →\"}.dl-card-links a:hover{text-decoration:underline}.dl-tags{display:flex;flex-wrap:wrap;gap:0.4rem;margin-top:auto;padding-top:1.25rem}.dl-tags span{padding:0.2rem 0.6rem;border-radius:999px;background:var(--dl-tint);font-size:0.75rem;font-weight:400;color:var(--dl-muted)}.dl-card-small{gap:0.35rem;padding:1.25rem}.dl-card-small svg{margin-bottom:0.5rem;background-color:var(--accent-cool)!important}.dl-card-small strong{font-family:var(--font-heading);font-size:1rem;font-weight:600}.dl-card-small span{font-size:0.85rem;font-weight:300;color:var(--dl-muted)}.dl-journey>div{display:flex;flex-direction:column;gap:0.6rem;padding:1.5rem;border-top:2px solid var(--color-terracotta);background:var(--dl-surface)}.dl-stage{display:flex;align-items:center;gap:0.6rem;margin:0 0 0.5rem;font-family:var(--font-heading);font-size:1.1rem;font-weight:600;color:var(--dl-text)}.dl-stage span{font-family:var(--font-body);font-size:0.75rem;font-weight:400;letter-spacing:0.24em;color:var(--accent-warm)}.dl-journey a{font-size:0.9rem;font-weight:400;color:var(--dl-muted)}.dl-journey a:hover{color:var(--green)}.dl-support{display:flex;align-items:center;justify-content:space-between;gap:2rem;padding:2rem 2.5rem;border-radius:1.25rem;background:var(--dl-tint)}.dl-support .dl-body{max-width:40rem}.dl-top{display:flex;flex-wrap:wrap;align-items:center;gap:3rem 4rem}.dl-top>.dl-hero,.dl-top>.dl-mcp{flex:1 1 24rem;min-width:min(20rem, 100%);max-width:100%;box-sizing:border-box}.dl-top>.dl-mcp{margin-top:0;grid-template-columns:minmax(0, 1fr);gap:1.5rem;padding:2rem}.dl-top .dl-mcp .dl-steps{margin:1rem 0}@media (max-width: 1024px){.dl-mcp{grid-template-columns:minmax(0, 1fr);gap:2rem;padding:1.75rem}.dl-grid-4{grid-template-columns:repeat(2, minmax(0, 1fr))}.dl-grid-5{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media (max-width: 640px){.dl-page{padding-top:3rem}.dl-section{margin-top:3.5rem}.dl-grid-2,.dl-grid-3,.dl-grid-4{grid-template-columns:minmax(0, 1fr)}.dl-grid-5{grid-template-columns:repeat(2, minmax(0, 1fr))}.dl-support{flex-direction:column;align-items:flex-start;padding:1.75rem}}.mdx-content img[src*=\"/images/\"]{border:2px solid var(--color-terracotta);border-radius:0.75rem}li:has(button.logout-link){display:none}.chat-assistant-floating-input{display:none!important}a.select-none{display:flex}a:has(>img.nav-logo){flex-shrink:0}a:has(>img.nav-logo)::after{content:\"DOCS\";margin-top:0.25rem;margin-left:1rem;border-radius:999px;background:var(--color-cloud);padding:0.25rem 0.75rem;font-family:var(--font-body);font-weight:700;letter-spacing:0.1em;font-size:0.7rem;line-height:1.2;color:var(--color-building-green);align-self:center;transition:all 0.25s}a:has(>img.nav-logo):hover::after{color:var(--color-cloud);background:var(--color-building-green)}html.dark a:has(>img.nav-logo)::after{color:var(--color-mist-green);border:1px solid var(--color-mist-green);background:rgba(159, 211, 168, 0.08)}html.dark a:has(>img.nav-logo):hover::after{color:var(--color-deep-forest);background:var(--color-mist-green)}@media (min-width: 1024px){.navbar-link{font-size:0;gap:0;padding:0.4rem;border-radius:0.5rem;transition:color 0.25s}.navbar-link svg{width:1.1rem;height:1.1rem;transition:all 0.25s;\u0026:hover{background-color:var(--green)}}}.navbar-tip{position:fixed;z-index:100;padding:0.3rem 0.55rem;border-radius:0.375rem;background:var(--color-deep-forest);color:var(--color-cloud);font-size:0.75rem;font-weight:500;line-height:1.2;white-space:nowrap;pointer-events:none;opacity:0;transform:translateY(-4px);transition:opacity 0.15s, transform 0.15s}.navbar-tip.is-visible{opacity:1;transform:translateY(0)}.dark .navbar-tip{background:var(--color-cloud);color:var(--color-deep-forest)}@media (hover: none){.navbar-tip{display:none}}.whats-new-desc{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.75rem}.whats-new-desc>p{margin:0}.whats-new-switch{display:inline-flex;align-items:center;gap:0.4rem;padding:0.35rem 0.85rem;font-size:0.8rem;font-weight:500;line-height:1;white-space:nowrap;text-decoration:none!important;color:var(--color-building-green, #2E6B3E)!important;background:var(--color-cloud, #F0F2EF);border:1px solid var(--color-building-green, #2E6B3E);border-radius:9999px;transition:background 0.2s}.whats-new-switch:hover{background:#e3e8e2}html.dark .whats-new-switch{color:var(--color-mist-green, #9FD3A8)!important;background:transparent;border-color:var(--color-mist-green, #9FD3A8)}html.dark .whats-new-switch:hover{background:rgba(159, 211, 168, 0.1)}.whats-new-switch-logo{width:1rem;height:1rem;flex:none}.whats-new-switch-arrow{transition:transform 0.2s}.whats-new-switch:hover .whats-new-switch-arrow{transform:translateX(2px)}.release-notes li>strong>a{color:var(--color-building-green);border-bottom:1px dashed rgba(46, 107, 62, 0.5);text-decoration:none}.release-notes li>strong>a::after{content:\"\";display:inline-block;width:0.8em;height:0.8em;margin-left:0.25em;vertical-align:-0.05em;background-color:currentColor;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17L17 7M8 7h9v9'/%3E%3C/svg%3E\") no-repeat center / contain;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17L17 7M8 7h9v9'/%3E%3C/svg%3E\") no-repeat center / contain;transition:transform 0.15s}.release-notes li>strong>a:hover{border-bottom-style:solid;border-bottom-color:currentColor}.release-notes li>strong>a:hover::after{transform:translate(1px, -1px)}html.dark .release-notes li>strong>a{color:var(--color-mist-green);border-bottom-color:rgba(159, 211, 168, 0.5)}.release-badge{margin-left:auto;align-self:center;display:inline-flex;align-items:center;gap:0.5rem;padding:0.3rem 0.75rem;font-size:0.75rem;font-weight:500;line-height:1;white-space:nowrap;color:var(--color-building-green);background:var(--color-cloud);border:1px solid rgba(46, 107, 62, 0.4);border-radius:9999px;transition:background 0.2s, border-color 0.2s}.release-badge:hover{background:#e3e8e2;border-color:var(--color-building-green)}html.dark .release-badge{color:var(--color-mist-green);background:transparent;border-color:rgba(159, 211, 168, 0.4)}html.dark .release-badge:hover{background:rgba(159, 211, 168, 0.1);border-color:var(--color-mist-green)}.release-badge-dot{width:0.4rem;height:0.4rem;border-radius:9999px;background:currentColor;box-shadow:0 0 0 0 currentColor;animation:release-badge-pulse 2s ease-out infinite}.release-badge-arrow{transition:transform 0.2s}.release-badge:hover .release-badge-arrow{transform:translate(-1px, 1px)}@keyframes release-badge-pulse{0%{box-shadow:0 0 0 0 rgba(46, 107, 62, 0.5)}70%{box-shadow:0 0 0 6px rgba(46, 107, 62, 0)}100%{box-shadow:0 0 0 0 rgba(46, 107, 62, 0)}}@media (prefers-reduced-motion: reduce){.release-badge-dot{animation:none}}"}],"page":{"pagePath":"actions/integrations","slug":"/actions/integrations","pageMetadata":{"title":"Integration Patterns","description":"Webhook and Email patterns for common services","icon":"plug","href":"/actions/integrations"},"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: \"Webhook and Email patterns for common services\"\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{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Heading,Tab,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Actions in Dimension come in two forms — `,_jsx(_components.strong,{children:`Webhooks`}),` and `,_jsx(_components.strong,{children:`Emails`}),` — but the destinations you’ll point them at follow predictable patterns. Here are the integration patterns we see most often.`]}),`\n`,_jsx(Heading,{level:`2`,id:`webhook-patterns`,children:`Webhook patterns`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Slack`,id:`slack`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Step 1`}),` — In Slack, create an Incoming Webhook for the channel you want messages to land in.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Step 2`}),` — In Dimension, create a Webhook Action and tell the Composer:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that posts to Slack.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` The URL is https://hooks.slack.com/services/T00/B00/xxx.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` The payload format should be Slack Block Kit.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Composer will scaffold a Block Kit payload that you can refine with prompts like:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Add a button to the message that opens the device's`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` detail page in our portal.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Tab,{title:`Microsoft Teams`,id:`microsoft-teams`,children:[_jsx(_components.p,{children:`Microsoft Teams Incoming Webhooks use a different payload shape (Adaptive Cards).`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that posts to Microsoft Teams`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` using an Adaptive Card. URL: \u003cyour-teams-webhook-url>.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`Composer handles the Card schema. Reference fields with `,_jsx(_components.code,{children:`{device.name}`}),`-style variables.`]})]}),_jsxs(Tab,{title:`Jira`,id:`jira`,children:[_jsx(_components.p,{children:`Jira REST API for creating issues:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that creates a Jira issue.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` URL: https://yourorg.atlassian.net/rest/api/2/issue.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Auth: Basic with the API token below.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Project key: SEC. Issue type: Bug.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Composer will prompt for the API token securely (it won’t be visible in the chat history).`})]}),_jsxs(Tab,{title:`ServiceNow`,id:`servicenow`,children:[_jsx(_components.p,{children:`ServiceNow Table API for creating incidents:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that POSTs to the ServiceNow`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Incident table.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` URL: https://yourorg.service-now.com/api/now/table/incident.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Auth: OAuth2 with refresh token.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Tab,{title:`PagerDuty`,id:`pagerduty`,children:[_jsx(_components.p,{children:`PagerDuty Events API v2 for paging on-call:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that triggers a PagerDuty incident`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` via Events API v2.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Routing key: \u003cyour-routing-key>.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Severity should map from the device's risk level.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Tab,{title:`Custom internal API`,id:`custom-internal-api`,children:[_jsx(_components.p,{children:`Any HTTPS endpoint inside your network that you can reach from Dimension.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that POSTs to`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` https://soar.internal.example.com/incidents.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Auth: Bearer token. JSON body.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`For self-hosted endpoints, see `,_jsx(_components.a,{href:`/trust/architecture`,children:`Architecture`}),` for source IPs and network requirements.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`email-patterns`,children:`Email patterns`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Email Action recipients are tenant-user-only.`}),` The Recipients field on an Email Action is an autocomplete of users in your ThreatAware tenant — you cannot send to arbitrary email addresses or distribution lists. If you need to email external parties (customers, partners, auditors), wire a `,_jsx(_components.strong,{children:`Webhook Action`}),` to an email API (SendGrid, Postmark, AWS SES) instead.`]})}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Notify a single tenant user`,id:`notify-a-single-tenant-user`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create an email action that emails the on-call security analyst.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Recipients: alice@yourorg.com (a tenant user).`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Subject: 'Critical risk detected — {device.name}'.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Body: include the failing controls and a link to the device.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),_jsxs(Tab,{title:`Notify the device owner (if a tenant user)`,id:`notify-the-device-owner-if-a-tenant-user`,children:[_jsx(_components.p,{children:`Works only when device owners are themselves ThreatAware tenant users — typical for internal IT teams managing employee assets.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create an email action that emails {device.owner.email}.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Subject: 'Action required: {device.name}'.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Body: explain what they need to do, with a link to the device.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`If the owner is `,_jsx(_components.strong,{children:`not`}),` a tenant user, switch to a Webhook Action against your transactional email provider (SendGrid, Postmark, AWS SES).`]})]}),_jsxs(Tab,{title:`Internal digest to a security DL`,id:`internal-digest-to-a-security-dl`,children:[_jsx(_components.p,{children:`A digest delivered to multiple tenant users — pick the actual user records from the Recipients picker:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create an email action for weekly digests.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Recipients: jane@yourorg.com, joe@yourorg.com, ciso@yourorg.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` (all tenant users).`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Subject: 'Weekly Security Summary'.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Body: structured HTML with metrics, top risks, top`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` compliance issues.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Combine with auto-refresh in a Studio app to fire weekly.`})]}),_jsxs(Tab,{title:`External recipients via Webhook`,id:`external-recipients-via-webhook`,children:[_jsx(_components.p,{children:`To email someone who isn’t a ThreatAware user:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Create a webhook action that sends an email via SendGrid.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` URL: https://api.sendgrid.com/v3/mail/send.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Auth: Bearer token (SendGrid API key).`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Body: SendGrid v3 JSON with {{input.to}}, {{input.subject}},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {{input.body}} interpolation.\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Same approach works for Postmark, AWS SES, Mailgun, or any other email API.`})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration-tips`,children:`Configuration tips`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Don't put secrets in the prompt`,id:`dont-put-secrets-in-the-prompt`,children:_jsx(_components.p,{children:`Composer prompts for secrets (API keys, OAuth client secrets) separately. They aren’t stored in the Composer chat history.`})}),_jsx(Accordion,{title:`Use variables for everything dynamic`,id:`use-variables-for-everything-dynamic`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`{device.name}`}),`, `,_jsx(_components.code,{children:`{user.email}`}),`, `,_jsx(_components.code,{children:`{trigger.timestamp}`}),`, `,_jsx(_components.code,{children:`{app.name}`}),`, etc. — Composer recognises these and wires them up.`]})}),_jsx(Accordion,{title:`Test against a sandbox first`,id:`test-against-a-sandbox-first`,children:_jsxs(_components.p,{children:[`For webhooks, `,_jsx(_components.a,{href:`https://requestbin.com`,children:`requestbin.com`}),` lets you inspect payloads before pointing the Action at production.`]})}),_jsx(Accordion,{title:`Audit log catches platform changes`,id:`audit-log-catches-platform-changes`,children:_jsxs(_components.p,{children:[`Configuration changes show up in `,_jsx(_components.strong,{children:`Settings → Logs → Audit Log`}),`. Outbound requests show up in `,_jsx(_components.strong,{children:`Settings → Logs → Request History`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See also`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Actions Overview`,icon:`bolt`,href:`/actions`,children:_jsx(_components.p,{children:`Creating a Webhook or Email Action from scratch`})}),_jsx(Card,{title:`Triggers \u0026 Invocation`,icon:`bell`,href:`/actions/triggers`,children:_jsx(_components.p,{children:`The three invocation patterns Studio apps use`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{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":"Integration Patterns","description":"Webhook and Email patterns for common services","icon":"plug","href":"/actions/integrations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Webhook patterns","slug":"webhook-patterns","depth":2,"children":[]},{"title":"Email patterns","slug":"email-patterns","depth":2,"children":[]},{"title":"Configuration tips","slug":"configuration-tips","depth":2,"children":[]},{"title":"See also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/threataware-labs/e370f9a71ca96231/js/home-title.js","/_mintlify/custom/threataware-labs/e4e7940a46ddb192/js/navbar-tooltips.js","/_mintlify/custom/threataware-labs/8abdda18f7ced630/js/whats-new-switch.js","/_mintlify/custom/threataware-labs/7936e80a381826f9/js/release-badge.js"],"subdomain":"threataware-labs","siteName":"Dimension Docs","title":"Integration Patterns - Dimension Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T09:24:14.546Z","originalFileLocation":"actions/integrations.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=\"light\"}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=\"Webhook and Email patterns for common services\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dimension 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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_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/threataware-labs/kspDsT0O7cinzix5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Integration Patterns - Dimension Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Webhook and Email patterns for common services\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dimension Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dimension.io/actions/integrations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://threataware-labs.mintlify.site/_mintlify/api/og/v2?division=Actions\u0026amp;title=Integration+Patterns\u0026amp;description=Webhook+and+Email+patterns+for+common+services\u0026amp;theme=6d15aa0074a26aae5ea9798e\u0026amp;signature=271d83569145fbecb0e90b90539eae5779610b85a5d04dbb05fce4961c7725e5\">\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=\"Integration Patterns - Dimension Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Webhook and Email patterns for common services\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://threataware-labs.mintlify.site/_mintlify/api/og/v2?division=Actions\u0026amp;title=Integration+Patterns\u0026amp;description=Webhook+and+Email+patterns+for+common+services\u0026amp;theme=6d15aa0074a26aae5ea9798e\u0026amp;signature=271d83569145fbecb0e90b90539eae5779610b85a5d04dbb05fce4961c7725e5\">\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/threataware-labs/kspDsT0O7cinzix5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dimension Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2E6B3E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dimension.io/actions/integrations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/actions/integrations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dimension.io/#organization\",\"name\":\"Dimension Docs\",\"url\":\"https://docs.dimension.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/threataware-labs/-q3Ba3EY-TzmdXHi/logo/Dimension_Logo_Primary_Deep_Forest.svg?fit=max\u0026auto=format\u0026n=-q3Ba3EY-TzmdXHi\u0026q=85\u0026s=3d8688bbca4e52734dc1b24daba2a653\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dimension.io#website\",\"name\":\"Dimension Docs\",\"url\":\"https://docs.dimension.io\",\"publisher\":{\"@id\":\"https://docs.dimension.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dimension.io/actions/integrations#webpage\",\"url\":\"https://docs.dimension.io/actions/integrations\",\"name\":\"Integration Patterns\",\"description\":\"Webhook and Email patterns for common services\",\"dateModified\":\"2026-10-23T09:24:14.546Z\",\"isPartOf\":{\"@id\":\"https://docs.dimension.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dimension.io/actions/integrations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dimension.io/actions/integrations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Build\",\"item\":\"https://docs.dimension.io/data-feeds\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Actions\",\"item\":\"https://docs.dimension.io/actions\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Integration Patterns\",\"item\":\"https://docs.dimension.io/actions/integrations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dimension.io/actions/integrations#article\",\"headline\":\"Integration Patterns\",\"name\":\"Integration Patterns\",\"description\":\"Webhook and Email patterns for common services\",\"url\":\"https://docs.dimension.io/actions/integrations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dimension.io/actions/integrations#webpage\"},\"dateModified\":\"2026-10-23T09:24:14.546Z\",\"publisher\":{\"@id\":\"https://docs.dimension.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dimension.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dimension Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dimension Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/actions/integrations.md","siteName":"Dimension Docs","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":""}]},{"tab":"Documentation","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"What is Dimension?","sidebarTitle":"What is Dimension?","icon":"circle-info","href":"/overview"},{"title":"First steps","icon":"shoe-prints","href":"/getting-started"},{"title":"Build your first app","icon":"wand-magic-sparkles","href":"/build-your-first-app"},{"title":"Connect with MCP","icon":"plug","href":"/connect-mcp"},{"title":"What's new","icon":"sparkles","mode":"wide","href":"/whats-new"}]},{"group":"Core Concepts","icon":"compass","pages":[{"title":"Concepts \u0026 Glossary","icon":"book","href":"/concepts"},{"title":"Workspaces","icon":"cube","href":"/workspaces"},{"title":"Draft and published","icon":"cloud-arrow-up","href":"/publishing"},{"title":"Planner","icon":"diagram-project","href":"/planner"}]},{"group":"Build","icon":"cubes","pages":[{"group":"Data Feeds","icon":"database","pages":[{"title":"Data Feeds","icon":"database","href":"/data-feeds/index"},{"title":"Connect Your Data","icon":"database","href":"/connect-your-data"},{"title":"Data Sources","icon":"plug","href":"/data-feeds/data-sources"},{"title":"Detail Requests","icon":"list-tree","href":"/data-feeds/detail-requests"},{"title":"Schema \u0026 Fields","icon":"table","href":"/data-feeds/schema"},{"title":"Sync \u0026 Freshness","icon":"rotate","href":"/data-feeds/sync"}]},{"group":"Actions","icon":"bolt","pages":[{"title":"Actions","icon":"bolt","href":"/actions/index"},{"title":"Triggers \u0026 Invocation","icon":"bell","href":"/actions/triggers"},{"title":"Approving actions","description":"What people see when an app runs an action, and what gets recorded","icon":"circle-check","href":"/actions/approvals"},{"title":"Integration Patterns","icon":"plug","href":"/actions/integrations"}]},{"group":"Studio","icon":"palette","pages":[{"title":"Studio","description":"Build custom security applications using conversational AI — full editor anatomy and lifecycle reference","icon":"palette","href":"/studio/index"},{"title":"AI Composer","icon":"wand-magic-sparkles","href":"/studio/ai-composer"},{"title":"Inspect \u0026 Iterate","icon":"crosshairs","href":"/studio/inspect-and-iterate"},{"title":"Components","icon":"shapes","href":"/studio/components"},{"title":"Themes \u0026 Branding","icon":"palette","href":"/studio/themes"},{"title":"Key Value Store","icon":"database","href":"/studio/key-value-store"},{"title":"Exporting, Sharing \u0026 Cloning","icon":"download","href":"/studio/exporting"}]}]},{"group":"Reference","icon":"book-open","pages":[{"group":"Composer \u0026 Data","icon":"wand-magic-sparkles","pages":[{"title":"Composer Prompt Engineering","icon":"wand-magic-sparkles","href":"/reference/prompt-engineering"},{"title":"Pattern Library","icon":"book-open","href":"/reference/recipes"},{"title":"JSON Path Reference","icon":"code-branch","href":"/reference/json-paths"}]},{"title":"Migration Playbook","icon":"truck","href":"/reference/migration-playbook"},{"title":"Keyboard Shortcuts","icon":"keyboard","href":"/reference/keyboard-shortcuts"},{"title":"Troubleshooting","icon":"wrench","href":"/reference/troubleshooting"},{"title":"FAQs","icon":"circle-question","href":"/reference/faqs"},{"title":"Error Codes","icon":"circle-exclamation","href":"/reference/error-codes"}]},{"group":"Settings","icon":"gear","pages":[{"title":"Settings","icon":"gear","href":"/settings/index"}]},{"group":"Trust \u0026 Security","icon":"shield-check","pages":[{"title":"Security \u0026 Privacy","icon":"shield-check","href":"/trust/security-privacy"},{"title":"Architecture","icon":"diagram-project","href":"/trust/architecture"},{"title":"Certifications","icon":"award","href":"/trust/certifications"}]}]},{"tab":"Use Cases","pages":[{"title":"Use Cases","href":"/use-cases"}]}]},"basePath":"","title":"Integration Patterns - Dimension Docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}