Update milestone status

Runs one explicit governed milestone status command through Delivery command authority.

POST/api/v1/delivery/milestones/:id/status

Authorization

delivery-timeline:writeapi key scoperequired
Required scope when calling with an API key.

Path parameters

idstringrequired
Delivery milestone ID

Example: dm_01k2...

Request body

statusstringrequired"not_started" | "in_progress" | "blocked" | "at_risk" | "completed" | "cancelled"
New milestone status
expected_updated_atstringoptional
Optimistic concurrency token from the milestone response
reasonstringoptional
Reason stored in Delivery audit
confirmbooleanrequired
Must be true
Example request
{
  "status": "at_risk",
  "expected_updated_at": "2026-07-15T14:20:00Z",
  "reason": "Provider evidence shows blocked scope.",
  "confirm": true
}

Request

curl -X POST "https://www.digitalstack360.com/api/v1/delivery/milestones/dm_01k2.../status" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: milestone-status-42-v1" \
  -H "Content-Type: application/json" \
  -d '{"status":"at_risk","expected_updated_at":"2026-07-15T14:20:00Z","reason":"Provider evidence shows blocked scope.","confirm":true}'

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

Response

200 OK
{
  "data": {
    "ok": true,
    "milestone": {
      "id": "dm_01k2...",
      "status": "at_risk"
    },
    "changed_fields": [
      "status"
    ],
    "event_type": "milestone.status_changed",
    "idempotency_replayed": false,
    "errors": []
  }
}

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

403
scope_insufficient

Key lacks delivery-timeline:write scope

400
confirmation_required

confirm must be true

409
stale_milestone

expected_updated_at does not match current milestone state