Appearance
API Changelog
The Flowstate API follows Semantic Versioning. Breaking changes will only occur in major version bumps and will be announced well in advance.
For platform changes, see Flowstate Updates.
v1.3.0 — 2026-06-08
Initiative as finance anchor — GraphQL surface, MCP tools, and four new webhook entities.
For platform changes, see Flowstate Updates.
Added
- Initiative finance-anchor GraphQL API. The
Initiativetype now carries the finance/governance anchor:financeMode(CAPEX_RD_CLAIM/CLIENT_BILLING/INTERNAL_COST) +financeModeCapabilities,costCentre,budgetedCost/budgetCurrency,marginPct,committedFte, AI budget,lens,objective, the derivedisInert/capitalisableflags, and the windowed rollupseffortActuals,forecast,aiSpend,plannedCommitment, andvarianceSummary. Money fields are gated behindFINANCIALS_VIEW_SUMMARY(zeroed without it). - Strategy + classification types. New
Objective+KeyResult(the OKR layer above Initiatives),PortfolioLens(KTLO / Revenue / Cost-Reduction / Compliance), andInitiativeCommitment(planned per-subject committed FTE + AI budget). Queries:objectives,objective(id),portfolioLenses,capexClaims,capexClaim(id). - Finance + adoption mutations.
initiativeFinanceUpdate(partial finance patch),initiativeAdoptProject/initiativeDetachProject(move a project's cost-centre anchor onto/off an Initiative; the project's own cost centre is stashed indormantCostCentreIdwhile adopted), and CRUD for objectives, key results, portfolio lenses, and commitments. - Pull-based CapEx/R&D claims.
initiativeCapexClaimCreate(anchored — auto-pulls the Initiative's child projects as evidence;CAPEX_RD_CLAIMonly),adHocCapexClaimCreate(hand-picked projects), andcapexClaimConvertToInitiative. A one-claim-per-project-per-claimPeriodKeyguard throwsPROJECT_ALREADY_CLAIMED. - New error codes —
PROJECT_ALREADY_ADOPTED,PROJECT_NOT_ADOPTED_HERE,CROSS_ORG_ADOPTION, andPROJECT_ALREADY_CLAIMED, each with deep-link ids inextensions. See API → Initiatives → Error codes. - Operating model —
organizationOperatingModelUpdate(preset, terminology)relabels the workspace nouns (entityTerminology) and picks anoperatingModelPreset;Organizationnow exposes both fields. - Four new webhook entity types —
initiative,objective,portfolio_lens, andcapex_claimnow emitcreate/update/deleteevents. See Outbound Webhooks. - Six new MCP/assistant tools — read:
search_initiatives,get_initiative_details,list_portfolio,list_objectives; live writes:add_initiative,update_initiative,adopt_project_to_initiative,detach_project_from_initiative,set_initiative_commitment,create_capex_claim. See MCP server.
Changed
- A synced project is inert until anchored. A non-
manualproject with no cost centre and no Initiative carries no financial signal — it is excluded from capitalisation and the forecast until a human assigns a cost centre or adopts it into an Initiative. Finance reads resolve a project's cost centre and Finance Mode through the Initiative-first resolution chain. - Project delivery status is PMS-derived. A project's status is now the canonical
deliveryStatus(BACKLOG/TODO/IN_PROGRESS/IN_REVIEW/DONE/CANCELLED), rolled up from the statuses of its linked PMS tickets via the org status mapping. It is read-only while the project has any PMS link and manually settable only when it has none. The REST ProjectlifecycleStageIdfield is replaced bydeliveryStatus.
Removed
- Configurable lifecycle stages. The standalone lifecycle-stage entity and its
GET/POST/PATCH/DELETE /org/{orgId}/lifecycle-stagesREST endpoints, thelifecycle-stages:read/lifecycle-stages:writescopes, and thelifecycle_stagewebhook entity type are removed. Project delivery status now lives on the project itself asdeliveryStatus(see Changed above).
v1.2.0 — 2026-05-12
Contractor-filled vacancies + endDate-aware "currently filled" semantics.
For platform changes, see Flowstate Updates.
Added
POST /vacancies/:id/fillnow supports filling with a contractor. PassfillerType: "contractor"in the request body along withname,rate,rateType, andcurrencyCode. The endpoint creates a contractor record with an initial rate adjustment and transfers the vacancy's assignments to the new contractor. The response wraps both branches via mutually-exclusiveemployee/contractorfields. Existing employee-fill callers continue to work unchanged —fillerTypedefaults to"employee".Vacancy.filledByLiveContractorId— new mutually-exclusive companion tofilledByLiveEmployeeId. Set automatically by the contractor-branch fill, or manually viaPATCH.Vacancy.isFilled(derived) —truewhen one of thefilledBy*FKs is set and the filler'sendDateis unset or in the future. Once the filler'sendDatepasses, the vacancy is treated as open again (forecast cost resumes from that date). This replaces the previous "filledByLiveEmployeeId IS NULL" check throughout the forecast model.- Integration hook surface for positions — Custom-integration hooks that emit vacancy records can now use
filledBy: { externalId }(or the shorthandfilledByExternalId). The sync layer resolves the externalId against both live employees and live contractors and sets the appropriate FK. See Custom Integrations → Vacancies.
Changed
- Vacancy filtering semantics — Default vacancy listings now hide currently-filled vacancies; pass
excludeFilled=falseto include them. Cost forecast views suppress a vacancy's cost only while its filler is active (matchingisFilled), then resume contributing cost once the filler'sendDatepasses.
v1.1.0 — 2026-04-08
Custom attributes, nested writes, and vacancy fill.
For platform changes, see Flowstate Updates.
Added
- Custom attributes — Define custom fields on employees, contractors, vacancies, teams, and projects via
GET/POST/PATCH/DELETE /custom-attributes. Custom attribute values are returned on all resource endpoints and can be set during create and update operations. - Nested create and update — Create or update child records inline. For example, create an employee and their team assignment in a single
POST /employeesrequest by including anassignmentsarray in the body. - Vacancy fill endpoint —
POST /vacancies/:id/fillconverts a vacancy into an active employee or contractor record, closing the vacancy and transferring its assignments. ?include=support — Use?include=assignments,team,projecton any resource endpoint to embed related records in the response, reducing round trips.- Cost centre filter — All list endpoints now accept
costCentreIdas a filter parameter.
Changed
- Work Types renamed to Resource Types — The
/work-typesendpoint is now/resource-types. The previous path continues to work but is deprecated and will be removed in v2.0.0.
v1.0.0 — 2026-03-11
Initial public release of the Flowstate Developer API.
Added
- Employees — Full CRUD for employee records with salary, role, and geography data
- Contractors — Full CRUD for external contractors with rate and contract period tracking
- Vacancies — Full CRUD for open positions with salary ranges and hiring pipeline status
- Teams — Full CRUD for organizational teams with hierarchy support
- Projects — Full CRUD for projects with timelines and cost estimates
- Assignments — Unified assignment model for employee, contractor, vacancy, and team allocations to teams and projects
- Cost Centres — Full CRUD for cost centre management
- Value Streams — Full CRUD for value stream organization
- Work Types — Full CRUD for work type classification
- Drivers — Full CRUD for strategic project drivers
- Lifecycle Stages — Full CRUD for project lifecycle stage management
- Exchange Rates — Full CRUD for currency conversion rates
- Locations — Full CRUD for geographic location management
- Scenario support — Pass
scenarioIdto any endpoint to operate within a what-if scenario - Pagination — Consistent page-based pagination with
page,limit,search,sortBy, andsortDir - Authentication — API key-based authentication with scoped permissions
- Error handling — Structured error responses with error codes and unique error IDs