{ "error": { "code": "unknown_commit", "message": "0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from." }}
Sends one lab run of a pytest suite that never runs in your CI, such as device tests on lab hardware. Peeps files it as a CI run of the project’s repository, at the commit and branch you send, and analyzes its failures. An upload of a fix’s peeps/… branch can also settle that fix’s pull request. For the setup and an example workflow, see Send results from your lab.The project must be backed by a repository, and the key must name it under Only these projects. A key for all web projects can’t send lab results, and gets 404.Sending again files a second batch: Peeps doesn’t recognize a resend. Lab runs count toward the same minute limits as report files. See Rate limits.
Besides 401, 429, 503 and 500 from the errors table, sending lab results can return:
Status
Code
When
What to do
400
invalid_request
Content-Length isn’t a number, the body is empty or isn’t the size Content-Length says, the body isn’t JSON, or a field is missing or invalid. The message names the field.
Fix the request and send it again.
404
not_found_or_no_access
No project has that acronym or ID in your organization, or the key doesn’t name it under Only these projects.
Check the project and the key’s projects.
408
body_timeout
The body didn’t arrive within 120 seconds.
Send it again.
411
length_required
The request has no Content-Length header.
Send the body with its size, as curl --data-binary does.
413
too_large
The body is over 50 MiB.
Send a smaller report.
413
too_many_tests
The JUnit reports more than 2,000 tests.
Split the run into several uploads.
422
platform_not_supported
The project isn’t backed by a repository.
Send lab results to a project backed by a repository, or send a report file instead.
422
not_connected
The project is no longer connected to a repository.
Connect the repository again.
422
branch_not_followed
Peeps doesn’t follow gitRef, or it’s a fix’s branch and commitSha isn’t the commit Peeps pushed there. The message names the branches or the commit to send.
Send results for the headline branch or a tracked branch, or for the fix’s commit.
422
unknown_commit
commitSha isn’t a commit on gitRef.
Send the full 40-character commit the tests were built from.
422
malformed_report
Peeps couldn’t read junit as a JUnit report.
Send the XML that pytest’s --junitxml option wrote.
422
test_not_reported
gitRef is a fix’s branch, and the JUnit doesn’t report the test the fix is for. Nothing is filed.
Run that test. If pytest’s rootdir isn’t the repository root, send it as rootDir.
{ "error": { "code": "unknown_commit", "message": "0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from." }}
The project's acronym, in any case, such as LAB, or its ID. The project must be backed by a repository, and the key must name it under Only these projects.
Body
application/json
The lab run as JSON, up to 50 MiB. Send its size in bytes as Content-Length; curl --data-binary @file sends it for you. The whole body must arrive within 120 seconds.
The branch the commit is on: the headline branch, a branch listed under Tracked branches, or the peeps/… branch of a fix waiting for the lab, at the commit Peeps pushed.
What the lab knows about the run. Peeps shows it first on each result, and names the batch after the camera model and firmware. Any other field is refused.
{ "error": { "code": "unknown_commit", "message": "0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from." }}
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"peeps","description":"Peeps is autonomous verification for AI-native software teams — AI agents that write, run, and self-heal your E2E regression suites. These docs cover tests that live in your own repository, the Peeps MCP server, the GitHub and GitLab integrations, and single sign-on.","colors":{"primary":"#2f62e8","light":"#98b7ff","dark":"#1a45c2"},"logo":{"light":"https://mintcdn.com/peeps-ai/UtvG6l0qqrp0Xcjp/logo/light.svg?fit=max\u0026auto=format\u0026n=UtvG6l0qqrp0Xcjp\u0026q=85\u0026s=cf33605c3f0149e1c994d0499dc50442","dark":"https://mintcdn.com/peeps-ai/UtvG6l0qqrp0Xcjp/logo/dark.svg?fit=max\u0026auto=format\u0026n=UtvG6l0qqrp0Xcjp\u0026q=85\u0026s=3d9b8395a37f9bb62a465af13a37a7b0"},"favicon":"https://mintcdn.com/peeps-ai/UtvG6l0qqrp0Xcjp/favicon.svg?fit=max\u0026auto=format\u0026n=UtvG6l0qqrp0Xcjp\u0026q=85\u0026s=c8a5915a043e73f33cb4692f2c38638a","api":{"playground":{"display":"interactive","proxy":false}},"background":{"color":{"light":"#ffffff","dark":"#151922"}},"navbar":{"links":[{"href":"mailto:support@peepsai.com","label":"Support"}],"primary":{"type":"button","label":"Open Peeps","href":"https://app.peepsai.com"}},"footer":{"socials":{}},"fonts":{"family":"Geist"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"peeps-ai","hasAudioNarration":false,"actualSubdomain":"peeps-ai","customDomains":["docs.peepsai.com"],"gitSource":{"type":"github","owner":"peeps-labs","repo":"peeps-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae70deda3bb2421cadf05f5","collectionId":"fc187721-b9b8-4583-bc2e-c9feefbeae01","liveDeploymentHistoryId":"6ae70deda3bb2421cadf05f5","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae70deda3bb2421cadf05f5","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Documentation","count":33},{"language":"default","tag":"Coding agent (MCP)","count":14},{"language":"default","tag":"In your repository","count":9},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"API reference","count":6},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Results","count":3},{"language":"default","tag":"Integrations","count":3},{"language":"default","tag":"Single sign-on","count":3},{"language":"default","tag":"Automate runs","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"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":"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":"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":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/results/send-lab-results","slug":"/api-reference/results/send-lab-results","pageMetadata":{"title":"Send lab results","sidebarTitle":"Send lab results","description":"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.","openapi":"api-reference/openapi.json POST /projects/{project}/ci-results","playground":"none","href":"/api-reference/results/send-lab-results"},"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: \"Send a lab run’s pytest JUnit to a project backed by a repository, filed as the repository’s CI runs at the commit and branch the lab tested.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Sends one lab run of a pytest suite that never runs in your CI, such as device tests on lab hardware. Peeps files it as a CI run of the project’s repository, at the commit and branch you send, and analyzes its failures. An upload of a fix’s `,_jsx(_components.code,{children:`peeps/…`}),` branch can also settle that fix’s pull request. For the setup and an example workflow, see `,_jsx(_components.a,{href:`/repository/lab-results`,children:`Send results from your lab`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The project must be backed by a repository, and the key must name it under `,_jsx(_components.strong,{children:`Only these projects`}),`. A key for all web projects can’t send lab results, and gets `,_jsx(_components.code,{children:`404`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Sending again files a second batch: Peeps doesn’t recognize a resend. Lab runs count toward the same minute limits as report files. See `,_jsx(_components.a,{href:`/api-reference/introduction#rate-limits`,children:`Rate limits`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(_components.p,{children:[`Besides `,_jsx(_components.code,{children:`401`}),`, `,_jsx(_components.code,{children:`429`}),`, `,_jsx(_components.code,{children:`503`}),` and `,_jsx(_components.code,{children:`500`}),` from the `,_jsx(_components.a,{href:`/api-reference/introduction#errors`,children:`errors table`}),`, sending lab results can return:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`When`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Content-Length`}),` isn’t a number, the body is empty or isn’t the size `,_jsx(_components.code,{children:`Content-Length`}),` says, the body isn’t JSON, or a field is missing or invalid. The message names the field.`]}),_jsx(_components.td,{children:`Fix the request and send it again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`not_found_or_no_access`})}),_jsxs(_components.td,{children:[`No project has that acronym or ID in your organization, or the key doesn’t name it under `,_jsx(_components.strong,{children:`Only these projects`}),`.`]}),_jsx(_components.td,{children:`Check the project and the key’s projects.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`408`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`body_timeout`})}),_jsx(_components.td,{children:`The body didn’t arrive within 120 seconds.`}),_jsx(_components.td,{children:`Send it again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`411`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`length_required`})}),_jsxs(_components.td,{children:[`The request has no `,_jsx(_components.code,{children:`Content-Length`}),` header.`]}),_jsxs(_components.td,{children:[`Send the body with its size, as `,_jsx(_components.code,{children:`curl --data-binary`}),` does.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`413`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`too_large`})}),_jsx(_components.td,{children:`The body is over 50 MiB.`}),_jsx(_components.td,{children:`Send a smaller report.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`413`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`too_many_tests`})}),_jsx(_components.td,{children:`The JUnit reports more than 2,000 tests.`}),_jsx(_components.td,{children:`Split the run into several uploads.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`platform_not_supported`})}),_jsx(_components.td,{children:`The project isn’t backed by a repository.`}),_jsxs(_components.td,{children:[`Send lab results to a project backed by a repository, or send a `,_jsx(_components.a,{href:`/api-reference/results/send-a-report-file`,children:`report file`}),` instead.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`not_connected`})}),_jsx(_components.td,{children:`The project is no longer connected to a repository.`}),_jsx(_components.td,{children:`Connect the repository again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`branch_not_followed`})}),_jsxs(_components.td,{children:[`Peeps doesn’t follow `,_jsx(_components.code,{children:`gitRef`}),`, or it’s a fix’s branch and `,_jsx(_components.code,{children:`commitSha`}),` isn’t the commit Peeps pushed there. The message names the branches or the commit to send.`]}),_jsx(_components.td,{children:`Send results for the headline branch or a tracked branch, or for the fix’s commit.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown_commit`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`commitSha`}),` isn’t a commit on `,_jsx(_components.code,{children:`gitRef`}),`.`]}),_jsx(_components.td,{children:`Send the full 40-character commit the tests were built from.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`malformed_report`})}),_jsxs(_components.td,{children:[`Peeps couldn’t read `,_jsx(_components.code,{children:`junit`}),` as a JUnit report.`]}),_jsxs(_components.td,{children:[`Send the XML that pytest’s `,_jsx(_components.code,{children:`--junitxml`}),` option wrote.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`test_not_reported`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`gitRef`}),` is a fix’s branch, and the JUnit doesn’t report the test the fix is for. Nothing is filed.`]}),_jsxs(_components.td,{children:[`Run that test. If pytest’s rootdir isn’t the repository root, send it as `,_jsx(_components.code,{children:`rootDir`}),`.`]})]})]})]})]})}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":"Send lab results","sidebarTitle":"Send lab results","description":"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.","openapi":"api-reference/openapi.json POST /projects/{project}/ci-results","playground":"none","href":"/api-reference/results/send-lab-results"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,RequestExample,ResponseExample,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Sends one lab run of a pytest suite that never runs in your CI, such as device tests on lab hardware. Peeps files it as a CI run of the project’s repository, at the commit and branch you send, and analyzes its failures. An upload of a fix’s `,_jsx(_components.code,{children:`peeps/…`}),` branch can also settle that fix’s pull request. For the setup and an example workflow, see `,_jsx(_components.a,{href:`/repository/lab-results`,children:`Send results from your lab`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The project must be backed by a repository, and the key must name it under `,_jsx(_components.strong,{children:`Only these projects`}),`. A key for all web projects can’t send lab results, and gets `,_jsx(_components.code,{children:`404`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Sending again files a second batch: Peeps doesn’t recognize a resend. Lab runs count toward the same minute limits as report files. See `,_jsx(_components.a,{href:`/api-reference/introduction#rate-limits`,children:`Rate limits`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(_components.p,{children:[`Besides `,_jsx(_components.code,{children:`401`}),`, `,_jsx(_components.code,{children:`429`}),`, `,_jsx(_components.code,{children:`503`}),` and `,_jsx(_components.code,{children:`500`}),` from the `,_jsx(_components.a,{href:`/api-reference/introduction#errors`,children:`errors table`}),`, sending lab results can return:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`When`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Content-Length`}),` isn’t a number, the body is empty or isn’t the size `,_jsx(_components.code,{children:`Content-Length`}),` says, the body isn’t JSON, or a field is missing or invalid. The message names the field.`]}),_jsx(_components.td,{children:`Fix the request and send it again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`not_found_or_no_access`})}),_jsxs(_components.td,{children:[`No project has that acronym or ID in your organization, or the key doesn’t name it under `,_jsx(_components.strong,{children:`Only these projects`}),`.`]}),_jsx(_components.td,{children:`Check the project and the key’s projects.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`408`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`body_timeout`})}),_jsx(_components.td,{children:`The body didn’t arrive within 120 seconds.`}),_jsx(_components.td,{children:`Send it again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`411`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`length_required`})}),_jsxs(_components.td,{children:[`The request has no `,_jsx(_components.code,{children:`Content-Length`}),` header.`]}),_jsxs(_components.td,{children:[`Send the body with its size, as `,_jsx(_components.code,{children:`curl --data-binary`}),` does.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`413`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`too_large`})}),_jsx(_components.td,{children:`The body is over 50 MiB.`}),_jsx(_components.td,{children:`Send a smaller report.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`413`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`too_many_tests`})}),_jsx(_components.td,{children:`The JUnit reports more than 2,000 tests.`}),_jsx(_components.td,{children:`Split the run into several uploads.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`platform_not_supported`})}),_jsx(_components.td,{children:`The project isn’t backed by a repository.`}),_jsxs(_components.td,{children:[`Send lab results to a project backed by a repository, or send a `,_jsx(_components.a,{href:`/api-reference/results/send-a-report-file`,children:`report file`}),` instead.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`not_connected`})}),_jsx(_components.td,{children:`The project is no longer connected to a repository.`}),_jsx(_components.td,{children:`Connect the repository again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`branch_not_followed`})}),_jsxs(_components.td,{children:[`Peeps doesn’t follow `,_jsx(_components.code,{children:`gitRef`}),`, or it’s a fix’s branch and `,_jsx(_components.code,{children:`commitSha`}),` isn’t the commit Peeps pushed there. The message names the branches or the commit to send.`]}),_jsx(_components.td,{children:`Send results for the headline branch or a tracked branch, or for the fix’s commit.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown_commit`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`commitSha`}),` isn’t a commit on `,_jsx(_components.code,{children:`gitRef`}),`.`]}),_jsx(_components.td,{children:`Send the full 40-character commit the tests were built from.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`malformed_report`})}),_jsxs(_components.td,{children:[`Peeps couldn’t read `,_jsx(_components.code,{children:`junit`}),` as a JUnit report.`]}),_jsxs(_components.td,{children:[`Send the XML that pytest’s `,_jsx(_components.code,{children:`--junitxml`}),` option wrote.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`test_not_reported`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`gitRef`}),` is a fix’s branch, and the JUnit doesn’t report the test the fix is for. Nothing is filed.`]}),_jsxs(_components.td,{children:[`Run that test. If pytest’s rootdir isn’t the repository root, send it as `,_jsx(_components.code,{children:`rootDir`}),`.`]})]})]})]}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`curl`,numberOfLines:`9`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --arg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sha`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$COMMIT_SHA`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --arg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ref`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$BRANCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --rawfile`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` junit`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` junit.xml`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{commitSha: $sha, gitRef: $ref, rootDir: \".\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` context: {cameraModel: \"CD62\", firmwareVersion: \"v2026.10.27.2\"},`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` junit: $junit}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` lab-results.json`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --fail-with-body`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -sS`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --data-binary`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @lab-results.json`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$PEEPS_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://app.peepsai.com/api/v1/projects/LAB/ci-results\"`})}),`\n`]})})})}),`\n`,_jsxs(ResponseExample,{children:[_jsx(CodeBlock,{filename:`201`,numberOfLines:`7`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_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\":`#9CDCFE`},children:` \"batchNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`42`}),_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\":`#9CDCFE`},children:` \"filed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`18`}),_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\":`#9CDCFE`},children:` \"unmatched\"`}),_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\":`#9CDCFE`},children:`\"path\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"tests/device/test_new_mode.py\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"titlePath\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"test_night_mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`201 (fix's branch)`,numberOfLines:`6`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_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\":`#9CDCFE`},children:` \"batchNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`43`}),_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\":`#9CDCFE`},children:` \"filed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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\":`#9CDCFE`},children:` \"unmatched\"`}),_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\":`#9CDCFE`},children:` \"verification\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"pullRequest\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`128`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"state\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ready_for_review\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`422`,numberOfLines:`6`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_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\":`#9CDCFE`},children:` \"error\"`}),_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\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"unknown_commit\"`}),_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\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\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":"Send lab results","sidebarTitle":"Send lab results","description":"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.","openapi":"api-reference/openapi.json POST /projects/{project}/ci-results","playground":"none","href":"/api-reference/results/send-lab-results"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Errors","slug":"errors","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"curl","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"9\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">jq\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -n\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> --arg\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> sha\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$COMMIT_SHA\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> --arg\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> ref\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$BRANCH\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> --rawfile\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> junit\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> junit.xml\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{commitSha: $sha, gitRef: $ref, rootDir: \".\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> context: {cameraModel: \"CD62\", firmwareVersion: \"v2026.10.27.2\"},\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> junit: $junit}'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\"> >\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> lab-results.json\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> --fail-with-body\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -sS\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> --data-binary\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> @lab-results.json\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Authorization: Bearer \u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$PEEPS_API_KEY\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Content-Type: application/json\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"https://app.peepsai.com/api/v1/projects/LAB/ci-results\"\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"201","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"7\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"batchNumber\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">42\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"filed\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">18\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"unmatched\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"path\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"tests/device/test_new_mode.py\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"titlePath\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"test_night_mode\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"201 (fix's branch)","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"6\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"batchNumber\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">43\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"filed\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"unmatched\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"verification\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"pullRequest\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">128\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"state\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"ready_for_review\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"422","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"6\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"code\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"unknown_commit\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"message\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from.\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Send lab results","operationId":"sendLabResults","parameters":["c2c6774d-d26b-452c-97b9-2f03a63a4c35"],"requestBody":"75c9b956-bb57-4ada-bb72-edcee8ae3905","responses":{"201":"46660bfd-9dc1-443a-acaa-0894e959e2a6","400":"922521f8-f428-4270-9cf9-dad271183d4c","401":"88ec4c37-1565-4d88-85f2-eefab1210cc9","404":"7c7cc736-8d5e-4747-818a-a8b4380c1d4c","408":"f63f002c-7ffb-4e8e-9864-e4baedf803e0","411":"e3d5791c-5abb-48c2-a977-56fb8e142248","413":"f300ac6e-19b6-428e-afac-b1a505a36057","422":"57c79f20-fd55-41f3-88c1-370bca54383a","429":"85872bf9-9226-40e4-a4d2-5427d2f8920b","500":"324a3c34-1cb8-43f0-b356-8bc7a1359d5d","503":"eeb7b9da-84b4-44c7-a6a1-5c5c1d6239b3"},"method":"post","type":"path","servers":["f47e9be3-d786-4541-b73d-f907ea13daaa"],"security":["f4364268-372b-45c1-8c13-6e576d724560"],"path":"/projects/{project}/ci-results","baseUrlOptions":["https://app.peepsai.com/api/v1"],"title":"Send lab results","description":"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.","codeSamples":[],"requiredOnlyExamples":false,"requestExamples":[{"dropdown":false,"language":"shellscript","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"shellscript","children":{"type":"code","key":null,"ref":null,"props":{"language":"shellscript","numberOfLines":"9","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#DCDCAA"},"children":"jq"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -n"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" --arg"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" sha"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$COMMIT_SHA"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" --arg"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" ref"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \""}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$BRANCH"}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"12","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" --rawfile"}},{"type":"span","key":"13","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" junit"}},{"type":"span","key":"14","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" junit.xml"}},{"type":"span","key":"15","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" '{commitSha: $sha, gitRef: $ref, rootDir: \".\","}}}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" context: {cameraModel: \"CD62\", firmwareVersion: \"v2026.10.27.2\"},"}}}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" junit: $junit}'"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":" >"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" lab-results.json"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#DCDCAA"},"children":"curl"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" --fail-with-body"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -sS"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -X"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" POST"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" --data-binary"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" @lab-results.json"}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Authorization: Bearer "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$PEEPS_API_KEY"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Content-Type: application/json\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"https://app.peepsai.com/api/v1/projects/LAB/ci-results\""}}}},"\n"]}}}},"filename":"curl"}],"requestExampleType":"mdx","responseExamples":[{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"7","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"batchNumber\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"42"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"filed\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"18"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"unmatched\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" { "}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"path\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"tests/device/test_new_mode.py\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"titlePath\""}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"test_night_mode\""}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ]"}}}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"201"},{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"6","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"batchNumber\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"43"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"filed\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"1"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"unmatched\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": [],"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"verification\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": { "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"pullRequest\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"128"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"state\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"ready_for_review\""}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"201 (fix's branch)"},{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"6","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"error\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": {"}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"code\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"unknown_commit\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"message\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c is not a commit on main in acme/camera-tests. Send the full 40-character commit the tests were built from.\""}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"422"}],"responseExampleType":"mdx","disableProxy":true},"dependencies":{"parameters":{"c2c6774d-d26b-452c-97b9-2f03a63a4c35":{"name":"project","in":"path","required":true,"description":"The project's acronym, in any case, such as `LAB`, or its ID. The project must be backed by a repository, and the key must name it under **Only these projects**.","schema":{"type":"string","isRequired":true,"description":"The project's acronym, in any case, such as `LAB`, or its ID. The project must be backed by a repository, and the key must name it under **Only these projects**.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"description":"The lab run as JSON, up to 50 MiB. Send its size in bytes as `Content-Length`; `curl --data-binary @file` sends it for you. The whole body must arrive within 120 seconds.","content":{"application/json":{"schema":{"type":"object","required":["commitSha","gitRef","junit"],"additionalProperties":false,"properties":{"commitSha":{"type":"string","pattern":"^[0-9a-fA-F]{40}$","description":"The full 40-character commit the tests were built from. It must be on `gitRef`: its latest commit or an earlier one.","isRequired":true,"uniqueKey":"commitSha","typeLabel":"string"},"gitRef":{"type":"string","minLength":1,"maxLength":200,"description":"The branch the commit is on: the headline branch, a branch listed under **Tracked branches**, or the `peeps/…` branch of a fix waiting for the lab, at the commit Peeps pushed.","isRequired":true,"uniqueKey":"gitRef","typeLabel":"string"},"junit":{"type":"string","minLength":1,"description":"The JUnit XML that pytest's `--junitxml` option wrote, as text.","isRequired":true,"uniqueKey":"junit","typeLabel":"string"},"rootDir":{"type":"string","maxLength":500,"default":".","description":"pytest's rootdir, relative to the repository root, with no `.` or `..` segment. Leave it out, or send `.`, when pytest runs from the repository root.","uniqueKey":"rootDir","typeLabel":"string"},"jobUrl":{"oneOf":[{"type":"string","format":"uri","maxLength":2000,"description":"A link to the lab run. Peeps shows it as **Lab run:** in the comment it leaves on a fix the upload settles.","uniqueKey":"jobUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","maxLength":2000,"description":"A link to the lab run. Peeps shows it as **Lab run:** in the comment it leaves on a fix the upload settles.","uniqueKey":"jobUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"jobUrl","typeLabel":"string\u003curi> | null"},"context":{"type":"object","additionalProperties":false,"description":"What the lab knows about the run. Peeps shows it first on each result, and names the batch after the camera model and firmware. Any other field is refused.","properties":{"cameraModel":{"type":"string","minLength":1,"maxLength":200,"description":"The camera model, such as `CD62`.","uniqueKey":"context.cameraModel","typeLabel":"string"},"firmwareVersion":{"type":"string","minLength":1,"maxLength":200,"description":"The firmware version, such as `v2026.10.27.2`.","uniqueKey":"context.firmwareVersion","typeLabel":"string"},"machine":{"type":"string","minLength":1,"maxLength":200,"description":"The machine the run used.","uniqueKey":"context.machine","typeLabel":"string"},"serialNumber":{"type":"string","minLength":1,"maxLength":200,"description":"The device's serial number.","uniqueKey":"context.serialNumber","typeLabel":"string"},"suite":{"type":"string","minLength":1,"maxLength":200,"description":"The suite the run belongs to.","uniqueKey":"context.suite","typeLabel":"string"}},"uniqueKey":"context","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"commitSha":"\u003cstring>","gitRef":"\u003cstring>","junit":"\u003cstring>","rootDir":".","jobUrl":"\u003cstring>","context":{"cameraModel":"\u003cstring>","firmwareVersion":"\u003cstring>","machine":"\u003cstring>","serialNumber":"\u003cstring>","suite":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"46660bfd-9dc1-443a-acaa-0894e959e2a6":{"description":"Peeps filed the run.","content":{"application/json":{"schema":{"type":"object","properties":{"batchNumber":{"type":"integer","description":"The number of the batch Peeps filed the runs in.","uniqueKey":"batchNumber","typeLabel":"integer"},"filed":{"type":"integer","description":"How many tests Peeps filed.","uniqueKey":"filed","typeLabel":"integer"},"unmatched":{"type":"array","description":"Tests in the JUnit that the project has no test case for. An upload never creates a test case, so these aren't filed.","items":{"type":"object","properties":{"path":{"type":"string","description":"The test's file, relative to the repository root.","uniqueKey":"unmatched.items.[INDEX].path","typeLabel":"string"},"titlePath":{"type":"string","description":"The test function.","uniqueKey":"unmatched.items.[INDEX].titlePath","typeLabel":"string"}},"uniqueKey":"unmatched.items.[INDEX]","typeLabel":"object"},"uniqueKey":"unmatched","typeLabel":"object[]"},"verification":{"type":"object","description":"Only for an upload of a fix's `peeps/…` branch: what the upload did to the fix's pull request.","properties":{"pullRequest":{"type":"integer","description":"The fix's pull request number.","uniqueKey":"verification.pullRequest","typeLabel":"integer"},"state":{"type":"string","enum":["ready_for_review","closed","awaiting","already_settled","pull_request_not_open","pull_request_moved","unsettled"],"description":"One of:\n\n- `ready_for_review`: the test passed, and the pull request is ready for review.\n- `closed`: the test failed, and Peeps closed the pull request.\n- `awaiting`: every result was skipped, so the pull request still waits for the lab.\n- `already_settled`: an earlier upload already settled this fix. The results are filed, and the pull request is unchanged.\n- `pull_request_not_open`: the pull request was already closed or merged, so Peeps left it alone.\n- `pull_request_moved`: someone pushed to the pull request's branch after Peeps, so Peeps left it alone.\n- `unsettled`: Peeps couldn't change the pull request. The results are filed, and the next upload tries again.","uniqueKey":"verification.state","typeLabel":"enum\u003cstring>"}},"uniqueKey":"verification","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"batchNumber":123,"filed":123,"unmatched":[{"path":"\u003cstring>","titlePath":"\u003cstring>"}],"verification":{"pullRequest":123,"state":"ready_for_review"}}}},"exampleType":"generated"}},"exampleType":"generated"},"922521f8-f428-4270-9cf9-dad271183d4c":{"description":"`invalid_request`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"88ec4c37-1565-4d88-85f2-eefab1210cc9":{"description":"`unauthenticated`. See the [errors table](/api-reference/introduction#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"7c7cc736-8d5e-4747-818a-a8b4380c1d4c":{"description":"`not_found_or_no_access`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f63f002c-7ffb-4e8e-9864-e4baedf803e0":{"description":"`body_timeout`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e3d5791c-5abb-48c2-a977-56fb8e142248":{"description":"`length_required`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f300ac6e-19b6-428e-afac-b1a505a36057":{"description":"`too_large` or `too_many_tests`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"57c79f20-fd55-41f3-88c1-370bca54383a":{"description":"`platform_not_supported`, `not_connected`, `branch_not_followed`, `unknown_commit`, `malformed_report` or `test_not_reported`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"85872bf9-9226-40e4-a4d2-5427d2f8920b":{"description":"`rate_limited`. See the [errors table](/api-reference/introduction#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"headers":{"Retry-After":{"description":"The number of seconds to wait before you send the request again.","schema":{"type":"integer"}}},"exampleType":"generated"},"324a3c34-1cb8-43f0-b356-8bc7a1359d5d":{"description":"`internal`. It's safe to send the request again. See the [errors table](/api-reference/introduction#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"eeb7b9da-84b4-44c7-a6a1-5c5c1d6239b3":{"description":"`busy` or `results_unavailable`. See [Send lab results](/api-reference/results/send-lab-results#errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A code you can act on.","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A message you can show.","uniqueKey":"error.message","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"headers":{"Retry-After":{"description":"With `busy`, the number of seconds to wait before you send the run again.","schema":{"type":"integer"}}},"exampleType":"generated"}},"security":{"f4364268-372b-45c1-8c13-6e576d724560":{"apiKey":{"type":"http","scheme":"bearer","description":"`Bearer` followed by your [API key](/api-reference/api-keys).","scopes":[],"schemeName":"apiKey"}}},"servers":{"f47e9be3-d786-4541-b73d-f907ea13daaa":{"url":"https://app.peepsai.com/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"`Bearer` followed by your [API key](/api-reference/api-keys).","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"`Bearer` followed by your [API key](/api-reference/api-keys).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"peeps-ai","siteName":"peeps","title":"Send lab results - peeps","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-01T09:58:07.842Z","originalFileLocation":"api-reference/results/send-lab-results.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=\"Send a lab run\u0026#x27;s pytest JUnit to a project backed by a repository, filed as the repository\u0026#x27;s CI runs at the commit and branch the lab tested.\">\u003cmeta data-mint-head name=\"application-name\" content=\"peeps\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_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/peeps-ai/D8VGCnIxdDLJwh65/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Send lab results - peeps\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send a lab run\u0026#x27;s pytest JUnit to a project backed by a repository, filed as the repository\u0026#x27;s CI runs at the commit and branch the lab tested.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"peeps\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.peepsai.com/api-reference/results/send-lab-results\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://peeps-ai.mintlify.app/_mintlify/api/og/v2?division=Results\u0026amp;title=Send+lab+results\u0026amp;description=Send+a+lab+run%27s+pytest+JUnit+to+a+project+backed+by+a+repository%2C+filed+as+the+repository%27s+CI+runs+at+the+commit+and+branch+the+lab+tested.\u0026amp;theme=10402fbd400cf4d3774ef2a8\u0026amp;signature=8ef2539cad49053e039dcbf935251eddf784a8de2c2797be3ec87336cf2a97dd\">\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=\"Send lab results - peeps\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send a lab run\u0026#x27;s pytest JUnit to a project backed by a repository, filed as the repository\u0026#x27;s CI runs at the commit and branch the lab tested.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://peeps-ai.mintlify.app/_mintlify/api/og/v2?division=Results\u0026amp;title=Send+lab+results\u0026amp;description=Send+a+lab+run%27s+pytest+JUnit+to+a+project+backed+by+a+repository%2C+filed+as+the+repository%27s+CI+runs+at+the+commit+and+branch+the+lab+tested.\u0026amp;theme=10402fbd400cf4d3774ef2a8\u0026amp;signature=8ef2539cad49053e039dcbf935251eddf784a8de2c2797be3ec87336cf2a97dd\">\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/peeps-ai/D8VGCnIxdDLJwh65/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"peeps\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2f62e8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.peepsai.com/api-reference/results/send-lab-results\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/results/send-lab-results.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.peepsai.com/#organization\",\"name\":\"peeps\",\"url\":\"https://docs.peepsai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/peeps-ai/UtvG6l0qqrp0Xcjp/logo/light.svg?fit=max\u0026auto=format\u0026n=UtvG6l0qqrp0Xcjp\u0026q=85\u0026s=cf33605c3f0149e1c994d0499dc50442\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.peepsai.com#website\",\"name\":\"peeps\",\"url\":\"https://docs.peepsai.com\",\"publisher\":{\"@id\":\"https://docs.peepsai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.peepsai.com/api-reference/results/send-lab-results#webpage\",\"url\":\"https://docs.peepsai.com/api-reference/results/send-lab-results\",\"name\":\"Send lab results\",\"description\":\"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.\",\"dateModified\":\"2026-11-01T09:58:07.842Z\",\"isPartOf\":{\"@id\":\"https://docs.peepsai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.peepsai.com/api-reference/results/send-lab-results#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.peepsai.com/api-reference/results/send-lab-results#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Results\",\"item\":\"https://docs.peepsai.com/api-reference/results/send-a-report-file\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Send lab results\",\"item\":\"https://docs.peepsai.com/api-reference/results/send-lab-results\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.peepsai.com/api-reference/results/send-lab-results#apireference\",\"headline\":\"Send lab results\",\"name\":\"Send lab results\",\"description\":\"Send a lab run's pytest JUnit to a project backed by a repository, filed as the repository's CI runs at the commit and branch the lab tested.\",\"url\":\"https://docs.peepsai.com/api-reference/results/send-lab-results\",\"mainEntityOfPage\":{\"@id\":\"https://docs.peepsai.com/api-reference/results/send-lab-results#webpage\"},\"dateModified\":\"2026-11-01T09:58:07.842Z\",\"publisher\":{\"@id\":\"https://docs.peepsai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.peepsai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"peeps\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"peeps","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API reference","groups":[{"group":"Get started","pages":[{"title":"Peeps API","sidebarTitle":"Introduction","icon":"code","href":"/api-reference/introduction"},{"title":"API keys","sidebarTitle":"API keys","icon":"key","href":"/api-reference/api-keys"}]},{"group":"Results","pages":[{"title":"Send a report file","sidebarTitle":"Send report file","openapi":"api-reference/openapi.json PUT /projects/{project}/results/{fileName}","href":"/api-reference/results/send-a-report-file"},{"title":"Get an upload","sidebarTitle":"Get upload","description":"Check the state of an upload your API key sent: whether Peeps filed its results, rejected a file, or waits for someone to map tests.","openapi":"api-reference/openapi.json GET /results/uploads/{uploadId}","href":"/api-reference/results/get-an-upload"},{"title":"Send lab results","sidebarTitle":"Send lab results","openapi":"api-reference/openapi.json POST /projects/{project}/ci-results","playground":"none","href":"/api-reference/results/send-lab-results"}]},{"group":"API keys","pages":[{"title":"Get the current key","sidebarTitle":"Get current key","description":"Describe the API key you call with: its name, organization, what it can do, the projects it reaches and when it expires.","openapi":"api-reference/openapi.json GET /api-key","href":"/api-reference/api-key/get-the-current-key"}]}]}]},"basePath":"","title":"Send lab results - peeps","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-m07pfKpT.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}