Create a test plan

POST/v1/test-plans

Creates the plan and its initial published immutable version.

How to call this endpoint

Every ACP API request uses bearer authentication. The examples here show the actual request path, auth header, and body shape that the platform expects.

Path, query, and header parameters

These parameters control which ACP object the endpoint acts on and how the request is processed.

Path parameters
None.
Query parameters
None.

Body schema

Content type: application/json · Required

FieldTypeRequiredDescription
idstringNoUnique identifier.
namestringYesHuman-readable name.
descriptionstringNoHuman-readable description.
projectIdstringNoProject ID.
statusdraft | active | archivedNoCurrent lifecycle status.
targetTypeproject | workflow | function | web_app | agent | repository | customNo
targetIdstringNo
defaultEnvironmentIdstringNo
definitionobjectYes
definition.schemaVersioncomputer_agents_test_plan_v1Yes
definition.setupobjectYes
definition.setup.commandstringYes
definition.setup.workingDirectorystringYes
definition.setup.timeoutMsintegerYes
definition.setup.envobjectYes
definition.setup.secretRefsstring[]Yes
definition.casesobject[]Yes
definition.cases[].idstringYesUnique identifier.
definition.cases[].namestringYesHuman-readable name.
definition.cases[].descriptionstringYesHuman-readable description.
definition.cases[].kindcommand | contract | integration | browser | agent | security | customYes
definition.cases[].commandstringYes
definition.cases[].workingDirectorystringYes
definition.cases[].timeoutMsintegerYes
definition.cases[].retriesintegerYes
definition.cases[].envobjectYes
definition.cases[].secretRefsstring[]Yes
definition.cases[].requestobjectYesKind-specific structured request. Secrets must be referenced through `secretRefs`.
definition.cases[].assertionsobject[]Yes
definition.cases[].agentIdstringYesAgent ID.
definition.cases[].enabledbooleanYes
definition.cases[].tagsstring[]Yes
definition.teardownobjectYes
definition.teardown.commandstringYes
definition.teardown.workingDirectorystringYes
definition.teardown.timeoutMsintegerYes
definition.teardown.envobjectYes
definition.teardown.secretRefsstring[]Yes
definition.concurrencyintegerYes
definition.stopOnFailurebooleanYes
definition.retryPolicyobjectYes
definition.retryPolicy.maxAttemptsintegerYes
definition.retryPolicy.backoffMsintegerYes
definition.evidencePolicyobjectYes
definition.evidencePolicy.retainLogsbooleanYes
definition.evidencePolicy.retainScreenshotsbooleanYes
definition.evidencePolicy.retainTracesbooleanYes
definition.evidencePolicy.retainArtifactsbooleanYes
definition.evidencePolicy.redactSecretsbooleanYes
metadataobjectNoPlatform access and user-defined extension metadata. Access-control fields are excluded from immutable version snapshots.

What the API returns

Each response code below includes the documented payload shape for the ACP API.

