Get Launch Plan
GET/api/launch-plan
Returns the whole launch roadmap: plan status and environment, target and forecast launch dates, computed health with its reason, the critical path (step keys), the profile and resolved modules, milestones, every step (state, progress, evidence, owner, size — S, M or L, due / latest-start dates, health, dependencies, lanes, sign-off, not-needed marker, blocked mark), members (user_id, name, roles, watcher, digest_opt_out, is_staff), and:
launch_plan:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
forecast_launch_on/forecast_basis/pace— the launch forecast comes from the account's own pace: size units (S = 1, M = 3, L = 8) of the steps finished in the last 28 days per week, applied to the open steps that gate go-live. Steps already done when they joined the plan don't count. Until 3 steps are done the forecast is null,forecast_basisisnot_enough_progressandpaceis{steps_done, needed}; after thatforecast_basisispaceandpaceis null. There are no hour estimates or capacities.waiting_on— who the plan is waiting on:[{user_id, name, open, overdue, at_risk, blocked}]per person with open steps (unowned steps asuser_id: null,name: "Unassigned"), most overdue first, then most open.suggestions— pending suggestions: stored AI proposals (source: ai_notes, with anid) plus profile changes inferred from your data that the profile does not reflect yet (source: inferred,id: null). Each haskind(profile_change|custom_step),payload,status, and for profile changesfield/value/reason.choice_required/choices/choiceon each step — true on a checkpoint that records a decision (today onlyfulfillment_cutover_decision), with the allowedchoices([{value, label}]) and the storedchoice(null while undecided); sign it off withchoice. Other steps havechoice_required: falseand nulls.- Per step:
lanes—{manual, import, ai}: the in-app route, the importer route (or null) andai, true when handing the step to your own AI assistant makes sense (real data work);skill— the name of the open-source agent skill (github.com/skuio/sku-skills) that walks an assistant through the step, or null;done_when— one plain sentence saying what SKU checks to mark the step done (or what a person confirms);blocked—{reason, on, by, at}while the step is marked blocked (onissku,customerorthird_party;byis{user_id, name}or null), else null. grace_until— the day the plan's first-week grace ends (creation day + 7; an imported plan gets none). Until then plan and milestone health are never at risk — only off track when something is actually overdue — steps are not flagged "should have started", no digest is sent, and the reason readsGetting started — the plan settles after the first week.next_steps_for_me/next_steps— up to 3 step keys someone can pick up now (open, needed, not locked, every prerequisite done, not blocked), by due date then critical-path order: the caller's own steps (or unassigned ones when the caller owns none), and any owner's.blocked_summary—{sku, customer, third_party}: how many open steps are blocked, by who they wait on.mcp—{url, skills_url}: the MCP server address to add to Claude, ChatGPT or Cursor (https://mcp.sku.io/mcp) and the agent skills repository.is_staff— whether the viewer is SKU.io staff (a super admin or a support agent) in the app, not through an API token.paused_at— when the plan was paused (null unlessstatusispaused).imported_from—{tenant, environment, exported_at, signature_verified}when the plan came from a cutover import, else null. Imported sign-offs carrysigned_off.imported: true; steps rebuilt from an unknown (newer) library key carryfrom_newer_version: true.
A plan evaluated more than 15 minutes ago is re-evaluated first. A paused or archived plan is frozen as of its last evaluation: reading it on later days does not move its dates or health.
The response is {data: <launch plan>, exists: true}. When the account has no plan it is still 200: {data: null, exists: false, roadmap_available, can_manage, is_staff, message, suggested_profile, suggestions} — roadmap_available is false on an account that is already live (unless the caller is SKU.io staff), so a client can hide the roadmap there; creating a plan still works — — a suggested_profile inferred from data you created or switched on (kits / bundles → catalog_shape: kits, BOMs → manufacturing, a drop-ship supplier warehouse in use by a routing rule, order or fulfillment, or drop-ship auto-routing switched on → fulfillment_model: dropship, 3PL warehouses → three_pl, a connected QuickBooks Online / Xero account → accounting_system, several branded stores → brands) and the same facts as suggestions. A freshly set-up account infers nothing.
health_reason names milestones, steps and people (at most 200 characters); a step blocked 5 days or more leads it (Configure kits & bundles has been blocked for 6 days — waiting on a third party: Waiting on the 3PL SKU list.), e.g. Catalog ready was due 10 Nov — 3 steps open, waiting on Jeff McRitchie and Shannon Lee., At your current pace, launch lands around 9 Dec, 8 days after the 1 Dec target. or On track for 1 Dec.
Authentication: Requires Bearer token with the launch_plan:read scope. The user needs the launch_plan.view permission.
Request
Responses
- 200
- 401
- 403
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.