records:read, and adding or removing members is records:write. Every call also checks the list’s own sharing, as the key’s creator.
List your lists
GET /v1/lists returns every list the key’s creator can read. Pass object (an object’s id, key or name) to keep only that object’s lists.
Retrieve a list and its members
GET /v1/lists/{id} returns the list and a page of its members, with total for the whole list. Page with limit (1 to 200, default 50) and offset. A smart list’s members are read from its filter at the moment you ask.
boolean
Whether the record has been marked worked on this list. Per list: the same record can be done on one list and not another.
Add or remove records
POST /v1/lists/{id}/records adds up to 500 records to a static list or a cohort’s current period. POST /v1/lists/{id}/records/remove takes them off. Both answer record by record, so one bad id never fails the rest.
A smart list’s members come from its filter, so both calls refuse one with list_membership_by_filter. Change the filter in the app instead.
string[]
Records already in the state you asked for: already on the list for an add, not on it for a remove.
string[]
Records of a different object than the list’s. A list holds one object’s records.
With the SDK
With MCP
An MCP client holdingmcp:read and records:read can read lists. With mcp:write and records:write it can also create lists and add records to them. Removing records is never offered over MCP.