201Test plan and initial immutable versionapplication/json
FieldTypeRequiredDescription
testPlanobjectYes
testPlan.idstringYesUnique identifier.
testPlan.projectIdstringYesProject ID.
testPlan.namestringYesHuman-readable name.
testPlan.descriptionstringYesHuman-readable description.
testPlan.statusdraft | active | archivedYesCurrent lifecycle status.
testPlan.targetTypeproject | workflow | function | web_app | agent | repository | customYes
testPlan.targetIdstringYes
testPlan.defaultEnvironmentIdstringYes
testPlan.definitionobjectYes
testPlan.definition.schemaVersioncomputer_agents_test_plan_v1Yes
testPlan.definition.setupobjectYes
testPlan.definition.setup.commandstringYes
testPlan.definition.setup.workingDirectorystringYes
testPlan.definition.setup.timeoutMsintegerYes
testPlan.definition.setup.envobjectYes
testPlan.definition.setup.secretRefsstring[]Yes
testPlan.definition.casesobject[]Yes
testPlan.definition.cases[].idstringYesUnique identifier.
testPlan.definition.cases[].namestringYesHuman-readable name.
testPlan.definition.cases[].descriptionstringYesHuman-readable description.
testPlan.definition.cases[].kindcommand | contract | integration | browser | agent | security | customYes
testPlan.definition.cases[].commandstringYes
testPlan.definition.cases[].workingDirectorystringYes
testPlan.definition.cases[].timeoutMsintegerYes
testPlan.definition.cases[].retriesintegerYes
testPlan.definition.cases[].envobjectYes
testPlan.definition.cases[].secretRefsstring[]Yes
testPlan.definition.cases[].requestobjectYesKind-specific structured request. Secrets must be referenced through `secretRefs`.
testPlan.definition.cases[].assertionsobject[]Yes
testPlan.definition.cases[].agentIdstringYesAgent ID.
testPlan.definition.cases[].enabledbooleanYes
testPlan.definition.cases[].tagsstring[]Yes
testPlan.definition.teardownobjectYes
testPlan.definition.teardown.commandstringYes
testPlan.definition.teardown.workingDirectorystringYes
testPlan.definition.teardown.timeoutMsintegerYes
testPlan.definition.teardown.envobjectYes
testPlan.definition.teardown.secretRefsstring[]Yes
testPlan.definition.concurrencyintegerYes
testPlan.definition.stopOnFailurebooleanYes
testPlan.definition.retryPolicyobjectYes
testPlan.definition.retryPolicy.maxAttemptsintegerYes
testPlan.definition.retryPolicy.backoffMsintegerYes
testPlan.definition.evidencePolicyobjectYes
testPlan.definition.evidencePolicy.retainLogsbooleanYes
testPlan.definition.evidencePolicy.retainScreenshotsbooleanYes
testPlan.definition.evidencePolicy.retainTracesbooleanYes
testPlan.definition.evidencePolicy.retainArtifactsbooleanYes
testPlan.definition.evidencePolicy.redactSecretsbooleanYes
testPlan.caseCountintegerYes
testPlan.planFingerprintstringYes
testPlan.publishedVersionIdstringYes
testPlan.metadataobjectYesFree-form metadata object.
testPlan.createdAtstringYesISO 8601 timestamp.
testPlan.updatedAtstringYesISO 8601 timestamp.
testPlan.versionsobject[]No
testPlan.versions[].idstringYesUnique identifier.
testPlan.versions[].testPlanIdstringYes
testPlan.versions[].versionintegerYes
testPlan.versions[].labelstringYes
testPlan.versions[].descriptionstringYesHuman-readable description.
testPlan.versions[].statussaved | publishedYesCurrent lifecycle status.
testPlan.versions[].snapshotobjectYes
testPlan.versions[].snapshot.namestringYesHuman-readable name.
testPlan.versions[].snapshot.descriptionstringYesHuman-readable description.
testPlan.versions[].snapshot.statusdraft | active | archivedYesCurrent lifecycle status.
testPlan.versions[].snapshot.projectIdstringYesProject ID.
testPlan.versions[].snapshot.targetTypeproject | workflow | function | web_app | agent | repository | customYes
testPlan.versions[].snapshot.targetIdstringYes
testPlan.versions[].snapshot.defaultEnvironmentIdstringYes
testPlan.versions[].snapshot.definitionobjectYes
testPlan.versions[].snapshot.definition.schemaVersioncomputer_agents_test_plan_v1Yes
testPlan.versions[].snapshot.definition.setupobjectYes
testPlan.versions[].snapshot.definition.setup.commandstringYes
testPlan.versions[].snapshot.definition.setup.workingDirectorystringYes
testPlan.versions[].snapshot.definition.setup.timeoutMsintegerYes
testPlan.versions[].snapshot.definition.setup.envobjectYes
testPlan.versions[].snapshot.definition.setup.secretRefsstring[]Yes
testPlan.versions[].snapshot.definition.casesobject[]Yes
testPlan.versions[].snapshot.definition.cases[].idstringYesUnique identifier.
testPlan.versions[].snapshot.definition.cases[].namestringYesHuman-readable name.
testPlan.versions[].snapshot.definition.cases[].descriptionstringYesHuman-readable description.
testPlan.versions[].snapshot.definition.cases[].kindcommand | contract | integration | browser | agent | security | customYes
testPlan.versions[].snapshot.definition.cases[].commandstringYes
testPlan.versions[].snapshot.definition.cases[].workingDirectorystringYes
testPlan.versions[].snapshot.definition.cases[].timeoutMsintegerYes
testPlan.versions[].snapshot.definition.cases[].retriesintegerYes
testPlan.versions[].snapshot.definition.cases[].envobjectYes
testPlan.versions[].snapshot.definition.cases[].secretRefsstring[]Yes
testPlan.versions[].snapshot.definition.cases[].requestobjectYesKind-specific structured request. Secrets must be referenced through `secretRefs`.
testPlan.versions[].snapshot.definition.cases[].assertionsobject[]Yes
testPlan.versions[].snapshot.definition.cases[].agentIdstringYesAgent ID.
testPlan.versions[].snapshot.definition.cases[].enabledbooleanYes
testPlan.versions[].snapshot.definition.cases[].tagsstring[]Yes
testPlan.versions[].snapshot.definition.teardownobjectYes
testPlan.versions[].snapshot.definition.teardown.commandstringYes
testPlan.versions[].snapshot.definition.teardown.workingDirectorystringYes
testPlan.versions[].snapshot.definition.teardown.timeoutMsintegerYes
testPlan.versions[].snapshot.definition.teardown.envobjectYes
testPlan.versions[].snapshot.definition.teardown.secretRefsstring[]Yes
testPlan.versions[].snapshot.definition.concurrencyintegerYes
testPlan.versions[].snapshot.definition.stopOnFailurebooleanYes
testPlan.versions[].snapshot.definition.retryPolicyobjectYes
testPlan.versions[].snapshot.definition.retryPolicy.maxAttemptsintegerYes
testPlan.versions[].snapshot.definition.retryPolicy.backoffMsintegerYes
testPlan.versions[].snapshot.definition.evidencePolicyobjectYes
testPlan.versions[].snapshot.definition.evidencePolicy.retainLogsbooleanYes
testPlan.versions[].snapshot.definition.evidencePolicy.retainScreenshotsbooleanYes
testPlan.versions[].snapshot.definition.evidencePolicy.retainTracesbooleanYes
testPlan.versions[].snapshot.definition.evidencePolicy.retainArtifactsbooleanYes
testPlan.versions[].snapshot.definition.evidencePolicy.redactSecretsbooleanYes
testPlan.versions[].snapshot.metadataobjectYesFunctional extension metadata only; ownership and access-control fields are deliberately excluded.
testPlan.versions[].metadataobjectYesFree-form metadata object.
testPlan.versions[].publishedAtstringYes
testPlan.versions[].createdAtstringYesISO 8601 timestamp.
testPlan.versions[].updatedAtstringYesISO 8601 timestamp.
testPlan.runsobject[]No
testPlan.runs[].idstringYesUnique identifier.
testPlan.runs[].testPlanIdstringYes
testPlan.runs[].versionIdstringYes
testPlan.runs[].projectIdstringYesProject ID.
testPlan.runs[].taskIdstringYes
testPlan.runs[].releaseIdstringYes
testPlan.runs[].environmentIdstringYesComputer ID.
testPlan.runs[].agentIdstringYesAgent ID.
testPlan.runs[].triggerTypemanual | mission_control | task | release | pull_request | schedule | apiYes
testPlan.runs[].commitShastringYes
testPlan.runs[].statusqueued | running | passed | failed | completed_with_errors | cancelledYesCurrent lifecycle status.
testPlan.runs[].totalCountintegerYes
testPlan.runs[].passedCountintegerYes
testPlan.runs[].failedCountintegerYes
testPlan.runs[].skippedCountintegerYes
testPlan.runs[].errorCountintegerYes
testPlan.runs[].durationMsintegerYes
testPlan.runs[].evidenceobjectYes
testPlan.runs[].evidence.schemaVersioncomputer_agents_test_run_evidence_v2Yes
testPlan.runs[].evidence.runIdstringYes
testPlan.runs[].evidence.planIdstringYes
testPlan.runs[].evidence.planVersionIdstringYes
testPlan.runs[].evidence.planFingerprintstringYes
testPlan.runs[].evidence.commitShastringYes
testPlan.runs[].evidence.statusqueued | running | passed | failed | completed_with_errors | cancelledYesCurrent lifecycle status.
testPlan.runs[].evidence.expectedCaseIdsstring[]Yes
testPlan.runs[].evidence.countsobjectYes
testPlan.runs[].evidence.counts.totalintegerYes
testPlan.runs[].evidence.counts.passedintegerYes
testPlan.runs[].evidence.counts.failedintegerYes
testPlan.runs[].evidence.counts.skippedintegerYes
testPlan.runs[].evidence.counts.errorintegerYes
testPlan.runs[].evidence.executionContextobjectYes
testPlan.runs[].evidence.executionContext.environmentIdstringYesComputer ID.
testPlan.runs[].evidence.executionContext.agentIdstringYesAgent ID.
testPlan.runs[].evidence.executionContext.projectIdstringYesProject ID.
testPlan.runs[].evidence.executionContext.taskIdstringYes
testPlan.runs[].evidence.executionContext.releaseIdstringYes
testPlan.runs[].evidence.generatedAtstringYes
testPlan.runs[].evidence.resultSetFingerprintstringYes
testPlan.runs[].evidence.artifactSetFingerprintstringYes
testPlan.runs[].evidence.provenanceobjectYesSelf-reported provenance must be unverified with no attestation. Verified-worker provenance is accepted only when the server-verified attestation binds every canonical evidence identity and digest.
testPlan.runs[].evidence.provenance.schemaVersioncomputer_agents_test_run_evidence_provenance_v1Yes
testPlan.runs[].evidence.provenance.sourcecomputer_agents_thread | execution_worker | api_client | legacy_importYes
testPlan.runs[].evidence.provenance.trustLevelself_reported | verified_workerYes
testPlan.runs[].evidence.provenance.verificationStatusunverified | verifiedYes
testPlan.runs[].evidence.provenance.executorobjectYes
testPlan.runs[].evidence.provenance.executor.kindstringYes
testPlan.runs[].evidence.provenance.executor.idstringYesUnique identifier.
testPlan.runs[].evidence.provenance.attestationobjectYes
testPlan.runs[].evidence.provenance.attestation.schemaVersioncomputer_agents_test_execution_attestation_v1Yes
testPlan.runs[].evidence.provenance.attestation.attestationIdstringYes
testPlan.runs[].evidence.provenance.attestation.workerIdstringYes
testPlan.runs[].evidence.provenance.attestation.dispatchIdstringYes
testPlan.runs[].evidence.provenance.attestation.workerAssertionIdstringYes
testPlan.runs[].evidence.provenance.attestation.runIdstringYes
testPlan.runs[].evidence.provenance.attestation.planIdstringYes
testPlan.runs[].evidence.provenance.attestation.planVersionIdstringYes
testPlan.runs[].evidence.provenance.attestation.planFingerprintstringYes
testPlan.runs[].evidence.provenance.attestation.commitShastringYes
testPlan.runs[].evidence.provenance.attestation.environmentIdstringYesComputer ID.
testPlan.runs[].evidence.provenance.attestation.resultSetFingerprintstringYes
testPlan.runs[].evidence.provenance.attestation.artifactSetFingerprintstringYes
testPlan.runs[].evidence.provenance.attestation.issuedAtstringYes
testPlan.runs[].evidence.provenance.attestation.verifiedAtstringYes
testPlan.runs[].evidence.resultsobject[]Yes
testPlan.runs[].evidence.results[].idstringYesUnique identifier.
testPlan.runs[].evidence.results[].testRunIdstringYes
testPlan.runs[].evidence.results[].caseIdstringYes
testPlan.runs[].evidence.results[].namestringYesHuman-readable name.
testPlan.runs[].evidence.results[].kindcommand | contract | integration | browser | agent | security | customYes
testPlan.runs[].evidence.results[].statusqueued | running | passed | failed | skipped | errorYesCurrent lifecycle status.
testPlan.runs[].evidence.results[].attemptintegerYes
testPlan.runs[].evidence.results[].durationMsintegerYes
testPlan.runs[].evidence.results[].exitCodeintegerYes
testPlan.runs[].evidence.results[].summarystringYes
testPlan.runs[].evidence.results[].diagnosticsobjectYes
testPlan.runs[].evidence.results[].evidenceobjectYes
testPlan.runs[].evidence.results[].startedAtstringYesISO 8601 timestamp.
testPlan.runs[].evidence.results[].completedAtstringYesISO 8601 timestamp.
testPlan.runs[].evidence.results[].createdAtstringYesISO 8601 timestamp.
testPlan.runs[].evidence.results[].updatedAtstringYesISO 8601 timestamp.
testPlan.runs[].evidence.artifactsobject[]Yes
testPlan.runs[].evidence.artifacts[].idstringYesUnique identifier.
testPlan.runs[].evidence.artifacts[].testRunIdstringYes
testPlan.runs[].evidence.artifacts[].testCaseResultIdstringYes
testPlan.runs[].evidence.artifacts[].typestringYes
testPlan.runs[].evidence.artifacts[].namestringYesHuman-readable name.
testPlan.runs[].evidence.artifacts[].uristringYes
testPlan.runs[].evidence.artifacts[].contentTypestringYes
testPlan.runs[].evidence.artifacts[].sizeBytesintegerYes
testPlan.runs[].evidence.artifacts[].sha256stringYes
testPlan.runs[].evidence.artifacts[].metadataobjectYesFree-form metadata object.
testPlan.runs[].evidence.artifacts[].createdAtstringYesISO 8601 timestamp.
testPlan.runs[].evidence.fingerprintstringYes
testPlan.runs[].metadataobjectYesFree-form metadata object.
testPlan.runs[].executionobjectYes
testPlan.runs[].execution.ownerstringYes
testPlan.runs[].execution.attemptintegerYes
testPlan.runs[].execution.leaseExpiresAtstringYes
testPlan.runs[].execution.heartbeatAtstringYes
testPlan.runs[].createdAtstringYesISO 8601 timestamp.
testPlan.runs[].updatedAtstringYesISO 8601 timestamp.
testPlan.runs[].startedAtstringYesISO 8601 timestamp.
testPlan.runs[].completedAtstringYesISO 8601 timestamp.
testPlan.runs[].resultsobject[]No
testPlan.runs[].results[].idstringYesUnique identifier.
testPlan.runs[].results[].testRunIdstringYes
testPlan.runs[].results[].caseIdstringYes
testPlan.runs[].results[].namestringYesHuman-readable name.
testPlan.runs[].results[].kindcommand | contract | integration | browser | agent | security | customYes
testPlan.runs[].results[].statusqueued | running | passed | failed | skipped | errorYesCurrent lifecycle status.
testPlan.runs[].results[].attemptintegerYes
testPlan.runs[].results[].durationMsintegerYes
testPlan.runs[].results[].exitCodeintegerYes
testPlan.runs[].results[].summarystringYes
testPlan.runs[].results[].diagnosticsobjectYes
testPlan.runs[].results[].evidenceobjectYes
testPlan.runs[].results[].startedAtstringYesISO 8601 timestamp.
testPlan.runs[].results[].completedAtstringYesISO 8601 timestamp.
testPlan.runs[].results[].createdAtstringYesISO 8601 timestamp.
testPlan.runs[].results[].updatedAtstringYesISO 8601 timestamp.
testPlan.runs[].artifactsobject[]No
testPlan.runs[].artifacts[].idstringYesUnique identifier.
testPlan.runs[].artifacts[].testRunIdstringYes
testPlan.runs[].artifacts[].testCaseResultIdstringYes
testPlan.runs[].artifacts[].typestringYes
testPlan.runs[].artifacts[].namestringYesHuman-readable name.
testPlan.runs[].artifacts[].uristringYes
testPlan.runs[].artifacts[].contentTypestringYes
testPlan.runs[].artifacts[].sizeBytesintegerYes
testPlan.runs[].artifacts[].sha256stringYes
testPlan.runs[].artifacts[].metadataobjectYesFree-form metadata object.
testPlan.runs[].artifacts[].createdAtstringYesISO 8601 timestamp.
versionobjectYes
version.idstringYesUnique identifier.
version.testPlanIdstringYes
version.versionintegerYes
version.labelstringYes
version.descriptionstringYesHuman-readable description.
version.statussaved | publishedYesCurrent lifecycle status.
version.snapshotobjectYes
version.snapshot.namestringYesHuman-readable name.
version.snapshot.descriptionstringYesHuman-readable description.
version.snapshot.statusdraft | active | archivedYesCurrent lifecycle status.
version.snapshot.projectIdstringYesProject ID.
version.snapshot.targetTypeproject | workflow | function | web_app | agent | repository | customYes
version.snapshot.targetIdstringYes
version.snapshot.defaultEnvironmentIdstringYes
version.snapshot.definitionobjectYes
version.snapshot.definition.schemaVersioncomputer_agents_test_plan_v1Yes
version.snapshot.definition.setupobjectYes
version.snapshot.definition.setup.commandstringYes
version.snapshot.definition.setup.workingDirectorystringYes
version.snapshot.definition.setup.timeoutMsintegerYes
version.snapshot.definition.setup.envobjectYes
version.snapshot.definition.setup.secretRefsstring[]Yes
version.snapshot.definition.casesobject[]Yes
version.snapshot.definition.cases[].idstringYesUnique identifier.
version.snapshot.definition.cases[].namestringYesHuman-readable name.
version.snapshot.definition.cases[].descriptionstringYesHuman-readable description.
version.snapshot.definition.cases[].kindcommand | contract | integration | browser | agent | security | customYes
version.snapshot.definition.cases[].commandstringYes
version.snapshot.definition.cases[].workingDirectorystringYes
version.snapshot.definition.cases[].timeoutMsintegerYes
version.snapshot.definition.cases[].retriesintegerYes
version.snapshot.definition.cases[].envobjectYes
version.snapshot.definition.cases[].secretRefsstring[]Yes
version.snapshot.definition.cases[].requestobjectYesKind-specific structured request. Secrets must be referenced through `secretRefs`.
version.snapshot.definition.cases[].assertionsobject[]Yes
version.snapshot.definition.cases[].agentIdstringYesAgent ID.
version.snapshot.definition.cases[].enabledbooleanYes
version.snapshot.definition.cases[].tagsstring[]Yes
version.snapshot.definition.teardownobjectYes
version.snapshot.definition.teardown.commandstringYes
version.snapshot.definition.teardown.workingDirectorystringYes
version.snapshot.definition.teardown.timeoutMsintegerYes
version.snapshot.definition.teardown.envobjectYes
version.snapshot.definition.teardown.secretRefsstring[]Yes
version.snapshot.definition.concurrencyintegerYes
version.snapshot.definition.stopOnFailurebooleanYes
version.snapshot.definition.retryPolicyobjectYes
version.snapshot.definition.retryPolicy.maxAttemptsintegerYes
version.snapshot.definition.retryPolicy.backoffMsintegerYes
version.snapshot.definition.evidencePolicyobjectYes
version.snapshot.definition.evidencePolicy.retainLogsbooleanYes
version.snapshot.definition.evidencePolicy.retainScreenshotsbooleanYes
version.snapshot.definition.evidencePolicy.retainTracesbooleanYes
version.snapshot.definition.evidencePolicy.retainArtifactsbooleanYes
version.snapshot.definition.evidencePolicy.redactSecretsbooleanYes
version.snapshot.metadataobjectYesFunctional extension metadata only; ownership and access-control fields are deliberately excluded.
version.metadataobjectYesFree-form metadata object.
version.publishedAtstringYes
version.createdAtstringYesISO 8601 timestamp.
version.updatedAtstringYesISO 8601 timestamp.
Create a test plan
Loading...
Response 201
Loading...
See the ACP quickstart and SDK flow