List Membership Log

Paginate a list's membership history — every time a company or person entered or left.

Returns a list's membership history, newest first: every time a company or person entered the list, left it, or had its tracking status changed. Only real changes are recorded — re-adding a member that is already there, or setting a tracking status it already has, writes nothing. The total is in meta.pagination.

List membership log

GET/api/v2/lists/{kind}/{list_id}/membership-logs

Path parameters

ParameterTypeDescription
kindstringList kind: company or profile (matches the list type).
list_idintegerIdentifier of the list. Specific to your environment.

Query parameters

ParameterTypeDescription
pageintegerPage number, starting at 1. Defaults to 1.
page_sizeintegerItems per page. Defaults to 25, max 100.

Example request

curl "https://api.getsillage.com/api/v2/lists/company/128/membership-logs?page=1&page_size=25" \
  -H "Authorization: Bearer $SILLAGE_API_KEY"

Example response

{
  "data": [
    {
      "id": 42,
      "transition": "left",
      "reason": "api",
      "reason_detail": null,
      "previous_value": null,
      "new_value": null,
      "created_at": "2026-09-08T10:15:00.000Z",
      "membership_id": null,
      "entity_id": 901,
      "actor_user_id": null
    },
    {
      "id": 41,
      "transition": "tracking_status_changed",
      "reason": "api",
      "reason_detail": null,
      "previous_value": null,
      "new_value": "unfollowed",
      "created_at": "2026-09-08T10:12:00.000Z",
      "membership_id": 4471,
      "entity_id": 901,
      "actor_user_id": null
    },
    {
      "id": 40,
      "transition": "entered",
      "reason": "manual",
      "reason_detail": { "userEmail": "jane@example.com" },
      "previous_value": null,
      "new_value": null,
      "created_at": "2026-09-08T10:10:00.000Z",
      "membership_id": 4471,
      "entity_id": 901,
      "actor_user_id": 7
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "page_size": 25,
      "page_count": 1,
      "total": 3
    }
  }
}

Response fields

FieldTypeDescription
data[].idintegerIdentifier of the log entry.
data[].transitionstringWhat changed. See the table below.
data[].reasonstringWhat triggered the change. See the table below.
data[].reason_detailobjectnull, { "userEmail": "..." }, or { "ruleGroupId": "..." }.
data[].previous_valuestringThe value before the change, for a tracking_status_changed entry. null on entries where nothing had a value.
data[].new_valuestringThe value after the change, same rule as previous_value.
data[].created_atstringWhen the change happened, in ISO 8601 UTC.
data[].membership_idintegerIdentifier of the membership, or null once the member has been removed.
data[].entity_idintegerIdentifier of the company or person, or null.
data[].actor_user_idintegerThe Sillage user who made the change, or null when it was an API call or an automated one.

Transitions

transitionMeaning
enteredThe company or person was added to the list.
leftThe company or person was removed from the list.
tracking_status_changedOne member's own tracking status was set or cleared.
owner_changedReserved. Nothing writes this entry today.
bucket_changedReserved. Nothing writes this entry today.

Reasons

reasonMeaning
apiThe change came from an API key, like the calls on this page.
manualA person made the change from the Sillage app.
csv_importThe change came from a file import.
rule_matchReserved for automatic lists. Nothing writes this today.
rule_unmatchReserved for automatic lists. Nothing writes this today.
mode_switchReserved for automatic lists. Nothing writes this today.

entity_id identifies the company or person the entry is about — the same id List members returns as id. membership_id becomes null once the member has been removed — the log entry survives the removal by design. reason_detail is either null, { "userEmail": "..." } (a person-driven change), or { "ruleGroupId": "..." } (a rule-driven one) — never free text.

Errors

StatusDescription
401The API key is missing or invalid.
404The list does not exist in your workspace.
422Invalid list_id or query parameters.
429Too many requests.
500An unexpected server error occurred.

On this page