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.passThresholdnumberNo
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