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

GET/rooms/{room}/stakeholders

Returns 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"
Response · 200
{
  "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)required

    The 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 objectsrequired
      • idstring(uuid)required
      • emailstring(email)required

        Lower case.

      • namestringnullablerequired
      • rolestringrequired

        The part the person plays in the buying decision. Defaults to user.

        One ofchampioneconomictechnicaluserlegalprocurementother

        Default "user"

      • statusstringrequired

        invited until they first engage with the room, then active.

        One ofinvitedactive

      • engagement_scoreintegerrequired

        Grows as the person views and interacts with the room.

        0–100

      • influence_scoreintegerrequired
      • last_active_atstring(date-time)nullablerequired
      • invited_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: feature names the capability (the operation's x-feature) and required_tier the 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.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 404No such record in this organization.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors

Add a stakeholder

POST/rooms/{room}/stakeholders

Invites 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"
}'
Response · 201
{
  "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)required

    The room's id.

Request body

application/json · required

  • emailstring(email)required

    at most 255 characters

  • namestringnullable

    at most 255 characters

  • rolestring

    The part the person plays in the buying decision. Defaults to user.

    One ofchampioneconomictechnicaluserlegalprocurementother

    Default "user"

  • contact_idstring(uuid)nullable

    The 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.
    • dataobjectrequired
      • idstring(uuid)required
      • emailstring(email)required

        Lower case.

      • namestringnullablerequired
      • rolestringrequired

        The part the person plays in the buying decision. Defaults to user.

        One ofchampioneconomictechnicaluserlegalprocurementother

        Default "user"

      • statusstringrequired

        invited until they first engage with the room, then active.

        One ofinvitedactive

      • engagement_scoreintegerrequired

        Grows as the person views and interacts with the room.

        0–100

      • influence_scoreintegerrequired
      • last_active_atstring(date-time)nullablerequired
      • invited_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: feature names the capability (the operation's x-feature) and required_tier the 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.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 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

DELETE/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"
Response · 200
{
  "deleted": true
}

Path parameters

  • roomstring(uuid)required

    The room's id.

  • stakeholderstring(uuid)required

    The stakeholder's id. It must belong to this room.

Responses

  • Confirmation that the record was deleted.

    • deletedbooleanrequired

      One oftrue

  • 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: feature names the capability (the operation's x-feature) and required_tier the 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.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 404No such record in this organization.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors