Update estimate metadata

Updates bounded draft metadata with optimistic versioning. It cannot mutate status or replace an immutable baseline.

PATCH/api/v1/estimates/:id

Authorization

estimates:writeapi key scoperequired
Required scope when calling with an API key.

Path parameters

idstringrequired
Estimate UUID.

Example: 8a043c6e-52ab-4df1-8b7a-afec991a05a2

Request body

namestringoptional
Updated estimate name.
descriptionstringoptional
Updated description.
commercial_modelstringoptional
Commercial posture.
contingency_percentnumberoptional
Contingency percentage.
expected_versionnumberrequired
Version returned by the prior read.
confirmbooleanrequired
Must be true.
Example request
{
  "contingency_percent": 20,
  "expected_version": 3,
  "confirm": true
}

Request

curl -X PATCH "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: estimate-update-04" \
  -H "Content-Type: application/json" \
  -d '{"contingency_percent":20,"expected_version":3,"confirm":true}'

Examples use a placeholder key from your environment. Store your key in $DS_API_KEY — never commit it.

Response

200 OK
{
  "data": {
    "id": "8a043c6e-52ab-4df1-8b7a-afec991a05a2",
    "version": 4
  },
  "meta": {
    "idempotency_replayed": false
  }
}

Errors

401
missing_auth

No credentials provided

401
invalid_api_key

API key is invalid or revoked

400
bad_request

Missing or invalid request fields

403
scope_insufficient

Key lacks the required write scope

409
version_conflict

Estimate changed since it was read.