Assignments
Manage FTE allocations that link people (employees, contractors, vacancies) to teams and projects. Assignments are the core mechanism for headcount planning — they define how much of each person's capacity flows to each team or project over a specific time period.
Concepts
Assignment Types
Flowstate uses a unified assignment model with four sub-resources:
| Sub-resource | From | To | Description |
|---|---|---|---|
/assignments/employees | Employee | Team or Project | Employee allocation |
/assignments/contractors | Contractor | Team or Project | Contractor allocation |
/assignments/vacancies | Vacancy | Team or Project | Vacancy allocation |
/assignments/teams | Team | Project | Team-to-project allocation |
The type Field
Each assignment has a type field that indicates the target:
"team"— The resource is assigned to a team"project"— The resource is assigned to a project
The targetId field contains the ID of the team or project.
INFO
Team-to-project assignments (/assignments/teams) always have type: "project" since they exclusively map teams to projects.
FTE (Full-Time Equivalent)
The fte field is a decimal between 0 and 1 representing the portion of a full-time person:
1.0= full-time on this assignment0.5= half-time0.2= one day per week
An employee's total FTE across all assignments should not exceed 1.0.
Time-Bounded Records
All assignments have startDate and endDate fields. The assignment is active for any date where startDate <= date <= endDate. An endDate of null means the assignment is ongoing.
Employee Assignments
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /org/:orgId/assignments/employees | List employee assignments |
GET | /org/:orgId/assignments/employees/:id | Get assignment |
POST | /org/:orgId/assignments/employees | Create assignment |
PATCH | /org/:orgId/assignments/employees/:id | Update assignment |
DELETE | /org/:orgId/assignments/employees/:id | Delete assignment |
List Employee Assignments
GET /org/:orgId/assignments/employeesQuery Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
limit | integer | 20 | Records per page (max 200) |
employeeId | string | — | Filter by employee ID |
targetId | string | — | Filter by target team or project ID |
type | string | — | Filter by type: "team" or "project" |
sortBy | string | startDate | Sort field |
sortDir | string | asc | asc or desc |
scenarioId | string | — | Scenario ID for what-if queries |
Example Request
curl -X GET "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/employees?employeeId=clx1a2b3c4d5e6f7g8h9&type=team" \
-H "Authorization: Bearer private_..."Example Response
{
"data": [
{
"id": "clx8a9b0c1d2e3f4",
"employeeId": "clx1a2b3c4d5e6f7g8h9",
"type": "team",
"targetId": "clx6t7u8v9w0x1y2",
"fte": 0.6,
"startDate": "2025-01-01",
"endDate": null,
"metadata": {},
"createdAt": "2024-12-15T10:00:00Z",
"updatedAt": "2025-06-01T14:00:00Z"
},
{
"id": "clx9b0c1d2e3f4g5",
"employeeId": "clx1a2b3c4d5e6f7g8h9",
"type": "team",
"targetId": "clx3d4e5f6g7h8i9",
"fte": 0.4,
"startDate": "2025-01-01",
"endDate": null,
"metadata": {},
"createdAt": "2024-12-15T10:00:00Z",
"updatedAt": "2025-06-01T14:00:00Z"
}
],
"meta": {
"page": 1,
"limit": 20,
"total": 2,
"hasNextPage": false
}
}Create Employee Assignment
POST /org/:orgId/assignments/employeescurl -X POST "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/employees" \
-H "Authorization: Bearer private_..." \
-H "Content-Type: application/json" \
-d '{
"employeeId": "clx1a2b3c4d5e6f7g8h9",
"type": "project",
"targetId": "clx7p8r9q0s1t2u3",
"fte": 0.5,
"startDate": "2026-04-01",
"endDate": "2026-09-30"
}'Status: 201 Created
Update Employee Assignment
PATCH /org/:orgId/assignments/employees/:idcurl -X PATCH "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/employees/clx8a9b0c1d2e3f4" \
-H "Authorization: Bearer private_..." \
-H "Content-Type: application/json" \
-d '{
"fte": 0.8,
"endDate": "2026-12-31"
}'Delete Employee Assignment
DELETE /org/:orgId/assignments/employees/:idStatus: 204 No Content
Contractor Assignments
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /org/:orgId/assignments/contractors | List contractor assignments |
GET | /org/:orgId/assignments/contractors/:id | Get assignment |
POST | /org/:orgId/assignments/contractors | Create assignment |
PATCH | /org/:orgId/assignments/contractors/:id | Update assignment |
DELETE | /org/:orgId/assignments/contractors/:id | Delete assignment |
Example: Create Contractor Assignment
curl -X POST "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/contractors" \
-H "Authorization: Bearer private_..." \
-H "Content-Type: application/json" \
-d '{
"contractorId": "clx4c5d6e7f8g9h0",
"type": "team",
"targetId": "clx6t7u8v9w0x1y2",
"fte": 1.0,
"startDate": "2026-04-01",
"endDate": "2026-09-30"
}'Vacancy Assignments
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /org/:orgId/assignments/vacancies | List vacancy assignments |
GET | /org/:orgId/assignments/vacancies/:id | Get assignment |
POST | /org/:orgId/assignments/vacancies | Create assignment |
PATCH | /org/:orgId/assignments/vacancies/:id | Update assignment |
DELETE | /org/:orgId/assignments/vacancies/:id | Delete assignment |
Example: Create Vacancy Assignment
curl -X POST "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/vacancies" \
-H "Authorization: Bearer private_..." \
-H "Content-Type: application/json" \
-d '{
"vacancyId": "clx5v6w7x8y9z0a1",
"type": "team",
"targetId": "clx6t7u8v9w0x1y2",
"fte": 1.0,
"startDate": "2026-06-01"
}'Team-to-Project Assignments
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /org/:orgId/assignments/teams | List team-project assignments |
GET | /org/:orgId/assignments/teams/:id | Get assignment |
POST | /org/:orgId/assignments/teams | Create assignment |
PATCH | /org/:orgId/assignments/teams/:id | Update assignment |
DELETE | /org/:orgId/assignments/teams/:id | Delete assignment |
Team-to-project assignments represent the portion of a team's capacity allocated to a project. The type is always "project".
Example: Create Team-to-Project Assignment
curl -X POST "https://{tenant}.flowstate.inc/api/v1/org/{orgId}/assignments/teams" \
-H "Authorization: Bearer private_..." \
-H "Content-Type: application/json" \
-d '{
"teamId": "clx6t7u8v9w0x1y2",
"targetId": "clx7p8r9q0s1t2u3",
"fte": 0.5,
"startDate": "2026-01-15",
"endDate": "2026-09-30"
}'Example Response
{
"data": {
"id": "clx1t2p3a4s5g6n7",
"teamId": "clx6t7u8v9w0x1y2",
"type": "project",
"targetId": "clx7p8r9q0s1t2u3",
"fte": 0.5,
"startDate": "2026-01-15",
"endDate": "2026-09-30",
"metadata": {},
"createdAt": "2026-03-11T10:00:00Z",
"updatedAt": "2026-03-11T10:00:00Z"
}
}Field Reference
Employee / Contractor / Vacancy Assignments
| Field | Type | Required | Description |
|---|---|---|---|
id | string | — | Unique identifier (read-only) |
employeeId | string | Yes * | ID of the employee (* employee assignments only) |
contractorId | string | Yes * | ID of the contractor (* contractor assignments) |
vacancyId | string | Yes * | ID of the vacancy (* vacancy assignments) |
type | string | Yes | "team" or "project" |
targetId | string | Yes | ID of the target team or project |
fte | number | Yes | FTE allocation (0 to 1) |
startDate | date | Yes | Assignment start date (ISO 8601) |
endDate | date | No | Assignment end date (null = ongoing) |
metadata | object | No | Arbitrary JSON metadata (default: {}) |
createdAt | datetime | — | Record creation timestamp (read-only) |
updatedAt | datetime | — | Last modification timestamp (read-only) |
Team-to-Project Assignments
| Field | Type | Required | Description |
|---|---|---|---|
id | string | — | Unique identifier (read-only) |
teamId | string | Yes | ID of the team |
type | string | — | Always "project" (read-only) |
targetId | string | Yes | ID of the target project |
fte | number | Yes | FTE allocation (0 to 1) |
startDate | date | Yes | Assignment start date (ISO 8601) |
endDate | date | No | Assignment end date (null = ongoing) |
metadata | object | No | Arbitrary JSON metadata (default: {}) |
createdAt | datetime | — | Record creation timestamp (read-only) |
updatedAt | datetime | — | Last modification timestamp (read-only) |