Skip to content

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 Initiative type 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 derived isInert / capitalisable flags, and the windowed rollups effortActuals, forecast, aiSpend, plannedCommitment, and varianceSummary. Money fields are gated behind FINANCIALS_VIEW_SUMMARY (zeroed without it).
  • Strategy + classification types. New Objective + KeyResult (the OKR layer above Initiatives), PortfolioLens (KTLO / Revenue / Cost-Reduction / Compliance), and InitiativeCommitment (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 in dormantCostCentreId while 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_CLAIM only), adHocCapexClaimCreate (hand-picked projects), and capexClaimConvertToInitiative. A one-claim-per-project-per-claimPeriodKey guard throws PROJECT_ALREADY_CLAIMED.
  • New error codesPROJECT_ALREADY_ADOPTED, PROJECT_NOT_ADOPTED_HERE, CROSS_ORG_ADOPTION, and PROJECT_ALREADY_CLAIMED, each with deep-link ids in extensions. See API → Initiatives → Error codes.
  • Operating modelorganizationOperatingModelUpdate(preset, terminology) relabels the workspace nouns (entityTerminology) and picks an operatingModelPreset; Organization now exposes both fields.
  • Four new webhook entity typesinitiative, objective, portfolio_lens, and capex_claim now emit create / update / delete events. 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-manual project 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 Project lifecycleStageId field is replaced by deliveryStatus.

Removed

  • Configurable lifecycle stages. The standalone lifecycle-stage entity and its GET/POST/PATCH/DELETE /org/{orgId}/lifecycle-stages REST endpoints, the lifecycle-stages:read / lifecycle-stages:write scopes, and the lifecycle_stage webhook entity type are removed. Project delivery status now lives on the project itself as deliveryStatus (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/fill now supports filling with a contractor. Pass fillerType: "contractor" in the request body along with name, rate, rateType, and currencyCode. 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-exclusive employee / contractor fields. Existing employee-fill callers continue to work unchanged — fillerType defaults to "employee".
  • Vacancy.filledByLiveContractorId — new mutually-exclusive companion to filledByLiveEmployeeId. Set automatically by the contractor-branch fill, or manually via PATCH.
  • Vacancy.isFilled (derived)true when one of the filledBy* FKs is set and the filler's endDate is unset or in the future. Once the filler's endDate passes, 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 shorthand filledByExternalId). 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=false to include them. Cost forecast views suppress a vacancy's cost only while its filler is active (matching isFilled), then resume contributing cost once the filler's endDate passes.

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 /employees request by including an assignments array in the body.
  • Vacancy fill endpointPOST /vacancies/:id/fill converts a vacancy into an active employee or contractor record, closing the vacancy and transferring its assignments.
  • ?include= support — Use ?include=assignments,team,project on any resource endpoint to embed related records in the response, reducing round trips.
  • Cost centre filter — All list endpoints now accept costCentreId as a filter parameter.

Changed

  • Work Types renamed to Resource Types — The /work-types endpoint 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 scenarioId to any endpoint to operate within a what-if scenario
  • Pagination — Consistent page-based pagination with page, limit, search, sortBy, and sortDir
  • Authentication — API key-based authentication with scoped permissions
  • Error handling — Structured error responses with error codes and unique error IDs

Flowstate Documentation