Capabilities

Estimates, Effort & Scope

Create and inspect project-scoped estimates, understand scope/effort/role/risk/timeline composition, compare immutable versions, draft governed changes, request human review, and freeze explicit baselines without granting advisory models scheduling or commitment authority.

Interfaces

RESTAvailable

REST provides complete estimate resources, immutable version reads/comparison, reviewable proposals, human baseline requests, and the explicit baseline command.

MCPAvailable

MCP can read estimates, persist a proposal, and request human baseline review; it cannot freeze, approve, sign, or supersede a baseline.

GraphQLAvailable

GraphQL provides composable estimate, version, comparison, and proposal reads plus proposal-only draftEstimateChange. The high-risk baseline command is intentionally REST-only.

WebhooksAvailable

Transactional outbox events cover estimate creation, governed changes, baseline requests, and completed immutable baselines.

Required scopes

estimates:readAPI key scoperequired
Read project-scoped estimates, effort, role demand, scope, immutable versions, and comparisons.
estimates:writeAPI key scoperequired
Create estimates, update bounded draft metadata, and persist reviewable estimate change proposals.
estimates:operateAPI key scoperequired
Request human baseline review or explicitly freeze an immutable estimate baseline.

Examples

List estimates view in REST API reference

curl -X GET "https://www.digitalstack360.com/api/v1/estimates?project_id=24ea6df2-7f4c-4c32-9fc1-6c8a0cb5b4b2" \
  -H "Authorization: Bearer $DS_API_KEY"

Create estimate view in REST API reference

curl -X POST "https://www.digitalstack360.com/api/v1/estimates" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: estimate-create-01" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"24ea6df2-7f4c-4c32-9fc1-6c8a0cb5b4b2","name":"Implementation estimate","commercial_model":"time_and_materials","contingency_percent":15,"confirm":true}'

Retrieve estimate view in REST API reference

curl -X GET "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2" \
  -H "Authorization: Bearer $DS_API_KEY"

Update estimate metadata view in REST API reference

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}'

List estimate versions view in REST API reference

curl -X GET "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/versions" \
  -H "Authorization: Bearer $DS_API_KEY"

Compare estimate versions view in REST API reference

curl -X GET "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/versions/compare?from=48abef95-cb53-4efa-a483-f72390d88488&to=877558ec-b559-48b4-9210-b53ed720fb73" \
  -H "Authorization: Bearer $DS_API_KEY"

List estimate change proposals view in REST API reference

curl -X GET "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/proposals" \
  -H "Authorization: Bearer $DS_API_KEY"

Draft estimate change view in REST API reference

curl -X POST "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/proposals" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: estimate-proposal-03" \
  -H "Content-Type: application/json" \
  -d '{"requested_outcome":"Reduce launch risk","proposed_changes":{"contingency_percent":20},"expected_version":3}'

Request baseline review view in REST API reference

curl -X POST "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/baseline-requests" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: estimate-baseline-request-03" \
  -H "Content-Type: application/json" \
  -d '{"proposal_id":"f61f8271-ddb5-4d55-a4d2-5910714fd7a2","expected_version":3,"reason":"Ready for delivery-lead review","confirm":true}'

Baseline estimate view in REST API reference

curl -X POST "https://www.digitalstack360.com/api/v1/estimates/8a043c6e-52ab-4df1-8b7a-afec991a05a2/baseline" \
  -H "Authorization: Bearer $DS_API_KEY" \
  -H "Idempotency-Key: estimate-baseline-04" \
  -H "Content-Type: application/json" \
  -d '{"expected_version":3,"freeze_note":"Approved delivery baseline","confirm":true}'
Review the current scope, effort, roles, risks, and baseline posture for estimate {estimate_id}.
Draft a reviewed proposal to adjust contingency and explain the evidence, but do not change the estimate.
After I confirm, submit proposal {proposal_id} for baseline review.

GraphQL examples

Read estimate scope and effortAvailableestimates:read

