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
Path parameters
| Parameter | Type | Description |
|---|---|---|
| kind | string | List kind: company or profile (matches the list type). |
| list_id | integer | Identifier of the list. Specific to your environment. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. Defaults to 1. |
| page_size | integer | Items 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
| Field | Type | Description |
|---|---|---|
| data[].id | integer | Identifier of the log entry. |
| data[].transition | string | What changed. See the table below. |
| data[].reason | string | What triggered the change. See the table below. |
| data[].reason_detail | object | null, { "userEmail": "..." }, or { "ruleGroupId": "..." }. |
| data[].previous_value | string | The value before the change, for a tracking_status_changed entry. null on entries where nothing had a value. |
| data[].new_value | string | The value after the change, same rule as previous_value. |
| data[].created_at | string | When the change happened, in ISO 8601 UTC. |
| data[].membership_id | integer | Identifier of the membership, or null once the member has been removed. |
| data[].entity_id | integer | Identifier of the company or person, or null. |
| data[].actor_user_id | integer | The Sillage user who made the change, or null when it was an API call or an automated one. |
Transitions
transition | Meaning |
|---|---|
entered | The company or person was added to the list. |
left | The company or person was removed from the list. |
tracking_status_changed | One member's own tracking status was set or cleared. |
owner_changed | Reserved. Nothing writes this entry today. |
bucket_changed | Reserved. Nothing writes this entry today. |
Reasons
reason | Meaning |
|---|---|
api | The change came from an API key, like the calls on this page. |
manual | A person made the change from the Sillage app. |
csv_import | The change came from a file import. |
rule_match | Reserved for automatic lists. Nothing writes this today. |
rule_unmatch | Reserved for automatic lists. Nothing writes this today. |
mode_switch | Reserved 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
| Status | Description |
|---|---|
| 401 | The API key is missing or invalid. |
| 404 | The list does not exist in your workspace. |
| 422 | Invalid list_id or query parameters. |
| 429 | Too many requests. |
| 500 | An unexpected server error occurred. |