Opportunity delivery forecast
Returns a scoped delivery forecast derived from the opportunity's attached scope document: staffing demand by phase and role, timeline projection by month, confidence scoring, and pressure warnings. Requires an attached scope with at least one role demand. Margin projection is included only when the caller holds the financials:read scope (API key) or revops:view_margin permission (session).
/api/v1/opportunities/:id/delivery-forecastAuthorization
opportunities:readapi key scoperequiredopportunity:forecast_readsession capabilityoptionalPath parameters
idstringrequiredExample: opp_abc123
Query parameters
refreshbooleanoptionalExample: true
Request
curl -X GET "https://www.digitalstack360.com/api/v1/opportunities/opp_abc123/delivery-forecast" \
-H "Authorization: Bearer $DS_API_KEY"Examples use a placeholder key from your environment. Store your key in $DS_API_KEY — never commit it.
Response
{
"data": {
"opportunity_id": "opp_abc123",
"source_type": "scope_document",
"confidence": 0.85,
"assumptions": [
"Probability: 75% — weighted projections are raw × 75%",
"Delivery start: 2026-07-01",
"Scope version 3 (last revised 2026-05-08)",
"Timeline: derived from 4 phase milestones",
"Staffing: 8 role demands across 3 phases"
],
"scope": {
"scope_id": "scope_uuid_here",
"scope_version": 3,
"last_revised_at": "2026-05-08T14:23:00.000Z",
"total_hours": 1600,
"duration_weeks": 20
},
"staffing_projection": {
"peak_fte": 6,
"peak_weighted_fte": 4.5,
"total_hours": 1600,
"total_weighted_hours": 1200,
"by_phase": [
{
"phase": "discovery",
"roles": [
{
"role_id": "role-uuid-1",
"role_name": "Strategist",
"fte": 1,
"hours": 80
},
{
"role_id": "role-uuid-2",
"role_name": "Project Manager",
"fte": 0.5,
"hours": 40
}
]
},
{
"phase": "build",
"roles": [
{
"role_id": "role-uuid-3",
"role_name": "Frontend Engineer",
"fte": 3,
"hours": 960
},
{
"role_id": "role-uuid-4",
"role_name": "Backend Engineer",
"fte": 2,
"hours": 640
}
]
}
]
},
"timeline_projection": {
"delivery_start": "2026-07-01",
"duration_weeks": 20,
"estimated_end": "2026-11-18",
"by_month": [
{
"month": "2026-07",
"phase": "discovery",
"raw_fte": 1.5,
"weighted_fte": 1.13,
"raw_hours": 120,
"weighted_hours": 90
},
{
"month": "2026-08",
"phase": "build",
"raw_fte": 5,
"weighted_fte": 3.75,
"raw_hours": 400,
"weighted_hours": 300
}
]
},
"warnings": [
{
"code": "HIGH_LOAD",
"message": "Peak staffing demand exceeds 3 FTE — verify capacity before committing."
}
],
"forecast_date": "2026-05-14",
"forecast_computed_at": "2026-05-14T09:00:00.000Z"
}
}Errors
missing_authNo credentials provided
invalid_api_keyAPI key is invalid or revoked
scope_insufficientKey lacks opportunities:read scope
insufficient_scopeOpportunity has no attached scope or no role demands
not_foundOpportunity not found or not in your workspace