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
REST provides complete estimate resources, immutable version reads/comparison, reviewable proposals, human baseline requests, and the explicit baseline command.
MCP can read estimates, persist a proposal, and request human baseline review; it cannot freeze, approve, sign, or supersede a baseline.
GraphQL provides composable estimate, version, comparison, and proposal reads plus proposal-only draftEstimateChange. The high-risk baseline command is intentionally REST-only.
Transactional outbox events cover estimate creation, governed changes, baseline requests, and completed immutable baselines.
Required scopes
estimates:readAPI key scoperequiredestimates:writeAPI key scoperequiredestimates:operateAPI key scoperequiredExamples
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}'GraphQL examples
estimates:readRead 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 }
}
}estimates:readList 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)
}estimates:writePersist 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.createdAvailableA canonical estimate draft was created.
Resource: estimate
estimate_idproject_idchanged_fieldsversionoccurred_atestimate.updatedAvailableGoverned estimate metadata, scope, effort, role demand, risk, timeline, or composition changed.
Resource: estimate
estimate_idproject_idchanged_fieldsversionoccurred_atestimate.baseline_requestedAvailableA reviewable estimate proposal was submitted for human baseline review.
Resource: estimate
estimate_idproject_idproposal_idexpected_versionstatusoccurred_atestimate.baselinedAvailableAn authorized human froze an immutable estimate baseline.
Resource: estimate
estimate_idproject_idsnapshot_idrevision_numbersource_signaturestatusoccurred_atAll 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 importClaude / ChatGPT / IDE clients