If you have saved environments in the project, static
environments use their configured URL and environment-specific credential
overrides. You can copy environment IDs from Project Settings → Test environments
or fetch them with GET /api/v1/projects/{projectId}.For one-off URLs, pass targetUrl. You can also set environment to control how
the run appears in the results list:
production
staging
preview
If you pass targetUrl without environment, the run is marked as preview.
Use environment: "staging" for staging deployment tests.
Mobile tests are stored without a fixed platform, so the webhook decides which one
to run. Pass platform to choose it:
platform defaults to ios when omitted. An Android batch must set "platform": "android" -
otherwise the run is planned as iOS and any Android mobile app override fails with
InvalidMobileApp / “Selected mobile app was not found for this project”, even though the app
exists in the dashboard.
You can override the app build used by mobile tests in the group. The build must match the requested run platform (ios or android), so send platform alongside the override for Android.By bundle ID - resolves to the latest uploaded app matching that bundle identifier:
Use appId when multiple builds share the same bundle ID and you need to pin a specific upload.For an Android build, the same call with "platform": "android":
For Android, pass "platform": "android" with an .apk artifact - the artifact
extension must match the requested platform.Only one of bundleId, appId, or artifactUrl can be provided per request.
When a webhook-triggered batch completes and any test fails, TesterArmy sends the failure summary to connected chat providers such as Slack or Discord. If no chat provider delivers, TesterArmy falls back to email.Batches triggered with commitSha can still report status back through GitHub, but chat notifications remain project-level alerts for the completed batch.
1 webhook per group. The secret is shown once. If it is lost, use Regenerate URL in the group’s webhook menu; the previous URL stops working immediately.
Subject to your team’s usage limits - returns 429 if exceeded.
Webhook must be active to accept requests. Switching the webhook Off deactivates it (the URL is preserved); a deactivated webhook returns 403.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TesterArmy","description":"TesterArmy documentation: AI-agent testing automation for web and mobile apps. Set up projects, write reliable test steps, automate runs from CI, and use the CLI, MCP server, and public API.","colors":{"primary":"#FF8001","light":"#FFB56C","dark":"#9C4E01"},"logo":{"light":"https://mintcdn.com/tester-army/cxPvc8T8okiKYoP3/logo/light.svg?fit=max\u0026auto=format\u0026n=cxPvc8T8okiKYoP3\u0026q=85\u0026s=d248c622a49091cb7ef1cb2868377b57","dark":"https://mintcdn.com/tester-army/cxPvc8T8okiKYoP3/logo/dark.svg?fit=max\u0026auto=format\u0026n=cxPvc8T8okiKYoP3\u0026q=85\u0026s=4923170b5bc1dfc1be671c8041a295b4","href":"https://tester.army"},"favicon":"https://mintcdn.com/tester-army/cxPvc8T8okiKYoP3/favicon.ico?fit=max\u0026auto=format\u0026n=cxPvc8T8okiKYoP3\u0026q=85\u0026s=373aa31169919bd93ccf0d24514ffcde","appearance":{"default":"system"},"background":{"color":{"light":"#FFFFFF","dark":"#161616"}},"navbar":{"links":[{"href":"https://tester.army/discord","label":"Discord"}],"primary":{"type":"button","label":"Start testing","href":"https://tester.army/sign-up"}},"footer":{"socials":{"github":"https://github.com/tester-army","x":"https://x.com/intent/user?screen_name=testerarmy","discord":"https://tester.army/discord"}},"seo":{"metatags":{"og:site_name":"TesterArmy","og:locale":"en_US","twitter:card":"summary_large_image","twitter:site":"@TesterArmy"},"indexing":"navigable"},"fonts":{"heading":{"family":"Stack Sans Notch","weight":500,"source":"https://tester.army/fonts/stack-sans-notch-latin-wght-normal.woff2","format":"woff2"},"body":{"family":"Inter","source":"https://tester.army/fonts/inter-latin-wght-normal.woff2","format":"woff2"}},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"vesper"},"latex":false},"integrations":{"posthog":{"apiKey":"phc_zp7taksuGbNJPWKOStUpbJTSvjE7KOikZWALbJY9sHB","apiHost":"https://eu.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tester-army","hasAudioNarration":false,"actualSubdomain":"tester-army","customDomains":["docs.tester.army"],"gitSource":{"type":"github","owner":"tester-army","repo":"app","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adf86e0b6ccf8efa60c6f79","collectionId":"37f38a21-4338-4939-a526-ed82263acbbc","liveDeploymentHistoryId":"6adf86e0b6ccf8efa60c6f79","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adf86e0b6ccf8efa60c6f79","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Docs","count":71},{"language":"default","tag":"API Reference","count":59},{"language":"default","tag":"Endpoints","count":58},{"language":"default","tag":"Projects","count":25},{"language":"default","tag":"Automate Testing","count":20},{"language":"default","tag":"Build and Run Tests","count":13},{"language":"default","tag":"Test Runs","count":12},{"language":"default","tag":"Groups","count":11},{"language":"default","tag":"Set Up Your Project","count":9},{"language":"default","tag":"Migrate to TesterArmy","count":8}]},"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":"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":"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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"DM Mono\";src:url(https://tester.army/fonts/dm-mono-latin-400-normal.woff2) format(\"woff2\");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:\"DM Mono\";src:url(https://tester.army/fonts/dm-mono-latin-500-normal.woff2) format(\"woff2\");font-weight:500;font-style:normal;font-display:swap}:root{--ta-orange-300:rgb(255 128 1);--ta-grey-50:rgb(232 232 232);--ta-grey-400:rgb(78 78 78);--ta-grey-500:rgb(22 22 22)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=rounded]:not([class*=rounded-full]){border-radius:0!important}#content h1,#content h2,#content h3,#content h4,#content strong,#content th,#page-title,#page-title h1,#sidebar [data-active=true]{font-weight:500}#content h3,#content h4,#content h5,#content h6{font-family:\"Inter\",ui-sans-serif,system-ui,sans-serif}#content h2,#content h3{letter-spacing:-.01em}#page-title{padding-top:1rem;border-top:2px solid var(--ta-orange-300)}#topbar-cta-button a{padding:10px 20px}#topbar-cta-button a>span.absolute{background-color:var(--ta-orange-300);opacity:1;clip-path:polygon(12px 0,100% 0,100% 12px,calc(100% - 12px) 12px,calc(100% - 12px) 24px,100% 24px,100% 100%,0 100%,0 12px,12px 12px)}#topbar-cta-button a:focus-visible>span.absolute,#topbar-cta-button a:hover>span.absolute{clip-path:polygon(0 0,100% 0,100% 24px,calc(100% - 12px) 24px,calc(100% - 12px) 100%,0 100%,0 24px,12px 24px,12px 12px,0 12px)}#topbar-cta-button a .text-white{color:var(--ta-grey-500);font-family:\"DM Mono\",ui-monospace,monospace;font-size:12px;line-height:16px;font-weight:500;letter-spacing:.07em;text-transform:uppercase}#topbar-cta-button a svg{display:none}#content h2{padding-top:1rem;border-top:1px solid var(--ta-grey-50)}.dark #content h2{border-top-color:var(--ta-grey-400)}code,kbd,pre,samp{font-family:\"DM Mono\",ui-monospace,SFMono-Regular,Menlo,monospace}#content :not(pre)>code{font-weight:500}#content-area{max-width:816px;margin-right:auto}"}],"page":{"pagePath":"run/group-webhooks","slug":"/run/group-webhooks","pageMetadata":{"title":"Group Webhooks","description":"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.","og:image":"https://tester.army/og-images/docs/run/group-webhooks.webp","og:image:width":1220,"og:image:height":630,"icon":"webhook","iconType":"duotone","href":"/run/group-webhooks"},"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: \"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Group webhooks let you run every test in a group with one HTTP call. Works with any CI/CD pipeline, deployment tool, or custom automation.`}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open your project → `,_jsx(_components.strong,{children:`Tests`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Pick the group in the `,_jsx(_components.strong,{children:`Test library`}),` rail, then open the `,_jsx(_components.strong,{children:`Webhook`}),`\nmenu in the `,_jsx(_components.strong,{children:`Run tests`}),` row under the group name.`]}),`\n`,_jsxs(_components.li,{children:[`Switch the webhook `,_jsx(_components.strong,{children:`On`}),`. The webhook is created and activated immediately.`]}),`\n`,_jsx(_components.li,{children:`Copy the URL - the secret is shown once.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`trigger`,children:`Trigger`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Enabled tests in the group are queued against the project’s configured URL. Disabled tests are skipped.`}),`\n`,_jsx(Heading,{level:`3`,id:`optional-body`,children:`Optional body`}),`\n`,_jsx(_components.p,{children:`You can pass JSON to attach commit metadata:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"commitSha\": \"abc123\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For stable staging, QA, or other saved targets, prefer `,_jsx(_components.code,{children:`projectEnvironmentId`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"commitSha\": \"abc123\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"projectEnvironmentId\": \"00000000-0000-0000-0000-000000000000\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you have `,_jsx(_components.a,{href:`/guides/environments`,children:`saved environments`}),` in the project, static\nenvironments use their configured URL and environment-specific credential\noverrides. You can copy environment IDs from `,_jsx(_components.strong,{children:`Project Settings → Test environments`}),`\nor fetch them with `,_jsx(_components.code,{children:`GET /api/v1/projects/{projectId}`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For one-off URLs, pass `,_jsx(_components.code,{children:`targetUrl`}),`. You can also set `,_jsx(_components.code,{children:`environment`}),` to control how\nthe run appears in the results list:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`production`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`staging`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`preview`})}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If you pass `,_jsx(_components.code,{children:`targetUrl`}),` without `,_jsx(_components.code,{children:`environment`}),`, the run is marked as `,_jsx(_components.code,{children:`preview`}),`.\nUse `,_jsx(_components.code,{children:`environment: \"staging\"`}),` for staging deployment tests.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"commitSha\": \"abc123\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"targetUrl\": \"https://staging.example.com\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"environment\": \"staging\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`environment: \"staging\"`}),` only controls the Results environment label. It does\nnot select a saved environment row or its credential overrides.`]}),`\n`,_jsx(Heading,{level:`3`,id:`choosing-the-run-platform`,children:`Choosing the run platform`}),`\n`,_jsxs(_components.p,{children:[`Mobile tests are stored without a fixed platform, so the webhook decides which one\nto run. Pass `,_jsx(_components.code,{children:`platform`}),` to choose it:`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`platform`}),` defaults to `,_jsx(_components.code,{children:`ios`}),` when omitted. An Android batch must set `,_jsx(_components.code,{children:`\"platform\": \"android\"`}),` -\notherwise the run is planned as iOS and any Android mobile app override fails with\n`,_jsx(_components.code,{children:`InvalidMobileApp`}),` / “Selected mobile app was not found for this project”, even though the app\nexists in the dashboard.`]})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"platform\": \"android\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`A group cannot mix iOS and Android tests in one mobile request - split the group\nor trigger one platform at a time.`}),`\n`,_jsx(Heading,{level:`3`,id:`mobile-app-override`,children:`Mobile app override`}),`\n`,_jsxs(_components.p,{children:[`You can override the app build used by mobile tests in the group. The build must match the requested run platform (`,_jsx(_components.code,{children:`ios`}),` or `,_jsx(_components.code,{children:`android`}),`), so send `,_jsx(_components.code,{children:`platform`}),` alongside the override for Android.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`By bundle ID`}),` - resolves to the latest uploaded app matching that bundle identifier:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"platform\": \"ios\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"mobile\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"bundleId\": \"com.example.app\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"buildId\": \"44\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`By app ID`}),` - targets a specific uploaded build by its UUID (returned from the upload API):`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"platform\": \"ios\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"mobile\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"appId\": \"\u003cYOUR APP UPLOAD ID>\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`appId`}),` when multiple builds share the same bundle ID and you need to pin a specific upload.`]}),`\n`,_jsxs(_components.p,{children:[`For an Android build, the same call with `,_jsx(_components.code,{children:`\"platform\": \"android\"`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"platform\": \"android\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"mobile\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"appId\": \"\u003cYOUR ANDROID APP UPLOAD ID>\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`By remote artifact`}),` - provide an HTTPS URL and filename for remote build artifacts:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`curl`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -X`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` POST`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` https://tester.army/api/v1/groups/webhook/{id}/{secret}`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -H`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#A0A0A0`,\"--shiki-dark\":`#A0A0A0`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` -d`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"platform\": \"ios\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"mobile\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"artifactUrl\": \"https://example.com/builds/MyApp.app.zip\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"artifactFilename\": \"MyApp.app.zip\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` \"buildId\": \"eas-982\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For Android, pass `,_jsx(_components.code,{children:`\"platform\": \"android\"`}),` with an `,_jsx(_components.code,{children:`.apk`}),` artifact - the artifact\nextension must match the requested platform.`]}),`\n`,_jsxs(_components.p,{children:[`Only one of `,_jsx(_components.code,{children:`bundleId`}),`, `,_jsx(_components.code,{children:`appId`}),`, or `,_jsx(_components.code,{children:`artifactUrl`}),` can be provided per request.`]}),`\n`,_jsx(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"received\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: true,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"queued\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"runIds\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: [`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"uuid-1\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`, `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"uuid-2\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"count\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`2`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When the batch contains mobile tests, the response includes `,_jsx(_components.code,{children:`metadata.mobile`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes vesper vesper`,style:{backgroundColor:`#101010`,\"--shiki-dark-bg\":`#101010`,color:`#FFF`,\"--shiki-dark\":`#FFF`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"received\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: true,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"queued\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"runIds\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: [`}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"uuid-1\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`, `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"uuid-2\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"count\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:`2`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"metadata\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"mobile\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"resolvedAppId\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"11111111-1111-1111-8111-111111111111\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"source\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"app_id\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"buildId\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: `}),_jsx(_components.span,{style:{color:`#99FFE4`,\"--shiki-dark\":`#99FFE4`},children:`\"44\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FFC799`,\"--shiki-dark\":`#FFC799`},children:` \"temporary\"`}),_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`: false`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#FFF`,\"--shiki-dark\":`#FFF`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`source: \"test_default\"`}),` means each mobile test used its saved app selection.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`source: \"app_id\"`}),` means the webhook used an already uploaded project app, selected by `,_jsx(_components.code,{children:`bundleId`}),` or `,_jsx(_components.code,{children:`appId`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`source: \"artifact_url\"`}),` means TesterArmy imported the artifact for this batch.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Artifact-imported apps are temporary. They are removed automatically after every run in the webhook batch reaches a terminal state.`}),`\n`,_jsx(Heading,{level:`2`,id:`failure-notifications`,children:`Failure notifications`}),`\n`,_jsxs(_components.p,{children:[`When a webhook-triggered batch completes and any test fails, TesterArmy sends the failure summary to connected chat providers such as `,_jsx(_components.a,{href:`/integrations/slack`,children:`Slack`}),` or `,_jsx(_components.a,{href:`/integrations/discord`,children:`Discord`}),`. If no chat provider delivers, TesterArmy falls back to email.`]}),`\n`,_jsxs(_components.p,{children:[`Batches triggered with `,_jsx(_components.code,{children:`commitSha`}),` can still report status back through GitHub, but chat notifications remain project-level alerts for the completed batch.`]}),`\n`,_jsx(Heading,{level:`2`,id:`limits`,children:`Limits`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`1 webhook per group.`}),` The secret is shown once. If it is lost, use `,_jsx(_components.strong,{children:`Regenerate URL`}),` in the group’s webhook menu; the previous URL stops working immediately.`]}),`\n`,_jsxs(_components.li,{children:[`Subject to your team’s usage limits - returns `,_jsx(_components.code,{children:`429`}),` if exceeded.`]}),`\n`,_jsxs(_components.li,{children:[`Webhook must be `,_jsx(_components.strong,{children:`active`}),` to accept requests. Switching the webhook `,_jsx(_components.strong,{children:`Off`}),` deactivates it (the URL is preserved); a deactivated webhook returns `,_jsx(_components.code,{children:`403`}),`.`]}),`\n`]})]})}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":{"codeStyling":{"theme":"vesper"},"config":{},"pageMetadata":{"title":"Group Webhooks","description":"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.","og:image":"https://tester.army/og-images/docs/run/group-webhooks.webp","og:image:width":1220,"og:image:height":630,"icon":"webhook","iconType":"duotone","href":"/run/group-webhooks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"Trigger","slug":"trigger","depth":2,"children":[{"title":"Optional body","slug":"optional-body","depth":3,"children":[]},{"title":"Choosing the run platform","slug":"choosing-the-run-platform","depth":3,"children":[]},{"title":"Mobile app override","slug":"mobile-app-override","depth":3,"children":[]},{"title":"Response","slug":"response","depth":3,"children":[]}]},{"title":"Failure notifications","slug":"failure-notifications","depth":2,"children":[]},{"title":"Limits","slug":"limits","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"tester-army","siteName":"TesterArmy","title":"Group Webhooks - TesterArmy","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-12T12:06:03.528Z","originalFileLocation":"run/group-webhooks.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=\"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\">\u003cmeta data-mint-head name=\"application-name\" content=\"TesterArmy\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_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/tester-army/TtppYuy6BcVq96kt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Group Webhooks - TesterArmy\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TesterArmy\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tester.army/run/group-webhooks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tester.army/og-images/docs/run/group-webhooks.webp\">\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=\"Group Webhooks - TesterArmy\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tester.army/og-images/docs/run/group-webhooks.webp\">\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/tester-army/TtppYuy6BcVq96kt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TesterArmy\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF8001\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tester.army/run/group-webhooks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/run/group-webhooks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tester.army/#organization\",\"name\":\"TesterArmy\",\"url\":\"https://docs.tester.army\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tester-army/cxPvc8T8okiKYoP3/logo/light.svg?fit=max\u0026auto=format\u0026n=cxPvc8T8okiKYoP3\u0026q=85\u0026s=d248c622a49091cb7ef1cb2868377b57\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tester.army#website\",\"name\":\"TesterArmy\",\"url\":\"https://docs.tester.army\",\"publisher\":{\"@id\":\"https://docs.tester.army/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tester.army/run/group-webhooks#webpage\",\"url\":\"https://docs.tester.army/run/group-webhooks\",\"name\":\"Group Webhooks\",\"description\":\"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\",\"dateModified\":\"2026-09-12T12:06:03.528Z\",\"isPartOf\":{\"@id\":\"https://docs.tester.army#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tester.army/run/group-webhooks#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tester.army/run/group-webhooks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automate Testing\",\"item\":\"https://docs.tester.army/integrations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI and Custom Deployments\",\"item\":\"https://docs.tester.army/integrations/gitlab-ci\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Group Webhooks\",\"item\":\"https://docs.tester.army/run/group-webhooks\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.tester.army/run/group-webhooks#article\",\"headline\":\"Group Webhooks\",\"name\":\"Group Webhooks\",\"description\":\"Run every test in a group with a single HTTP call from any CI/CD pipeline or deployment tool.\",\"url\":\"https://docs.tester.army/run/group-webhooks\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tester.army/run/group-webhooks#webpage\"},\"image\":\"https://tester.army/og-images/docs/run/group-webhooks.webp\",\"dateModified\":\"2026-09-12T12:06:03.528Z\",\"publisher\":{\"@id\":\"https://docs.tester.army/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tester.army#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TesterArmy\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TesterArmy","nav":{"global":null,"tabs":[{"tab":"Docs","icon":{"style":"duotone","name":"house"},"groups":[{"group":"Get Started","pages":[{"title":"Welcome","icon":"house","iconType":"duotone","href":"/get-started"},{"title":"Introduction","icon":"book-open","iconType":"duotone","href":"/get-started/introduction"},{"title":"Quick Start","icon":"rocket-launch","iconType":"duotone","href":"/get-started/quick-start"}]},{"group":"Set Up Your Project","pages":[{"title":"Environments","icon":"globe","iconType":"duotone","href":"/guides/environments"},{"title":"Test Credentials","icon":"key","iconType":"duotone","href":"/auth/credentials"},{"title":"Project Memory","icon":"brain","iconType":"duotone","href":"/guides/project-memory"},{"title":"Agent Mail Inboxes","icon":"envelope","iconType":"duotone","href":"/auth/agent-mail-inboxes"},{"title":"SMS Phone Numbers","icon":"mobile","iconType":"duotone","href":"/auth/sms-phone-numbers"},{"group":"Access Protected Applications","icon":{"style":"duotone","name":"shield-keyhole"},"pages":[{"title":"HTTP Basic Auth","icon":"lock-keyhole","iconType":"duotone","href":"/auth/basic-auth"},{"title":"Custom Headers","icon":"code","iconType":"duotone","href":"/auth/custom-headers"},{"title":"Cloudflare Zero Trust","icon":"cloudflare","iconType":"brands","href":"/auth/cloudflare-zero-trust"},{"title":"Vercel Preview Deployments","icon":"triangle","iconType":"duotone","href":"/auth/vercel-preview-deployments"}]}]},{"group":"Build and Run Tests","pages":[{"title":"Core Concepts","icon":"diagram-project","iconType":"duotone","href":"/get-started/core-concepts"},{"title":"Writing Test Steps","icon":"list-check","iconType":"duotone","href":"/guides/writing-test-steps"},{"title":"Organize Tests into Groups","icon":"folder-tree","iconType":"duotone","href":"/run/groups"},{"title":"Run Mode","icon":"gauge-high","iconType":"duotone","href":"/run/run-mode"},{"title":"Preparation Test","icon":"list-check","iconType":"duotone","href":"/run/prep-test"},{"title":"Viewport Size","icon":"display","iconType":"duotone","href":"/run/viewport-size"},{"title":"Browser Location","icon":"globe","iconType":"duotone","href":"/run/browser-location"},{"title":"Understand Results","icon":"square-poll-horizontal","iconType":"duotone","href":"/run/results"},{"title":"Track Issues","icon":"shield-exclamation","iconType":"duotone","href":"/run/issues"},{"title":"Discovery Runs","icon":"compass","iconType":"duotone","href":"/run/discovery-runs"},{"title":"Accessibility Audits","icon":"universal-access","iconType":"duotone","href":"/run/accessibility-audit"},{"title":"Agent Instructions","icon":"message-lines","iconType":"duotone","href":"/run/agent-instructions"},{"title":"Run Videos","icon":"video","iconType":"duotone","href":"/run/videos"}]},{"group":"Automate Testing","pages":[{"title":"Automate Testing","icon":"gears","iconType":"duotone","href":"/integrations"},{"group":"GitHub Pull Request Testing","icon":{"style":"brands","name":"github"},"pages":[{"title":"Connect GitHub","icon":"github","iconType":"brands","href":"/integrations/github"},{"title":"Pull Request Testing","icon":"code-pull-request","iconType":"duotone","href":"/run/pull-request-testing"},{"title":"Regression Testing","icon":"shield-check","iconType":"duotone","href":"/run/pr-regression-testing"},{"title":"Exploration Agent","icon":"wand-magic-sparkles","iconType":"duotone","href":"/run/pr-exploration-agent"}]},{"group":"CI and Custom Deployments","icon":{"style":"duotone","name":"code-branch"},"pages":[{"title":"Run from GitLab CI","icon":"gitlab","iconType":"brands","href":"/integrations/gitlab-ci"},{"title":"Any CI or Custom Deployment","description":"Trigger TesterArmy from any CI or deployment system - Jenkins, Buildkite, CircleCI, GitHub Actions, or a shell script - with a signed group webhook.","icon":"network-wired","iconType":"duotone","href":"/integrations/custom-infrastructure"},{"title":"Group Webhooks","icon":"webhook","iconType":"duotone","href":"/run/group-webhooks"},{"title":"Testing Staging Environment","description":"Trigger TesterArmy test groups after each staging deployment on your own infrastructure using a saved environment and a signed group webhook.","icon":"flask","iconType":"duotone","href":"/guides/testing-staging"}]},{"group":"Preview Providers","icon":{"style":"duotone","name":"cloud"},"pages":[{"title":"Vercel","icon":"triangle","iconType":"duotone","href":"/integrations/vercel"},{"title":"Netlify","icon":"server","iconType":"duotone","href":"/integrations/netlify"},{"title":"Coolify","icon":"server","iconType":"duotone","href":"/integrations/coolify"}]},{"title":"Production Monitoring","icon":"clock-rotate-left","iconType":"duotone","href":"/run/production-monitoring"},{"group":"Notifications","icon":{"style":"duotone","name":"bell"},"pages":[{"title":"Slack","icon":"slack","iconType":"brands","href":"/integrations/slack"},{"title":"Discord","icon":"discord","iconType":"brands","href":"/integrations/discord"},{"title":"Email","icon":"envelope","iconType":"duotone","href":"/integrations/email"}]},{"group":"Issue Tracking","icon":{"style":"duotone","name":"bug"},"pages":[{"title":"Linear","icon":"ticket","iconType":"duotone","href":"/integrations/linear"},{"title":"Jira","icon":"jira","iconType":"brands","href":"/integrations/jira"},{"title":"ClickUp","icon":"square-check","iconType":"duotone","href":"/integrations/clickup"}]},{"group":"Test Management","icon":{"style":"duotone","name":"clipboard-check"},"pages":[{"title":"Export to TestRail (JUnit XML)","icon":"clipboard-check","iconType":"duotone","href":"/integrations/testrail"}]}]},{"group":"Mobile Testing","pages":[{"title":"Overview","icon":"mobile-screen","iconType":"duotone","href":"/mobile/overview"},{"title":"App Uploads","icon":"cloud-arrow-up","iconType":"duotone","href":"/mobile/app-uploads"},{"title":"Dev Builds \u0026 Metro","icon":"triangle-exclamation","iconType":"duotone","href":"/mobile/dev-builds"},{"title":"GitHub Actions","icon":"github","iconType":"brands","href":"/mobile/github-actions"},{"title":"Expo EAS","icon":"rocket-launch","iconType":"duotone","href":"/mobile/expo-eas"},{"title":"Bitrise","icon":"mobile-screen-button","iconType":"duotone","href":"/mobile/bitrise"},{"title":"Test Apple Pay","icon":"apple-pay","iconType":"brands","href":"/mobile/apple-pay"}]},{"group":"CLI and Coding Agents","pages":[{"title":"Getting Started","icon":"terminal","iconType":"duotone","href":"/cli"},{"title":"CLI Command Reference","icon":"list","iconType":"duotone","href":"/cli/commands"},{"title":"Agentic Usage","icon":"robot","iconType":"duotone","href":"/cli/agentic-usage"},{"title":"MCP Server","icon":"plug","iconType":"duotone","href":"/cli/mcp"},{"title":"Local Development","icon":"laptop-code","iconType":"duotone","href":"/cli/local-dev"},{"title":"API Keys","icon":"key","iconType":"duotone","href":"/auth/api-keys"}]},{"group":"Account and Billing","pages":[{"title":"Plans and Pricing","icon":"credit-card","iconType":"duotone","href":"/account/plans-and-pricing"},{"title":"Team Members","icon":"users","iconType":"duotone","href":"/account/team-members"}]},{"group":"Troubleshooting","pages":[{"title":"Run Troubleshooting","icon":"triangle-exclamation","iconType":"duotone","href":"/run/troubleshooting"},{"title":"Auth Troubleshooting","icon":"circle-question","iconType":"duotone","href":"/auth/troubleshooting"}]},{"group":"Migrate to TesterArmy","pages":[{"title":"Migrate from Playwright","icon":"masks-theater","iconType":"duotone","href":"/guides/migrate-from-playwright"},{"title":"Migrate from Puppeteer","icon":"hand-sparkles","iconType":"duotone","href":"/guides/migrate-from-puppeteer"},{"title":"Migrate from Cypress","icon":"tree","iconType":"duotone","href":"/guides/migrate-from-cypress"},{"title":"Migrate from Selenium","icon":"flask-vial","iconType":"duotone","href":"/guides/migrate-from-selenium"},{"title":"Migrate from Appium","icon":"mobile","iconType":"duotone","href":"/guides/migrate-from-appium"},{"title":"Migrate from Maestro","icon":"list-tree","iconType":"duotone","href":"/guides/migrate-from-maestro"},{"title":"Migrate from Mabl","icon":"wand-magic-sparkles","iconType":"duotone","href":"/guides/migrate-from-mabl"},{"title":"Migrate from Bug0","icon":"bug","iconType":"duotone","href":"/guides/migrate-from-bug0"}]},{"group":"Resources","pages":[{"title":"AI-Readable Documentation","icon":"sparkles","iconType":"duotone","href":"/llms"}]}]},{"tab":"API Reference","icon":{"style":"duotone","name":"code"},"pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"title":"Group Webhooks - TesterArmy","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}