Room stakeholders
The buyer-side people invited into a room. Each is identified by e-mail and receives a personal link to the room.
List a room's stakeholders
/rooms/{room}/stakeholdersReturns every stakeholder in the room, with how engaged each one is. Not paginated.
curl 'https://api.closepact.com/v1/api/rooms/01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40/stakeholders' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY"{
"data": [
{
"id": "01a15c47-2b3c-7d4e-8f5a-6b7c8d9e0f1a",
"email": "henrik.ny@solglantan.se",
"name": "Henrik Ny",
"role": "economic",
"status": "active",
"engagement_score": 34,
"influence_score": 0,
"last_active_at": "2026-10-14T18:22:05+00:00",
"invited_at": "2026-10-13T09:01:30+00:00"
},
{
"id": "01a15c48-9c0d-7e1f-a2b3-c4d5e6f7a8b9",
"email": "maria.ny@gmail.com",
"name": "Maria Ny",
"role": "champion",
"status": "invited",
"engagement_score": 0,
"influence_score": 0,
"last_active_at": null,
"invited_at": "2026-10-13T09:02:10+00:00"
}
]
}Path parameters
roomstring(uuid)requiredThe room's id.
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataarray of objectsrequiredidstring(uuid)requiredemailstring(email)requiredLower case.
namestringnullablerequiredrolestringrequiredThe part the person plays in the buying decision. Defaults to
user.One of
championeconomictechnicaluserlegalprocurementotherDefault
"user"statusstringrequiredinviteduntil they first engage with the room, thenactive.One of
invitedactiveengagement_scoreintegerrequiredGrows as the person views and interacts with the room.
0–100
influence_scoreintegerrequiredlast_active_atstring(date-time)nullablerequiredinvited_atstring(date-time)nullablerequired
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 429The key has made more requests this minute than its limit allows.Errors
Add a stakeholder
/rooms/{room}/stakeholdersInvites a person into the room by e-mail. A new stakeholder is sent an invitation e-mail with their personal link straight away — also while the room is still a draft, when the link will not open yet — and the stakeholder.added webhook fires.
An address that is already a stakeholder in this room (compared case-insensitively; addresses are stored lower case) is updated instead of duplicated: name, role and contact_id are replaced by what you send — left out means cleared, and role falls back to user — and status returns to invited. No e-mail or webhook is sent for an update, so the call is safe to repeat. Both cases answer 201.
curl -X POST 'https://api.closepact.com/v1/api/rooms/01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40/stakeholders' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "henrik.ny@solglantan.se",
"name": "Henrik Ny",
"role": "economic",
"contact_id": "01a15d02-6e1f-7b44-a0c9-3d7e5f1b2a96"
}'{
"data": {
"id": "01a15c47-2b3c-7d4e-8f5a-6b7c8d9e0f1a",
"email": "henrik.ny@solglantan.se",
"name": "Henrik Ny",
"role": "economic",
"status": "invited",
"engagement_score": 0,
"influence_score": 0,
"last_active_at": null,
"invited_at": "2026-10-13T09:01:30+00:00"
}
}Path parameters
roomstring(uuid)requiredThe room's id.
Request body
application/json · required
emailstring(email)requiredat most 255 characters
namestringnullableat most 255 characters
rolestringThe part the person plays in the buying decision. Defaults to
user.One of
championeconomictechnicaluserlegalprocurementotherDefault
"user"contact_idstring(uuid)nullableThe contact in this organization this person is.
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataobjectrequiredidstring(uuid)requiredemailstring(email)requiredLower case.
namestringnullablerequiredrolestringrequiredThe part the person plays in the buying decision. Defaults to
user.One of
championeconomictechnicaluserlegalprocurementotherDefault
"user"statusstringrequiredinviteduntil they first engage with the room, thenactive.One of
invitedactiveengagement_scoreintegerrequiredGrows as the person views and interacts with the room.
0–100
influence_scoreintegerrequiredlast_active_atstring(date-time)nullablerequiredinvited_atstring(date-time)nullablerequired
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 422The request body or query failed validation.Errors
- 429The key has made more requests this minute than its limit allows.Errors
Remove a stakeholder
/rooms/{room}/stakeholders/{stakeholder}Removes the person from the room. Their personal links stop working at once; nobody is notified. Their engagement history is removed with them. Adding the same address again later invites them afresh, with a new e-mail.
curl -X DELETE 'https://api.closepact.com/v1/api/rooms/01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40/stakeholders/01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY"{
"deleted": true
}Path parameters
roomstring(uuid)requiredThe room's id.
stakeholderstring(uuid)requiredThe stakeholder's id. It must belong to this room.
Responses
Confirmation that the record was deleted.
deletedbooleanrequiredOne of
true
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 429The key has made more requests this minute than its limit allows.Errors