@graph8/sdk 0.245.0 → 0.260.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +19 -5
  2. package/dist/cli.js +216 -0
  3. package/dist/index.d.mts +283 -12
  4. package/dist/index.d.ts +283 -12
  5. package/dist/index.js +88 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +88 -2
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/react.d.mts +274 -12
  10. package/dist/react.d.ts +274 -12
  11. package/dist/react.js +106 -10
  12. package/dist/react.js.map +1 -1
  13. package/dist/react.mjs +97 -11
  14. package/dist/react.mjs.map +1 -1
  15. package/dist/types/README.md +7 -0
  16. package/dist/types/agency.d.ts +20 -0
  17. package/dist/types/agentSetup.d.ts +57 -0
  18. package/dist/types/api.d.ts +127 -0
  19. package/dist/types/appClient.d.ts +99 -0
  20. package/dist/types/appPlatform.d.ts +269 -0
  21. package/dist/types/appTokens.d.ts +125 -0
  22. package/dist/types/apps.d.ts +130 -0
  23. package/dist/types/audiences.d.ts +88 -0
  24. package/dist/types/calendar.d.ts +55 -0
  25. package/dist/types/campaigns.d.ts +61 -0
  26. package/dist/types/chat.d.ts +35 -0
  27. package/dist/types/cli.d.ts +14 -0
  28. package/dist/types/companies.d.ts +123 -0
  29. package/dist/types/contacts.d.ts +200 -0
  30. package/dist/types/copilot.d.ts +31 -0
  31. package/dist/types/core.d.ts +1052 -0
  32. package/dist/types/deals.d.ts +215 -0
  33. package/dist/types/enrich.d.ts +51 -0
  34. package/dist/types/fields.d.ts +84 -0
  35. package/dist/types/forms.d.ts +16 -0
  36. package/dist/types/http.d.ts +141 -0
  37. package/dist/types/inbox.d.ts +123 -0
  38. package/dist/types/index.d.ts +63 -0
  39. package/dist/types/intent.d.ts +196 -0
  40. package/dist/types/lists.d.ts +44 -0
  41. package/dist/types/mailboxes.d.ts +240 -0
  42. package/dist/types/marketplace.d.ts +62 -0
  43. package/dist/types/meetings.d.ts +70 -0
  44. package/dist/types/newsletter.d.ts +212 -0
  45. package/dist/types/notes.d.ts +57 -0
  46. package/dist/types/objects.d.ts +281 -0
  47. package/dist/types/pipelines.d.ts +135 -0
  48. package/dist/types/quotes.d.ts +143 -0
  49. package/dist/types/react.d.ts +978 -0
  50. package/dist/types/search.d.ts +99 -0
  51. package/dist/types/sequences.d.ts +255 -0
  52. package/dist/types/signals.d.ts +28 -0
  53. package/dist/types/skills.d.ts +176 -0
  54. package/dist/types/snippet.d.ts +24 -0
  55. package/dist/types/studio.d.ts +161 -0
  56. package/dist/types/tasks.d.ts +101 -0
  57. package/dist/types/types.d.ts +45 -0
  58. package/dist/types/utils.d.ts +21 -0
  59. package/dist/types/version.d.ts +10 -0
  60. package/dist/types/visitors.d.ts +29 -0
  61. package/dist/types/voice.d.ts +304 -0
  62. package/dist/types/webhooks.d.ts +71 -0
  63. package/dist/types/workflows.d.ts +229 -0
  64. package/docs/agents.md +748 -0
  65. package/docs/api/README.md +165 -0
  66. package/docs/api/accounts.d.ts +396 -0
  67. package/docs/api/accounts.md +644 -0
  68. package/docs/api/adCampaigns.d.ts +707 -0
  69. package/docs/api/adCampaigns.md +1091 -0
  70. package/docs/api/adCreatives.d.ts +996 -0
  71. package/docs/api/adCreatives.md +1708 -0
  72. package/docs/api/agency.d.ts +556 -0
  73. package/docs/api/agency.md +845 -0
  74. package/docs/api/agent.d.ts +330 -0
  75. package/docs/api/agent.md +514 -0
  76. package/docs/api/agents.d.ts +1622 -0
  77. package/docs/api/agents.md +2860 -0
  78. package/docs/api/aiInbox.d.ts +1984 -0
  79. package/docs/api/aiInbox.md +3490 -0
  80. package/docs/api/analytics.d.ts +1273 -0
  81. package/docs/api/analytics.md +2095 -0
  82. package/docs/api/apiKeys.d.ts +252 -0
  83. package/docs/api/apiKeys.md +318 -0
  84. package/docs/api/appDeployments.d.ts +236 -0
  85. package/docs/api/appDeployments.md +471 -0
  86. package/docs/api/appDomains.d.ts +171 -0
  87. package/docs/api/appDomains.md +281 -0
  88. package/docs/api/appLogs.d.ts +120 -0
  89. package/docs/api/appLogs.md +159 -0
  90. package/docs/api/appObjects.d.ts +415 -0
  91. package/docs/api/appObjects.md +568 -0
  92. package/docs/api/appPages.d.ts +557 -0
  93. package/docs/api/appPages.md +796 -0
  94. package/docs/api/appPlatformTokens.d.ts +123 -0
  95. package/docs/api/appPlatformTokens.md +172 -0
  96. package/docs/api/appointments.d.ts +2361 -0
  97. package/docs/api/appointments.md +3917 -0
  98. package/docs/api/apps.d.ts +822 -0
  99. package/docs/api/apps.md +1342 -0
  100. package/docs/api/assertUpsert.d.ts +286 -0
  101. package/docs/api/assertUpsert.md +370 -0
  102. package/docs/api/audienceSyncs.d.ts +259 -0
  103. package/docs/api/audienceSyncs.md +395 -0
  104. package/docs/api/brandKit.d.ts +686 -0
  105. package/docs/api/brandKit.md +1133 -0
  106. package/docs/api/bugReports.d.ts +181 -0
  107. package/docs/api/bugReports.md +268 -0
  108. package/docs/api/by-path.md +3260 -0
  109. package/docs/api/calendarInvites.d.ts +117 -0
  110. package/docs/api/calendarInvites.md +148 -0
  111. package/docs/api/campaignWorkflows.d.ts +152 -0
  112. package/docs/api/campaignWorkflows.md +200 -0
  113. package/docs/api/campaigns.d.ts +721 -0
  114. package/docs/api/campaigns.md +1236 -0
  115. package/docs/api/channels.d.ts +171 -0
  116. package/docs/api/channels.md +235 -0
  117. package/docs/api/cliCampaigns.d.ts +205 -0
  118. package/docs/api/cliCampaigns.md +256 -0
  119. package/docs/api/cliPipelines.d.ts +324 -0
  120. package/docs/api/cliPipelines.md +562 -0
  121. package/docs/api/clickHouse.d.ts +115 -0
  122. package/docs/api/clickHouse.md +138 -0
  123. package/docs/api/companies.d.ts +1636 -0
  124. package/docs/api/companies.md +2211 -0
  125. package/docs/api/companyIntelligence.d.ts +299 -0
  126. package/docs/api/companyIntelligence.md +488 -0
  127. package/docs/api/contacts.d.ts +2173 -0
  128. package/docs/api/contacts.md +3143 -0
  129. package/docs/api/content.d.ts +968 -0
  130. package/docs/api/content.md +1667 -0
  131. package/docs/api/contentGridSkills.d.ts +177 -0
  132. package/docs/api/contentGridSkills.md +271 -0
  133. package/docs/api/copilot.d.ts +1017 -0
  134. package/docs/api/copilot.md +1765 -0
  135. package/docs/api/crmSyncs.d.ts +215 -0
  136. package/docs/api/crmSyncs.md +301 -0
  137. package/docs/api/customerSuccess.d.ts +491 -0
  138. package/docs/api/customerSuccess.md +776 -0
  139. package/docs/api/deals.d.ts +1696 -0
  140. package/docs/api/deals.md +2432 -0
  141. package/docs/api/deliverability.d.ts +418 -0
  142. package/docs/api/deliverability.md +677 -0
  143. package/docs/api/desk.d.ts +1765 -0
  144. package/docs/api/desk.md +3007 -0
  145. package/docs/api/dialer.d.ts +1185 -0
  146. package/docs/api/dialer.md +2166 -0
  147. package/docs/api/dialerAnalytics.d.ts +187 -0
  148. package/docs/api/dialerAnalytics.md +257 -0
  149. package/docs/api/documents.d.ts +895 -0
  150. package/docs/api/documents.md +1440 -0
  151. package/docs/api/duplicates.d.ts +195 -0
  152. package/docs/api/duplicates.md +315 -0
  153. package/docs/api/eSign.d.ts +38 -0
  154. package/docs/api/eSign.md +54 -0
  155. package/docs/api/eSignature.d.ts +242 -0
  156. package/docs/api/eSignature.md +341 -0
  157. package/docs/api/enrichment.d.ts +3207 -0
  158. package/docs/api/enrichment.md +5225 -0
  159. package/docs/api/events.d.ts +115 -0
  160. package/docs/api/events.md +105 -0
  161. package/docs/api/fields.d.ts +482 -0
  162. package/docs/api/fields.md +566 -0
  163. package/docs/api/forms.d.ts +1012 -0
  164. package/docs/api/forms.md +1542 -0
  165. package/docs/api/gtmCampaigns.d.ts +662 -0
  166. package/docs/api/gtmCampaigns.md +1044 -0
  167. package/docs/api/gtmContext.d.ts +1187 -0
  168. package/docs/api/gtmContext.md +2112 -0
  169. package/docs/api/gtmDeliverability.d.ts +60 -0
  170. package/docs/api/gtmDeliverability.md +63 -0
  171. package/docs/api/gtmKnowledgeBase.d.ts +76 -0
  172. package/docs/api/gtmKnowledgeBase.md +91 -0
  173. package/docs/api/gtmLaunchHelpers.d.ts +123 -0
  174. package/docs/api/gtmLaunchHelpers.md +148 -0
  175. package/docs/api/gtmLibrary.d.ts +448 -0
  176. package/docs/api/gtmLibrary.md +780 -0
  177. package/docs/api/health.d.ts +39 -0
  178. package/docs/api/health.md +58 -0
  179. package/docs/api/imageLibrary.d.ts +341 -0
  180. package/docs/api/imageLibrary.md +569 -0
  181. package/docs/api/imports.d.ts +157 -0
  182. package/docs/api/imports.md +174 -0
  183. package/docs/api/inbox.d.ts +709 -0
  184. package/docs/api/inbox.md +1067 -0
  185. package/docs/api/install.d.ts +213 -0
  186. package/docs/api/install.md +317 -0
  187. package/docs/api/installedApps.d.ts +131 -0
  188. package/docs/api/installedApps.md +241 -0
  189. package/docs/api/integrationStatus.d.ts +142 -0
  190. package/docs/api/integrationStatus.md +205 -0
  191. package/docs/api/integrations.d.ts +2327 -0
  192. package/docs/api/integrations.md +3791 -0
  193. package/docs/api/intent.d.ts +482 -0
  194. package/docs/api/intent.md +858 -0
  195. package/docs/api/knowledge.d.ts +501 -0
  196. package/docs/api/knowledge.md +843 -0
  197. package/docs/api/knowledgeBase.d.ts +84 -0
  198. package/docs/api/knowledgeBase.md +96 -0
  199. package/docs/api/landingPages.d.ts +1411 -0
  200. package/docs/api/landingPages.md +2488 -0
  201. package/docs/api/leads.d.ts +133 -0
  202. package/docs/api/leads.md +180 -0
  203. package/docs/api/library.d.ts +217 -0
  204. package/docs/api/library.md +338 -0
  205. package/docs/api/linkedIn.d.ts +227 -0
  206. package/docs/api/linkedIn.md +289 -0
  207. package/docs/api/linkedInOutreach.d.ts +727 -0
  208. package/docs/api/linkedInOutreach.md +990 -0
  209. package/docs/api/lists.d.ts +1106 -0
  210. package/docs/api/lists.md +1609 -0
  211. package/docs/api/logs.d.ts +71 -0
  212. package/docs/api/logs.md +70 -0
  213. package/docs/api/mailboxes.d.ts +1050 -0
  214. package/docs/api/mailboxes.md +1690 -0
  215. package/docs/api/marketingIntelligence.d.ts +256 -0
  216. package/docs/api/marketingIntelligence.md +454 -0
  217. package/docs/api/marketplace.d.ts +3173 -0
  218. package/docs/api/marketplace.md +5953 -0
  219. package/docs/api/mcp.d.ts +69 -0
  220. package/docs/api/mcp.md +69 -0
  221. package/docs/api/me.d.ts +54 -0
  222. package/docs/api/me.md +56 -0
  223. package/docs/api/meetings.d.ts +539 -0
  224. package/docs/api/meetings.md +747 -0
  225. package/docs/api/newsletter.d.ts +1613 -0
  226. package/docs/api/newsletter.md +2746 -0
  227. package/docs/api/notes.d.ts +517 -0
  228. package/docs/api/notes.md +888 -0
  229. package/docs/api/notifications.d.ts +94 -0
  230. package/docs/api/notifications.md +105 -0
  231. package/docs/api/objects.d.ts +621 -0
  232. package/docs/api/objects.md +1098 -0
  233. package/docs/api/openSearch.d.ts +234 -0
  234. package/docs/api/openSearch.md +297 -0
  235. package/docs/api/ops.d.ts +299 -0
  236. package/docs/api/ops.md +339 -0
  237. package/docs/api/orgGovernance.d.ts +393 -0
  238. package/docs/api/orgGovernance.md +623 -0
  239. package/docs/api/orgVideos.d.ts +184 -0
  240. package/docs/api/orgVideos.md +252 -0
  241. package/docs/api/organizationSettings.d.ts +626 -0
  242. package/docs/api/organizationSettings.md +911 -0
  243. package/docs/api/phoneNumbers.d.ts +484 -0
  244. package/docs/api/phoneNumbers.md +777 -0
  245. package/docs/api/profile.d.ts +329 -0
  246. package/docs/api/profile.md +540 -0
  247. package/docs/api/programmaticPages.d.ts +400 -0
  248. package/docs/api/programmaticPages.md +626 -0
  249. package/docs/api/providerDomains.d.ts +866 -0
  250. package/docs/api/providerDomains.md +1446 -0
  251. package/docs/api/providerUsage.d.ts +129 -0
  252. package/docs/api/providerUsage.md +186 -0
  253. package/docs/api/public.d.ts +69 -0
  254. package/docs/api/public.md +78 -0
  255. package/docs/api/publicCopilot.d.ts +67 -0
  256. package/docs/api/publicCopilot.md +80 -0
  257. package/docs/api/publicSignals.d.ts +66 -0
  258. package/docs/api/publicSignals.md +71 -0
  259. package/docs/api/publicVisitors.d.ts +97 -0
  260. package/docs/api/publicVisitors.md +118 -0
  261. package/docs/api/quotes.d.ts +1564 -0
  262. package/docs/api/quotes.md +2553 -0
  263. package/docs/api/radar.d.ts +808 -0
  264. package/docs/api/radar.md +1431 -0
  265. package/docs/api/radarReports.d.ts +208 -0
  266. package/docs/api/radarReports.md +306 -0
  267. package/docs/api/recordRoles.d.ts +143 -0
  268. package/docs/api/recordRoles.md +175 -0
  269. package/docs/api/repos.d.ts +146 -0
  270. package/docs/api/repos.md +211 -0
  271. package/docs/api/research.d.ts +295 -0
  272. package/docs/api/research.md +534 -0
  273. package/docs/api/revenue.d.ts +402 -0
  274. package/docs/api/revenue.md +608 -0
  275. package/docs/api/revenueAnalytics.d.ts +147 -0
  276. package/docs/api/revenueAnalytics.md +212 -0
  277. package/docs/api/revenueLifecycle.d.ts +207 -0
  278. package/docs/api/revenueLifecycle.md +274 -0
  279. package/docs/api/revenueRecords.d.ts +372 -0
  280. package/docs/api/revenueRecords.md +563 -0
  281. package/docs/api/roles.d.ts +431 -0
  282. package/docs/api/roles.md +812 -0
  283. package/docs/api/salesCoach.d.ts +877 -0
  284. package/docs/api/salesCoach.md +1540 -0
  285. package/docs/api/sandbox.d.ts +210 -0
  286. package/docs/api/sandbox.md +380 -0
  287. package/docs/api/scans.d.ts +104 -0
  288. package/docs/api/scans.md +136 -0
  289. package/docs/api/scheduleBuy.d.ts +293 -0
  290. package/docs/api/scheduleBuy.md +431 -0
  291. package/docs/api/scraping.d.ts +266 -0
  292. package/docs/api/scraping.md +383 -0
  293. package/docs/api/sdrAnalytics.d.ts +138 -0
  294. package/docs/api/sdrAnalytics.md +246 -0
  295. package/docs/api/search.d.ts +598 -0
  296. package/docs/api/search.md +866 -0
  297. package/docs/api/seo.d.ts +447 -0
  298. package/docs/api/seo.md +660 -0
  299. package/docs/api/sequenceLifecycle.d.ts +439 -0
  300. package/docs/api/sequenceLifecycle.md +513 -0
  301. package/docs/api/sequences.d.ts +1936 -0
  302. package/docs/api/sequences.md +3232 -0
  303. package/docs/api/settings.d.ts +448 -0
  304. package/docs/api/settings.md +731 -0
  305. package/docs/api/signals.d.ts +1441 -0
  306. package/docs/api/signals.md +2526 -0
  307. package/docs/api/signatures.d.ts +719 -0
  308. package/docs/api/signatures.md +1247 -0
  309. package/docs/api/skills.d.ts +230 -0
  310. package/docs/api/skills.md +466 -0
  311. package/docs/api/snippet.d.ts +85 -0
  312. package/docs/api/snippet.md +106 -0
  313. package/docs/api/socialPublishing.d.ts +824 -0
  314. package/docs/api/socialPublishing.md +1245 -0
  315. package/docs/api/studioDocuments.d.ts +244 -0
  316. package/docs/api/studioDocuments.md +348 -0
  317. package/docs/api/support.d.ts +90 -0
  318. package/docs/api/support.md +76 -0
  319. package/docs/api/suppressions.d.ts +241 -0
  320. package/docs/api/suppressions.md +343 -0
  321. package/docs/api/surveys.d.ts +847 -0
  322. package/docs/api/surveys.md +1223 -0
  323. package/docs/api/tasks.d.ts +813 -0
  324. package/docs/api/tasks.md +1344 -0
  325. package/docs/api/teamMembers.d.ts +668 -0
  326. package/docs/api/teamMembers.md +1040 -0
  327. package/docs/api/teams.d.ts +784 -0
  328. package/docs/api/teams.md +1395 -0
  329. package/docs/api/usage.d.ts +277 -0
  330. package/docs/api/usage.md +389 -0
  331. package/docs/api/visitors.d.ts +690 -0
  332. package/docs/api/visitors.md +1075 -0
  333. package/docs/api/voice.d.ts +4661 -0
  334. package/docs/api/voice.md +7905 -0
  335. package/docs/api/webAnalytics.d.ts +964 -0
  336. package/docs/api/webAnalytics.md +1452 -0
  337. package/docs/api/webChat.d.ts +1704 -0
  338. package/docs/api/webChat.md +2048 -0
  339. package/docs/api/webhooks.d.ts +251 -0
  340. package/docs/api/webhooks.md +386 -0
  341. package/docs/api/websiteEditor.d.ts +324 -0
  342. package/docs/api/websiteEditor.md +517 -0
  343. package/docs/api/work.d.ts +2298 -0
  344. package/docs/api/work.md +3096 -0
  345. package/docs/api/workbench.d.ts +2962 -0
  346. package/docs/api/workbench.md +4884 -0
  347. package/docs/api/workflows.d.ts +1218 -0
  348. package/docs/api/workflows.md +2302 -0
  349. package/docs/sdk-clients.md +4339 -0
  350. package/package.json +10 -3
@@ -0,0 +1,1609 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.lists`: Lists
4
+
5
+ 36 operations (12 read, 18 write, 6 destructive).
6
+
7
+ 6 of these also have a hand-written method (`g8.lists`), marked **★** below. Prefer the hand-written method when one exists: it unwraps the `data` envelope and takes friendlier arguments. See [../sdk-clients.md](../sdk-clients.md).
8
+
9
+ Every example below assumes this setup (server-side, API key):
10
+
11
+ ```ts
12
+ import { g8 } from "@graph8/sdk";
13
+
14
+ g8.init({ apiKey: process.env.G8_API_KEY! });
15
+ ```
16
+
17
+ Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
18
+
19
+ Exact TypeScript types for every operation on this page, and every schema they use: [lists.d.ts](lists.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`addContactsToList`](#op-addcontactstolist) ★ | `POST /api/v1/lists/{list_id}/contacts` | write | `lists:write` | Add Contacts To List |
26
+ | [`addDealsToList`](#op-adddealstolist) | `POST /api/v1/lists/{audience_id}/deals` | write | `lists:write` | Add Deals To List |
27
+ | [`assignListToFolder`](#op-assignlisttofolder) | `PUT /api/v1/lists/folders/assignments/{audience_id}` | write | `lists:write` | Assign List To Folder |
28
+ | [`assignListsToFolder`](#op-assignliststofolder) | `PUT /api/v1/lists/folders/assignments` | write | `lists:write` | Assign Lists To Folder |
29
+ | [`checkListIntegrity`](#op-checklistintegrity) | `POST /api/v1/lists/{list_id}/integrity-check` | read | `lists:read` | Check List Integrity |
30
+ | [`createEmptyList`](#op-createemptylist) | `POST /api/v1/lists/create-empty` | write | `lists:write` | Create Empty List |
31
+ | [`createList`](#op-createlist) ★ | `POST /api/v1/lists` | write | `lists:write` | Create List |
32
+ | [`createListFolder`](#op-createlistfolder) | `POST /api/v1/lists/folders` | write | `lists:write` | Create List Folder |
33
+ | [`createMasterList`](#op-createmasterlist) | `POST /api/v1/lists/masters` | write | `lists:write` | Create Master List |
34
+ | [`deleteCompaniesFromList`](#op-deletecompaniesfromlist) | `DELETE /api/v1/lists/{audience_id}/companies` | destructive | `lists:delete` | Delete Companies From List |
35
+ | [`deleteLeadsFromList`](#op-deleteleadsfromlist) | `DELETE /api/v1/lists/{audience_id}/leads` | destructive | `lists:delete` | Delete Leads From List |
36
+ | [`deleteList`](#op-deletelist) ★ | `DELETE /api/v1/lists/{list_id}` | destructive | `lists:delete` | Delete List |
37
+ | [`deleteListFolder`](#op-deletelistfolder) | `DELETE /api/v1/lists/folders/{folder_id}` | destructive | `lists:delete` | Delete List Folder |
38
+ | [`deleteSuppressionsFromList`](#op-deletesuppressionsfromlist) | `DELETE /api/v1/lists/{audience_id}/suppressions` | destructive | `lists:delete` | Delete Suppressions From List |
39
+ | [`downloadList`](#op-downloadlist) | `GET /api/v1/lists/{audience_id}/download` | read | `lists:read` | Download List |
40
+ | [`generateTrackedLinks`](#op-generatetrackedlinks) | `POST /api/v1/lists/{audience_id}/generate-tracked-links` | write | `lists:write` | Generate Tracked Links |
41
+ | [`getListColumnCapabilities`](#op-getlistcolumncapabilities) | `GET /api/v1/lists/{audience_id}/column-capabilities` | read | `lists:read` | Get List Column Capabilities |
42
+ | [`getListContacts`](#op-getlistcontacts) ★ | `GET /api/v1/lists/{list_id}/contacts` | read | `lists:read` | Get List Contacts |
43
+ | [`getListKeywordLinks`](#op-getlistkeywordlinks) | `GET /api/v1/lists/{audience_id}/keyword-links` | read | `lists:read` | Get List Keyword Links |
44
+ | [`getListPerformance`](#op-getlistperformance) | `GET /api/v1/lists/performance` | read | `lists:read` | Get List Performance |
45
+ | [`getTrackedLinkColumns`](#op-gettrackedlinkcolumns) | `GET /api/v1/lists/{audience_id}/tracked-links/columns` | read | `lists:read` | Get Tracked Link Columns |
46
+ | [`listDataColumns`](#op-listdatacolumns) | `GET /api/v1/lists/{list_id}/data-columns` | read | `lists:read` | List Data Columns |
47
+ | [`listListFolders`](#op-listlistfolders) | `GET /api/v1/lists/folders` | read | `lists:read` | List List Folders |
48
+ | [`listLists`](#op-listlists) ★ | `GET /api/v1/lists` | read | `lists:read` | List Lists |
49
+ | [`listMasterLists`](#op-listmasterlists) | `GET /api/v1/lists/masters` | read | `lists:read` | List Master Lists |
50
+ | [`patchDynamicValue`](#op-patchdynamicvalue) | `PATCH /api/v1/lists/{audience_id}/dynamic-value` | write | `lists:write` | Patch Dynamic Value |
51
+ | [`previewListOwnerTransfer`](#op-previewlistownertransfer) | `GET /api/v1/lists/{audience_id}/owner/preview` | read | `lists:read` | Preview List Owner Transfer |
52
+ | [`reassignListOwner`](#op-reassignlistowner) | `PATCH /api/v1/lists/{audience_id}/owner` | write | `lists:write` | Reassign List Owner |
53
+ | [`recordListOpened`](#op-recordlistopened) | `POST /api/v1/lists/folders/activity/{audience_id}` | write | `lists:write` | Record List Opened |
54
+ | [`refreshDynamicList`](#op-refreshdynamiclist) | `POST /api/v1/lists/{audience_id}/refresh` | write | `lists:write` | Refresh Dynamic List |
55
+ | [`refreshMasterListNow`](#op-refreshmasterlistnow) | `POST /api/v1/lists/{audience_id}/master-refresh` | write | `lists:write` | Refresh Master List Now |
56
+ | [`removeContactsFromList`](#op-removecontactsfromlist) ★ | `DELETE /api/v1/lists/{list_id}/contacts` | destructive | `lists:delete` | Remove Contacts From List |
57
+ | [`starList`](#op-starlist) | `PUT /api/v1/lists/folders/stars/{audience_id}` | write | `lists:write` | Star List |
58
+ | [`updateList`](#op-updatelist) | `PATCH /api/v1/lists/{list_id}` | write | `lists:write` | Update List |
59
+ | [`updateListFolder`](#op-updatelistfolder) | `PATCH /api/v1/lists/folders/{folder_id}` | write | `lists:write` | Update List Folder |
60
+ | [`updateMasterListConfig`](#op-updatemasterlistconfig) | `PATCH /api/v1/lists/{audience_id}/master-config` | write | `lists:write` | Update Master List Config |
61
+
62
+ ---
63
+
64
+ <a id="op-addcontactstolist"></a>
65
+
66
+ ### `g8.api.lists.addContactsToList(input)`
67
+
68
+ **Add Contacts To List**
69
+
70
+ - HTTP: `POST /api/v1/lists/{list_id}/contacts`
71
+ - operationId: `add_contacts_to_list_lists__list_id__contacts_post` (also callable as `g8.api.call("add_contacts_to_list_lists__list_id__contacts_post", input)`)
72
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
73
+ - API-key scope: `lists:write`
74
+ - ★ Hand-written: [`g8.lists.addContacts()`](../sdk-clients.md#g8-lists-addcontacts)
75
+
76
+ Add contacts to a list by their IDs.
77
+
78
+ **Input**
79
+
80
+ | Field | Type | Required | Description |
81
+ |---|---|---|---|
82
+ | `path.list_id` | `integer` | yes | List ID |
83
+ | `body` | `AddContactsToListRequest` | yes | Request body; fields below. |
84
+
85
+ Body fields (`AddContactsToListRequest`):
86
+
87
+ | Field | Type | Required | Description |
88
+ |---|---|---|---|
89
+ | `body.contact_ids` | `Array<integer>` | yes | List of contact IDs to add |
90
+ | `body.conflict_resolution` | `"add_all" \| "skip_all" \| "custom" \| null` | no | Required on retry after a 409 CONFLICT_REVIEW_REQUIRED response: 'add_all' adds ready + every warned contact, 'skip_all' adds only ready contacts, 'custom' adds ready + the ids in include_warned_ids. Blocked contacts are always excluded regardless of this value. |
91
+ | `body.include_warned_ids` | `Array<string> \| null` | no | With conflict_resolution='custom', the warned contact ids to also add. |
92
+
93
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
94
+
95
+ Other envelope fields: `pagination` (PaginationMeta).
96
+
97
+ **Example**
98
+
99
+ ```ts
100
+ const result = await g8.api.lists.addContactsToList({ path: { list_id: 123 }, body: { contact_ids: [123] } });
101
+ ```
102
+
103
+ ---
104
+
105
+ <a id="op-adddealstolist"></a>
106
+
107
+ ### `g8.api.lists.addDealsToList(input)`
108
+
109
+ **Add Deals To List**
110
+
111
+ - HTTP: `POST /api/v1/lists/{audience_id}/deals`
112
+ - operationId: `add_deals_to_list_lists__audience_id__deals_post` (also callable as `g8.api.call("add_deals_to_list_lists__audience_id__deals_post", input)`)
113
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
114
+ - API-key scope: `lists:write`
115
+
116
+ Put deals on a deals list.
117
+
118
+ Each deal is checked against the caller's DEAL scope as well as the list's,
119
+ so adding a deal you cannot see is refused rather than silently skipped.
120
+
121
+ **Input**
122
+
123
+ | Field | Type | Required | Description |
124
+ |---|---|---|---|
125
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
126
+ | `body` | `AddDealsToListRequest` | yes | Request body; fields below. |
127
+
128
+ Body fields (`AddDealsToListRequest`):
129
+
130
+ | Field | Type | Required | Description |
131
+ |---|---|---|---|
132
+ | `body.deal_ids` | `Array<string>` | yes | Deal ids (strings, unlike the others). |
133
+ | `body.source` | `string \| null` | no | Where the addition came from, for the audit trail. |
134
+
135
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
136
+
137
+ Other envelope fields: `pagination` (PaginationMeta).
138
+
139
+ **Example**
140
+
141
+ ```ts
142
+ const result = await g8.api.lists.addDealsToList({ path: { audience_id: 123 }, body: { deal_ids: ["id"] } });
143
+ ```
144
+
145
+ ---
146
+
147
+ <a id="op-assignlisttofolder"></a>
148
+
149
+ ### `g8.api.lists.assignListToFolder(input)`
150
+
151
+ **Assign List To Folder**
152
+
153
+ - HTTP: `PUT /api/v1/lists/folders/assignments/{audience_id}`
154
+ - operationId: `assign_list_to_folder_lists_folders_assignments__audience_id__put` (also callable as `g8.api.call("assign_list_to_folder_lists_folders_assignments__audience_id__put", input)`)
155
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
156
+ - API-key scope: `lists:write`
157
+
158
+ File one list into a folder, or out of every folder. FREE.
159
+
160
+ Requires WRITE access to the list, as in the app. `folder_id` null unfiles
161
+ it.
162
+
163
+ **Input**
164
+
165
+ | Field | Type | Required | Description |
166
+ |---|---|---|---|
167
+ | `path.audience_id` | `integer` | yes | |
168
+ | `body` | `ListFolderAssignRequest` | yes | Request body; fields below. |
169
+
170
+ Body fields (`ListFolderAssignRequest`):
171
+
172
+ | Field | Type | Required | Description |
173
+ |---|---|---|---|
174
+ | `body.folder_id` | `string (uuid) \| null` | no | The folder. Null takes the list OUT of every folder. |
175
+
176
+ **Returns**: no JSON body is declared for the success response.
177
+
178
+ **Example**
179
+
180
+ ```ts
181
+ const result = await g8.api.lists.assignListToFolder({ path: { audience_id: 123 }, body: {} });
182
+ ```
183
+
184
+ ---
185
+
186
+ <a id="op-assignliststofolder"></a>
187
+
188
+ ### `g8.api.lists.assignListsToFolder(input)`
189
+
190
+ **Assign Lists To Folder**
191
+
192
+ - HTTP: `PUT /api/v1/lists/folders/assignments`
193
+ - operationId: `assign_lists_to_folder_lists_folders_assignments_put` (also callable as `g8.api.call("assign_lists_to_folder_lists_folders_assignments_put", input)`)
194
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
195
+ - API-key scope: `lists:write`
196
+
197
+ File up to 500 lists into one folder, or out of every folder. FREE.
198
+
199
+ All or nothing: if ANY list is not visible to the key the whole call is a
200
+ 404 and nothing moves, so a caller cannot learn which ids exist by which
201
+ ones were filed. `folder_id` null unfiles them.
202
+
203
+ **Input**
204
+
205
+ | Field | Type | Required | Description |
206
+ |---|---|---|---|
207
+ | `body` | `ListFolderBulkAssignRequest` | yes | Request body; fields below. |
208
+
209
+ Body fields (`ListFolderBulkAssignRequest`):
210
+
211
+ | Field | Type | Required | Description |
212
+ |---|---|---|---|
213
+ | `body.audience_ids` | `Array<integer>` | yes | The lists to move, 1 to 500. min items 1, max items 500 |
214
+ | `body.folder_id` | `string (uuid) \| null` | no | The folder. Null takes the list OUT of every folder. |
215
+
216
+ **Returns**: no JSON body is declared for the success response.
217
+
218
+ **Example**
219
+
220
+ ```ts
221
+ const result = await g8.api.lists.assignListsToFolder({ body: { audience_ids: [123] } });
222
+ ```
223
+
224
+ ---
225
+
226
+ <a id="op-checklistintegrity"></a>
227
+
228
+ ### `g8.api.lists.checkListIntegrity(input)`
229
+
230
+ **Check List Integrity**
231
+
232
+ - HTTP: `POST /api/v1/lists/{list_id}/integrity-check`
233
+ - operationId: `check_list_integrity_lists__list_id__integrity_check_post` (also callable as `g8.api.call("check_list_integrity_lists__list_id__integrity_check_post", input)`)
234
+ - Tier: `read`: reads data; safe to call and to retry
235
+ - API-key scope: `lists:read`
236
+
237
+ How complete the list's data is: per field, how many contacts have a usable value.
238
+
239
+ Covers the default contact fields (email, phone, name, company, ...) plus any
240
+ `extra_fields` named. Reads only; nothing is written or enriched.
241
+
242
+ **Input**
243
+
244
+ | Field | Type | Required | Description |
245
+ |---|---|---|---|
246
+ | `path.list_id` | `integer` | yes | List (audience) id. |
247
+ | `body` | `IntegrityCheckRequest` | no | Request body; fields below. |
248
+
249
+ Body fields (`IntegrityCheckRequest`):
250
+
251
+ | Field | Type | Required | Description |
252
+ |---|---|---|---|
253
+ | `body.extra_fields` | `Array<string> \| null` | no | Enrichment / AI / dynamic columns to measure on top of the default fields - the `column_name_db` values from `GET /lists/{list_id}/data-columns`. |
254
+
255
+ **Returns** `ApiResponse_SequencerPayload_`: the envelope `{ data: SequencerPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
256
+
257
+ Other envelope fields: `pagination` (PaginationMeta).
258
+
259
+ **Example**
260
+
261
+ ```ts
262
+ const result = await g8.api.lists.checkListIntegrity({ path: { list_id: 1 } });
263
+ ```
264
+
265
+ ---
266
+
267
+ <a id="op-createemptylist"></a>
268
+
269
+ ### `g8.api.lists.createEmptyList(input)`
270
+
271
+ **Create Empty List**
272
+
273
+ - HTTP: `POST /api/v1/lists/create-empty`
274
+ - operationId: `create_empty_list_lists_create_empty_post` (also callable as `g8.api.call("create_empty_list_lists_create_empty_post", input)`)
275
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
276
+ - API-key scope: `lists:write`
277
+
278
+ Create a list with nothing in it, to fill later.
279
+
280
+ SEND AN `idempotency_key`. Without one a retried request makes a second
281
+ empty list, and a duplicate list is harder to notice than a failed call.
282
+
283
+ **Input**
284
+
285
+ | Field | Type | Required | Description |
286
+ |---|---|---|---|
287
+ | `body` | `CreateEmptyListRequest` | yes | Request body; fields below. |
288
+
289
+ Body fields (`CreateEmptyListRequest`):
290
+
291
+ | Field | Type | Required | Description |
292
+ |---|---|---|---|
293
+ | `body.source` | `"csv" \| "graph8" \| "FormSubmission" \| "visitor" \| "salesforce" \| "hubspot" \| "keyword" \| "intent" \| …` | yes | Where the list comes from, e.g. `csv`. |
294
+ | `body.title` | `string` | yes | min length 1, max length 200 |
295
+ | `body.description` | `string \| null` | no | |
296
+ | `body.idempotency_key` | `string \| null` | no | Retry-safe: the same key returns the same list. |
297
+ | `body.is_dynamic` | `boolean` | no | A dynamic list re-runs its query; a static one keeps what it is given. default `false` |
298
+ | `body.request_fingerprint` | `string \| null` | no | |
299
+ | `body.status` | `"completed" \| "processing" \| "failed"` | no | default `"completed"` |
300
+ | `body.type` | `"contacts" \| "companies" \| "suppressions" \| "deals" \| "leads"` | no | What the list holds. The wire name is `type`; the app's field is `type_` because `type` is a Python builtin, and the alias keeps the wire name identical to the app's. default `"contacts"` |
301
+
302
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
303
+
304
+ Other envelope fields: `pagination` (PaginationMeta).
305
+
306
+ **Example**
307
+
308
+ ```ts
309
+ const result = await g8.api.lists.createEmptyList({ body: { source: "csv", title: "Example" } });
310
+ ```
311
+
312
+ ---
313
+
314
+ <a id="op-createlist"></a>
315
+
316
+ ### `g8.api.lists.createList(input)`
317
+
318
+ **Create List**
319
+
320
+ - HTTP: `POST /api/v1/lists`
321
+ - operationId: `create_list_lists_post` (also callable as `g8.api.call("create_list_lists_post", input)`)
322
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
323
+ - API-key scope: `lists:write`
324
+ - ★ Hand-written: [`g8.lists.create()`](../sdk-clients.md#g8-lists-create)
325
+
326
+ Create a new empty list.
327
+
328
+ **Input**
329
+
330
+ | Field | Type | Required | Description |
331
+ |---|---|---|---|
332
+ | `body` | `ListCreateRequest` | yes | Request body; fields below. |
333
+
334
+ Body fields (`ListCreateRequest`):
335
+
336
+ | Field | Type | Required | Description |
337
+ |---|---|---|---|
338
+ | `body.title` | `string` | yes | Name of the list |
339
+ | `body.description` | `string \| null` | no | Optional note describing the list's purpose, readable by agents (#16641) max length 2000 |
340
+ | `body.type` | `string` | no | List type: contacts, companies, suppressions, deals, leads default `"contacts"` |
341
+
342
+ **Returns** `ApiResponse_ListCreateResponse_`: the envelope `{ data: ListCreateResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
343
+
344
+ Other envelope fields: `pagination` (PaginationMeta).
345
+
346
+ `ListCreateResponse` fields:
347
+
348
+ | Field | Type | Required | Description |
349
+ |---|---|---|---|
350
+ | `id` | `integer` | yes | |
351
+ | `title` | `string` | yes | |
352
+ | `description` | `string \| null` | no | |
353
+ | `status` | `string \| null` | no | |
354
+ | `total` | `integer` | no | default `0` |
355
+ | `type` | `string \| null` | no | |
356
+
357
+ **Example**
358
+
359
+ ```ts
360
+ const result = await g8.api.lists.createList({ body: { title: "Example" } });
361
+ ```
362
+
363
+ ---
364
+
365
+ <a id="op-createlistfolder"></a>
366
+
367
+ ### `g8.api.lists.createListFolder(input)`
368
+
369
+ **Create List Folder**
370
+
371
+ - HTTP: `POST /api/v1/lists/folders`
372
+ - operationId: `create_list_folder_lists_folders_post` (also callable as `g8.api.call("create_list_folder_lists_folders_post", input)`)
373
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
374
+ - API-key scope: `lists:write`
375
+
376
+ Create a folder. Titles are de-duplicated per owner by the same
377
+ internal path the app uses, so a repeat title returns its 409 unchanged.
378
+
379
+ **Input**
380
+
381
+ | Field | Type | Required | Description |
382
+ |---|---|---|---|
383
+ | `body` | `ListFolderCreateRequest` | yes | Request body; fields below. |
384
+
385
+ Body fields (`ListFolderCreateRequest`):
386
+
387
+ | Field | Type | Required | Description |
388
+ |---|---|---|---|
389
+ | `body.title` | `string` | yes | Folder title. min length 1, max length 120 |
390
+ | `body.visibility` | `"private" \| "org" \| null` | no | Defaults to `private` when omitted. |
391
+
392
+ **Returns** `ApiResponse_ListFolderResponse_`: the envelope `{ data: ListFolderResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
393
+
394
+ Other envelope fields: `pagination` (PaginationMeta).
395
+
396
+ `ListFolderResponse` fields:
397
+
398
+ | Field | Type | Required | Description |
399
+ |---|---|---|---|
400
+ | `created_by` | `string` | yes | User id that created the folder. |
401
+ | `id` | `string (uuid)` | yes | Folder id. |
402
+ | `is_owner` | `boolean` | yes | True when the calling key's org owns the folder. |
403
+ | `list_count` | `integer` | yes | Number of lists currently filed in this folder. |
404
+ | `title` | `string` | yes | Display title. |
405
+ | `visibility` | `string` | yes | `private` (owner only) or `org` (browse-only for teammates). |
406
+ | `created_at` | `string (date-time) \| null` | no | |
407
+ | `updated_at` | `string (date-time) \| null` | no | |
408
+
409
+ **Example**
410
+
411
+ ```ts
412
+ const result = await g8.api.lists.createListFolder({ body: { title: "Example" } });
413
+ ```
414
+
415
+ ---
416
+
417
+ <a id="op-createmasterlist"></a>
418
+
419
+ ### `g8.api.lists.createMasterList(input)`
420
+
421
+ **Create Master List**
422
+
423
+ - HTTP: `POST /api/v1/lists/masters`
424
+ - operationId: `create_master_list_lists_masters_post` (also callable as `g8.api.call("create_master_list_lists_masters_post", input)`)
425
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
426
+ - API-key scope: `lists:write`
427
+
428
+ Create a master list from other lists.
429
+
430
+ `include_all_sources` takes EVERY list of this type, including ones
431
+ created later - a standing rule rather than a snapshot, and it makes
432
+ `source_list_ids` irrelevant.
433
+
434
+ The first sync runs in the BACKGROUND, so the list comes back empty and
435
+ fills shortly after.
436
+
437
+ **Input**
438
+
439
+ | Field | Type | Required | Description |
440
+ |---|---|---|---|
441
+ | `body` | `CreateMasterListRequest` | yes | Request body; fields below. |
442
+
443
+ Body fields (`CreateMasterListRequest`):
444
+
445
+ | Field | Type | Required | Description |
446
+ |---|---|---|---|
447
+ | `body.title` | `string` | yes | max length 500 |
448
+ | `body.include_all_sources` | `boolean` | no | Take EVERY list of this type instead of the named ones, including ones created later. `source_list_ids` is then ignored. default `false` |
449
+ | `body.source_list_ids` | `Array<integer>` | no | The lists to union. |
450
+ | `body.type` | `"contacts" \| "companies" \| "suppressions" \| "deals" \| "leads"` | no | Wire name is `type`; see `CreateEmptyListRequest`. default `"contacts"` |
451
+
452
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
453
+
454
+ Other envelope fields: `pagination` (PaginationMeta).
455
+
456
+ **Example**
457
+
458
+ ```ts
459
+ const result = await g8.api.lists.createMasterList({ body: { title: "Example" } });
460
+ ```
461
+
462
+ ---
463
+
464
+ <a id="op-deletecompaniesfromlist"></a>
465
+
466
+ ### `g8.api.lists.deleteCompaniesFromList(input)`
467
+
468
+ **Delete Companies From List**
469
+
470
+ - HTTP: `DELETE /api/v1/lists/{audience_id}/companies`
471
+ - operationId: `delete_companies_from_list_lists__audience_id__companies_delete` (also callable as `g8.api.call("delete_companies_from_list_lists__audience_id__companies_delete", input)`)
472
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
473
+ - API-key scope: `lists:delete`
474
+
475
+ Remove companies from a list.
476
+
477
+ **Input**
478
+
479
+ | Field | Type | Required | Description |
480
+ |---|---|---|---|
481
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
482
+ | `body` | `DeleteCompaniesFromListRequest` | yes | Request body; fields below. |
483
+ | `query.agFilterModel` | `string \| null` | no | AgGrid filter JSON. Every company in the list matching it is removed, IN ADDITION to `company_ids` - the two combine rather than the filter narrowing the ids. |
484
+
485
+ Body fields (`DeleteCompaniesFromListRequest`):
486
+
487
+ | Field | Type | Required | Description |
488
+ |---|---|---|---|
489
+ | `body.company_ids` | `Array<integer>` | no | |
490
+
491
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
492
+
493
+ Other envelope fields: `pagination` (PaginationMeta).
494
+
495
+ **Example**
496
+
497
+ ```ts
498
+ // destructive: deletes or archives data; confirm with a human before calling.
499
+ const result = await g8.api.lists.deleteCompaniesFromList({ path: { audience_id: 123 }, body: {} });
500
+ ```
501
+
502
+ ---
503
+
504
+ <a id="op-deleteleadsfromlist"></a>
505
+
506
+ ### `g8.api.lists.deleteLeadsFromList(input)`
507
+
508
+ **Delete Leads From List**
509
+
510
+ - HTTP: `DELETE /api/v1/lists/{audience_id}/leads`
511
+ - operationId: `delete_leads_from_list_lists__audience_id__leads_delete` (also callable as `g8.api.call("delete_leads_from_list_lists__audience_id__leads_delete", input)`)
512
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
513
+ - API-key scope: `lists:delete`
514
+
515
+ Remove leads from a list.
516
+
517
+ **Input**
518
+
519
+ | Field | Type | Required | Description |
520
+ |---|---|---|---|
521
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
522
+ | `body` | `DeleteLeadsFromListRequest` | yes | Request body; fields below. |
523
+
524
+ Body fields (`DeleteLeadsFromListRequest`):
525
+
526
+ | Field | Type | Required | Description |
527
+ |---|---|---|---|
528
+ | `body.lead_ids` | `Array<integer>` | yes | The leads to remove. |
529
+
530
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
531
+
532
+ Other envelope fields: `pagination` (PaginationMeta).
533
+
534
+ **Example**
535
+
536
+ ```ts
537
+ // destructive: deletes or archives data; confirm with a human before calling.
538
+ const result = await g8.api.lists.deleteLeadsFromList({ path: { audience_id: 123 }, body: { lead_ids: [123] } });
539
+ ```
540
+
541
+ ---
542
+
543
+ <a id="op-deletelist"></a>
544
+
545
+ ### `g8.api.lists.deleteList(input)`
546
+
547
+ **Delete List**
548
+
549
+ - HTTP: `DELETE /api/v1/lists/{list_id}`
550
+ - operationId: `delete_list_lists__list_id__delete` (also callable as `g8.api.call("delete_list_lists__list_id__delete", input)`)
551
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
552
+ - API-key scope: `lists:delete`
553
+ - ★ Hand-written: [`g8.lists.delete()`](../sdk-clients.md#g8-lists-delete)
554
+
555
+ Soft-delete a list.
556
+
557
+ **Input**
558
+
559
+ | Field | Type | Required | Description |
560
+ |---|---|---|---|
561
+ | `path.list_id` | `integer` | yes | List ID |
562
+
563
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
564
+
565
+ Other envelope fields: `pagination` (PaginationMeta).
566
+
567
+ **Example**
568
+
569
+ ```ts
570
+ // destructive: deletes or archives data; confirm with a human before calling.
571
+ const result = await g8.api.lists.deleteList({ path: { list_id: 123 } });
572
+ ```
573
+
574
+ ---
575
+
576
+ <a id="op-deletelistfolder"></a>
577
+
578
+ ### `g8.api.lists.deleteListFolder(input)`
579
+
580
+ **Delete List Folder**
581
+
582
+ - HTTP: `DELETE /api/v1/lists/folders/{folder_id}`
583
+ - operationId: `delete_list_folder_lists_folders__folder_id__delete` (also callable as `g8.api.call("delete_list_folder_lists_folders__folder_id__delete", input)`)
584
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
585
+ - API-key scope: `lists:delete`
586
+
587
+ Delete a folder. The lists inside it are NOT deleted - they are
588
+ unfiled, exactly as in the app.
589
+
590
+ **Input**
591
+
592
+ | Field | Type | Required | Description |
593
+ |---|---|---|---|
594
+ | `path.folder_id` | `string (uuid)` | yes | Folder id. |
595
+
596
+ **Returns**: no JSON body is declared for the success response.
597
+
598
+ **Example**
599
+
600
+ ```ts
601
+ // destructive: deletes or archives data; confirm with a human before calling.
602
+ const result = await g8.api.lists.deleteListFolder({ path: { folder_id: "00000000-0000-0000-0000-000000000000" } });
603
+ ```
604
+
605
+ ---
606
+
607
+ <a id="op-deletesuppressionsfromlist"></a>
608
+
609
+ ### `g8.api.lists.deleteSuppressionsFromList(input)`
610
+
611
+ **Delete Suppressions From List**
612
+
613
+ - HTTP: `DELETE /api/v1/lists/{audience_id}/suppressions`
614
+ - operationId: `delete_suppressions_from_list_lists__audience_id__suppressions_delete` (also callable as `g8.api.call("delete_suppressions_from_list_lists__audience_id__suppressions_delete", input)`)
615
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
616
+ - API-key scope: `lists:delete`
617
+
618
+ Remove suppressions from a suppression list.
619
+
620
+ Removing a suppression makes those people CONTACTABLE again - this is the
621
+ one removal here that changes who can be emailed.
622
+
623
+ **Input**
624
+
625
+ | Field | Type | Required | Description |
626
+ |---|---|---|---|
627
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
628
+ | `body` | `DeleteSuppressionsFromListRequest` | yes | Request body; fields below. |
629
+
630
+ Body fields (`DeleteSuppressionsFromListRequest`):
631
+
632
+ | Field | Type | Required | Description |
633
+ |---|---|---|---|
634
+ | `body.suppression_ids` | `Array<integer>` | yes | The suppressions to remove. |
635
+
636
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
637
+
638
+ Other envelope fields: `pagination` (PaginationMeta).
639
+
640
+ **Example**
641
+
642
+ ```ts
643
+ // destructive: deletes or archives data; confirm with a human before calling.
644
+ const result = await g8.api.lists.deleteSuppressionsFromList({ path: { audience_id: 123 }, body: { suppression_ids: [123] } });
645
+ ```
646
+
647
+ ---
648
+
649
+ <a id="op-downloadlist"></a>
650
+
651
+ ### `g8.api.lists.downloadList(input)`
652
+
653
+ **Download List**
654
+
655
+ - HTTP: `GET /api/v1/lists/{audience_id}/download`
656
+ - operationId: `download_list_lists__audience_id__download_get` (also callable as `g8.api.call("download_list_lists__audience_id__download_get", input)`)
657
+ - Tier: `read`: reads data; safe to call and to retry
658
+ - API-key scope: `lists:read`
659
+
660
+ Every row of a list as a CSV or XLSX file. FREE.
661
+
662
+ Unbounded: the file holds the WHOLE list. CSV comes back as text; XLSX as
663
+ base64 in `content` with `encoding: "base64"`.
664
+
665
+ **Input**
666
+
667
+ | Field | Type | Required | Description |
668
+ |---|---|---|---|
669
+ | `path.audience_id` | `integer` | yes | |
670
+ | `query.format` | `"csv" \| "xlsx"` | no | `csv` or `xlsx`. default `"xlsx"` |
671
+ | `query.columns` | `Array<string> \| null` | no | Only these columns. Omit for every column. LinkedIn profile URLs are always kept, as in the app. |
672
+
673
+ **Returns** `ApiResponse_ListDownloadPayload_`: the envelope `{ data: ListDownloadPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
674
+
675
+ Other envelope fields: `pagination` (PaginationMeta).
676
+
677
+ `ListDownloadPayload` fields:
678
+
679
+ | Field | Type | Required | Description |
680
+ |---|---|---|---|
681
+ | `content` | `string` | yes | |
682
+ | `encoding` | `"utf-8" \| "base64"` | yes | |
683
+ | `filename` | `string` | yes | |
684
+ | `format` | `"csv" \| "xlsx"` | yes | |
685
+ | `media_type` | `string` | yes | |
686
+
687
+ **Example**
688
+
689
+ ```ts
690
+ const result = await g8.api.lists.downloadList({ path: { audience_id: 123 } });
691
+ ```
692
+
693
+ ---
694
+
695
+ <a id="op-generatetrackedlinks"></a>
696
+
697
+ ### `g8.api.lists.generateTrackedLinks(input)`
698
+
699
+ **Generate Tracked Links**
700
+
701
+ - HTTP: `POST /api/v1/lists/{audience_id}/generate-tracked-links`
702
+ - operationId: `generate_tracked_links_lists__audience_id__generate_tracked_links_post` (also callable as `g8.api.call("generate_tracked_links_lists__audience_id__generate_tracked_links_post", input)`)
703
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
704
+ - API-key scope: `lists:write`
705
+
706
+ Mint one tracked URL per row, into a column on the list.
707
+
708
+ `params_template` interpolates this list's own columns - check
709
+ `GET /tracked-links/columns` first, because an unresolvable name produces
710
+ a link with an empty parameter rather than an error.
711
+
712
+ `placement` only applies when `shorten` is off.
713
+
714
+ **Input**
715
+
716
+ | Field | Type | Required | Description |
717
+ |---|---|---|---|
718
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
719
+ | `body` | `GenerateTrackedLinksRequest` | yes | Request body; fields below. |
720
+
721
+ Body fields (`GenerateTrackedLinksRequest`):
722
+
723
+ | Field | Type | Required | Description |
724
+ |---|---|---|---|
725
+ | `body.destination_url` | `string` | yes | Absolute http(s) URL every link points at. |
726
+ | `body.link_name` | `string` | yes | What this set of links is called. |
727
+ | `body.column_title` | `string \| null` | no | Column to write the links into. |
728
+ | `body.params_template` | `Record<string, string>` | no | Query parameters to interpolate per row, e.g. {'utm_term': '{company}'}. |
729
+ | `body.placement` | `"fragment" \| "query"` | no | Where the token goes on a NON-shortened URL: `fragment` (#t=…) or `query` (?g8t=…). Ignored when `shorten` is on. default `"fragment"` |
730
+ | `body.shorten` | `boolean` | no | Use the short-link domain. default `false` |
731
+ | `body.stream_id` | `string \| null` | no | |
732
+
733
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
734
+
735
+ Other envelope fields: `pagination` (PaginationMeta).
736
+
737
+ **Example**
738
+
739
+ ```ts
740
+ const result = await g8.api.lists.generateTrackedLinks({
741
+ path: { audience_id: 123 },
742
+ body: { destination_url: "https://example.com", link_name: "Example" },
743
+ });
744
+ ```
745
+
746
+ ---
747
+
748
+ <a id="op-getlistcolumncapabilities"></a>
749
+
750
+ ### `g8.api.lists.getListColumnCapabilities(input)`
751
+
752
+ **Get List Column Capabilities**
753
+
754
+ - HTTP: `GET /api/v1/lists/{audience_id}/column-capabilities`
755
+ - operationId: `get_list_column_capabilities_lists__audience_id__column_capabilities_get` (also callable as `g8.api.call("get_list_column_capabilities_lists__audience_id__column_capabilities_get", input)`)
756
+ - Tier: `read`: reads data; safe to call and to retry
757
+ - API-key scope: `lists:read`
758
+
759
+ Which dynamic columns this list can carry, and what may be written.
760
+
761
+ Read this before `PATCH /dynamic-value`: a column that is not writable
762
+ here is refused there, and the capability map is the only way to know
763
+ which is which without guessing.
764
+
765
+ **Input**
766
+
767
+ | Field | Type | Required | Description |
768
+ |---|---|---|---|
769
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
770
+ | `query.object_type` | `"mashup_contacts" \| "mashup_companies"` | yes | Which grid's columns: contacts or companies. |
771
+
772
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
773
+
774
+ Other envelope fields: `pagination` (PaginationMeta).
775
+
776
+ **Example**
777
+
778
+ ```ts
779
+ const result = await g8.api.lists.getListColumnCapabilities({
780
+ path: { audience_id: 123 },
781
+ query: { object_type: "mashup_contacts" },
782
+ });
783
+ ```
784
+
785
+ ---
786
+
787
+ <a id="op-getlistcontacts"></a>
788
+
789
+ ### `g8.api.lists.getListContacts(input)`
790
+
791
+ **Get List Contacts**
792
+
793
+ - HTTP: `GET /api/v1/lists/{list_id}/contacts`
794
+ - operationId: `get_list_contacts_lists__list_id__contacts_get` (also callable as `g8.api.call("get_list_contacts_lists__list_id__contacts_get", input)`)
795
+ - Tier: `read`: reads data; safe to call and to retry
796
+ - API-key scope: `lists:read`
797
+ - ★ Hand-written: [`g8.lists.contacts()`](../sdk-clients.md#g8-lists-contacts)
798
+
799
+ Get contacts in a specific list.
800
+
801
+ **Input**
802
+
803
+ | Field | Type | Required | Description |
804
+ |---|---|---|---|
805
+ | `path.list_id` | `integer` | yes | List ID |
806
+ | `query.page` | `integer` | no | Page number (1-indexed) default `1` |
807
+ | `query.limit` | `integer` | no | Items per page (max 200) default `50` |
808
+
809
+ **Returns** `ApiResponse_list_ContactListItem__`: the envelope `{ data: Array<ContactListItem>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
810
+
811
+ Other envelope fields: `pagination` (PaginationMeta).
812
+
813
+ `ContactListItem` fields:
814
+
815
+ | Field | Type | Required | Description |
816
+ |---|---|---|---|
817
+ | `city` | `string \| null` | no | |
818
+ | `company_id` | `integer \| null` | no | |
819
+ | `country` | `string \| null` | no | |
820
+ | `custom_fields` | `Record<string, string \| null> \| null` | no | |
821
+ | `direct_phone` | `string \| null` | no | |
822
+ | `first_name` | `string \| null` | no | |
823
+ | `id` | `integer \| null` | no | |
824
+ | `job_department` | `string \| null` | no | |
825
+ | `job_title` | `string \| null` | no | |
826
+ | `last_name` | `string \| null` | no | |
827
+ | `linkedin_url` | `string \| null` | no | |
828
+ | `mobile_phone` | `string \| null` | no | |
829
+ | `owner_id` | `string \| null` | no | |
830
+ | `owner_name` | `string \| null` | no | |
831
+ | `seniority_level` | `string \| null` | no | |
832
+ | `state` | `string \| null` | no | |
833
+ | `work_email` | `string \| null` | no | |
834
+
835
+ **Example**
836
+
837
+ ```ts
838
+ const result = await g8.api.lists.getListContacts({ path: { list_id: 123 } });
839
+ ```
840
+
841
+ ---
842
+
843
+ <a id="op-getlistkeywordlinks"></a>
844
+
845
+ ### `g8.api.lists.getListKeywordLinks(input)`
846
+
847
+ **Get List Keyword Links**
848
+
849
+ - HTTP: `GET /api/v1/lists/{audience_id}/keyword-links`
850
+ - operationId: `get_list_keyword_links_lists__audience_id__keyword_links_get` (also callable as `g8.api.call("get_list_keyword_links_lists__audience_id__keyword_links_get", input)`)
851
+ - Tier: `read`: reads data; safe to call and to retry
852
+ - API-key scope: `lists:read`
853
+
854
+ Which intent keywords auto-populate this list.
855
+
856
+ The authoritative source: the link lives in
857
+ `cb_keyword_sync_configs.list_id`, not in the list's own query, so a list
858
+ can be fed by a keyword while its `icp_query` says nothing about it.
859
+
860
+ **Input**
861
+
862
+ | Field | Type | Required | Description |
863
+ |---|---|---|---|
864
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
865
+
866
+ **Returns** `ApiResponse_ListCollectionPayload_`: the envelope `{ data: ListCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
867
+
868
+ Other envelope fields: `pagination` (PaginationMeta).
869
+
870
+ `ListCollectionPayload` fields:
871
+
872
+ | Field | Type | Required | Description |
873
+ |---|---|---|---|
874
+ | `items` | `Array<unknown>` | no | |
875
+
876
+ **Example**
877
+
878
+ ```ts
879
+ const result = await g8.api.lists.getListKeywordLinks({ path: { audience_id: 123 } });
880
+ ```
881
+
882
+ ---
883
+
884
+ <a id="op-getlistperformance"></a>
885
+
886
+ ### `g8.api.lists.getListPerformance(input?)`
887
+
888
+ **Get List Performance**
889
+
890
+ - HTTP: `GET /api/v1/lists/performance`
891
+ - operationId: `get_list_performance_lists_performance_get` (also callable as `g8.api.call("get_list_performance_lists_performance_get", input)`)
892
+ - Tier: `read`: reads data; safe to call and to retry
893
+ - API-key scope: `lists:read`
894
+
895
+ Engagement counters for one list or every list the key may see.
896
+
897
+ **Input**
898
+
899
+ | Field | Type | Required | Description |
900
+ |---|---|---|---|
901
+ | `query.list_id` | `integer \| null` | no | Filter to a single list. Omit for all lists. |
902
+ | `query.days` | `integer \| null` | no | Restrict sends/events to the last N days. Omit for all-time. Ignored when start_date and end_date are both supplied. |
903
+ | `query.start_date` | `string \| null` | no | Inclusive start of an anchored range, `YYYY-MM-DD`. Requires end_date. |
904
+ | `query.end_date` | `string \| null` | no | Inclusive end of an anchored range, `YYYY-MM-DD`. |
905
+
906
+ **Returns** `ApiResponse_ListPerformanceResponse_`: the envelope `{ data: ListPerformanceResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
907
+
908
+ Other envelope fields: `pagination` (PaginationMeta).
909
+
910
+ `ListPerformanceResponse` fields:
911
+
912
+ | Field | Type | Required | Description |
913
+ |---|---|---|---|
914
+ | `items` | `Array<ListPerformanceItem>` | no | |
915
+
916
+ **Example**
917
+
918
+ ```ts
919
+ const result = await g8.api.lists.getListPerformance();
920
+ ```
921
+
922
+ ---
923
+
924
+ <a id="op-gettrackedlinkcolumns"></a>
925
+
926
+ ### `g8.api.lists.getTrackedLinkColumns(input)`
927
+
928
+ **Get Tracked Link Columns**
929
+
930
+ - HTTP: `GET /api/v1/lists/{audience_id}/tracked-links/columns`
931
+ - operationId: `get_tracked_link_columns_lists__audience_id__tracked_links_columns_get` (also callable as `g8.api.call("get_tracked_link_columns_lists__audience_id__tracked_links_columns_get", input)`)
932
+ - Tier: `read`: reads data; safe to call and to retry
933
+ - API-key scope: `lists:read`
934
+
935
+ Which of this list's columns can be interpolated into a tracked link.
936
+
937
+ The source of the names usable in `params_template` - anything else
938
+ resolves to nothing and produces a link with an empty parameter.
939
+
940
+ **Input**
941
+
942
+ | Field | Type | Required | Description |
943
+ |---|---|---|---|
944
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
945
+
946
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
947
+
948
+ Other envelope fields: `pagination` (PaginationMeta).
949
+
950
+ **Example**
951
+
952
+ ```ts
953
+ const result = await g8.api.lists.getTrackedLinkColumns({ path: { audience_id: 123 } });
954
+ ```
955
+
956
+ ---
957
+
958
+ <a id="op-listdatacolumns"></a>
959
+
960
+ ### `g8.api.lists.listDataColumns(input)`
961
+
962
+ **List Data Columns**
963
+
964
+ - HTTP: `GET /api/v1/lists/{list_id}/data-columns`
965
+ - operationId: `list_data_columns_lists__list_id__data_columns_get` (also callable as `g8.api.call("list_data_columns_lists__list_id__data_columns_get", input)`)
966
+ - Tier: `read`: reads data; safe to call and to retry
967
+ - API-key scope: `lists:read`
968
+
969
+ The enrichment (waterfall), AI and dynamic columns this list carries.
970
+
971
+ Pass a row's `column_name_db` in `extra_fields` on `POST .../integrity-check`.
972
+
973
+ **Input**
974
+
975
+ | Field | Type | Required | Description |
976
+ |---|---|---|---|
977
+ | `path.list_id` | `integer` | yes | List (audience) id. |
978
+
979
+ **Returns** `ApiResponse_SequencerListPayload_`: the envelope `{ data: SequencerListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
980
+
981
+ Other envelope fields: `pagination` (PaginationMeta).
982
+
983
+ `SequencerListPayload` fields:
984
+
985
+ | Field | Type | Required | Description |
986
+ |---|---|---|---|
987
+ | `items` | `Array<unknown>` | no | |
988
+
989
+ **Example**
990
+
991
+ ```ts
992
+ const result = await g8.api.lists.listDataColumns({ path: { list_id: 1 } });
993
+ ```
994
+
995
+ ---
996
+
997
+ <a id="op-listlistfolders"></a>
998
+
999
+ ### `g8.api.lists.listListFolders(input?)`
1000
+
1001
+ **List List Folders**
1002
+
1003
+ - HTTP: `GET /api/v1/lists/folders`
1004
+ - operationId: `list_list_folders_lists_folders_get` (also callable as `g8.api.call("list_list_folders_lists_folders_get", input)`)
1005
+ - Tier: `read`: reads data; safe to call and to retry
1006
+ - API-key scope: `lists:read`
1007
+
1008
+ Folders the key's org owns, plus org-visible folders owned by teammates.
1009
+
1010
+ `assignments` maps list id -> folder id, which is what a rebuilt Lists
1011
+ screen needs to place each list without a second round trip.
1012
+
1013
+ The internal `list_folders` takes TWO different scope classes: a
1014
+ campaign_builder `service_scope` (carrying `.is_scoped`/`.allowed_list_ids`)
1015
+ and an audiences `visibility_scope`. They are resolved by distinct
1016
+ dependencies - passing one object as both raises AttributeError -> 500.
1017
+
1018
+ **Input**: none.
1019
+
1020
+ **Returns** `ApiResponse_ListFolderIndexResponse_`: the envelope `{ data: ListFolderIndexResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1021
+
1022
+ Other envelope fields: `pagination` (PaginationMeta).
1023
+
1024
+ `ListFolderIndexResponse` fields:
1025
+
1026
+ | Field | Type | Required | Description |
1027
+ |---|---|---|---|
1028
+ | `assignments` | `Record<string, string (uuid)>` | no | Map of list id -> folder id for every filed list. |
1029
+ | `folders` | `Array<ListFolderResponse>` | no | |
1030
+ | `shared_folders` | `Array<ListFolderResponse>` | no | |
1031
+ | `starred_ids` | `Array<integer>` | no | List ids the caller has starred. |
1032
+
1033
+ **Example**
1034
+
1035
+ ```ts
1036
+ const result = await g8.api.lists.listListFolders();
1037
+ ```
1038
+
1039
+ ---
1040
+
1041
+ <a id="op-listlists"></a>
1042
+
1043
+ ### `g8.api.lists.listLists(input?)`
1044
+
1045
+ **List Lists**
1046
+
1047
+ - HTTP: `GET /api/v1/lists`
1048
+ - operationId: `list_lists_lists_get` (also callable as `g8.api.call("list_lists_lists_get", input)`)
1049
+ - Tier: `read`: reads data; safe to call and to retry
1050
+ - API-key scope: `lists:read`
1051
+ - ★ Hand-written: [`g8.lists.list()`](../sdk-clients.md#g8-lists-list)
1052
+
1053
+ List all lists (audiences) in the organization.
1054
+
1055
+ **Input**
1056
+
1057
+ | Field | Type | Required | Description |
1058
+ |---|---|---|---|
1059
+ | `query.page` | `integer` | no | Page number (1-indexed) default `1` |
1060
+ | `query.limit` | `integer` | no | Items per page (max 200) default `50` |
1061
+
1062
+ **Returns** `ApiResponse_list_ListResponse__`: the envelope `{ data: Array<ListResponse>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1063
+
1064
+ Other envelope fields: `pagination` (PaginationMeta).
1065
+
1066
+ `ListResponse` fields:
1067
+
1068
+ | Field | Type | Required | Description |
1069
+ |---|---|---|---|
1070
+ | `id` | `integer` | yes | |
1071
+ | `title` | `string` | yes | |
1072
+ | `created_at` | `string (date-time) \| null` | no | |
1073
+ | `created_by` | `string \| null` | no | |
1074
+ | `description` | `string \| null` | no | Agent/human-readable note describing the list's purpose (#16641) |
1075
+ | `is_dynamic` | `boolean` | no | default `false` |
1076
+ | `source` | `string \| null` | no | Source of the list |
1077
+ | `status` | `string \| null` | no | |
1078
+ | `tags` | `Array<string>` | no | |
1079
+ | `total` | `integer` | no | default `0` |
1080
+ | `type` | `string \| null` | no | List type (contacts, companies, suppressions, deals, leads) |
1081
+ | `updated_at` | `string (date-time) \| null` | no | |
1082
+
1083
+ **Example**
1084
+
1085
+ ```ts
1086
+ const result = await g8.api.lists.listLists();
1087
+ ```
1088
+
1089
+ ---
1090
+
1091
+ <a id="op-listmasterlists"></a>
1092
+
1093
+ ### `g8.api.lists.listMasterLists(input?)`
1094
+
1095
+ **List Master Lists**
1096
+
1097
+ - HTTP: `GET /api/v1/lists/masters`
1098
+ - operationId: `list_master_lists_lists_masters_get` (also callable as `g8.api.call("list_master_lists_lists_masters_get", input)`)
1099
+ - Tier: `read`: reads data; safe to call and to retry
1100
+ - API-key scope: `lists:read`
1101
+
1102
+ Master lists: the ones that union other lists and stay in sync.
1103
+
1104
+ **Input**: none.
1105
+
1106
+ **Returns** `ApiResponse_ListCollectionPayload_`: the envelope `{ data: ListCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1107
+
1108
+ Other envelope fields: `pagination` (PaginationMeta).
1109
+
1110
+ `ListCollectionPayload` fields:
1111
+
1112
+ | Field | Type | Required | Description |
1113
+ |---|---|---|---|
1114
+ | `items` | `Array<unknown>` | no | |
1115
+
1116
+ **Example**
1117
+
1118
+ ```ts
1119
+ const result = await g8.api.lists.listMasterLists();
1120
+ ```
1121
+
1122
+ ---
1123
+
1124
+ <a id="op-patchdynamicvalue"></a>
1125
+
1126
+ ### `g8.api.lists.patchDynamicValue(input)`
1127
+
1128
+ **Patch Dynamic Value**
1129
+
1130
+ - HTTP: `PATCH /api/v1/lists/{audience_id}/dynamic-value`
1131
+ - operationId: `patch_dynamic_value_lists__audience_id__dynamic_value_patch` (also callable as `g8.api.call("patch_dynamic_value_lists__audience_id__dynamic_value_patch", input)`)
1132
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1133
+ - API-key scope: `lists:write`
1134
+
1135
+ Write ONE cell of a user-owned dynamic column.
1136
+
1137
+ Fail-closed: a protected, unknown, other-list or other-org destination is
1138
+ refused rather than written somewhere plausible.
1139
+
1140
+ Send `expected_value` to make the write conditional on the cell not having
1141
+ moved. Omit it and the write wins unconditionally, which on a shared grid
1142
+ means overwriting a colleague's edit without knowing.
1143
+
1144
+ **Input**
1145
+
1146
+ | Field | Type | Required | Description |
1147
+ |---|---|---|---|
1148
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1149
+ | `body` | `PatchDynamicValueRequest` | yes | Request body; fields below. |
1150
+
1151
+ Body fields (`PatchDynamicValueRequest`):
1152
+
1153
+ | Field | Type | Required | Description |
1154
+ |---|---|---|---|
1155
+ | `body.column_key` | `string` | yes | Dynamic column key, e.g. `udo_notes`. |
1156
+ | `body.object_type` | `"mashup_contacts" \| "mashup_companies"` | yes | |
1157
+ | `body.record_id` | `integer` | yes | Grid row id. |
1158
+ | `body.expected_value` | `unknown \| null` | no | Refuse the write unless the cell still holds this. Omit to force. |
1159
+ | `body.value` | `unknown \| null` | no | New value. Null CLEARS the cell. |
1160
+
1161
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1162
+
1163
+ Other envelope fields: `pagination` (PaginationMeta).
1164
+
1165
+ **Example**
1166
+
1167
+ ```ts
1168
+ const result = await g8.api.lists.patchDynamicValue({
1169
+ path: { audience_id: 123 },
1170
+ body: {
1171
+ column_key: "example",
1172
+ object_type: "mashup_contacts",
1173
+ record_id: 123,
1174
+ },
1175
+ });
1176
+ ```
1177
+
1178
+ ---
1179
+
1180
+ <a id="op-previewlistownertransfer"></a>
1181
+
1182
+ ### `g8.api.lists.previewListOwnerTransfer(input)`
1183
+
1184
+ **Preview List Owner Transfer**
1185
+
1186
+ - HTTP: `GET /api/v1/lists/{audience_id}/owner/preview`
1187
+ - operationId: `preview_list_owner_transfer_lists__audience_id__owner_preview_get` (also callable as `g8.api.call("preview_list_owner_transfer_lists__audience_id__owner_preview_get", input)`)
1188
+ - Tier: `read`: reads data; safe to call and to retry
1189
+ - API-key scope: `lists:read`
1190
+
1191
+ What a transfer WOULD do, before doing it. Changes nothing.
1192
+
1193
+ Worth calling first: `list_and_records` re-owns every record in the list,
1194
+ which can change who else can see them, and this says how many before you
1195
+ commit.
1196
+
1197
+ **Input**
1198
+
1199
+ | Field | Type | Required | Description |
1200
+ |---|---|---|---|
1201
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1202
+ | `query.new_owner_user_id` | `string` | yes | Candidate owner's PropelAuth user id. |
1203
+
1204
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1205
+
1206
+ Other envelope fields: `pagination` (PaginationMeta).
1207
+
1208
+ **Example**
1209
+
1210
+ ```ts
1211
+ const result = await g8.api.lists.previewListOwnerTransfer({ path: { audience_id: 123 }, query: { new_owner_user_id: "id" } });
1212
+ ```
1213
+
1214
+ ---
1215
+
1216
+ <a id="op-reassignlistowner"></a>
1217
+
1218
+ ### `g8.api.lists.reassignListOwner(input)`
1219
+
1220
+ **Reassign List Owner**
1221
+
1222
+ - HTTP: `PATCH /api/v1/lists/{audience_id}/owner`
1223
+ - operationId: `reassign_list_owner_lists__audience_id__owner_patch` (also callable as `g8.api.call("reassign_list_owner_lists__audience_id__owner_patch", input)`)
1224
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1225
+ - API-key scope: `lists:write`
1226
+
1227
+ Hand a list to someone else.
1228
+
1229
+ `mode="list_and_records"` ALSO re-owns every record in the list. Under
1230
+ record-level scoping that changes who can see them, so preview it first.
1231
+
1232
+ This route carries no `verify_list_access_dep` in the app - the transfer
1233
+ rules are enforced inside the handler instead, and they are stricter than
1234
+ the per-list read gate rather than weaker.
1235
+
1236
+ **Input**
1237
+
1238
+ | Field | Type | Required | Description |
1239
+ |---|---|---|---|
1240
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1241
+ | `body` | `ReassignListOwnerRequest` | yes | Request body; fields below. |
1242
+
1243
+ Body fields (`ReassignListOwnerRequest`):
1244
+
1245
+ | Field | Type | Required | Description |
1246
+ |---|---|---|---|
1247
+ | `body.owner_email` | `string (email)` | yes | Must agree with the user id - the app verifies both. Typed as an email at the request layer because the app's model is `EmailStr` and is built inside the handler: a malformed address would otherwise raise there and escape as a 500 rather than a 422. |
1248
+ | `body.owner_user_id` | `string` | yes | min length 1, max length 255 |
1249
+ | `body.mode` | `"list_only" \| "list_and_records"` | no | `list_only` moves just the list. `list_and_records` also re-owns every record in it, which can change who else can see them. default `"list_only"` |
1250
+
1251
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1252
+
1253
+ Other envelope fields: `pagination` (PaginationMeta).
1254
+
1255
+ **Example**
1256
+
1257
+ ```ts
1258
+ const result = await g8.api.lists.reassignListOwner({
1259
+ path: { audience_id: 123 },
1260
+ body: { owner_email: "jane@acme.com", owner_user_id: "id" },
1261
+ });
1262
+ ```
1263
+
1264
+ ---
1265
+
1266
+ <a id="op-recordlistopened"></a>
1267
+
1268
+ ### `g8.api.lists.recordListOpened(input)`
1269
+
1270
+ **Record List Opened**
1271
+
1272
+ - HTTP: `POST /api/v1/lists/folders/activity/{audience_id}`
1273
+ - operationId: `record_list_opened_lists_folders_activity__audience_id__post` (also callable as `g8.api.call("record_list_opened_lists_folders_activity__audience_id__post", input)`)
1274
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1275
+ - API-key scope: `lists:write`
1276
+
1277
+ Record that this key opened a list, for the "recent" shelf. FREE.
1278
+
1279
+ Recents come back in `GET /lists/folders` as `recent_items`, most recent
1280
+ first. A list the key cannot see is a 404.
1281
+
1282
+ **Input**
1283
+
1284
+ | Field | Type | Required | Description |
1285
+ |---|---|---|---|
1286
+ | `path.audience_id` | `integer` | yes | The list (audience) id. |
1287
+
1288
+ **Returns**: no JSON body is declared for the success response.
1289
+
1290
+ **Example**
1291
+
1292
+ ```ts
1293
+ const result = await g8.api.lists.recordListOpened({ path: { audience_id: 123 } });
1294
+ ```
1295
+
1296
+ ---
1297
+
1298
+ <a id="op-refreshdynamiclist"></a>
1299
+
1300
+ ### `g8.api.lists.refreshDynamicList(input)`
1301
+
1302
+ **Refresh Dynamic List**
1303
+
1304
+ - HTTP: `POST /api/v1/lists/{audience_id}/refresh`
1305
+ - operationId: `refresh_dynamic_list_lists__audience_id__refresh_post` (also callable as `g8.api.call("refresh_dynamic_list_lists__audience_id__refresh_post", input)`)
1306
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1307
+ - API-key scope: `lists:write`
1308
+
1309
+ Re-run a dynamic list's query now.
1310
+
1311
+ Membership can go DOWN as well as up: a record that no longer matches
1312
+ leaves. Only meaningful for a list created with `is_dynamic`.
1313
+
1314
+ **Input**
1315
+
1316
+ | Field | Type | Required | Description |
1317
+ |---|---|---|---|
1318
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1319
+
1320
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1321
+
1322
+ Other envelope fields: `pagination` (PaginationMeta).
1323
+
1324
+ **Example**
1325
+
1326
+ ```ts
1327
+ const result = await g8.api.lists.refreshDynamicList({ path: { audience_id: 123 } });
1328
+ ```
1329
+
1330
+ ---
1331
+
1332
+ <a id="op-refreshmasterlistnow"></a>
1333
+
1334
+ ### `g8.api.lists.refreshMasterListNow(input)`
1335
+
1336
+ **Refresh Master List Now**
1337
+
1338
+ - HTTP: `POST /api/v1/lists/{audience_id}/master-refresh`
1339
+ - operationId: `refresh_master_list_now_lists__audience_id__master_refresh_post` (also callable as `g8.api.call("refresh_master_list_now_lists__audience_id__master_refresh_post", input)`)
1340
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1341
+ - API-key scope: `lists:write`
1342
+
1343
+ Re-sync a master list from its sources now. Returns add/remove counts.
1344
+
1345
+ **Input**
1346
+
1347
+ | Field | Type | Required | Description |
1348
+ |---|---|---|---|
1349
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1350
+
1351
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1352
+
1353
+ Other envelope fields: `pagination` (PaginationMeta).
1354
+
1355
+ **Example**
1356
+
1357
+ ```ts
1358
+ const result = await g8.api.lists.refreshMasterListNow({ path: { audience_id: 123 } });
1359
+ ```
1360
+
1361
+ ---
1362
+
1363
+ <a id="op-removecontactsfromlist"></a>
1364
+
1365
+ ### `g8.api.lists.removeContactsFromList(input)`
1366
+
1367
+ **Remove Contacts From List**
1368
+
1369
+ - HTTP: `DELETE /api/v1/lists/{list_id}/contacts`
1370
+ - operationId: `remove_contacts_from_list_lists__list_id__contacts_delete` (also callable as `g8.api.call("remove_contacts_from_list_lists__list_id__contacts_delete", input)`)
1371
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
1372
+ - API-key scope: `lists:delete`
1373
+ - ★ Hand-written: [`g8.lists.removeContacts()`](../sdk-clients.md#g8-lists-removecontacts)
1374
+
1375
+ Remove contacts from a list.
1376
+
1377
+ **Input**
1378
+
1379
+ | Field | Type | Required | Description |
1380
+ |---|---|---|---|
1381
+ | `path.list_id` | `integer` | yes | List ID |
1382
+ | `body` | `RemoveContactsFromListRequest` | yes | Request body; fields below. |
1383
+
1384
+ Body fields (`RemoveContactsFromListRequest`):
1385
+
1386
+ | Field | Type | Required | Description |
1387
+ |---|---|---|---|
1388
+ | `body.contact_ids` | `Array<integer>` | yes | List of contact IDs to remove |
1389
+
1390
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1391
+
1392
+ Other envelope fields: `pagination` (PaginationMeta).
1393
+
1394
+ **Example**
1395
+
1396
+ ```ts
1397
+ // destructive: deletes or archives data; confirm with a human before calling.
1398
+ const result = await g8.api.lists.removeContactsFromList({ path: { list_id: 123 }, body: { contact_ids: [123] } });
1399
+ ```
1400
+
1401
+ ---
1402
+
1403
+ <a id="op-starlist"></a>
1404
+
1405
+ ### `g8.api.lists.starList(input)`
1406
+
1407
+ **Star List**
1408
+
1409
+ - HTTP: `PUT /api/v1/lists/folders/stars/{audience_id}`
1410
+ - operationId: `star_list_lists_folders_stars__audience_id__put` (also callable as `g8.api.call("star_list_lists_folders_stars__audience_id__put", input)`)
1411
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1412
+ - API-key scope: `lists:write`
1413
+
1414
+ Star or unstar a list for this key. FREE.
1415
+
1416
+ Starred ids come back in `GET /lists/folders` as `starred_ids`. A list the
1417
+ key cannot see is a 404.
1418
+
1419
+ **Input**
1420
+
1421
+ | Field | Type | Required | Description |
1422
+ |---|---|---|---|
1423
+ | `path.audience_id` | `integer` | yes | The list (audience) id. |
1424
+ | `body` | `ListStarRequest` | yes | Request body; fields below. |
1425
+
1426
+ Body fields (`ListStarRequest`):
1427
+
1428
+ | Field | Type | Required | Description |
1429
+ |---|---|---|---|
1430
+ | `body.starred` | `boolean` | yes | True to star, false to unstar. |
1431
+
1432
+ **Returns**: no JSON body is declared for the success response.
1433
+
1434
+ **Example**
1435
+
1436
+ ```ts
1437
+ const result = await g8.api.lists.starList({ path: { audience_id: 123 }, body: { starred: true } });
1438
+ ```
1439
+
1440
+ ---
1441
+
1442
+ <a id="op-updatelist"></a>
1443
+
1444
+ ### `g8.api.lists.updateList(input)`
1445
+
1446
+ **Update List**
1447
+
1448
+ - HTTP: `PATCH /api/v1/lists/{list_id}`
1449
+ - operationId: `update_list_lists__list_id__patch` (also callable as `g8.api.call("update_list_lists__list_id__patch", input)`)
1450
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1451
+ - API-key scope: `lists:write`
1452
+
1453
+ Update a list's name and/or its agent-readable description (#16641).
1454
+
1455
+ **Input**
1456
+
1457
+ | Field | Type | Required | Description |
1458
+ |---|---|---|---|
1459
+ | `path.list_id` | `integer` | yes | List ID |
1460
+ | `body` | `ListUpdateRequest` | yes | Request body; fields below. |
1461
+
1462
+ Body fields (`ListUpdateRequest`):
1463
+
1464
+ | Field | Type | Required | Description |
1465
+ |---|---|---|---|
1466
+ | `body.title` | `string` | yes | New name for the list min length 1 |
1467
+ | `body.description` | `string \| null` | no | New purpose note for the list (#16641). Omit to leave the current description unchanged; send an empty string to clear it. max length 2000 |
1468
+
1469
+ **Returns** `ApiResponse_ListResponse_`: the envelope `{ data: ListResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1470
+
1471
+ Other envelope fields: `pagination` (PaginationMeta).
1472
+
1473
+ `ListResponse` fields:
1474
+
1475
+ | Field | Type | Required | Description |
1476
+ |---|---|---|---|
1477
+ | `id` | `integer` | yes | |
1478
+ | `title` | `string` | yes | |
1479
+ | `created_at` | `string (date-time) \| null` | no | |
1480
+ | `created_by` | `string \| null` | no | |
1481
+ | `description` | `string \| null` | no | Agent/human-readable note describing the list's purpose (#16641) |
1482
+ | `is_dynamic` | `boolean` | no | default `false` |
1483
+ | `source` | `string \| null` | no | Source of the list |
1484
+ | `status` | `string \| null` | no | |
1485
+ | `tags` | `Array<string>` | no | |
1486
+ | `total` | `integer` | no | default `0` |
1487
+ | `type` | `string \| null` | no | List type (contacts, companies, suppressions, deals, leads) |
1488
+ | `updated_at` | `string (date-time) \| null` | no | |
1489
+
1490
+ **Example**
1491
+
1492
+ ```ts
1493
+ const result = await g8.api.lists.updateList({ path: { list_id: 123 }, body: { title: "Example" } });
1494
+ ```
1495
+
1496
+ ---
1497
+
1498
+ <a id="op-updatelistfolder"></a>
1499
+
1500
+ ### `g8.api.lists.updateListFolder(input)`
1501
+
1502
+ **Update List Folder**
1503
+
1504
+ - HTTP: `PATCH /api/v1/lists/folders/{folder_id}`
1505
+ - operationId: `update_list_folder_lists_folders__folder_id__patch` (also callable as `g8.api.call("update_list_folder_lists_folders__folder_id__patch", input)`)
1506
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1507
+ - API-key scope: `lists:write`
1508
+
1509
+ Rename a folder or change its visibility. Omitted fields are untouched.
1510
+
1511
+ **Input**
1512
+
1513
+ | Field | Type | Required | Description |
1514
+ |---|---|---|---|
1515
+ | `path.folder_id` | `string (uuid)` | yes | Folder id. |
1516
+ | `body` | `ListFolderUpdateRequest` | yes | Request body; fields below. |
1517
+
1518
+ Body fields (`ListFolderUpdateRequest`):
1519
+
1520
+ | Field | Type | Required | Description |
1521
+ |---|---|---|---|
1522
+ | `body.title` | `string \| null` | no | min length 1, max length 120 |
1523
+ | `body.visibility` | `"private" \| "org" \| null` | no | |
1524
+
1525
+ **Returns** `ApiResponse_ListFolderResponse_`: the envelope `{ data: ListFolderResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1526
+
1527
+ Other envelope fields: `pagination` (PaginationMeta).
1528
+
1529
+ `ListFolderResponse` fields:
1530
+
1531
+ | Field | Type | Required | Description |
1532
+ |---|---|---|---|
1533
+ | `created_by` | `string` | yes | User id that created the folder. |
1534
+ | `id` | `string (uuid)` | yes | Folder id. |
1535
+ | `is_owner` | `boolean` | yes | True when the calling key's org owns the folder. |
1536
+ | `list_count` | `integer` | yes | Number of lists currently filed in this folder. |
1537
+ | `title` | `string` | yes | Display title. |
1538
+ | `visibility` | `string` | yes | `private` (owner only) or `org` (browse-only for teammates). |
1539
+ | `created_at` | `string (date-time) \| null` | no | |
1540
+ | `updated_at` | `string (date-time) \| null` | no | |
1541
+
1542
+ **Example**
1543
+
1544
+ ```ts
1545
+ const result = await g8.api.lists.updateListFolder({
1546
+ path: { folder_id: "00000000-0000-0000-0000-000000000000" },
1547
+ body: {},
1548
+ });
1549
+ ```
1550
+
1551
+ ---
1552
+
1553
+ <a id="op-updatemasterlistconfig"></a>
1554
+
1555
+ ### `g8.api.lists.updateMasterListConfig(input)`
1556
+
1557
+ **Update Master List Config**
1558
+
1559
+ - HTTP: `PATCH /api/v1/lists/{audience_id}/master-config`
1560
+ - operationId: `update_master_list_config_lists__audience_id__master_config_patch` (also callable as `g8.api.call("update_master_list_config_lists__audience_id__master_config_patch", input)`)
1561
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1562
+ - API-key scope: `lists:write`
1563
+
1564
+ Replace a master list's sources.
1565
+
1566
+ A REPLACE, not a merge: a source you omit stops feeding the list. The
1567
+ config is saved synchronously and the re-sync runs afterwards, so a 200
1568
+ means the config is stored, not that membership has caught up.
1569
+
1570
+ **Input**
1571
+
1572
+ | Field | Type | Required | Description |
1573
+ |---|---|---|---|
1574
+ | `path.audience_id` | `integer` | yes | List (audience) id. |
1575
+ | `body` | `UpdateMasterListConfigRequest` | yes | Request body; fields below. |
1576
+
1577
+ Body fields (`UpdateMasterListConfigRequest`):
1578
+
1579
+ | Field | Type | Required | Description |
1580
+ |---|---|---|---|
1581
+ | `body.include_all_sources` | `boolean` | no | default `false` |
1582
+ | `body.source_list_ids` | `Array<integer>` | no | |
1583
+
1584
+ **Returns** `ApiResponse_ListPayload_`: the envelope `{ data: ListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1585
+
1586
+ Other envelope fields: `pagination` (PaginationMeta).
1587
+
1588
+ **Example**
1589
+
1590
+ ```ts
1591
+ const result = await g8.api.lists.updateMasterListConfig({ path: { audience_id: 123 }, body: {} });
1592
+ ```
1593
+
1594
+ ---
1595
+
1596
+ ## Referenced types
1597
+
1598
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
1599
+
1600
+ <a id="type-listperformanceitem"></a>
1601
+
1602
+ ### `ListPerformanceItem`
1603
+
1604
+ Per-list engagement counters. Fields mirror the app's own item.
1605
+
1606
+ | Field | Type | Required | Description |
1607
+ |---|---|---|---|
1608
+ | `list_id` | `integer \| null` | no | |
1609
+ | `title` | `string \| null` | no | |