Save a Project delivery design revision

PUT/v1/projects/{projectId}/delivery-design

Deterministically compiles and stores a bounded Project brief. Missing authoritative inputs remain explicit blockers. Saving never applies the contract, provisions resources, starts Mission Control, or runs a model.

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
NameLocationTypeRequiredDescription
projectIdpathstringYesProject ID
Query parameters
None.
Header parameters
NameLocationTypeRequiredDescription
Idempotency-KeyheaderstringNo—

Body schema

Content type: application/json · Required

FieldTypeRequiredDescription
requestobjectYes—
request.schemaVersioncomputer_agents_project_delivery_design_request_v1No—
request.briefobjectYes—
request.brief.namestringNoHuman-readable name.
request.brief.goalstringYes—
request.brief.contextstringNo—
request.brief.constraintsstring[]No—
request.brief.expectedOutputsstring[]No—
request.brief.workflowKindauto | agent | scheduled_pipeline | event_driven_pipeline | service_topologyNo—
request.brief.schedulestringNo—
request.validationAssetsobject[]No—
request.validationAssets[].idstringYesUnique identifier.
request.validationAssets[].namestringYesHuman-readable name.
request.validationAssets[].uristringYes—
request.validationAssets[].kindvalidation_set | training_set | specification | source_document | otherYes—
request.validationAssets[].sha256stringNo—
request.capabilitiesobjectNo—
request.capabilities.managedFunctionbooleanNo—
request.capabilities.managedWorkflowbooleanNo—
request.capabilities.persistResultsbooleanNo—
request.capabilities.requiredSecretKeysstring[]No—
request.topologyobjectNoOptional authoritative topology of already-existing platform resources. When populated, every resource is bound with the existing lifecycle and no managed Function or Metronome replacement is inferred.
request.topology.resourcesobject[]No—
request.topology.resources[].keystringYes—
request.topology.resources[].kindfunctionYes—
request.topology.resources[].resourceIdstringYes—
request.topology.resources[].versionIdstringYes—
request.topology.resources[].deploymentRevisionstringYes—
request.topology.resources[].namestringYesHuman-readable name.
request.topology.resources[].descriptionstringNoHuman-readable description.
request.topology.resources[].runtimenodejs22 | python312No—
request.topology.resources[].regionstringNo—
request.topology.resources[].authModepublic | privateNo—
request.topology.connectionsobject[]No—
request.topology.connections[].idstringYesUnique identifier.
request.topology.connections[].sourcestringYes—
request.topology.connections[].targetstringYes—
request.topology.connections[].typedepends_on | invokes | triggers | reads | writes | uses_secrets | runs_inYes—
request.topology.connections[].metadataobjectNoFree-form metadata object.
request.topology.entrypointResourceKeystringNo—
request.topology.evaluationResourceKeysstring[]NoExact Agent, Function, and Metronome resource closure executed by Evaluation. The complete authoritative topology remains bound and verified by Build and Test. An empty array preserves the legacy behavior of evaluating every executable resource.
request.topology.entrypointInvocationobjectNoExact invocation contract used when Evaluation targets the existing topology entrypoint.
request.topology.entrypointInvocation.methodGET | POST | PUT | PATCH | DELETENo—
request.topology.entrypointInvocation.pathstringNoWorkspace-relative file path.
request.topology.entrypointInvocation.timeoutMsintegerNo—
request.bindingsobjectNo—
request.bindings.executionAgentIdstringNo—
request.bindings.targetAgentIdstringNo—
request.bindings.fineTunerAgentIdstringNo—
request.bindings.reviewerUserIdstringNo—
request.testsobjectNo—
request.tests.casesobject[]No—
request.evaluationobjectNo—
request.evaluation.casesobject[]No—
request.evaluation.cases[].idstringYesUnique identifier.
request.evaluation.cases[].inputstringYes—
request.evaluation.cases[].expectedOutputstringYes—
request.evaluation.cases[].evaluationGuidancestringYes—
request.evaluation.cases[].optimizationRoletrain | validation | holdoutNo—
request.evaluation.cases[].metadataobjectNoFree-form metadata object.
request.evaluation.sourceobjectNo—
request.evaluation.source.typeexisting_evaluation_versionYes—
request.evaluation.source.evaluationIdstringYes—
request.evaluation.source.versionIdstringYes—
request.evaluation.source.datasetAssetIdstringYes—
request.evaluation.evaluatorobjectNo—
request.evaluation.evaluator.typeexactYes—
request.evaluation.passThresholdnumberNo—
request.evaluation.datasetGovernanceobjectNo—
request.evaluation.datasetGovernance.schemaVersioncomputer_agents_evaluation_dataset_governance_v1Yes—
request.evaluation.datasetGovernance.maturitydiagnostic | development | validation | locked_test | external_testYes—
request.evaluation.datasetGovernance.adjudicationStatuspending | in_progress | adjudicatedYes—
request.evaluation.datasetGovernance.allowedPurposesdiagnostic | development | optimization | release | external_validation[]Yes—
request.evaluation.datasetGovernance.annotationGuidelineVersionstringYes—
request.evaluation.datasetGovernance.adjudicationRecordSha256stringYes—
request.evaluation.datasetGovernance.lockedAtstringYes—
request.evaluation.workflowAcceptanceSourceobjectNo—
request.evaluation.workflowAcceptanceSource.typeexisting_evaluation_versionYes—
request.evaluation.workflowAcceptanceSource.evaluationIdstringYes—
request.evaluation.workflowAcceptanceSource.versionIdstringYes—
request.evaluation.workflowAcceptanceSource.datasetAssetIdstringYes—
request.evaluation.workflowAcceptanceDatasetGovernanceobjectNo—
request.evaluation.workflowAcceptanceDatasetGovernance.schemaVersioncomputer_agents_evaluation_dataset_governance_v1Yes—
request.evaluation.workflowAcceptanceDatasetGovernance.maturitydiagnostic | development | validation | locked_test | external_testYes—
request.evaluation.workflowAcceptanceDatasetGovernance.adjudicationStatuspending | in_progress | adjudicatedYes—
request.evaluation.workflowAcceptanceDatasetGovernance.allowedPurposesdiagnostic | development | optimization | release | external_validation[]Yes—
request.evaluation.workflowAcceptanceDatasetGovernance.annotationGuidelineVersionstringYes—
request.evaluation.workflowAcceptanceDatasetGovernance.adjudicationRecordSha256stringYes—
request.evaluation.workflowAcceptanceDatasetGovernance.lockedAtstringYes—
request.controlsobjectNo—
request.controls.modeassisted | autonomousNo—
request.controls.optimizationEnabledbooleanNo—
request.controls.maximumOptimizationIterationsintegerNo—
request.controls.guardrailPoliciesobject[]No—
request.controls.assuranceApprovalModenone | manualNo—
request.controls.repairEnabledbooleanNo—
request.controls.maximumRepairAttemptsintegerNo—
request.acceptanceobjectNo—
request.acceptance.minimumAverageScorenumberNo—
request.acceptance.minimumPassRatenumberNo—
request.acceptance.requireAllTestsPassingtrueNo—
request.acceptance.requirePublishedOptimizationCandidatebooleanNo—
request.budgetobjectNo—
request.budget.maximumTotalCostUsdnumberNo—
idempotencyKeystringNo—

What the API returns

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

200Existing identical design revision
None.
201Design revision saved
None.
400Invalid closed-schema design request
None.
409Idempotency conflict or archived design
None.
Save a Project delivery design revision
Loading...
Response 200
Loading...
See the ACP quickstart and SDK flow