Open an upload for a bundle the agentpicks CLI wrote on the customer’s own machine. The body is the bundle’s manifest.json, which declares each artifact’s name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact’s bytes to its url within two hours, then complete the upload. A url can’t replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account’s Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project’s Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn’t give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload’s status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.
API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.
The project the credential is bound to. Read it from GET /connection.
Body
application/json
A self-run bundle's manifest.json as the agentpicks CLI writes it. Its context is reported by the customer's machine and not verified. It names stack or repository, never both.
Sent beside data on every successful response that returns data.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"DevTune","colors":{"primary":"#2BA673","light":"#3DD68C","dark":"#1E8A5E"},"logo":{"light":"https://mintcdn.com/plgeekltd/9IlfhLPAkzufc-a9/logo/light.svg?fit=max\u0026auto=format\u0026n=9IlfhLPAkzufc-a9\u0026q=85\u0026s=e084324efa0272057bc85d33172080b3","dark":"https://mintcdn.com/plgeekltd/9IlfhLPAkzufc-a9/logo/dark.svg?fit=max\u0026auto=format\u0026n=9IlfhLPAkzufc-a9\u0026q=85\u0026s=18c7dd26606bb9f39f087952f4d6ca57"},"favicon":"https://mintcdn.com/plgeekltd/9IlfhLPAkzufc-a9/favicon.ico?fit=max\u0026auto=format\u0026n=9IlfhLPAkzufc-a9\u0026q=85\u0026s=18557af9b84271b45e33ffe51a1a1826","navbar":{"links":[{"href":"https://devtune.ai/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Go to DevTune","href":"https://devtune.ai"}},"footer":{"socials":{"website":"https://devtune.ai","github":"https://github.com/devtunehq","x":"https://x.com/DevTuneHQ"}},"seo":{},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"plgeekltd","hasAudioNarration":false,"actualSubdomain":"plgeekltd","customDomains":["docs.devtune.ai"],"gitSource":{"type":"github","owner":"devtunehq","repo":"devtuneai","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"agentFeedback":false},"entitlements":{},"buildId":"6af6d27d9a8829f8111d1dee","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"API Reference","count":169},{"language":"default","tag":"Endpoints","count":157},{"language":"default","tag":"Documentation","count":75},{"language":"default","tag":"Agent Picks","count":36},{"language":"default","tag":"Insights","count":31},{"language":"default","tag":"Visibility","count":26},{"language":"default","tag":"AI Traffic","count":21},{"language":"default","tag":"Setup","count":18},{"language":"default","tag":"Agents","count":17},{"language":"default","tag":"Actions","count":15}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/create-an-agent-picks-self-run-upload","slug":"/api-reference/create-an-agent-picks-self-run-upload","pageMetadata":{"title":"Create an Agent Picks self-run upload","description":"Open an upload for a bundle the agentpicks CLI wrote on the customer's own machine. The body is the bundle's manifest.json, which declares each artifact's name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact's bytes to its url within two hours, then complete the upload. A url can't replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account's Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project's Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn't give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload's status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the `agent_picks.run` scope.","deprecated":null,"version":null,"sidebarTitle":"Create an agent picks self run upload","openapi":"/openapi.json post /projects/{projectId}/agent-picks/uploads","href":"/api-reference/create-an-agent-picks-self-run-upload","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Open an upload for a bundle the agentpicks CLI wrote on the customer’s own machine. The body is the bundle’s manifest.json, which declares each artifact’s name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact’s bytes to its url within two hours, then complete the upload. A url can’t replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account’s Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project’s Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn’t give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload’s status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the \", _jsx(_components.code, {\n children: \"agent_picks.run\"\n }), \" scope.\"]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create an Agent Picks self-run upload","description":"Open an upload for a bundle the agentpicks CLI wrote on the customer's own machine. The body is the bundle's manifest.json, which declares each artifact's name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact's bytes to its url within two hours, then complete the upload. A url can't replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account's Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project's Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn't give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload's status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the `agent_picks.run` scope.","deprecated":null,"version":null,"sidebarTitle":"Create an agent picks self run upload","openapi":"/openapi.json post /projects/{projectId}/agent-picks/uploads","href":"/api-reference/create-an-agent-picks-self-run-upload","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/plgeekltd/71e4b5285c42f79d/analytics.js"],"openApiReferenceData":{"operation":{"summary":"Create an Agent Picks self-run upload","operationId":"createAgentPicksUpload","description":"Open an upload for a bundle the agentpicks CLI wrote on the customer's own machine. The body is the bundle's manifest.json, which declares each artifact's name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact's bytes to its url within two hours, then complete the upload. A url can't replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account's Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project's Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn't give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload's status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the `agent_picks.run` scope.","x-devtune-required-scope":"agent_picks.run","parameters":["347d2bfb-7402-4014-b370-01e27896ea38"],"requestBody":"f7e420e0-868b-4426-91b6-164d396150ea","responses":{"200":"f054a732-100a-4156-8f87-2d3304e480ab","400":"389f3b40-b321-4936-99fd-c41b95d18a7e","401":"43426377-45c7-44ee-abef-e5f13ae62bfd","403":"2ff9d717-6c5e-4e2e-9f91-87f800fb0624","404":"83b7810e-1591-4b3f-ae72-e69f52539cef","409":"b4730af6-77b6-432b-bbe6-ecfa81fbf8ec","429":"e2b3d3c1-6c7c-4ff7-8f44-037271c7fe42"},"tags":["Agent Picks"],"x-mint":{"href":"/api-reference/create-an-agent-picks-self-run-upload"},"method":"post","type":"path","servers":["acd60f6a-e2c7-46e3-afef-95732abd410f"],"security":["9f21fa01-5a45-419f-ae2a-6901f0516868"],"path":"/projects/{projectId}/agent-picks/uploads","baseUrlOptions":["https://devtune.ai/api/v2"],"title":"Create an Agent Picks self-run upload","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"347d2bfb-7402-4014-b370-01e27896ea38":{"name":"projectId","in":"path","required":true,"description":"The project the credential is bound to. Read it from GET /connection.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The project the credential is bound to. Read it from GET /connection.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A self-run bundle's manifest.json as the agentpicks CLI writes it. Its context is reported by the customer's machine and not verified. It names stack or repository, never both.","required":["bundleVersion","runId","runner","agent","host","sandbox","request","startedAt","finishedAt","artifacts"],"properties":{"bundleVersion":{"type":"integer","enum":[1],"isRequired":true,"uniqueKey":"bundleVersion","typeLabel":"enum\u003cinteger>"},"runId":{"type":"string","format":"uuid","description":"Generated by the runner; the upload is keyed on it.","isRequired":true,"uniqueKey":"runId","typeLabel":"string\u003cuuid>"},"runner":{"type":"object","required":["name","version"],"properties":{"name":{"type":"string","enum":["@devtune/agentpicks"],"isRequired":true,"uniqueKey":"runner.name","typeLabel":"enum\u003cstring>"},"version":{"type":"string","isRequired":true,"uniqueKey":"runner.version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"runner","typeLabel":"object"},"agent":{"type":"object","required":["kind","version","model"],"properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"agent.kind","typeLabel":"string"},"version":{"type":"string","isRequired":true,"uniqueKey":"agent.version","typeLabel":"string"},"model":{"type":"string","isRequired":true,"uniqueKey":"agent.model","typeLabel":"string"}},"isRequired":true,"uniqueKey":"agent","typeLabel":"object"},"host":{"type":"object","required":["os","arch"],"properties":{"os":{"type":"string","isRequired":true,"uniqueKey":"host.os","typeLabel":"string"},"arch":{"type":"string","isRequired":true,"uniqueKey":"host.arch","typeLabel":"string"}},"isRequired":true,"uniqueKey":"host","typeLabel":"object"},"sandbox":{"type":"object","required":["provider","imageDigest","egressIp"],"properties":{"provider":{"type":"string","enum":["docker"],"isRequired":true,"uniqueKey":"sandbox.provider","typeLabel":"enum\u003cstring>"},"imageDigest":{"type":"string","isRequired":true,"uniqueKey":"sandbox.imageDigest","typeLabel":"string"},"egressIp":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"sandbox.egressIp.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"sandbox.egressIp.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sandbox.egressIp","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"sandbox","typeLabel":"object"},"request":{"type":"object","required":["category","intent","prompt"],"properties":{"category":{"type":"string","description":"A published category's slug, or one of the project's jobs.","isRequired":true,"uniqueKey":"request.category","typeLabel":"string"},"intent":{"type":"string","enum":["add","recommend","hosted","improve"],"isRequired":true,"uniqueKey":"request.intent","typeLabel":"enum\u003cstring>"},"prompt":{"type":"string","isRequired":true,"uniqueKey":"request.prompt","typeLabel":"string"}},"isRequired":true,"uniqueKey":"request","typeLabel":"object"},"startedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"startedAt","typeLabel":"string\u003cdate-time>"},"finishedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"finishedAt","typeLabel":"string\u003cdate-time>"},"artifacts":{"type":"array","items":{"type":"object","required":["name","bytes","sha256"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"artifacts.items.[INDEX].name","typeLabel":"string"},"bytes":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"artifacts.items.[INDEX].bytes","typeLabel":"integer"},"sha256":{"type":"string","isRequired":true,"uniqueKey":"artifacts.items.[INDEX].sha256","typeLabel":"string"}},"uniqueKey":"artifacts.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"artifacts","typeLabel":"object[]"},"stack":{"type":"object","required":["slug","starter","lockDigest"],"properties":{"slug":{"type":"string","isRequired":true,"uniqueKey":"stack.slug","typeLabel":"string"},"starter":{"type":"string","isRequired":true,"uniqueKey":"stack.starter","typeLabel":"string"},"lockDigest":{"type":"string","isRequired":true,"uniqueKey":"stack.lockDigest","typeLabel":"string"}},"uniqueKey":"stack","typeLabel":"object"},"repository":{"type":"object","required":["remoteUrl","commit"],"properties":{"remoteUrl":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"repository.remoteUrl.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"repository.remoteUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"repository.remoteUrl","typeLabel":"string | null"},"commit":{"type":"string","isRequired":true,"uniqueKey":"repository.commit","typeLabel":"string"}},"uniqueKey":"repository","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"bundleVersion":1,"runId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","runner":{"name":"@devtune/agentpicks","version":"\u003cstring>"},"agent":{"kind":"\u003cstring>","version":"\u003cstring>","model":"\u003cstring>"},"host":{"os":"\u003cstring>","arch":"\u003cstring>"},"sandbox":{"provider":"docker","imageDigest":"\u003cstring>","egressIp":"\u003cstring>"},"request":{"category":"\u003cstring>","prompt":"\u003cstring>"},"startedAt":"2023-11-07T05:31:56Z","finishedAt":"2023-11-07T05:31:56Z","artifacts":[{"name":"\u003cstring>","bytes":1,"sha256":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"f054a732-100a-4156-8f87-2d3304e480ab":{"description":"Opened upload","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","required":["uploads","run_id","status","expires_at","completed_at","run"],"properties":{"run_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.run_id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["open","completed","expired"],"description":"open: artifacts are uploading. completed: the run is recorded. expired: not completed within 24 hours, or an artifact was stored at the wrong size.","isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"expires_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.expires_at","typeLabel":"string\u003cdate-time>"},"completed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.completed_at","typeLabel":"string\u003cdate-time> | null"},"run":{"oneOf":[{"type":"object","description":"The recorded run; null until completed.","required":["id","test_id","status","analysis","analysis_error"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.run.oneOf.0.id","typeLabel":"string\u003cuuid>"},"test_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.run.oneOf.0.test_id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","isRequired":true,"uniqueKey":"data.run.oneOf.0.status","typeLabel":"string"},"analysis":{"type":"string","enum":["pending","analysed","failed"],"description":"pending until the run is analysed, then analysed. failed: the run could not be analysed, and nothing retries it; analysis_error says why.","isRequired":true,"uniqueKey":"data.run.oneOf.0.analysis","typeLabel":"enum\u003cstring>"},"analysis_error":{"oneOf":[{"type":"string","description":"Why the analysis failed; null unless analysis is failed.","isRequired":true,"uniqueKey":"data.run.oneOf.0.analysis_error.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the analysis failed; null unless analysis is failed.","isRequired":true,"uniqueKey":"data.run.oneOf.0.analysis_error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.oneOf.0.analysis_error","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.run.oneOf.0","typeLabel":"object"},{"type":"null","description":"The recorded run; null until completed.","required":["id","test_id","status","analysis","analysis_error"],"properties":{"id":{"type":"string","format":"uuid"},"test_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"analysis":{"type":"string","enum":["pending","analysed","failed"],"description":"pending until the run is analysed, then analysed. failed: the run could not be analysed, and nothing retries it; analysis_error says why."},"analysis_error":{"oneOf":[{"type":"string","description":"Why the analysis failed; null unless analysis is failed."},{"type":"null","description":"Why the analysis failed; null unless analysis is failed."}]}},"isRequired":true,"uniqueKey":"data.run.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run","typeLabel":"object | null"},"uploads":{"type":"array","description":"One signed address per declared artifact while the upload is open; empty once completed.","items":{"type":"object","required":["name","bytes","path","url"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].name","typeLabel":"string"},"bytes":{"type":"integer","isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].bytes","typeLabel":"integer"},"path":{"type":"string","description":"self-run/\u003cprojectId>/\u003crunId>/\u003cname>","isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].path","typeLabel":"string"},"url":{"oneOf":[{"type":"string","format":"uri","description":"PUT the artifact's bytes here within two hours. Storage refuses a PUT to a path that already holds an object. null when the artifact is already stored.","isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"PUT the artifact's bytes here within two hours. Storage refuses a PUT to a path that already holds an object. null when the artifact is already stored.","isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.uploads.items.[INDEX].url","typeLabel":"string\u003curi> | null"}},"uniqueKey":"data.uploads.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.uploads","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"meta":{"type":"object","description":"Sent beside data on every successful response that returns data.","properties":{"timestamp":{"type":"string","format":"date-time","description":"When the response was produced.","uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"projectId":{"type":"string","format":"uuid","uniqueKey":"meta.projectId","typeLabel":"string\u003cuuid>"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"required":["data","meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"run_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","status":"open","expires_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","run":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","test_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","status":"\u003cstring>","analysis":"pending","analysis_error":"\u003cstring>"},"uploads":[{"name":"\u003cstring>","bytes":123,"path":"\u003cstring>","url":"\u003cstring>"}]},"meta":{"timestamp":"2023-11-07T05:31:56Z","projectId":"3c90c3cc-0d44-4b50-8888-8dd25736052a"}}}},"exampleType":"generated"}},"exampleType":"generated"},"389f3b40-b321-4936-99fd-c41b95d18a7e":{"description":"The request is invalid: a parameter or body field is missing, has the wrong type or is out of range, or a cursor doesn't match this list. The message says which; reason, where present, is listed in the endpoint's description. Fix the request before retrying, and restart a list without its cursor. See [Errors](/api-reference/errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"43426377-45c7-44ee-abef-e5f13ae62bfd":{"description":"The request has no valid credential: the Authorization header is missing or malformed, or the API key or OAuth token is invalid, expired or revoked. Send `Authorization: Bearer \u003cAPI key>` with an active key, or sign in again to get a new OAuth token. See [Errors](/api-reference/errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"2ff9d717-6c5e-4e2e-9f91-87f800fb0624":{"description":"The credential is valid but can't make this request. The message says which cause applies: the key or sign-in lacks the scope this endpoint requires (named in the message), it belongs to another project, the plan doesn't include API access or this feature, the project is paused (a paused project keeps only read scopes and setup.write), or the member a write acts as no longer has the role it needs. Read `GET /projects/{projectId}/connection` for the credential's current scopes and features, then use a key that has the scope, sign in again and approve it, or upgrade the plan. See [Errors](/api-reference/errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"83b7810e-1591-4b3f-ae72-e69f52539cef":{"description":"The resource doesn't exist in this project, was deleted, or the credential can't see it. Check the IDs in the path, and that the projectId is the project the credential is bound to. See [Errors](/api-reference/errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"b4730af6-77b6-432b-bbe6-ecfa81fbf8ec":{"description":"The request conflicts with the resource's current state. The message, and reason where present, say what conflicts; the endpoint's description lists its reasons. Read the resource again, then change the request. When the body has retryable true, send the same request again. See [Errors](/api-reference/errors).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"e2b3d3c1-6c7c-4ff7-8f44-037271c7fe42":{"description":"Too many requests from this credential in the current window. The request was refused before it took effect, so it is safe to retry: wait until the time in X-RateLimit-Reset, then send it again. Endpoints that start agent runs have a stricter limit. See [Rate limits](/api-reference/rate-limits).","headers":{"X-RateLimit-Limit":{"description":"Maximum requests per window","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in current window","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the window resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code, such as bad_request, unauthorized, forbidden, not_found, conflict, payment_required, rate_limit_exceeded or internal_error. Some endpoints return their own codes, listed in their descriptions.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"What went wrong, for a person to read. Do not parse it; use error and reason.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code, repeated in the body.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"reason":{"type":"string","description":"Why the request was refused, for an error with more than one cause, such as a refused content-draft start.","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable facts about the refusal, such as shortfall_credits when an Agent Picks start is refused for insufficient_credits.","uniqueKey":"details","typeLabel":"object"}},"required":["error","message","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","status":123,"reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"9f21fa01-5a45-419f-ae2a-6901f0516868":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"acd60f6a-e2c7-46e3-afef-95732abd410f":{"url":"https://devtune.ai/api/v2","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"plgeekltd","siteName":"DevTune","title":"Create an Agent Picks self-run upload - DevTune","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T09:04:05.291Z","originalFileLocation":"api-reference/create-an-agent-picks-self-run-upload.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=\"Open an upload for a bundle the agentpicks CLI wrote on the customer\u0026#x27;s own machine. The body is the bundle\u0026#x27;s manifest.json, which declares each artifact\u0026#x27;s name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact\u0026#x27;s bytes to its url within two hours, then complete the upload. A url can\u0026#x27;t replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account\u0026#x27;s Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project\u0026#x27;s Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn\u0026#x27;t give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload\u0026#x27;s status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.\">\u003cmeta data-mint-head name=\"application-name\" content=\"DevTune\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_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/plgeekltd/AeypV2Tr2kGE7goT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an Agent Picks self-run upload - DevTune\">\u003cmeta data-mint-head property=\"og:description\" content=\"Open an upload for a bundle the agentpicks CLI wrote on the customer\u0026#x27;s own machine. The body is the bundle\u0026#x27;s manifest.json, which declares each artifact\u0026#x27;s name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact\u0026#x27;s bytes to its url within two hours, then complete the upload. A url can\u0026#x27;t replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account\u0026#x27;s Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project\u0026#x27;s Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn\u0026#x27;t give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload\u0026#x27;s status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DevTune\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://plgeekltd.mintlify.site/_mintlify/api/og/v2?division=Agent+Picks\u0026amp;title=Create+an+Agent+Picks+self-run+upload\u0026amp;description=Open+an+upload+for+a+bundle+the+agentpicks+CLI+wrote+on+the+customer%27s+own+machine.+The+body+is+the+bundle%27s+manifest.json%2C+which+declares+each+artifact%27s+name%2C\u0026amp;theme=6cd2f000e46751de6b3df2e6\u0026amp;signature=ae63be4941ca167b17809d77804774041e64ab87213dea1cd84d6cd688729d03\">\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=\"Create an Agent Picks self-run upload - DevTune\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Open an upload for a bundle the agentpicks CLI wrote on the customer\u0026#x27;s own machine. The body is the bundle\u0026#x27;s manifest.json, which declares each artifact\u0026#x27;s name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact\u0026#x27;s bytes to its url within two hours, then complete the upload. A url can\u0026#x27;t replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account\u0026#x27;s Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project\u0026#x27;s Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn\u0026#x27;t give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload\u0026#x27;s status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://plgeekltd.mintlify.site/_mintlify/api/og/v2?division=Agent+Picks\u0026amp;title=Create+an+Agent+Picks+self-run+upload\u0026amp;description=Open+an+upload+for+a+bundle+the+agentpicks+CLI+wrote+on+the+customer%27s+own+machine.+The+body+is+the+bundle%27s+manifest.json%2C+which+declares+each+artifact%27s+name%2C\u0026amp;theme=6cd2f000e46751de6b3df2e6\u0026amp;signature=ae63be4941ca167b17809d77804774041e64ab87213dea1cd84d6cd688729d03\">\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/plgeekltd/AeypV2Tr2kGE7goT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DevTune\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2BA673\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/create-an-agent-picks-self-run-upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.devtune.ai/#organization\",\"name\":\"DevTune\",\"url\":\"https://docs.devtune.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/plgeekltd/9IlfhLPAkzufc-a9/logo/light.svg?fit=max\u0026auto=format\u0026n=9IlfhLPAkzufc-a9\u0026q=85\u0026s=e084324efa0272057bc85d33172080b3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.devtune.ai#website\",\"name\":\"DevTune\",\"url\":\"https://docs.devtune.ai\",\"publisher\":{\"@id\":\"https://docs.devtune.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload#webpage\",\"url\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload\",\"name\":\"Create an Agent Picks self-run upload\",\"description\":\"Open an upload for a bundle the agentpicks CLI wrote on the customer's own machine. The body is the bundle's manifest.json, which declares each artifact's name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact's bytes to its url within two hours, then complete the upload. A url can't replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account's Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project's Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn't give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload's status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.\",\"dateModified\":\"2026-11-13T09:04:05.291Z\",\"isPartOf\":{\"@id\":\"https://docs.devtune.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.devtune.ai/api-reference/discover-the-authorized-project\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agent Picks\",\"item\":\"https://docs.devtune.ai/api-reference/update-agent-picks-model-settings\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create an Agent Picks self-run upload\",\"item\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload#apireference\",\"headline\":\"Create an Agent Picks self-run upload\",\"name\":\"Create an Agent Picks self-run upload\",\"description\":\"Open an upload for a bundle the agentpicks CLI wrote on the customer's own machine. The body is the bundle's manifest.json, which declares each artifact's name, bytes and sha256. The response gives one signed Storage address per declared artifact: PUT the artifact's bytes to its url within two hours, then complete the upload. A url can't replace an artifact already stored: Storage refuses the PUT, and a retry returns a null url for each artifact already stored, so it PUTs only the rest. The upload expires 24 hours after it is created unless completed. A retry with the same runId returns the same paths with fresh addresses and restarts the 24 hours; a retry for a completed upload returns it with no addresses. Refusals carry a reason: 400 invalid_manifest (the bundle format rejects it), repository_remote_missing (a repository run whose repository has no remote URL; add an origin remote and run it again), duplicate_artifact, artifact_too_large (diff.patch over 800,000 bytes, source-files.json over 1,048,576, any other artifact over 50 MiB; details name the artifact, its bytes and the limit), unknown_category, unknown_request or unknown_stack; 403 plan_excludes_uploads (the account's Agent Picks plan is not Local Runner, Cloud or Enterprise), project_uploads_off (on Local Runner, uploads are off for this project; a member who manages billing and is on the project turns them on in the project's Agent Picks settings), analysis_cap_reached (the project has recorded as many self-runs this UTC calendar month as its plan analyses: 500 on Local Runner, no cap on Cloud or Enterprise; deleting a run doesn't give one back; details name the limit and resets_at, the start of the next UTC month), forbidden or paused; 409 run_exists (another project or a hosted test uses this run id), upload_expired (the upload expired and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried) or upload_deleted (the upload was deleted and its artifacts are still being removed; create it again once a cleanup sweep, which runs every 15 minutes, has removed its artifacts, no sooner than 2 hours 15 minutes after it was last created or retried). The member who created the API key needs project management permission and edit rights on the project; otherwise 403. Not available over MCP: devtune_get_agent_picks_upload reads an upload's status. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason. Requires the agent_picks.run scope.\",\"url\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.devtune.ai/api-reference/create-an-agent-picks-self-run-upload#webpage\"},\"dateModified\":\"2026-11-13T09:04:05.291Z\",\"publisher\":{\"@id\":\"https://docs.devtune.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.devtune.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DevTune\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"DevTune\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/create-an-agent-picks-self-run-upload.md","siteName":"DevTune","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"REST API reference","href":"/api-reference/overview"},{"title":"API migration guide","href":"/api-reference/migration"},{"title":"Prompt-set analysis API and MCP","href":"/api-reference/prompt-set-analysis"},{"title":"API authentication","href":"/api-reference/authentication"},{"title":"Agent Registration","href":"/api-reference/agent-registration"},{"title":"API Rate Limits","href":"/api-reference/rate-limits"},{"title":"API errors","href":"/api-reference/errors"}]},{"group":"MCP and webhooks","pages":[{"title":"MCP server","href":"/api-reference/mcp-server"},{"title":"Code mode operations","href":"/api-reference/mcp-code-mode"},{"title":"Webhooks","href":"/api-reference/webhooks"}]},{"group":"SDKs","pages":[{"title":"TypeScript client","href":"/sdk/typescript"},{"title":"CLI","href":"/sdk/cli"}]},{"group":"Endpoints","pages":[{"group":"Connection and usage","pages":[{"title":"Discover the authorized project","deprecated":null,"version":null,"sidebarTitle":"Discover the authorized project","openapi":"/openapi.json get /connection","href":"/api-reference/discover-the-authorized-project"},{"title":"Get the connection context","deprecated":null,"version":null,"sidebarTitle":"Get the connection context","openapi":"/openapi.json get /projects/{projectId}/connection","href":"/api-reference/get-the-connection-context"},{"title":"Get project status and usage","deprecated":null,"version":null,"sidebarTitle":"Get project status and usage","openapi":"/openapi.json get /projects/{projectId}/usage","href":"/api-reference/get-project-status-and-usage"},{"title":"Get code-mode operation receipts","deprecated":null,"version":null,"sidebarTitle":"Get code mode operation receipts","openapi":"/openapi.json get /projects/{projectId}/code-mode/executions/{executionId}","href":"/api-reference/get-code-mode-operation-receipts"}]},{"group":"Setup","pages":[{"title":"List brands","deprecated":null,"version":null,"sidebarTitle":"List brands","openapi":"/openapi.json get /projects/{projectId}/setup/brands","href":"/api-reference/list-brands"},{"title":"Create a brand","deprecated":null,"version":null,"sidebarTitle":"Create a brand","openapi":"/openapi.json post /projects/{projectId}/setup/brands","href":"/api-reference/create-a-brand"},{"title":"Update a brand","deprecated":null,"version":null,"sidebarTitle":"Update a brand","openapi":"/openapi.json patch /projects/{projectId}/setup/brands/{brandId}","href":"/api-reference/update-a-brand"},{"title":"Archive a brand","deprecated":null,"version":null,"sidebarTitle":"Archive a brand","openapi":"/openapi.json delete /projects/{projectId}/setup/brands/{brandId}","href":"/api-reference/archive-a-brand"},{"title":"Restore a brand","deprecated":null,"version":null,"sidebarTitle":"Restore a brand","openapi":"/openapi.json post /projects/{projectId}/setup/brands/{brandId}/restore","href":"/api-reference/restore-a-brand"},{"title":"List tracked domains","deprecated":null,"version":null,"sidebarTitle":"List tracked domains","openapi":"/openapi.json get /projects/{projectId}/setup/domains","href":"/api-reference/list-tracked-domains"},{"title":"Add a domain","deprecated":null,"version":null,"sidebarTitle":"Add a domain","openapi":"/openapi.json post /projects/{projectId}/setup/domains","href":"/api-reference/add-a-domain"},{"title":"Update a domain","deprecated":null,"version":null,"sidebarTitle":"Update a domain","openapi":"/openapi.json patch /projects/{projectId}/setup/domains/{domainId}","href":"/api-reference/update-a-domain"},{"title":"Delete a domain","deprecated":null,"version":null,"sidebarTitle":"Delete a domain","openapi":"/openapi.json delete /projects/{projectId}/setup/domains/{domainId}","href":"/api-reference/delete-a-domain"},{"title":"List brand terms","deprecated":null,"version":null,"sidebarTitle":"List brand terms","openapi":"/openapi.json get /projects/{projectId}/setup/keywords","href":"/api-reference/list-brand-terms"},{"title":"Add a brand term","deprecated":null,"version":null,"sidebarTitle":"Add a brand term","openapi":"/openapi.json post /projects/{projectId}/setup/keywords","href":"/api-reference/add-a-brand-term"},{"title":"Update a brand term","deprecated":null,"version":null,"sidebarTitle":"Update a brand term","openapi":"/openapi.json patch /projects/{projectId}/setup/keywords/{keywordId}","href":"/api-reference/update-a-brand-term"},{"title":"Delete a brand term","deprecated":null,"version":null,"sidebarTitle":"Delete a brand term","openapi":"/openapi.json delete /projects/{projectId}/setup/keywords/{keywordId}","href":"/api-reference/delete-a-brand-term"},{"title":"List probed platforms","deprecated":null,"version":null,"sidebarTitle":"List probed platforms","openapi":"/openapi.json get /projects/{projectId}/setup/platforms","href":"/api-reference/list-probed-platforms"},{"title":"List content sources","deprecated":null,"version":null,"sidebarTitle":"List content sources","openapi":"/openapi.json get /projects/{projectId}/setup/content-sources","href":"/api-reference/list-content-sources"},{"title":"Pause or resume a project","deprecated":null,"version":null,"sidebarTitle":"Pause or resume a project","openapi":"/openapi.json patch /projects/{projectId}/setup/project","href":"/api-reference/pause-or-resume-a-project"},{"title":"Get the Agent Picks catalogue","deprecated":null,"version":null,"sidebarTitle":"Get the agent picks catalogue","openapi":"/openapi.json get /projects/{projectId}/setup/catalogue/agent-picks","href":"/api-reference/get-the-agent-picks-catalogue"},{"title":"Get the AI platform catalogue","deprecated":null,"version":null,"sidebarTitle":"Get the ai platform catalogue","openapi":"/openapi.json get /projects/{projectId}/setup/catalogue/platforms","href":"/api-reference/get-the-ai-platform-catalogue"}]},{"group":"Prompts and topics","pages":[{"title":"List topics","deprecated":null,"version":null,"sidebarTitle":"List topics","openapi":"/openapi.json get /projects/{projectId}/visibility/topics","href":"/api-reference/list-topics"},{"title":"Create a topic","deprecated":null,"version":null,"sidebarTitle":"Create a topic","openapi":"/openapi.json post /projects/{projectId}/visibility/topics","href":"/api-reference/create-a-topic"},{"title":"Update a topic","deprecated":null,"version":null,"sidebarTitle":"Update a topic","openapi":"/openapi.json patch /projects/{projectId}/visibility/topics/{topicId}","href":"/api-reference/update-a-topic"},{"title":"Delete a topic","deprecated":null,"version":null,"sidebarTitle":"Delete a topic","openapi":"/openapi.json delete /projects/{projectId}/visibility/topics/{topicId}","href":"/api-reference/delete-a-topic"},{"title":"List tracked prompts","deprecated":null,"version":null,"sidebarTitle":"List tracked prompts","openapi":"/openapi.json get /projects/{projectId}/visibility/prompts","href":"/api-reference/list-tracked-prompts"},{"title":"Create a tracked prompt","deprecated":null,"version":null,"sidebarTitle":"Create a tracked prompt","openapi":"/openapi.json post /projects/{projectId}/visibility/prompts","href":"/api-reference/create-a-tracked-prompt"},{"title":"Update a tracked prompt","deprecated":null,"version":null,"sidebarTitle":"Update a tracked prompt","openapi":"/openapi.json patch /projects/{projectId}/visibility/prompts/{promptId}","href":"/api-reference/update-a-tracked-prompt"},{"title":"Delete a tracked prompt","deprecated":null,"version":null,"sidebarTitle":"Delete a tracked prompt","openapi":"/openapi.json delete /projects/{projectId}/visibility/prompts/{promptId}","href":"/api-reference/delete-a-tracked-prompt"},{"title":"Restore a deleted prompt","deprecated":null,"version":null,"sidebarTitle":"Restore a deleted prompt","openapi":"/openapi.json post /projects/{projectId}/visibility/prompts/{promptId}/restore","href":"/api-reference/restore-a-deleted-prompt"},{"title":"Get prompt-set analysis","deprecated":null,"version":null,"sidebarTitle":"Read prompt set analysis","openapi":"/openapi.json get /projects/{projectId}/prompt-set-analysis","href":"/api-reference/read-prompt-set-analysis"},{"title":"Start or retry prompt-set analysis","deprecated":null,"version":null,"sidebarTitle":"Start or retry prompt set analysis","openapi":"/openapi.json post /projects/{projectId}/prompt-set-analysis","href":"/api-reference/start-or-retry-prompt-set-analysis"},{"title":"Review a prompt-set proposal","deprecated":null,"version":null,"sidebarTitle":"Review a prompt set proposal","openapi":"/openapi.json post /projects/{projectId}/prompt-set-analysis/proposals","href":"/api-reference/review-a-prompt-set-proposal"}]},{"group":"Visibility","pages":[{"title":"List AI response history","deprecated":null,"version":null,"sidebarTitle":"List ai execution history","openapi":"/openapi.json get /projects/{projectId}/visibility/response-history","href":"/api-reference/list-ai-execution-history"},{"title":"List recent AI responses","deprecated":null,"version":null,"sidebarTitle":"List recent ai responses","openapi":"/openapi.json get /projects/{projectId}/visibility/responses","href":"/api-reference/list-recent-ai-responses"},{"title":"Get a retained AI response","deprecated":null,"version":null,"sidebarTitle":"Get a retained ai response","openapi":"/openapi.json get /projects/{projectId}/visibility/responses/{executionId}","href":"/api-reference/get-a-retained-ai-response"},{"title":"Get visibility summary metrics","deprecated":null,"version":null,"sidebarTitle":"Get visibility summary metrics","openapi":"/openapi.json get /projects/{projectId}/visibility/summary","href":"/api-reference/get-visibility-summary-metrics"},{"title":"Get brand sentiment","deprecated":null,"version":null,"sidebarTitle":"Get brand sentiment","openapi":"/openapi.json get /projects/{projectId}/visibility/sentiment","href":"/api-reference/get-brand-sentiment"},{"title":"Get visibility diff","deprecated":null,"version":null,"sidebarTitle":"Get visibility diff","openapi":"/openapi.json get /projects/{projectId}/visibility/diff","href":"/api-reference/get-visibility-diff"},{"title":"Get project timeline events","deprecated":null,"version":null,"sidebarTitle":"Get project timeline events","openapi":"/openapi.json get /projects/{projectId}/timeline/events","href":"/api-reference/get-project-timeline-events"},{"title":"Get competitive positioning data","deprecated":null,"version":null,"sidebarTitle":"Get competitive positioning data","openapi":"/openapi.json get /projects/{projectId}/competitive/position","href":"/api-reference/get-competitive-positioning-data"}]},{"group":"Citations","pages":[{"title":"Get aggregate citation statistics","deprecated":null,"version":null,"sidebarTitle":"Get aggregate citation statistics","openapi":"/openapi.json get /projects/{projectId}/citations/stats","href":"/api-reference/get-aggregate-citation-statistics"},{"title":"Get top citation domains","deprecated":null,"version":null,"sidebarTitle":"Get top citation domains","openapi":"/openapi.json get /projects/{projectId}/citations/top-domains","href":"/api-reference/get-top-citation-domains"},{"title":"Get top citation pages","deprecated":null,"version":null,"sidebarTitle":"Get top citation pages","openapi":"/openapi.json get /projects/{projectId}/citations/top-pages","href":"/api-reference/get-top-citation-pages"},{"title":"List Lookalike sites","deprecated":null,"version":null,"sidebarTitle":"List lookalike sites","openapi":"/openapi.json get /projects/{projectId}/lookalike-sites","href":"/api-reference/list-lookalike-sites"},{"title":"List Lookalike site citations","deprecated":null,"version":null,"sidebarTitle":"List lookalike site citations","openapi":"/openapi.json get /projects/{projectId}/lookalike-sites/{hostId}/citations","href":"/api-reference/list-lookalike-site-citations"}]},{"group":"Positioning","pages":[{"title":"Get positioning match","deprecated":null,"version":null,"sidebarTitle":"Get positioning match","openapi":"/openapi.json get /projects/{projectId}/positioning","href":"/api-reference/get-positioning-match"},{"title":"List positioning statements","deprecated":null,"version":null,"sidebarTitle":"List positioning statements","openapi":"/openapi.json get /projects/{projectId}/positioning/statements","href":"/api-reference/list-positioning-statements"},{"title":"List positioning match answers","deprecated":null,"version":null,"sidebarTitle":"List positioning match answers","openapi":"/openapi.json get /projects/{projectId}/positioning/statements/{statementId}/answers","href":"/api-reference/list-positioning-match-answers"}]},{"group":"Accuracy","pages":[{"title":"Get Accuracy","deprecated":null,"version":null,"sidebarTitle":"Get accuracy","openapi":"/openapi.json get /projects/{projectId}/accuracy","href":"/api-reference/get-accuracy"},{"title":"List Accuracy claims","deprecated":null,"version":null,"sidebarTitle":"List accuracy claims","openapi":"/openapi.json get /projects/{projectId}/accuracy/claims","href":"/api-reference/list-accuracy-claims"},{"title":"Get Accuracy claim","deprecated":null,"version":null,"sidebarTitle":"Get accuracy claim","openapi":"/openapi.json get /projects/{projectId}/accuracy/claims/{groupId}","href":"/api-reference/get-accuracy-claim"},{"title":"List Accuracy contradictions","deprecated":null,"version":null,"sidebarTitle":"List accuracy contradictions","openapi":"/openapi.json get /projects/{projectId}/accuracy/contradictions","href":"/api-reference/list-accuracy-contradictions"},{"title":"Get Accuracy contradiction","deprecated":null,"version":null,"sidebarTitle":"Get accuracy contradiction","openapi":"/openapi.json get /projects/{projectId}/accuracy/contradictions/{sentenceKey}","href":"/api-reference/get-accuracy-contradiction"},{"title":"List Accuracy decisions","deprecated":null,"version":null,"sidebarTitle":"List accuracy decisions","openapi":"/openapi.json get /projects/{projectId}/accuracy/decisions","href":"/api-reference/list-accuracy-decisions"}]},{"group":"Content gaps","pages":[{"title":"List content gaps","deprecated":null,"version":null,"sidebarTitle":"List content gaps","openapi":"/openapi.json get /projects/{projectId}/content-gaps/list","href":"/api-reference/list-content-gaps"},{"title":"Get content gap evidence","deprecated":null,"version":null,"sidebarTitle":"Get content gap evidence","openapi":"/openapi.json get /projects/{projectId}/content-gaps/evidence","href":"/api-reference/get-content-gap-evidence"}]},{"group":"AI Traffic","pages":[{"title":"List recent answer fetches","deprecated":null,"version":null,"sidebarTitle":"List recent answer fetches","openapi":"/openapi.json get /projects/{projectId}/traffic/recent-answer-fetches","href":"/api-reference/list-recent-answer-fetches"},{"title":"Get visits per answer fetch","deprecated":null,"version":null,"sidebarTitle":"Get visits per answer fetch","openapi":"/openapi.json get /projects/{projectId}/traffic/visits-per-answer-fetch","href":"/api-reference/get-visits-per-answer-fetch"},{"title":"List AI referrals","deprecated":null,"version":null,"sidebarTitle":"List ai referrals","openapi":"/openapi.json get /projects/{projectId}/traffic/referrals","href":"/api-reference/list-ai-referrals"},{"title":"Get coding-agent answer fetches","deprecated":null,"version":null,"sidebarTitle":"Get coding agent answer fetches","openapi":"/openapi.json get /projects/{projectId}/traffic/coding-agents","href":"/api-reference/get-coding-agent-answer-fetches"},{"title":"Get 404 Demand","deprecated":null,"version":null,"sidebarTitle":"Get 404 demand","openapi":"/openapi.json get /projects/{projectId}/traffic/404-demand","href":"/api-reference/get-404-demand"},{"title":"Get AI-correlated Direct lift","deprecated":null,"version":null,"sidebarTitle":"Get ai correlated direct lift","openapi":"/openapi.json get /projects/{projectId}/traffic/direct-lift","href":"/api-reference/get-ai-correlated-direct-lift"},{"title":"Get traffic summary","deprecated":null,"version":null,"sidebarTitle":"Get traffic summary","openapi":"/openapi.json get /projects/{projectId}/traffic/summary","href":"/api-reference/get-traffic-summary"},{"title":"Get Search Console and analytics totals","deprecated":null,"version":null,"sidebarTitle":"Get search rollup totals","openapi":"/openapi.json get /projects/{projectId}/traffic/search-rollups","href":"/api-reference/get-search-rollup-totals"},{"title":"Get traffic by platform","deprecated":null,"version":null,"sidebarTitle":"Get traffic by platform","openapi":"/openapi.json get /projects/{projectId}/traffic/platforms","href":"/api-reference/get-traffic-by-platform"}]},{"group":"Adoption","pages":[{"title":"Get adoption metrics","deprecated":null,"version":null,"sidebarTitle":"Get adoption metrics","openapi":"/openapi.json get /projects/{projectId}/adoption/metrics","href":"/api-reference/get-adoption-metrics"}]},{"group":"Audit and pages","pages":[{"title":"Get Audit summary","deprecated":null,"version":null,"sidebarTitle":"Get audit summary","openapi":"/openapi.json get /projects/{projectId}/audit/summary","href":"/api-reference/get-audit-summary"},{"title":"Get the extracted section for an Audit finding","deprecated":null,"version":null,"sidebarTitle":"Get stored extraction for a section finding","openapi":"/openapi.json get /projects/{projectId}/audit/extraction","href":"/api-reference/get-stored-extraction-for-a-section-finding"},{"title":"Acknowledge or reconsider a retrieval restriction","deprecated":null,"version":null,"sidebarTitle":"Acknowledge or reconsider a retrieval restriction","openapi":"/openapi.json post /projects/{projectId}/audit/retrieval-intent","href":"/api-reference/acknowledge-or-reconsider-a-retrieval-restriction"},{"title":"List Audit findings","deprecated":null,"version":null,"sidebarTitle":"List audit findings","openapi":"/openapi.json get /projects/{projectId}/audit/findings","href":"/api-reference/list-audit-findings"},{"title":"Get Google eligibility evidence","deprecated":null,"version":null,"sidebarTitle":"Get google eligibility evidence","openapi":"/openapi.json get /projects/{projectId}/audit/eligibility","href":"/api-reference/get-google-eligibility-evidence"},{"title":"List page metrics","deprecated":null,"version":null,"sidebarTitle":"List unified page metrics","openapi":"/openapi.json get /projects/{projectId}/pages/metrics","href":"/api-reference/list-unified-page-metrics"},{"title":"List page guard-rail findings","deprecated":null,"version":null,"sidebarTitle":"List page guard rail findings","openapi":"/openapi.json get /projects/{projectId}/pages/guard-rails","href":"/api-reference/list-page-guard-rail-findings"},{"title":"Lock a page","deprecated":null,"version":null,"sidebarTitle":"Lock a page","openapi":"/openapi.json post /projects/{projectId}/pages/guard-rails","href":"/api-reference/lock-a-page"},{"title":"Unlock a page","deprecated":null,"version":null,"sidebarTitle":"Unlock a page","openapi":"/openapi.json delete /projects/{projectId}/pages/guard-rails","href":"/api-reference/unlock-a-page"}]},{"group":"Actions","pages":[{"title":"List actions for a prompt","deprecated":null,"version":null,"sidebarTitle":"List actions for a prompt","openapi":"/openapi.json get /projects/{projectId}/actions/from-prompt","href":"/api-reference/list-actions-for-a-prompt"},{"title":"Create an action from a prompt","deprecated":null,"version":null,"sidebarTitle":"Create an action from a prompt","openapi":"/openapi.json post /projects/{projectId}/actions/from-prompt","href":"/api-reference/create-an-action-from-a-prompt"},{"title":"List actions","deprecated":null,"version":null,"sidebarTitle":"List actions","openapi":"/openapi.json get /projects/{projectId}/actions/list","href":"/api-reference/list-actions"},{"title":"Update an action","deprecated":null,"version":null,"sidebarTitle":"Update an action","openapi":"/openapi.json patch /projects/{projectId}/actions/{actionId}","href":"/api-reference/update-an-action"},{"title":"Change an action status","deprecated":null,"version":null,"sidebarTitle":"Change an action status","openapi":"/openapi.json post /projects/{projectId}/actions/{actionId}/status","href":"/api-reference/change-an-action-status"},{"title":"List action edits","deprecated":null,"version":null,"sidebarTitle":"List action edits","openapi":"/openapi.json get /projects/{projectId}/actions/{actionId}/events","href":"/api-reference/list-action-edits"},{"title":"Get action content draft","deprecated":null,"version":null,"sidebarTitle":"Get action content draft","openapi":"/openapi.json get /projects/{projectId}/actions/{actionId}/draft","href":"/api-reference/get-action-content-draft"},{"title":"Start an action content draft","deprecated":null,"version":null,"sidebarTitle":"Start an action content draft","openapi":"/openapi.json post /projects/{projectId}/actions/{actionId}/draft","href":"/api-reference/start-an-action-content-draft"},{"title":"Create action draft pull request","deprecated":null,"version":null,"sidebarTitle":"Create action draft pull request","openapi":"/openapi.json post /projects/{projectId}/actions/{actionId}/draft/pull-request","href":"/api-reference/create-action-draft-pull-request"},{"title":"Close action draft pull request","deprecated":null,"version":null,"sidebarTitle":"Close action draft pull request","openapi":"/openapi.json delete /projects/{projectId}/actions/{actionId}/draft/pull-request","href":"/api-reference/close-action-draft-pull-request"},{"title":"Get action brief","deprecated":null,"version":null,"sidebarTitle":"Get action brief","openapi":"/openapi.json get /projects/{projectId}/actions/{actionId}/brief","href":"/api-reference/get-action-brief"},{"title":"Generate action brief","deprecated":null,"version":null,"sidebarTitle":"Generate action brief","openapi":"/openapi.json post /projects/{projectId}/actions/{actionId}/brief","href":"/api-reference/generate-action-brief"}]},{"group":"Results","pages":[{"title":"List detected content changes","deprecated":null,"version":null,"sidebarTitle":"List detected content changes","openapi":"/openapi.json get /projects/{projectId}/outcomes/changes","href":"/api-reference/list-detected-content-changes"},{"title":"Get published-page tracking status","deprecated":null,"version":null,"sidebarTitle":"Read published page tracking status","openapi":"/openapi.json get /projects/{projectId}/outcomes/page-tracking","href":"/api-reference/read-published-page-tracking-status"},{"title":"Attach a published URL to a completed action","deprecated":null,"version":null,"sidebarTitle":"Attach a published url to a completed action","openapi":"/openapi.json post /projects/{projectId}/outcomes/changes/attach","href":"/api-reference/attach-a-published-url-to-a-completed-action"},{"title":"Claim a content change","deprecated":null,"version":null,"sidebarTitle":"Claim a content change","openapi":"/openapi.json post /projects/{projectId}/outcomes/changes/claim","href":"/api-reference/claim-a-content-change"},{"title":"Unclaim a content change","deprecated":null,"version":null,"sidebarTitle":"Unclaim a content change","openapi":"/openapi.json post /projects/{projectId}/outcomes/changes/unclaim","href":"/api-reference/unclaim-a-content-change"},{"title":"List measured results","deprecated":null,"version":null,"sidebarTitle":"List measured results","openapi":"/openapi.json get /projects/{projectId}/outcomes/ledger","href":"/api-reference/list-measured-results"},{"title":"Get what-works recommendations","deprecated":null,"version":null,"sidebarTitle":"Get what works recommendations","openapi":"/openapi.json get /projects/{projectId}/intelligence/what-works","href":"/api-reference/get-what-works-recommendations"}]},{"group":"Agents","pages":[{"title":"List managed agents","deprecated":null,"version":null,"sidebarTitle":"List managed agents","openapi":"/openapi.json get /projects/{projectId}/agents","href":"/api-reference/list-managed-agents"},{"title":"Create a custom agent","deprecated":null,"version":null,"sidebarTitle":"Create a custom agent","openapi":"/openapi.json post /projects/{projectId}/agents","href":"/api-reference/create-a-custom-agent"},{"title":"List managed-agent runs","deprecated":null,"version":null,"sidebarTitle":"List managed agent runs","openapi":"/openapi.json get /projects/{projectId}/agents/runs","href":"/api-reference/list-managed-agent-runs"},{"title":"Get a managed-agent run","deprecated":null,"version":null,"sidebarTitle":"Get a managed agent run","openapi":"/openapi.json get /projects/{projectId}/agents/runs/{runId}","href":"/api-reference/get-a-managed-agent-run"},{"title":"Update a custom agent","deprecated":null,"version":null,"sidebarTitle":"Update a custom agent","openapi":"/openapi.json patch /projects/{projectId}/agents/{agentKey}","href":"/api-reference/update-a-custom-agent"},{"title":"Archive a custom agent","deprecated":null,"version":null,"sidebarTitle":"Archive a custom agent","openapi":"/openapi.json delete /projects/{projectId}/agents/{agentKey}","href":"/api-reference/archive-a-custom-agent"},{"title":"Restore an archived custom agent","deprecated":null,"version":null,"sidebarTitle":"Restore an archived custom agent","openapi":"/openapi.json post /projects/{projectId}/agents/{agentKey}/restore","href":"/api-reference/restore-an-archived-custom-agent"},{"title":"Set an agent schedule","deprecated":null,"version":null,"sidebarTitle":"Set an agent schedule","openapi":"/openapi.json put /projects/{projectId}/agents/{agentKey}/schedule","href":"/api-reference/set-an-agent-schedule"},{"title":"Turn off an agent schedule","deprecated":null,"version":null,"sidebarTitle":"Turn off an agent schedule","openapi":"/openapi.json delete /projects/{projectId}/agents/{agentKey}/schedule","href":"/api-reference/turn-off-an-agent-schedule"},{"title":"Trigger a managed-agent run","deprecated":null,"version":null,"sidebarTitle":"Trigger a managed agent run","openapi":"/openapi.json post /projects/{projectId}/agents/{agentKey}/runs","href":"/api-reference/trigger-a-managed-agent-run"}]},{"group":"Dex","pages":[{"title":"List Dex conversation threads","deprecated":null,"version":null,"sidebarTitle":"List dex conversation threads","openapi":"/openapi.json get /projects/{projectId}/agents/dex/threads","href":"/api-reference/list-dex-conversation-threads"},{"title":"Start a Dex conversation","deprecated":null,"version":null,"sidebarTitle":"Start a dex conversation","openapi":"/openapi.json post /projects/{projectId}/agents/dex/threads","href":"/api-reference/start-a-dex-conversation"},{"title":"Rename a Dex conversation thread","deprecated":null,"version":null,"sidebarTitle":"Rename a dex conversation thread","openapi":"/openapi.json patch /projects/{projectId}/agents/dex/threads/{threadId}","href":"/api-reference/rename-a-dex-conversation-thread"},{"title":"Delete your private Dex chat","deprecated":null,"version":null,"sidebarTitle":"Delete your private dex chat","openapi":"/openapi.json delete /projects/{projectId}/agents/dex/threads/{threadId}","href":"/api-reference/delete-your-private-dex-chat"},{"title":"List Dex conversation events","deprecated":null,"version":null,"sidebarTitle":"Read dex conversation events","openapi":"/openapi.json get /projects/{projectId}/agents/dex/threads/{threadId}/messages","href":"/api-reference/read-dex-conversation-events"},{"title":"Send a Dex conversation message","deprecated":null,"version":null,"sidebarTitle":"Send a dex conversation message","openapi":"/openapi.json post /projects/{projectId}/agents/dex/threads/{threadId}/messages","href":"/api-reference/send-a-dex-conversation-message"},{"title":"List pending Dex specialist handoffs","deprecated":null,"version":null,"sidebarTitle":"List pending dex specialist handoffs","openapi":"/openapi.json get /projects/{projectId}/agents/dex/threads/{threadId}/handoffs","href":"/api-reference/list-pending-dex-specialist-handoffs"},{"title":"Confirm or cancel a Dex specialist handoff","deprecated":null,"version":null,"sidebarTitle":"Confirm or cancel a dex specialist handoff","openapi":"/openapi.json post /projects/{projectId}/agents/dex/threads/{threadId}/handoffs","href":"/api-reference/confirm-or-cancel-a-dex-specialist-handoff"},{"title":"Save or dismiss a Dex memory offer","deprecated":null,"version":null,"sidebarTitle":"Save or dismiss a dex memory offer","openapi":"/openapi.json post /projects/{projectId}/agents/dex/threads/{threadId}/memory","href":"/api-reference/save-or-dismiss-a-dex-memory-offer"}]},{"group":"Agent Picks","pages":[{"title":"Update Agent Picks model settings","deprecated":null,"version":null,"sidebarTitle":"Update agent picks model settings","openapi":"/openapi.json patch /projects/{projectId}/agent-picks/settings","href":"/api-reference/update-agent-picks-model-settings"},{"title":"Get Agent Picks summary","deprecated":null,"version":null,"sidebarTitle":"Get agent picks summary","openapi":"/openapi.json get /projects/{projectId}/agent-picks/summary","href":"/api-reference/get-agent-picks-summary"},{"title":"List Agent Picks runs","deprecated":null,"version":null,"sidebarTitle":"List agent picks runs","openapi":"/openapi.json get /projects/{projectId}/agent-picks/runs","href":"/api-reference/list-agent-picks-runs"},{"title":"Get Agent Picks run evidence","deprecated":null,"version":null,"sidebarTitle":"Get agent picks run evidence","openapi":"/openapi.json get /projects/{projectId}/agent-picks/tests/{testId}/runs/{runId}","href":"/api-reference/get-agent-picks-run-evidence"},{"title":"Get Agent Picks run trace","deprecated":null,"version":null,"sidebarTitle":"Get agent picks run trace","openapi":"/openapi.json get /projects/{projectId}/agent-picks/runs/{runId}/trace","href":"/api-reference/get-agent-picks-run-trace"},{"title":"Quote an Agent Picks test","deprecated":null,"version":null,"sidebarTitle":"Quote an agent picks test","openapi":"/openapi.json post /projects/{projectId}/agent-picks/tests/quote","href":"/api-reference/quote-an-agent-picks-test"},{"title":"Start an Agent Picks test","deprecated":null,"version":null,"sidebarTitle":"Start an agent picks test","openapi":"/openapi.json post /projects/{projectId}/agent-picks/tests","href":"/api-reference/start-an-agent-picks-test"},{"title":"Cancel an Agent Picks test","description":"Cancel a queued or running paid test or re-test. Queued runs are cancelled at once; running runs keep their reservation until they settle, so credits may return later: refunded_micros and released_at on the test read show when. A repeat returns status cancelled again. Starter tests cannot be cancelled and return 404 not_found, as does another project’s test; an ended test is 409 test_finished. Works while the account is paused. The member who created the API key needs project management permission and edit rights on the project; otherwise 403. This endpoint takes an API key, not an OAuth token; over MCP, an OAuth connection acts as its signed-in member. Requires Agent Picks. Requires the `actions.write` scope.","deprecated":null,"version":null,"sidebarTitle":"Cancel an agent picks test","openapi":"/openapi.json delete /projects/{projectId}/agent-picks/tests/{testId}","href":"/api-reference/cancel-an-agent-picks-test"},{"title":"Create an Agent Picks self-run upload","deprecated":null,"version":null,"sidebarTitle":"Create an agent picks self run upload","openapi":"/openapi.json post /projects/{projectId}/agent-picks/uploads","href":"/api-reference/create-an-agent-picks-self-run-upload"},{"title":"Get an Agent Picks self-run upload","description":"Read one self-run upload: open, completed or expired, and once completed the recorded run with its status and its analysis: pending, analysed, or failed with why. An open upload past its 24 hours reads as expired, as does one that held an artifact of the wrong size. A deleted upload, or another project's, is 404 not_found. Requires Agent Picks. The MCP tool devtune_get_agent_picks_upload returns the same fields. Requires the `visibility.read` scope.","deprecated":null,"version":null,"sidebarTitle":"Get an agent picks self run upload","openapi":"/openapi.json get /projects/{projectId}/agent-picks/uploads/{runId}","href":"/api-reference/get-an-agent-picks-self-run-upload"},{"title":"Delete an Agent Picks self-run upload","deprecated":null,"version":null,"sidebarTitle":"Delete an agent picks self run upload","openapi":"/openapi.json delete /projects/{projectId}/agent-picks/uploads/{runId}","href":"/api-reference/delete-an-agent-picks-self-run-upload"},{"title":"Complete an Agent Picks self-run upload","deprecated":null,"version":null,"sidebarTitle":"Complete an agent picks self run upload","openapi":"/openapi.json post /projects/{projectId}/agent-picks/uploads/{runId}/complete","href":"/api-reference/complete-an-agent-picks-self-run-upload"},{"title":"Get Agent Picks schedule","deprecated":null,"version":null,"sidebarTitle":"Get agent picks schedule","openapi":"/openapi.json get /projects/{projectId}/agent-picks/schedule","href":"/api-reference/get-agent-picks-schedule"},{"title":"Enable Agent Picks schedule","deprecated":null,"version":null,"sidebarTitle":"Enable agent picks schedule","openapi":"/openapi.json put /projects/{projectId}/agent-picks/schedule","href":"/api-reference/enable-agent-picks-schedule"},{"title":"Turn off Agent Picks schedule","deprecated":null,"version":null,"sidebarTitle":"Turn off agent picks schedule","openapi":"/openapi.json delete /projects/{projectId}/agent-picks/schedule","href":"/api-reference/turn-off-agent-picks-schedule"},{"title":"Get Agent Picks test cells","deprecated":null,"version":null,"sidebarTitle":"Get agent picks test cells","openapi":"/openapi.json get /projects/{projectId}/agent-picks/cells","href":"/api-reference/get-agent-picks-test-cells"},{"title":"Get Agent Picks test history","deprecated":null,"version":null,"sidebarTitle":"Get agent picks test history","openapi":"/openapi.json get /projects/{projectId}/agent-picks/history","href":"/api-reference/get-agent-picks-test-history"},{"title":"Get Agent Picks Actions and re-test results","deprecated":null,"version":null,"sidebarTitle":"Get agent picks actions and re test results","openapi":"/openapi.json get /projects/{projectId}/agent-picks/actions","href":"/api-reference/get-agent-picks-actions-and-re-test-results"},{"title":"Get paid Agent Picks test","deprecated":null,"version":null,"sidebarTitle":"Get paid agent picks test","openapi":"/openapi.json get /projects/{projectId}/agent-picks/test","href":"/api-reference/get-paid-agent-picks-test"},{"title":"Get Agent Picks starter test","deprecated":null,"version":null,"sidebarTitle":"Get agent picks starter test","openapi":"/openapi.json get /projects/{projectId}/agent-picks/starter-test","href":"/api-reference/get-agent-picks-starter-test"},{"title":"Start Agent Picks starter test","deprecated":null,"version":null,"sidebarTitle":"Start agent picks starter test","openapi":"/openapi.json post /projects/{projectId}/agent-picks/starter-test","href":"/api-reference/start-agent-picks-starter-test"},{"title":"Save Agent Picks setup","deprecated":null,"version":null,"sidebarTitle":"Save agent picks setup","openapi":"/openapi.json put /projects/{projectId}/agent-picks/setup","href":"/api-reference/save-agent-picks-setup"},{"title":"Clear Agent Picks setup","deprecated":null,"version":null,"sidebarTitle":"Clear agent picks setup","openapi":"/openapi.json delete /projects/{projectId}/agent-picks/setup","href":"/api-reference/clear-agent-picks-setup"},{"title":"Draft Agent Picks job","deprecated":null,"version":null,"sidebarTitle":"Draft agent picks job","openapi":"/openapi.json post /projects/{projectId}/agent-picks/job/draft","href":"/api-reference/draft-agent-picks-job"},{"title":"Draft Agent Picks tool signals","deprecated":null,"version":null,"sidebarTitle":"Draft agent picks tool signals","openapi":"/openapi.json post /projects/{projectId}/agent-picks/tools/draft","href":"/api-reference/draft-agent-picks-tool-signals"},{"title":"Save Agent Picks job","deprecated":null,"version":null,"sidebarTitle":"Save agent picks job","openapi":"/openapi.json put /projects/{projectId}/agent-picks/job","href":"/api-reference/save-agent-picks-job"}]},{"group":"Library and Knowledge","pages":[{"title":"List Library items","deprecated":null,"version":null,"sidebarTitle":"List library items","openapi":"/openapi.json get /projects/{projectId}/library","href":"/api-reference/list-library-items"},{"title":"Upload a text document to the Library","deprecated":null,"version":null,"sidebarTitle":"Upload a text document to the library","openapi":"/openapi.json post /projects/{projectId}/library","href":"/api-reference/upload-a-text-document-to-the-library"},{"title":"Search Library items","deprecated":null,"version":null,"sidebarTitle":"Hybrid search library items","openapi":"/openapi.json get /projects/{projectId}/library/search","href":"/api-reference/hybrid-search-library-items"},{"title":"Get a Library item","deprecated":null,"version":null,"sidebarTitle":"Read a library item","openapi":"/openapi.json get /projects/{projectId}/library/{itemId}","href":"/api-reference/read-a-library-item"},{"title":"Update Library grounding availability or version link","deprecated":null,"version":null,"sidebarTitle":"Update library grounding availability or version link","openapi":"/openapi.json patch /projects/{projectId}/library/{itemId}","href":"/api-reference/update-library-grounding-availability-or-version-link"},{"title":"Get the Knowledge Profile and proposals","deprecated":null,"version":null,"sidebarTitle":"Read the knowledge profile and proposal queue","openapi":"/openapi.json get /projects/{projectId}/knowledge","href":"/api-reference/read-the-knowledge-profile-and-proposal-queue"},{"title":"Update one Knowledge Profile field","deprecated":null,"version":null,"sidebarTitle":"Update one knowledge profile field","openapi":"/openapi.json patch /projects/{projectId}/knowledge","href":"/api-reference/update-one-knowledge-profile-field"},{"title":"Review a Knowledge Profile proposal","deprecated":null,"version":null,"sidebarTitle":"Review a knowledge profile proposal","openapi":"/openapi.json post /projects/{projectId}/knowledge/proposals/{proposalId}","href":"/api-reference/review-a-knowledge-profile-proposal"}]},{"group":"Webhooks","pages":[{"title":"List webhook subscriptions","deprecated":null,"version":null,"sidebarTitle":"List webhook subscriptions","openapi":"/openapi.json get /projects/{projectId}/webhooks","href":"/api-reference/list-webhook-subscriptions"},{"title":"Create a webhook subscription","deprecated":null,"version":null,"sidebarTitle":"Create webhook subscription","openapi":"/openapi.json post /projects/{projectId}/webhooks","href":"/api-reference/create-webhook-subscription"},{"title":"Deactivate a webhook subscription","deprecated":null,"version":null,"sidebarTitle":"Delete webhook subscription","openapi":"/openapi.json delete /projects/{projectId}/webhooks/{webhookId}","href":"/api-reference/delete-webhook-subscription"},{"title":"Rotate a webhook signing secret","deprecated":null,"version":null,"sidebarTitle":"Rotate webhook signing secret","openapi":"/openapi.json post /projects/{projectId}/webhooks/{webhookId}/rotate-secret","href":"/api-reference/rotate-webhook-signing-secret"}]},{"group":"Agent registration","pages":[{"title":"Get the agent setup draft","deprecated":null,"version":null,"sidebarTitle":"Get the agent setup draft","openapi":"/openapi.json get /agent/setup-draft","href":"/api-reference/get-the-agent-setup-draft"},{"title":"Replace the agent setup draft","deprecated":null,"version":null,"sidebarTitle":"Replace the agent setup draft","openapi":"/openapi.json put /agent/setup-draft","href":"/api-reference/replace-the-agent-setup-draft"},{"title":"Get the Agent Picks catalogue for a draft","deprecated":null,"version":null,"sidebarTitle":"Get the agent picks catalogue for a draft","openapi":"/openapi.json get /agent/catalogue/agent-picks","href":"/api-reference/get-the-agent-picks-catalogue-for-a-draft"},{"title":"Get the AI platform catalogue for a draft","deprecated":null,"version":null,"sidebarTitle":"Get the ai platform catalogue for a draft","openapi":"/openapi.json get /agent/catalogue/platforms","href":"/api-reference/get-the-ai-platform-catalogue-for-a-draft"}]}]}]}]},"basePath":"","title":"Create an Agent Picks self-run upload - DevTune","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CDiBsYGW.js","utils-KF9rPlmF.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C26urKTX.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BdjmJAC1.js","snippetPresets-3IpDBjt3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-D4x_2vvo.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BIWdc5Pa.js","shallow-LQqfiMNd.js","getApiPlaygroundDisplay-DryzlOZG.js","CodeSnippet-tcJujU4r.js","CodeSnippets-BHp0nVLL.js","Page-1CZdsdAn.js","getPastedJson-DU-1ayUv.js","icon-CZK2hPr4.js","MethodPill-DOaqmTFC.js","DuplicateIcon-B5-nUxxl.js","createIcon-CDP_U77G.js","DynamicMarkdown-GHvayGOn.js","SectionHeading-BYvpkmUD.js","axios-vUo_bRtp.js","Markdown-uxhlayGT.js","clsx-B35qUV0p.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BvrGG8gU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CAf0yVYe.js"]}