Save a Project delivery design revision
PUT
/v1/projects/{projectId}/delivery-designDeterministically 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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| projectId | path | string | Yes | Project ID |
Query parameters
None.
Header parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| Idempotency-Key | header | string | No | — |
Body schema
Content type: application/json · Required
| Field | Type | Required | Description |
|---|---|---|---|
| request | object | Yes | — |
| request.schemaVersion | computer_agents_project_delivery_design_request_v1 | No | — |
| request.brief | object | Yes | — |
| request.brief.name | string | No | Human-readable name. |
| request.brief.goal | string | Yes | — |
| request.brief.context | string | No | — |
| request.brief.constraints | string[] | No | — |
| request.brief.expectedOutputs | string[] | No | — |
| request.brief.workflowKind | auto | agent | scheduled_pipeline | event_driven_pipeline | service_topology | No | — |
| request.brief.schedule | string | No | — |
| request.validationAssets | object[] | No | — |
| request.validationAssets[].id | string | Yes | Unique identifier. |
| request.validationAssets[].name | string | Yes | Human-readable name. |
| request.validationAssets[].uri | string | Yes | — |
| request.validationAssets[].kind | validation_set | training_set | specification | source_document | other | Yes | — |
| request.validationAssets[].sha256 | string | No | — |
| request.capabilities | object | No | — |
| request.capabilities.managedFunction | boolean | No | — |
| request.capabilities.managedWorkflow | boolean | No | — |
| request.capabilities.persistResults | boolean | No | — |
| request.capabilities.requiredSecretKeys | string[] | No | — |
| request.topology | object | No | Optional 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.resources | object[] | No | — |
| request.topology.resources[].key | string | Yes | — |
| request.topology.resources[].kind | function | Yes | — |
| request.topology.resources[].resourceId | string | Yes | — |
| request.topology.resources[].versionId | string | Yes | — |
| request.topology.resources[].deploymentRevision | string | Yes | — |
| request.topology.resources[].name | string | Yes | Human-readable name. |
| request.topology.resources[].description | string | No | Human-readable description. |
| request.topology.resources[].runtime | nodejs22 | python312 | No | — |
| request.topology.resources[].region | string | No | — |
| request.topology.resources[].authMode | public | private | No | — |
| request.topology.connections | object[] | No | — |
| request.topology.connections[].id | string | Yes | Unique identifier. |
| request.topology.connections[].source | string | Yes | — |
| request.topology.connections[].target | string | Yes | — |
| request.topology.connections[].type | depends_on | invokes | triggers | reads | writes | uses_secrets | runs_in | Yes | — |
| request.topology.connections[].metadata | object | No | Free-form metadata object. |
| request.topology.entrypointResourceKey | string | No | — |
| request.topology.evaluationResourceKeys | string[] | No | Exact 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.entrypointInvocation | object | No | Exact invocation contract used when Evaluation targets the existing topology entrypoint. |
| request.topology.entrypointInvocation.method | GET | POST | PUT | PATCH | DELETE | No | — |
| request.topology.entrypointInvocation.path | string | No | Workspace-relative file path. |
| request.topology.entrypointInvocation.timeoutMs | integer | No | — |
| request.bindings | object | No | — |
| request.bindings.executionAgentId | string | No | — |
| request.bindings.targetAgentId | string | No | — |
| request.bindings.fineTunerAgentId | string | No | — |
| request.bindings.reviewerUserId | string | No | — |
| request.tests | object | No | — |
| request.tests.cases | object[] | No | — |
| request.evaluation | object | No | — |
| request.evaluation.cases | object[] | No | — |
| request.evaluation.cases[].id | string | Yes | Unique identifier. |
| request.evaluation.cases[].input | string | Yes | — |
| request.evaluation.cases[].expectedOutput | string | Yes | — |
| request.evaluation.cases[].evaluationGuidance | string | Yes | — |
| request.evaluation.cases[].optimizationRole | train | validation | holdout | No | — |
| request.evaluation.cases[].metadata | object | No | Free-form metadata object. |
| request.evaluation.source | object | No | — |
| request.evaluation.source.type | existing_evaluation_version | Yes | — |
| request.evaluation.source.evaluationId | string | Yes | — |
| request.evaluation.source.versionId | string | Yes | — |
| request.evaluation.source.datasetAssetId | string | Yes | — |
| request.evaluation.evaluator | object | No | — |
| request.evaluation.passThreshold | number | No | — |
| request.controls | object | No | — |
| request.controls.mode | assisted | autonomous | No | — |
| request.controls.optimizationEnabled | boolean | No | — |
| request.controls.maximumOptimizationIterations | integer | No | — |
| request.controls.guardrailPolicies | object[] | No | — |
| request.controls.assuranceApprovalMode | none | manual | No | — |
| request.controls.repairEnabled | boolean | No | — |
| request.controls.maximumRepairAttempts | integer | No | — |
| request.acceptance | object | No | — |
| request.acceptance.minimumAverageScore | number | No | — |
| request.acceptance.minimumPassRate | number | No | — |
| request.acceptance.requireAllTestsPassing | true | No | — |
| request.acceptance.requirePublishedOptimizationCandidate | boolean | No | — |
| request.budget | object | No | — |
| request.budget.maximumTotalCostUsd | number | No | — |
| idempotencyKey | string | No | — |
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...