Read the same live vSOW-backed estimate projection used by REST and MCP.

query EstimateDetail($id: ID!) {
  estimate(id: $id) {
    id projectId name status version activeSnapshotId
    summary timeline composition scopeItems workstreams roles risks
    allowedActions { id label requiresConfirmation }
    source { kind projectId }
  }
}
Compare immutable versionsAvailableestimates:read

List frozen baselines and calculate a deterministic revision diff.

query EstimateVersions($estimateId: ID!, $from: ID!, $to: ID!) {
  estimateVersions(estimateId: $estimateId) {
    id revisionNumber status sourceSignature frozenAt freezeNote
    composition estimationPrimitives economicsSummary
  }
  estimateVersionDiff(estimateId: $estimateId, from: $from, to: $to)
}
Draft an estimate changeAvailableestimates:write

Persist a version-bound proposal without changing canonical estimate or baseline state.

mutation DraftEstimateChange($input: DraftEstimateChangeInput!) {
  draftEstimateChange(input: $input) {
    ok
    proposal { id estimateId status requestedOutcome proposedChanges expectedVersion createdAt }
    idempotencyReplayed
    errors { code message path }
  }
}

Webhook emits

estimate.createdAvailable

A canonical estimate draft was created.

Resource: estimate

estimate_idproject_idchanged_fieldsversionoccurred_at
estimate.updatedAvailable

Governed estimate metadata, scope, effort, role demand, risk, timeline, or composition changed.

Resource: estimate

estimate_idproject_idchanged_fieldsversionoccurred_at
estimate.baseline_requestedAvailable

A reviewable estimate proposal was submitted for human baseline review.

Resource: estimate

estimate_idproject_idproposal_idexpected_versionstatusoccurred_at
estimate.baselinedAvailable

An authorized human froze an immutable estimate baseline.

Resource: estimate

estimate_idproject_idsnapshot_idrevision_numbersource_signaturestatusoccurred_at

All webhook events use the shared v1 envelope, signed delivery, and minimal payload rule. Fetch by resource id for expanded data.

Operating contract

These boundaries remain part of the customer-facing contract after capability promotion.

Must remain true

  • The vSOW package remains the live estimate authority; an immutable vSOW snapshot remains the baseline/version authority.
  • Project estimation, role, risk, and timeline calculations are advisory until an authorized human freezes a baseline.
  • A phase, scope grouping, model recommendation, or external source cannot implicitly move delivery coordinates, staffing allocations, or commitments.
  • Every public mutation is attributable and version-bound; retryable commands are idempotent.
  • Baseline snapshots are immutable and content-addressed; later changes produce a new revision rather than rewriting history.

Explicitly not exposed

  • GraphQL or MCP execution of baseline, approval, signing, supersession, or commercial commitment commands
  • AI estimates automatically becoming delivery commitments or staffing plans
  • Spreadsheet or CRM inputs bypassing validation, provenance, proposal, or review
  • Generic estimate scopes exposing rates, margins, invoices, DigitalStack subscriptions, or payment details
  • Estimate timeline geometry becoming a competing execution schedule

System boundaries

Systems commonly integrated with this capability. Each row states the boundary and its native status; it does not transfer canonical authority to the connected system.

DigitalStack owns

  • vSOW package identity and live estimate composition
  • Project estimation scope, effort, role demand, risk, and advisory timeline model
  • Immutable signed snapshot versions and explicit baseline decisions
  • Reviewable proposals, optimistic versions, idempotency, audit, and event attribution

Source systems own

  • CRM opportunity scope or structured spreadsheet inputs until they are reviewed and adopted into DigitalStack

Typical integration patterns

CRM / spreadsheet import
Supply provenance-bearing scope and estimate inputs; imported data remains a proposal until reviewed.DigitalStack has a native connection and ingestion foundation for this system already — public developer-platform exposure for this capability is still limited or planned.
Claude / ChatGPT / IDE clients
Read and explain estimates, draft bounded changes, and request human review through MCP.

Related guides