Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.
Run your API tests automatically in CI with the Checksum API Testing GitHub Action. It triggers a run of your suites in Checksum’s cloud, waits for the result, and returns pass/fail counts you can act on, so a broken API blocks the merge.
name: API Testing with Checksum AIon: pull_request: types: [opened, synchronize, reopened] workflow_dispatch: {}jobs: checksum-tests: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Run Checksum test suites uses: checksum-ai/checksum-action/api-testing@main with: checksum_api_key: ${{ secrets.CHECKSUM_API_KEY }} suite-ids: ""
By default (suite-ids: "") the Action runs every suite that has generated code, the same as Run Suite in the app. The run appears on the API Test Runs page, and failures flow to Triage as usual.
Pass a comma-separated list of suite UUIDs to run only those:
- name: Run specific test suites uses: checksum-ai/checksum-action/api-testing@main with: checksum_api_key: ${{ secrets.CHECKSUM_API_KEY }} suite-ids: "uuid-1,uuid-2,uuid-3"
This fails the build on either failed or errored tests. To also block on confirmed bugs, add || steps.checksum.outputs.bug-count != '0' to the condition.
Use result-url in a PR comment or job summary so reviewers can jump straight to the run report.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Checksum AI","colors":{"primary":"#4b47ff","light":"#7b78ff","dark":"#3631c2"},"favicon":"https://mintcdn.com/checksum/wZyd4JkJxoxMAP-8/favicon.svg?fit=max\u0026auto=format\u0026n=wZyd4JkJxoxMAP-8\u0026q=85\u0026s=ae163ffdd590aeab0b119c3f7b57a6e7","navbar":{"primary":{"type":"button","label":"Get Started","href":"https://checksum.ai/request-demo"}},"footer":{"links":[{"header":"Support","items":[{"label":"support@checksum.ai","href":"mailto:support@checksum.ai"},{"label":"Checksum web app","href":"https://app.checksum.ai"}]}]},"fonts":{"family":"Google Sans"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"checksum","hasAudioNarration":false,"actualSubdomain":"checksum","customDomains":["checksum.ai"],"gitSource":{"type":"github","owner":"checksum-ai","repo":"checksumai-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ad65bd3dd9cbc8cb861264e","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"E2E Testing","count":26},{"language":"default","tag":"API Testing","count":13},{"language":"default","tag":"Test Generation","count":6},{"language":"default","tag":"Create \u0026 Review","count":5},{"language":"default","tag":"Test Execution","count":5},{"language":"default","tag":"Managing Your Project","count":4},{"language":"default","tag":"Run \u0026 Monitor","count":3},{"language":"default","tag":"Maintenance \u0026 Monitoring","count":3},{"language":"default","tag":"Integrations","count":3},{"language":"default","tag":"Start Here","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"llms-txt-v2","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}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"#topbar-cta-button>a>span:first-child{border-radius:10rem;background-color:#4b47ff;transition:background-color 0.3s cubic-bezier(0.165, 0.84, 0.44, 1)}#topbar-cta-button>a:hover>span:first-child{background-color:#3631c2;opacity:1}#topbar-cta-button>a{padding:0.5rem 1.375rem}#topbar-cta-button>a svg{display:none}#topbar-cta-button>a>div{margin-right:0}#topbar-cta-button>a>div>span{font-weight:500;letter-spacing:0}.part{display:flex;align-items:center;gap:14px;margin:56px 0 8px;padding:16px 20px;border-radius:16px;border:1px solid rgb(224 224 230);background:rgb(245 245 250 / 0.5)}.part .part-icon{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex:none;font:700 13px ui-monospace, SFMono-Regular, Menlo, monospace;color:#4b47ff;background:rgb(75 71 255 / 0.1)}.part.ui .part-icon{color:#166534;background:#f0fdf4}.part.bg .part-icon{color:rgb(82 82 87);background:rgb(114 114 119 / 0.12);font-family:inherit}.part .part-title{font-weight:600;font-size:16px;line-height:22px;color:rgb(25 24 30)}.part .part-sub{font-size:14px;line-height:20px;color:rgb(114 114 119)}.dark .part{border-color:rgb(255 255 255 / 0.12);background:rgb(255 255 255 / 0.03)}.dark .part .part-icon{color:#7b78ff;background:rgb(123 120 255 / 0.12)}.dark .part.ui .part-icon{color:#86efac;background:rgb(22 101 52 / 0.15)}.dark .part.bg .part-icon{color:rgb(160 160 166);background:rgb(255 255 255 / 0.06)}.dark .part .part-title{color:rgb(224 224 230)}.flow{display:flex;flex-wrap:wrap;align-items:stretch;gap:8px;margin:20px 0 28px}.flow .node{flex:1 1 110px;border:1px solid rgb(224 224 230);border-radius:12px;padding:10px 12px;font-size:13px;line-height:19px}.flow .node b{display:block;font-size:14px;color:rgb(25 24 30);font-weight:600;margin-bottom:2px}.flow .node span{color:rgb(82 82 87)}.flow .node code{font-size:12px;padding:1px 5px}.flow .arrow{align-self:center;color:rgb(114 114 119)}.dark .flow .node{border-color:rgb(255 255 255 / 0.12)}.dark .flow .node b{color:rgb(224 224 230)}.dark .flow .node span{color:rgb(160 160 166)}.pill{display:inline-block;font-weight:600;font-size:12px;line-height:18px;padding:1px 8px;border-radius:8px;white-space:nowrap;vertical-align:1px;background:rgb(114 114 119 / 0.1);color:rgb(82 82 87)}.pill.app{background:rgb(75 71 255 / 0.1);color:#4b47ff}.pill.api{background:rgb(37 99 235 / 0.1);color:#2563eb}.pill.agent{background:rgb(147 51 234 / 0.1);color:#9333ea}.pill.cs{background:rgb(234 88 12 / 0.1);color:#ea580c}.pill.git{background:rgb(22 163 74 / 0.1);color:#16a34a}.dark .pill{color:rgb(160 160 166)}.dark .pill.app{color:#7b78ff}.endpoint{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0;padding:8px 12px 8px 8px;border:1px solid rgb(12 12 17 / 0.1);border-radius:12px;font:14px/20px ui-monospace, SFMono-Regular, Menlo, monospace;color:rgb(25 24 30)}.endpoint code{background:none!important;border:0!important;padding:0!important;font:inherit;color:inherit;font-weight:500}.endpoint .method{font:700 12px/1 inherit;font-family:inherit;padding:5px 8px;border-radius:8px;letter-spacing:.02em}.endpoint .method.get{color:#16a34a;background:rgb(22 163 74 / 0.12)}.endpoint .method.post{color:#2563eb;background:rgb(37 99 235 / 0.12)}.endpoint .method.put{color:#ea580c;background:rgb(234 88 12 / 0.12)}.endpoint .method.delete{color:#dc2626;background:rgb(220 38 38 / 0.12)}.dark .endpoint{border-color:rgb(255 255 255 / 0.1);color:rgb(224 224 230)}.ai-ref>details.accordion{border:1px dashed rgb(75 71 255 / 0.35)!important;background:rgb(75 71 255 / 0.03)!important}.dark .ai-ref>details.accordion{border-color:rgb(123 120 255 / 0.35)!important;background:rgb(123 120 255 / 0.05)!important}.ai-ref{margin:8px 0 32px}"}],"page":{"pagePath":"api-testing/ci-integration","slug":"/api-testing/ci-integration","pageMetadata":{"title":"CI Integration","description":"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.","href":"/api-testing/ci-integration"},"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 your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\"\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`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Run your API tests automatically in CI with the `,_jsx(_components.strong,{children:`Checksum API Testing GitHub Action`}),`. It triggers a run of your suites in Checksum’s cloud, waits for the result, and returns pass/fail counts you can act on, so a broken API blocks the merge.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Get your project `,_jsx(_components.strong,{children:`API key`}),` from the Checksum web app (`,_jsx(_components.strong,{children:`Settings → Project Settings`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Add it to your repository as a secret named `,_jsx(_components.code,{children:`CHECKSUM_API_KEY`}),` (`,_jsx(_components.strong,{children:`Settings → Secrets and variables → Actions`}),`).`]}),`\n`,_jsx(_components.li,{children:`Add the workflow below.`}),`\n`]}),`\n`,_jsx(Warning,{children:`Store the API key as a CI secret. Never commit it to your repository.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`github-actions`,children:`GitHub Actions`}),`\n`,_jsxs(_components.p,{children:[`Create `,_jsx(_components.code,{children:`.github/workflows/checksum-api-tests.yml`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`API Testing with Checksum AI`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`on`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` pull_request`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` types`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`opened`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`synchronize`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`reopened`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` workflow_dispatch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`jobs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` checksum-tests`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` runs-on`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ubuntu-latest`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` steps`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Checkout`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`actions/checkout@v4`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Run Checksum test suites`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`checksum-ai/checksum-action/api-testing@main`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` checksum_api_key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"${{ secrets.CHECKSUM_API_KEY }}\"})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` suite-ids`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`By default (`,_jsx(_components.code,{children:`suite-ids: \"\"`}),`) the Action runs every suite that has generated code, the same as `,_jsx(_components.strong,{children:`Run Suite`}),` in the app. The run appears on the `,_jsx(_components.a,{href:`/api-testing/run-tests`,children:`API Test Runs`}),` page, and failures flow to `,_jsx(_components.a,{href:`/api-testing/triage`,children:`Triage`}),` as usual.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`inputs`,children:`Inputs`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Input`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checksum_api_key`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`None`}),_jsx(_components.td,{children:`Your Checksum project API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`suite-ids`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"\"`})}),_jsx(_components.td,{children:`Comma-separated suite UUIDs to run. Empty runs all suites with code`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`base-url`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://aiagents.checksum.ai`})}),_jsx(_components.td,{children:`Checksum API base URL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`poll-interval-seconds`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`10`})}),_jsx(_components.td,{children:`How often the Action polls for run status`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timeout-seconds`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`600`})}),_jsx(_components.td,{children:`Max time to wait for the run to finish`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`outputs`,children:`Outputs`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Output`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`test-run-id`})}),_jsx(_components.td,{children:`ID of the test run`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status`})}),_jsx(_components.td,{children:`Final status of the run`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`passed-count`})}),_jsx(_components.td,{children:`Number of passed tests`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`failed-count`})}),_jsx(_components.td,{children:`Number of failed tests`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`healed-count`})}),_jsx(_components.td,{children:`Number of healed tests`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bug-count`})}),_jsx(_components.td,{children:`Number of tests marked as bugs`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`error-count`})}),_jsx(_components.td,{children:`Number of tests that ended in error`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`result-url`})}),_jsx(_components.td,{children:`Link to view the run in Checksum`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`run-specific-suites`,children:`Run specific suites`}),`\n`,_jsx(_components.p,{children:`Pass a comma-separated list of suite UUIDs to run only those:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`- `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Run specific test suites`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`checksum-ai/checksum-action/api-testing@main`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` checksum_api_key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"${{ secrets.CHECKSUM_API_KEY }}\"})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` suite-ids`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"uuid-1,uuid-2,uuid-3\"`})]}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`gate-the-build-on-results`,children:`Gate the build on results`}),`\n`,_jsxs(_components.p,{children:[`Give the step an `,_jsx(_components.code,{children:`id`}),`, then read its outputs in later steps to log the result and fail the build when tests fail:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`- `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Run Checksum tests`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`checksum`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`checksum-ai/checksum-action/api-testing@main`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` checksum_api_key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"${{ secrets.CHECKSUM_API_KEY }}\"})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`- `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Fail if tests failed`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"${{ steps.checksum.outputs.failed-count != '0' || steps.checksum.outputs.error-count != '0' }}\"})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` run`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:' echo \"Tests failed. See ${{ steps.checksum.outputs.result-url }}\"'})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exit 1`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This fails the build on either failed or errored tests. To also block on confirmed bugs, add `,_jsx(_components.code,{children:`|| steps.checksum.outputs.bug-count != '0'`}),` to the condition.`]}),`\n`,_jsxs(Tip,{children:[`Use `,_jsx(_components.code,{children:`result-url`}),` in a PR comment or job summary so reviewers can jump straight to the run report.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api-testing/run-tests`,children:`Read a run report`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api-testing/triage`,children:`Triage failures`})}),`\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":{"config":{},"pageMetadata":{"title":"CI Integration","description":"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.","href":"/api-testing/ci-integration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"GitHub Actions","slug":"github-actions","depth":2,"children":[]},{"title":"Inputs","slug":"inputs","depth":2,"children":[]},{"title":"Outputs","slug":"outputs","depth":2,"children":[]},{"title":"Run specific suites","slug":"run-specific-suites","depth":2,"children":[]},{"title":"Gate the build on results","slug":"gate-the-build-on-results","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"checksum","siteName":"Checksum AI","title":"CI Integration - Checksum AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-25T06:53:01.705Z","originalFileLocation":"api-testing/ci-integration.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 your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Checksum AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_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=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"CI Integration - Checksum AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Checksum AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://checksum.ai/docs/api-testing/ci-integration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://checksum.mintlify.site/docs/_mintlify/api/og/v2?division=CI+%26+Automation\u0026amp;title=CI+Integration\u0026amp;description=Run+your+API+test+suites+in+CI+with+the+Checksum+GitHub+Action%2C+on+every+pull+request%2C+on+a+schedule%2C+or+on+demand%2C+and+gate+your+pipeline+on+the+results.\u0026amp;theme=c85aea844d07e0308e4277b6\u0026amp;signature=b4b28e7872c18ad2b2d0331b5719855f66da87506e522cd1e8306560af5b64ed\">\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=\"CI Integration - Checksum AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://checksum.mintlify.site/docs/_mintlify/api/og/v2?division=CI+%26+Automation\u0026amp;title=CI+Integration\u0026amp;description=Run+your+API+test+suites+in+CI+with+the+Checksum+GitHub+Action%2C+on+every+pull+request%2C+on+a+schedule%2C+or+on+demand%2C+and+gate+your+pipeline+on+the+results.\u0026amp;theme=c85aea844d07e0308e4277b6\u0026amp;signature=b4b28e7872c18ad2b2d0331b5719855f66da87506e522cd1e8306560af5b64ed\">\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=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Checksum AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4b47ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://checksum.ai/docs/api-testing/ci-integration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-testing/ci-integration.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://checksum.ai/#organization\",\"name\":\"Checksum AI\",\"url\":\"https://checksum.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://checksum.ai/docs#website\",\"name\":\"Checksum AI\",\"url\":\"https://checksum.ai/docs\",\"publisher\":{\"@id\":\"https://checksum.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://checksum.ai/docs/api-testing/ci-integration#webpage\",\"url\":\"https://checksum.ai/docs/api-testing/ci-integration\",\"name\":\"CI Integration\",\"description\":\"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\",\"dateModified\":\"2026-06-25T06:53:01.705Z\",\"isPartOf\":{\"@id\":\"https://checksum.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://checksum.ai/docs/api-testing/ci-integration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://checksum.ai/docs/api-testing/ci-integration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Checksum AI\",\"item\":\"https://checksum.ai/docs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI Integration\",\"item\":\"https://checksum.ai/docs/api-testing/ci-integration\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://checksum.ai/docs/api-testing/ci-integration#article\",\"headline\":\"CI Integration\",\"name\":\"CI Integration\",\"description\":\"Run your API test suites in CI with the Checksum GitHub Action, on every pull request, on a schedule, or on demand, and gate your pipeline on the results.\",\"url\":\"https://checksum.ai/docs/api-testing/ci-integration\",\"mainEntityOfPage\":{\"@id\":\"https://checksum.ai/docs/api-testing/ci-integration#webpage\"},\"dateModified\":\"2026-06-25T06:53:01.705Z\",\"publisher\":{\"@id\":\"https://checksum.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://checksum.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Checksum AI\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Checksum AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/api-testing/ci-integration.md","siteName":"Checksum AI","nav":{"global":null,"tabs":[{"tab":"E2E Testing","pages":[{"title":"E2E Testing","href":"/overview"}]},{"tab":"API Testing","groups":[{"group":"Get Started","pages":[{"title":"API Testing","href":"/api-testing"},{"title":"Upload API Specs","href":"/api-testing/upload-specs"}]},{"group":"Create \u0026 Review","pages":[{"title":"Generate API Tests","href":"/api-testing/generate-tests"},{"title":"Agent Sessions","href":"/api-testing/agent-sessions"},{"title":"Generated Tests","href":"/api-testing/generated-tests"},{"title":"View API Tests","href":"/api-testing/view-tests"},{"title":"API Files","href":"/api-testing/api-files"}]},{"group":"Configure","pages":[{"title":"Environment Variables","href":"/api-testing/environment-variables"},{"title":"Archive Tests","href":"/api-testing/archive-tests"}]},{"group":"Run \u0026 Monitor","pages":[{"title":"Run API Tests","href":"/api-testing/run-tests"},{"title":"Triage Bugs","href":"/api-testing/triage"},{"title":"API Health Dashboard","description":"See your API testing metrics in one place: latest run results, tests awaiting a verdict, active bugs and skips, and a 30-day timeline of daily reports.","href":"/api-testing/health-dashboard"}]},{"group":"CI \u0026 Automation","pages":[{"title":"CI Integration","href":"/api-testing/ci-integration"}]}]}]},"basePath":"","title":"CI Integration - Checksum AI","buildId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","deploymentId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","dynamics":[],"chunks":[]}