{"files":{"SKILL.md":"---\nname: crm-lists\ndescription: \"CRM Lists API skill. Use when working with CRM Lists for crm. Covers 30 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# CRM Lists\nAPI version: v3\n\n## Auth\nOAuth2 | ApiKey private-app in header\n\n## Base URL\nhttps://api.hubapi.com\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /crm/lists/v3 -- verify access\n3. POST /crm/lists/v3 -- create first list\n\n## Endpoints\n30 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Crm\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /crm/lists/v3 |  |\n| POST | /crm/lists/v3 |  |\n| GET | /crm/lists/v3/folders |  |\n| POST | /crm/lists/v3/folders |  |\n| PUT | /crm/lists/v3/folders/move-list |  |\n| DELETE | /crm/lists/v3/folders/{folderId} |  |\n| PUT | /crm/lists/v3/folders/{folderId}/move/{newParentFolderId} |  |\n| PUT | /crm/lists/v3/folders/{folderId}/rename |  |\n| GET | /crm/lists/v3/idmapping |  |\n| POST | /crm/lists/v3/idmapping |  |\n| GET | /crm/lists/v3/object-type-id/{objectTypeId}/name/{listName} | Retrieve List by Name |\n| POST | /crm/lists/v3/records/memberships/batch/read |  |\n| GET | /crm/lists/v3/records/{objectTypeId}/{recordId}/memberships |  |\n| POST | /crm/lists/v3/search |  |\n| GET | /crm/lists/v3/{listId} |  |\n| DELETE | /crm/lists/v3/{listId} |  |\n| GET | /crm/lists/v3/{listId}/memberships |  |\n| DELETE | /crm/lists/v3/{listId}/memberships |  |\n| PUT | /crm/lists/v3/{listId}/memberships/add |  |\n| PUT | /crm/lists/v3/{listId}/memberships/add-and-remove |  |\n| PUT | /crm/lists/v3/{listId}/memberships/add-from/{sourceListId} |  |\n| GET | /crm/lists/v3/{listId}/memberships/join-order |  |\n| PUT | /crm/lists/v3/{listId}/memberships/remove |  |\n| PUT | /crm/lists/v3/{listId}/restore |  |\n| GET | /crm/lists/v3/{listId}/schedule-conversion |  |\n| PUT | /crm/lists/v3/{listId}/schedule-conversion |  |\n| DELETE | /crm/lists/v3/{listId}/schedule-conversion |  |\n| GET | /crm/lists/v3/{listId}/size-and-edits-history/between |  |\n| PUT | /crm/lists/v3/{listId}/update-list-filters |  |\n| PUT | /crm/lists/v3/{listId}/update-list-name |  |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all lists?\" -> GET /crm/lists/v3\n- \"Create a list?\" -> POST /crm/lists/v3\n- \"List all folders?\" -> GET /crm/lists/v3/folders\n- \"Create a folder?\" -> POST /crm/lists/v3/folders\n- \"Delete a folder?\" -> DELETE /crm/lists/v3/folders/{folderId}\n- \"Update a move?\" -> PUT /crm/lists/v3/folders/{folderId}/move/{newParentFolderId}\n- \"List all idmapping?\" -> GET /crm/lists/v3/idmapping\n- \"Create a idmapping?\" -> POST /crm/lists/v3/idmapping\n- \"Get name details?\" -> GET /crm/lists/v3/object-type-id/{objectTypeId}/name/{listName}\n- \"Create a read?\" -> POST /crm/lists/v3/records/memberships/batch/read\n- \"List all memberships?\" -> GET /crm/lists/v3/records/{objectTypeId}/{recordId}/memberships\n- \"Create a search?\" -> POST /crm/lists/v3/search\n- \"Get list details?\" -> GET /crm/lists/v3/{listId}\n- \"Delete a list?\" -> DELETE /crm/lists/v3/{listId}\n- \"Update a add-from?\" -> PUT /crm/lists/v3/{listId}/memberships/add-from/{sourceListId}\n- \"List all join-order?\" -> GET /crm/lists/v3/{listId}/memberships/join-order\n- \"List all schedule-conversion?\" -> GET /crm/lists/v3/{listId}/schedule-conversion\n- \"List all between?\" -> GET /crm/lists/v3/{listId}/size-and-edits-history/between\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api CRM Lists\n@base https://api.hubapi.com\n@version v3\n@auth OAuth2 | ApiKey private-app in header\n@endpoints 29\n@hint download_for_search\n@toc crm(29)\n\n@endpoint GET /crm/lists/v3\n@optional {includeFilters: bool=false, listIds: [str]}\n@returns(200) {lists: [map]} # successful operation\n\n@endpoint POST /crm/lists/v3\n@required {name: str # The name of the list, which must be globally unique across all public lists in the portal., objectTypeId: str # The object type ID of the type of objects that the list will store., processingType: str # The processing type of the list. One of: `SNAPSHOT`, `MANUAL`, or `DYNAMIC`.}\n@optional {customProperties: map # The list of custom properties to tie to the list. Custom property name is the key, the value is the value., filterBranch: any # Filter branch object containing filtering criteria for the list, listFolderId: int(int32) # The ID of the folder that the list should be created in. If left blank, then the list will be created in the root of the list folder structure., listPermissions: map{teamsWithEditAccess!: [int(int32)], usersWithEditAccess!: [int(int32)]}, membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}}\n@returns(200) {list: map{createdAt: str(date-time), createdById: str, deletedAt: str(date-time), filterBranch: any, filtersUpdatedAt: str(date-time), listId: str, listPermissions: map{teamsWithEditAccess: [int(int32)], usersWithEditAccess: [int(int32)]}, listVersion: int(int32), membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}, name: str, objectTypeId: str, processingStatus: str, processingType: str, size: int(int64), updatedAt: str(date-time), updatedById: str}} # successful operation\n\n@endpoint GET /crm/lists/v3/folders\n@optional {folderId: str=0}\n@returns(200) {folder: map{childLists: [int(int32)], childNodes: [map], createdAt: str(date-time), id: str, name: str, parentFolderId: str, updatedAt: str(date-time), updatedContentsAt: str(date-time), userId: int(int32)}} # successful operation\n\n@endpoint POST /crm/lists/v3/folders\n@required {name: str # The name of the folder to be created.}\n@optional {parentFolderId: str # The folder this should be created in, if not specified will be created in the root folder 0.}\n@returns(200) {folder: map{childLists: [int(int32)], childNodes: [map], createdAt: str(date-time), id: str, name: str, parentFolderId: str, updatedAt: str(date-time), updatedContentsAt: str(date-time), userId: int(int32)}} # successful operation\n\n@endpoint PUT /crm/lists/v3/folders/move-list\n@required {listId: str # The Id of the list to move., newFolderId: str # The Id of folder to move the list to, the root folder is Id 0.}\n@returns(204) No content\n\n@endpoint DELETE /crm/lists/v3/folders/{folderId}\n@required {folderId: str}\n@returns(204) No content\n\n@endpoint PUT /crm/lists/v3/folders/{folderId}/move/{newParentFolderId}\n@required {folderId: str, newParentFolderId: str}\n@returns(200) {folder: map{childLists: [int(int32)], childNodes: [map], createdAt: str(date-time), id: str, name: str, parentFolderId: str, updatedAt: str(date-time), updatedContentsAt: str(date-time), userId: int(int32)}} # successful operation\n\n@endpoint PUT /crm/lists/v3/folders/{folderId}/rename\n@required {folderId: str}\n@optional {newFolderName: str}\n@returns(200) {folder: map{childLists: [int(int32)], childNodes: [map], createdAt: str(date-time), id: str, name: str, parentFolderId: str, updatedAt: str(date-time), updatedContentsAt: str(date-time), userId: int(int32)}} # successful operation\n\n@endpoint GET /crm/lists/v3/idmapping\n@optional {legacyListId: str}\n@returns(200) {legacyListId: str, listId: str} # successful operation\n\n@endpoint POST /crm/lists/v3/idmapping\n@returns(200) {legacyListIdsToIdsMapping: [map], missingLegacyListIds: [str]} # successful operation\n\n@endpoint GET /crm/lists/v3/object-type-id/{objectTypeId}/name/{listName}\n@required {listName: str, objectTypeId: str}\n@optional {includeFilters: bool=false}\n@returns(200) {list: map{createdAt: str(date-time), createdById: str, deletedAt: str(date-time), filterBranch: any, filtersUpdatedAt: str(date-time), listId: str, listPermissions: map{teamsWithEditAccess: [int(int32)], usersWithEditAccess: [int(int32)]}, listVersion: int(int32), membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}, name: str, objectTypeId: str, processingStatus: str, processingType: str, size: int(int64), updatedAt: str(date-time), updatedById: str}} # successful operation\n\n@endpoint POST /crm/lists/v3/records/memberships/batch/read\n@required {inputs: [map{objectTypeId!: str, recordId!: str}]}\n@returns(200) {completedAt: str(date-time), errors: [map], links: map, numErrors: int(int32), requestedAt: str(date-time), results: [map], startedAt: str(date-time), status: str} # successful operation\n\n@endpoint GET /crm/lists/v3/records/{objectTypeId}/{recordId}/memberships\n@required {objectTypeId: str, recordId: str}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int64)} # successful operation\n\n@endpoint POST /crm/lists/v3/search\n@required {additionalProperties: [str] # The property names of any additional list properties to include in the response. Properties that do not exist or that are empty for a particular list are not included in the response.  By default, all requests will fetch the following properties for each list: `hs_list_size`, `hs_last_record_added_at`, `hs_last_record_removed_at`, `hs_folder_name`, and `hs_list_reference_count`., offset: int(int32) # Value used to paginate through lists. The `offset` provided in the response can be used in the next request to fetch the next page of results. Defaults to `0` if no offset is provided.}\n@optional {count: int(int32) # The number of lists to include in the response. Defaults to `20` if no value is provided. The max `count` is `500`., listIds: [str] # ILS list ids to be included in search results. If not specified, all lists matching other criteria will be included, objectTypeId: str, processingTypes: [str] # List processing types to be included in search results. If not specified, all lists with all processing types will be included., query: str # The `query` that will be used to search for lists by list name. If no `query` is provided, then the results will include all lists., sort: str # Sort field and order}\n@returns(200) {hasMore: bool, lists: [map], offset: int(int32), total: int(int32)} # successful operation\n\n@endpoint GET /crm/lists/v3/{listId}\n@required {listId: str}\n@optional {includeFilters: bool=false}\n@returns(200) {list: map{createdAt: str(date-time), createdById: str, deletedAt: str(date-time), filterBranch: any, filtersUpdatedAt: str(date-time), listId: str, listPermissions: map{teamsWithEditAccess: [int(int32)], usersWithEditAccess: [int(int32)]}, listVersion: int(int32), membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}, name: str, objectTypeId: str, processingStatus: str, processingType: str, size: int(int64), updatedAt: str(date-time), updatedById: str}} # successful operation\n\n@endpoint DELETE /crm/lists/v3/{listId}\n@required {listId: str}\n@returns(204) No content\n\n@endpoint GET /crm/lists/v3/{listId}/memberships\n@required {listId: str}\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., before: str, limit: int(int32)=100 # The maximum number of results to display per page.}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int64)} # successful operation\n\n@endpoint DELETE /crm/lists/v3/{listId}/memberships\n@required {listId: str}\n@returns(204) No content\n\n@endpoint PUT /crm/lists/v3/{listId}/memberships/add\n@required {listId: str}\n@returns(200) {recordIdsMissing: [str], recordIdsRemoved: [str], recordsIdsAdded: [str]} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/memberships/add-and-remove\n@required {listId: str, recordIdsToAdd: [str], recordIdsToRemove: [str]}\n@returns(200) {recordIdsMissing: [str], recordIdsRemoved: [str], recordsIdsAdded: [str]} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/memberships/add-from/{sourceListId}\n@required {listId: str, sourceListId: str}\n@returns(204) No content\n\n@endpoint GET /crm/lists/v3/{listId}/memberships/join-order\n@required {listId: str}\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., before: str, limit: int(int32)=100 # The maximum number of results to display per page.}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int64)} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/memberships/remove\n@required {listId: str}\n@returns(200) {recordIdsMissing: [str], recordIdsRemoved: [str], recordsIdsAdded: [str]} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/restore\n@required {listId: str}\n@returns(204) No content\n\n@endpoint GET /crm/lists/v3/{listId}/schedule-conversion\n@required {listId: str}\n@returns(200) {convertedAt: str(date-time), listId: str, requestedConversionTime: any} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/schedule-conversion\n@required {listId: str}\n@returns(200) {convertedAt: str(date-time), listId: str, requestedConversionTime: any} # successful operation\n\n@endpoint DELETE /crm/lists/v3/{listId}/schedule-conversion\n@required {listId: str}\n@returns(204) No content\n\n@endpoint PUT /crm/lists/v3/{listId}/update-list-filters\n@required {listId: str, filterBranch: any # Updated filtering criteria for the list}\n@optional {enrollObjectsInWorkflows: bool=false}\n@returns(200) {updatedList: map{createdAt: str(date-time), createdById: str, deletedAt: str(date-time), filterBranch: any, filtersUpdatedAt: str(date-time), listId: str, listPermissions: map{teamsWithEditAccess: [int(int32)], usersWithEditAccess: [int(int32)]}, listVersion: int(int32), membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}, name: str, objectTypeId: str, processingStatus: str, processingType: str, size: int(int64), updatedAt: str(date-time), updatedById: str}} # successful operation\n\n@endpoint PUT /crm/lists/v3/{listId}/update-list-name\n@required {listId: str}\n@optional {includeFilters: bool=false, listName: str}\n@returns(200) {updatedList: map{createdAt: str(date-time), createdById: str, deletedAt: str(date-time), filterBranch: any, filtersUpdatedAt: str(date-time), listId: str, listPermissions: map{teamsWithEditAccess: [int(int32)], usersWithEditAccess: [int(int32)]}, listVersion: int(int32), membershipSettings: map{includeUnassigned: bool, membershipTeamId: int(int32)}, name: str, objectTypeId: str, processingStatus: str, processingType: str, size: int(int64), updatedAt: str(date-time), updatedById: str}} # successful operation\n\n@end\n"}}