Teams
Members → Teams lists every team with its lead, its people, its budget pool, and the profiles that put people on it. These are the same teams Session insights groups by. Teams need the Enterprise plan; on other plans the tab shows the plan requirement instead of the list.
Create a team
Members → Teams → New team
Needs Admin or Owner.
Name, description, people and lead
Name is required and unique in the workspace. People, Lead and a budget pool are optional.
Create team
The team is created with the people you added.
People
Open the team and use People: open the list, search by name or email, and tick the people to put on the team. Untick someone to take them off. The people picked are shown under the list. Save changes moves the people you added onto the team and takes the people you removed off it.
A person is on at most one team: adding someone moves them from their current team. Before you save, the dialog names who will move here and from which team, and how many will be taken off.
Lead
A team's lead is asked to approve every approval request its members raise, in addition to the people configured on the Approvals Routing tab. The lead doesn't have to be on the team. With no lead, requests go only to the people on the Routing tab.
The lead is added to the first stage, and either the lead or anyone already on that stage can decide the request. Over the API, approver_identity_id can still name a member who isn't an admin: that person gets a first stage of their own, and your configured stages make the final decision.
Members → Teams: open the team
Click the row.
Lead
Pick an admin or owner; only they are listed. If the workspace has none, the field says so and stays empty. Choose No lead to remove the lead. A saved lead who is no longer an active admin or owner is named in a warning, and saving clears them.
Save changes
Applies to requests raised from now on.
Rules that always hold:
- The lead is recorded on the request when it's raised. Changing or removing the team's lead later doesn't change requests already pending.
- Nobody decides their own request. If the requester is their team's lead, the request goes to your configured approvers only.
- A stage that needs an owner still needs an owner, whether your Routing tab sets it or the request does (such as granting Owner). An admin lead can't decide that stage and isn't notified of it; an owner lead can.
- If a non-admin set over the API leaves while a request waits on their stage, an admin or owner can decide that stage.
- The lead is notified like any other approver, and sees each request sent to them under Approvals → Needs my approval while it's pending. Once it's decided, they no longer see it unless they raised it or were copied on it.
This lead is not the team lead set in Session insights, which doesn't route any requests.
Budget pool
Give a team a shared monthly budget from the team. Open the team (click its row, or use New team) and use + Create budget pool under Budget pool. For a new team, this saves the team first.
+ Create budget pool
Opens the same New budget pool form as Budgets → Pools, with every option: dates, shares, lead and alerts. See Budget pools.
Check what's filled in
Name starts as "team name budget". People in this pool starts with the people in the team's People field. Change either before creating.
Set the pool budget, then Create pool
The pool is created for this team. The team's row and dialog show its name and its spend against its limit.
A team with nobody in it yet starts its pool with nobody; pick people in the form. Deleting a team unlinks its pool and leaves the pool running.
API
Writes need Admin or Owner.
| Method and path | Field |
|---|---|
PATCH /v1/teams/{id} | approver_identity_id: a member's id, or null to remove the approver. Leave the field out to keep the current approver. Returns 404 if that member doesn't exist or is deactivated. |
GET /v1/teams | Each team includes approver_identity_id. |
POST /v1/teams/assign | Body {"identity_ids": [...], "team_id": "…"} moves those members onto the team; "team_id": null takes them off their team. |
PATCH /v1/budget-pools/{id} | team_id: the team the pool is for, or null to unlink. Also accepted on POST /v1/budget-pools. Returns 404 team_not_found for a team outside this workspace. |
GET /v1/members | Each member includes team_id. |
curl -X PATCH "$FORGEBENCH_BASE_URL/v1/teams/<team-id>" \
-H "Authorization: Bearer $FORGEBENCH_API_KEY" -H "Content-Type: application/json" \
-d '{"approver_identity_id": "<identity-id>"}'
