@graph8/sdk 0.251.0 → 0.262.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 +9 -2
  2. package/dist/cli.js +216 -0
  3. package/dist/index.d.mts +105 -7
  4. package/dist/index.d.ts +105 -7
  5. package/dist/index.js +44 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +44 -3
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/react.d.mts +103 -7
  10. package/dist/react.d.ts +103 -7
  11. package/dist/react.js +62 -11
  12. package/dist/react.js.map +1 -1
  13. package/dist/react.mjs +53 -12
  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 +1697 -0
  140. package/docs/api/deals.md +2436 -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,2173 @@
1
+ /* Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. */
2
+
3
+ /**
4
+ * Types for `g8.api.contacts` (Contacts): 70 operations.
5
+ *
6
+ * For reading. In code, import from the package instead:
7
+ * import type { ApiInput, ApiOutput, G8Contract } from "@graph8/sdk";
8
+ * type In = ApiInput<"assign_contact_owner_contacts_assign_owner_post">;
9
+ *
10
+ * Reference with examples: contacts.md
11
+ */
12
+ /* eslint-disable */
13
+
14
+ /** `g8.api.contacts.<member>` -> the operationId it calls. */
15
+ export interface ContactsMembers {
16
+ assignContactOwner: "assign_contact_owner_contacts_assign_owner_post";
17
+ assignContactTags: "assign_contact_tags_contacts_tags_assign_post";
18
+ batchContactRelated: "batch_contact_related_contacts_related_post";
19
+ bulkGetContacts: "bulk_get_contacts_contacts_bulk_get_post";
20
+ bulkUpdateContacts: "bulk_update_contacts_contacts_bulk_update_post";
21
+ cancelRecordWorkflowExecution: "cancel_record_workflow_execution_contacts_workflow_executions__execution_id__cancel_post";
22
+ createContactColumn: "create_contact_column_contacts_columns_create_post";
23
+ createContactTag: "create_contact_tag_contacts_tags_post";
24
+ createContacts: "create_contacts_contacts_post";
25
+ decideRecordWorkflowExecution: "decide_record_workflow_execution_contacts_workflow_executions__execution_id__approve_post";
26
+ deleteContact: "delete_contact_contacts__contact_id__delete";
27
+ deleteContactColumn: "delete_contact_column_contacts_columns__column_id__delete";
28
+ deleteContactDocument: "delete_contact_document_contacts__contact_id__documents__document_id__delete";
29
+ deleteContactTag: "delete_contact_tag_contacts_tags__tag_id__delete";
30
+ fetchContacts: "fetch_contacts_contacts_fetch_post";
31
+ generateAllContactDocuments: "generate_all_contact_documents_contacts__contact_id__documents_generate_all_post";
32
+ generateContactDocument: "generate_contact_document_contacts__contact_id__documents_types__doc_type__generate_post";
33
+ getActivityFeed: "get_activity_feed_activity_feed_get";
34
+ getContact: "get_contact_contacts__contact_id__get";
35
+ getContactAnalysis: "get_contact_analysis_contacts__contact_id__analysis_get";
36
+ getContactDashboard: "get_contact_dashboard_contacts__contact_id__dashboard_get";
37
+ getContactDashboardStats: "get_contact_dashboard_stats_contacts_dashboard_stats_get";
38
+ getContactDetail: "get_contact_detail_contacts__contact_id__detail_get";
39
+ getContactDocument: "get_contact_document_contacts__contact_id__documents_types__doc_type__get";
40
+ getContactEngagementSummary: "get_contact_engagement_summary_contacts__contact_id__engagement_summary_get";
41
+ getContactFormFields: "get_contact_form_fields_contacts_form_fields_get";
42
+ getContactGenerationStatus: "get_contact_generation_status_contacts__contact_id__documents_generation_status_get";
43
+ getContactLists: "get_contact_lists_contacts__contact_id__lists_get";
44
+ getContactMeetings: "get_contact_meetings_contacts__contact_id__meetings_get";
45
+ getContactNextBestStep: "get_contact_next_best_step_contacts__contact_id__next_best_step_get";
46
+ getContactProfilePictures: "get_contact_profile_pictures_contacts_profile_pictures_post";
47
+ getContactRowDetail: "get_contact_row_detail_contacts_row_detail__record_id__get";
48
+ getContactSequences: "get_contact_sequences_contacts__contact_id__sequences_get";
49
+ getContactSignals: "get_contact_signals_contacts__contact_id__signals_get";
50
+ getContactSitesVisited: "get_contact_sites_visited_contacts__contact_id__sites_visited_get";
51
+ getContactTagIds: "get_contact_tag_ids_contacts__contact_id__tags_get";
52
+ getDuplicateSettings: "get_duplicate_settings_duplicates_settings_get";
53
+ getRecordColumnValues: "get_record_column_values_contacts_column_values_post";
54
+ listBaseColumns: "list_base_columns_contacts_base_columns_get";
55
+ listColumnNames: "list_column_names_contacts_column_names_get";
56
+ listContactColumnDefinitions: "list_contact_column_definitions_contacts_column_definitions_get";
57
+ listContactColumns: "list_contact_columns_contacts_columns_get";
58
+ listContactDocuments: "list_contact_documents_contacts__contact_id__documents_get";
59
+ listContactTags: "list_contact_tags_contacts_tags_get";
60
+ listContacts: "list_contacts_contacts_get";
61
+ listCustomColumnDefinitions: "list_custom_column_definitions_contacts_custom_column_definitions_get";
62
+ listDuplicateDetectionRuns: "list_duplicate_detection_runs_duplicates_detection_runs_get";
63
+ listRecordWorkflowExecutions: "list_record_workflow_executions_contacts_workflow_executions_get";
64
+ listSearchableFields: "list_searchable_fields_contacts_searchable_fields_get";
65
+ mergeContact: "merge_contact_contacts__contact_id__merge_post";
66
+ mergeContactTags: "merge_contact_tags_contacts_tags_merge_post";
67
+ mergeFilteredContacts: "merge_filtered_contacts_contacts_merge_filtered_post";
68
+ pauseRecordWorkflowExecution: "pause_record_workflow_execution_contacts_workflow_executions__execution_id__pause_post";
69
+ previewContactMerge: "preview_contact_merge_contacts__contact_id__merge_preview_get";
70
+ previewDetectionRule: "preview_detection_rule_duplicates_settings_preview_detection_rule_post";
71
+ regenerateContactDocument: "regenerate_contact_document_contacts__contact_id__documents_types__doc_type__regenerate_post";
72
+ resumeRecordWorkflowExecution: "resume_record_workflow_execution_contacts_workflow_executions__execution_id__resume_post";
73
+ runDuplicateDetection: "run_duplicate_detection_duplicates_detection_run_post";
74
+ runRecordWorkflow: "run_record_workflow_contacts_workflow_executions_run_post";
75
+ saveSkillResultToContact: "save_skill_result_to_contact_contacts__contact_id__documents_from_skill_post";
76
+ triggerAutoMerge: "trigger_auto_merge_duplicates_auto_merge_post";
77
+ unassignContactTags: "unassign_contact_tags_contacts_tags_unassign_post";
78
+ unlockContactInfo: "unlock_contact_info_contacts_unlock_info_post";
79
+ updateContact: "update_contact_contacts__contact_id__patch";
80
+ updateContactDocument: "update_contact_document_contacts__contact_id__documents__document_id__put";
81
+ updateContactTag: "update_contact_tag_contacts_tags__tag_id__patch";
82
+ updateDuplicateSettings: "update_duplicate_settings_duplicates_settings_put";
83
+ verifyContactEmails: "verify_contact_emails_contacts_verify_email_post";
84
+ verifyContactEmailsAsync: "verify_contact_emails_async_contacts_verify_email_async_post";
85
+ withdrawContactsFromSequences: "withdraw_contacts_from_sequences_contacts_withdraw_from_sequences_post";
86
+ }
87
+
88
+ /** Input and output of every `g8.api.contacts` operation, keyed by operationId. */
89
+ export interface ContactsOperations {
90
+ /**
91
+ * POST /contacts/assign-owner
92
+ * Assign Contact Owner
93
+ * tier: write · scope: contacts:write
94
+ */
95
+ assign_contact_owner_contacts_assign_owner_post: {
96
+ input: {
97
+ headers?: {
98
+ "X-Target-Org-Id"?: string | null;
99
+ };
100
+ body: AssignOwnerMatchingRequest;
101
+ };
102
+ output: ApiResponse_CrmRecordPayload_;
103
+ };
104
+ /**
105
+ * POST /contacts/tags/assign
106
+ * Assign Contact Tags
107
+ * tier: write · scope: contacts:write
108
+ */
109
+ assign_contact_tags_contacts_tags_assign_post: {
110
+ input: {
111
+ headers?: {
112
+ "X-Target-Org-Id"?: string | null;
113
+ };
114
+ body: ContactTagAssignRequest;
115
+ };
116
+ output: ApiResponse_ContactTagWriteResult_;
117
+ };
118
+ /**
119
+ * POST /contacts/related
120
+ * Batch Contact Related
121
+ * tier: read · scope: contacts:read
122
+ */
123
+ batch_contact_related_contacts_related_post: {
124
+ input: {
125
+ headers?: {
126
+ "X-Target-Org-Id"?: string | null;
127
+ };
128
+ body: ContactRelatedBatchRequest;
129
+ };
130
+ output: ApiResponse_ContactRelatedBatchResponse_;
131
+ };
132
+ /**
133
+ * POST /contacts/bulk-get
134
+ * Bulk Get Contacts
135
+ * tier: read · scope: contacts:read
136
+ */
137
+ bulk_get_contacts_contacts_bulk_get_post: {
138
+ input: {
139
+ headers?: {
140
+ "X-Target-Org-Id"?: string | null;
141
+ };
142
+ body: ContactBulkGetRequest;
143
+ };
144
+ output: ApiResponse_ContactBulkGetResponse_;
145
+ };
146
+ /**
147
+ * POST /contacts/bulk-update
148
+ * Bulk Update Contacts
149
+ * tier: write · scope: contacts:write
150
+ */
151
+ bulk_update_contacts_contacts_bulk_update_post: {
152
+ input: {
153
+ headers?: {
154
+ "X-Target-Org-Id"?: string | null;
155
+ };
156
+ body: Array<Record<string, unknown>>;
157
+ };
158
+ output: ApiResponse_CrmRecordPayload_;
159
+ };
160
+ /**
161
+ * POST /contacts/workflow-executions/{execution_id}/cancel
162
+ * Cancel Record Workflow Execution
163
+ * tier: destructive · scope: contacts:delete
164
+ */
165
+ cancel_record_workflow_execution_contacts_workflow_executions__execution_id__cancel_post: {
166
+ input: {
167
+ path: {
168
+ /** Workflow execution id. */
169
+ execution_id: string;
170
+ };
171
+ headers?: {
172
+ "X-Target-Org-Id"?: string | null;
173
+ };
174
+ };
175
+ output: ApiResponse_CrmRecordPayload_;
176
+ };
177
+ /**
178
+ * POST /contacts/columns/create
179
+ * Create Contact Column
180
+ * tier: write · scope: contacts:write
181
+ */
182
+ create_contact_column_contacts_columns_create_post: {
183
+ input: {
184
+ headers?: {
185
+ "X-Target-Org-Id"?: string | null;
186
+ };
187
+ body: CreateContactColumnRequest;
188
+ };
189
+ output: ApiResponse_CreateContactColumnResponse_;
190
+ };
191
+ /**
192
+ * POST /contacts/tags
193
+ * Create Contact Tag
194
+ * tier: write · scope: contacts:write
195
+ */
196
+ create_contact_tag_contacts_tags_post: {
197
+ input: {
198
+ headers?: {
199
+ "X-Target-Org-Id"?: string | null;
200
+ };
201
+ body: ContactTagCreateRequest;
202
+ };
203
+ output: ApiResponse_ContactTag_;
204
+ };
205
+ /**
206
+ * POST /contacts
207
+ * Create Contacts
208
+ * tier: write · scope: contacts:write
209
+ */
210
+ create_contacts_contacts_post: {
211
+ input: {
212
+ headers?: {
213
+ /** Optional. Retrying a create with the same key returns the first response instead of creating a duplicate (cached 24h). Omit for the existing non-idempotent behavior. */
214
+ "Idempotency-Key"?: string | null;
215
+ "X-Target-Org-Id"?: string | null;
216
+ };
217
+ body: ContactCreateRequest;
218
+ };
219
+ output: ApiResponse_ContactCreateResponse_;
220
+ };
221
+ /**
222
+ * POST /contacts/workflow-executions/{execution_id}/approve
223
+ * Decide Record Workflow Execution
224
+ * tier: write · scope: contacts:write
225
+ */
226
+ decide_record_workflow_execution_contacts_workflow_executions__execution_id__approve_post: {
227
+ input: {
228
+ path: {
229
+ /** Workflow execution id. */
230
+ execution_id: string;
231
+ };
232
+ headers?: {
233
+ "X-Target-Org-Id"?: string | null;
234
+ };
235
+ body: ApproveExecutionRequest;
236
+ };
237
+ output: ApiResponse_CrmRecordPayload_;
238
+ };
239
+ /**
240
+ * DELETE /contacts/{contact_id}
241
+ * Delete Contact
242
+ * tier: destructive · scope: contacts:delete
243
+ */
244
+ delete_contact_contacts__contact_id__delete: {
245
+ input: {
246
+ path: {
247
+ /** Contact ID */
248
+ contact_id: number;
249
+ };
250
+ headers?: {
251
+ "X-Target-Org-Id"?: string | null;
252
+ };
253
+ };
254
+ output: ApiResponse_dict_;
255
+ };
256
+ /**
257
+ * DELETE /contacts/columns/{column_id}
258
+ * Delete Contact Column
259
+ * tier: destructive · scope: contacts:delete
260
+ */
261
+ delete_contact_column_contacts_columns__column_id__delete: {
262
+ input: {
263
+ path: {
264
+ /** ID of the column to delete */
265
+ column_id: number;
266
+ };
267
+ headers?: {
268
+ "X-Target-Org-Id"?: string | null;
269
+ };
270
+ };
271
+ output: ApiResponse_dict_;
272
+ };
273
+ /**
274
+ * DELETE /contacts/{contact_id}/documents/{document_id}
275
+ * Delete Contact Document
276
+ * tier: destructive · scope: contacts:delete
277
+ */
278
+ delete_contact_document_contacts__contact_id__documents__document_id__delete: {
279
+ input: {
280
+ path: {
281
+ /** Contact id. */
282
+ contact_id: number;
283
+ /** Document id. */
284
+ document_id: string;
285
+ };
286
+ headers?: {
287
+ "X-Target-Org-Id"?: string | null;
288
+ };
289
+ };
290
+ output: ApiResponse_CrmRecordPayload_;
291
+ };
292
+ /**
293
+ * DELETE /contacts/tags/{tag_id}
294
+ * Delete Contact Tag
295
+ * tier: destructive · scope: contacts:delete
296
+ */
297
+ delete_contact_tag_contacts_tags__tag_id__delete: {
298
+ input: {
299
+ path: {
300
+ /** Tag id. */
301
+ tag_id: string;
302
+ };
303
+ query?: {
304
+ /** Move every assignment to this tag before deleting. Omit to drop the assignments with the tag. */
305
+ reassign_to?: string | null;
306
+ };
307
+ headers?: {
308
+ "X-Target-Org-Id"?: string | null;
309
+ };
310
+ };
311
+ output: ApiResponse_ContactTagWriteResult_;
312
+ };
313
+ /**
314
+ * POST /contacts/fetch
315
+ * Fetch Contacts
316
+ * tier: read · scope: contacts:read
317
+ */
318
+ fetch_contacts_contacts_fetch_post: {
319
+ input: {
320
+ headers?: {
321
+ "X-Target-Org-Id"?: string | null;
322
+ };
323
+ body: FetchContactsRequest;
324
+ };
325
+ output: ApiResponse_CrmCollectionPayload_;
326
+ };
327
+ /**
328
+ * POST /contacts/{contact_id}/documents/generate-all
329
+ * Generate All Contact Documents
330
+ * tier: billable · scope: enrichment:run
331
+ */
332
+ generate_all_contact_documents_contacts__contact_id__documents_generate_all_post: {
333
+ input: {
334
+ path: {
335
+ /** Contact primary key. */
336
+ contact_id: number;
337
+ };
338
+ headers?: {
339
+ "X-Target-Org-Id"?: string | null;
340
+ };
341
+ };
342
+ output: ApiResponse_CrmRecordPayload_;
343
+ };
344
+ /**
345
+ * POST /contacts/{contact_id}/documents/types/{doc_type}/generate
346
+ * Generate Contact Document
347
+ * tier: billable · scope: enrichment:run
348
+ */
349
+ generate_contact_document_contacts__contact_id__documents_types__doc_type__generate_post: {
350
+ input: {
351
+ path: {
352
+ /** Contact id. */
353
+ contact_id: number;
354
+ /** Document type. */
355
+ doc_type: string;
356
+ };
357
+ headers?: {
358
+ "X-Target-Org-Id"?: string | null;
359
+ };
360
+ };
361
+ output: ApiResponse_CrmRecordPayload_;
362
+ };
363
+ /**
364
+ * GET /activity-feed
365
+ * Get Activity Feed
366
+ * tier: read · scope: contacts:read
367
+ */
368
+ get_activity_feed_activity_feed_get: {
369
+ input: {
370
+ query: {
371
+ /** contact | company | deal | team_member */
372
+ entity_type: string;
373
+ /** Id of that record. */
374
+ entity_id: string;
375
+ /** Comma-separated subset of task,note,email,call,meeting,sms,chat,stage_change,quote,record_change,deal. Omit for all. */
376
+ types?: string | null;
377
+ /** manual | crm | system | dialer | automation | api | all */
378
+ source?: string;
379
+ /** ISO 8601 cursor; returns events at or after it. */
380
+ since?: string | null;
381
+ limit?: number;
382
+ };
383
+ headers?: {
384
+ "X-Target-Org-Id"?: string | null;
385
+ };
386
+ };
387
+ output: ApiResponse_CrmCollectionPayload_;
388
+ };
389
+ /**
390
+ * GET /contacts/{contact_id}
391
+ * Get Contact
392
+ * tier: read · scope: contacts:read
393
+ */
394
+ get_contact_contacts__contact_id__get: {
395
+ input: {
396
+ path: {
397
+ /** Contact ID */
398
+ contact_id: number;
399
+ };
400
+ query?: {
401
+ /** When true, the response includes a `custom_fields` object of custom column values keyed by column slug. Default false omits it. */
402
+ include_custom_fields?: boolean;
403
+ };
404
+ headers?: {
405
+ "X-Target-Org-Id"?: string | null;
406
+ };
407
+ };
408
+ output: ApiResponse_ContactResponse_;
409
+ };
410
+ /**
411
+ * GET /contacts/{contact_id}/analysis
412
+ * Get Contact Analysis
413
+ * tier: read · scope: contacts:read
414
+ */
415
+ get_contact_analysis_contacts__contact_id__analysis_get: {
416
+ input: {
417
+ path: {
418
+ /** Contact id. */
419
+ contact_id: number;
420
+ };
421
+ headers?: {
422
+ "X-Target-Org-Id"?: string | null;
423
+ };
424
+ };
425
+ output: ApiResponse_CrmRecordPayload_;
426
+ };
427
+ /**
428
+ * GET /contacts/{contact_id}/dashboard
429
+ * Get Contact Dashboard
430
+ * tier: read · scope: contacts:read
431
+ */
432
+ get_contact_dashboard_contacts__contact_id__dashboard_get: {
433
+ input: {
434
+ path: {
435
+ /** Contact primary key. */
436
+ contact_id: number;
437
+ };
438
+ headers?: {
439
+ "X-Target-Org-Id"?: string | null;
440
+ };
441
+ };
442
+ output: ApiResponse_CrmRecordPayload_;
443
+ };
444
+ /**
445
+ * GET /contacts/dashboard-stats
446
+ * Get Contact Dashboard Stats
447
+ * tier: read · scope: contacts:read
448
+ */
449
+ get_contact_dashboard_stats_contacts_dashboard_stats_get: {
450
+ input: {
451
+ headers?: {
452
+ "X-Target-Org-Id"?: string | null;
453
+ };
454
+ };
455
+ output: ApiResponse_CrmRecordPayload_;
456
+ };
457
+ /**
458
+ * GET /contacts/{contact_id}/detail
459
+ * Get Contact Detail
460
+ * tier: read · scope: contacts:read
461
+ */
462
+ get_contact_detail_contacts__contact_id__detail_get: {
463
+ input: {
464
+ path: {
465
+ /** Contact id. */
466
+ contact_id: number;
467
+ };
468
+ headers?: {
469
+ "X-Target-Org-Id"?: string | null;
470
+ };
471
+ };
472
+ output: ApiResponse_CrmRecordPayload_;
473
+ };
474
+ /**
475
+ * GET /contacts/{contact_id}/documents/types/{doc_type}
476
+ * Get Contact Document
477
+ * tier: read · scope: contacts:read
478
+ */
479
+ get_contact_document_contacts__contact_id__documents_types__doc_type__get: {
480
+ input: {
481
+ path: {
482
+ /** Contact id. */
483
+ contact_id: number;
484
+ /** Document type, e.g. `contact_brief`. */
485
+ doc_type: string;
486
+ };
487
+ headers?: {
488
+ "X-Target-Org-Id"?: string | null;
489
+ };
490
+ };
491
+ output: ApiResponse_CrmRecordPayload_;
492
+ };
493
+ /**
494
+ * GET /contacts/{contact_id}/engagement-summary
495
+ * Get Contact Engagement Summary
496
+ * tier: read · scope: contacts:read
497
+ */
498
+ get_contact_engagement_summary_contacts__contact_id__engagement_summary_get: {
499
+ input: {
500
+ path: {
501
+ /** Contact primary key. */
502
+ contact_id: number;
503
+ };
504
+ headers?: {
505
+ "X-Target-Org-Id"?: string | null;
506
+ };
507
+ };
508
+ output: ApiResponse_CrmRecordPayload_;
509
+ };
510
+ /**
511
+ * GET /contacts/form-fields
512
+ * Get Contact Form Fields
513
+ * tier: read · scope: contacts:read
514
+ */
515
+ get_contact_form_fields_contacts_form_fields_get: {
516
+ input: {
517
+ query?: {
518
+ /** Include this list's custom fields. */
519
+ list_id?: number | null;
520
+ };
521
+ headers?: {
522
+ "X-Target-Org-Id"?: string | null;
523
+ };
524
+ };
525
+ output: ApiResponse_CrmRecordPayload_;
526
+ };
527
+ /**
528
+ * GET /contacts/{contact_id}/documents/generation-status
529
+ * Get Contact Generation Status
530
+ * tier: read · scope: contacts:read
531
+ */
532
+ get_contact_generation_status_contacts__contact_id__documents_generation_status_get: {
533
+ input: {
534
+ path: {
535
+ /** Contact primary key. */
536
+ contact_id: number;
537
+ };
538
+ headers?: {
539
+ "X-Target-Org-Id"?: string | null;
540
+ };
541
+ };
542
+ output: ApiResponse_CrmRecordPayload_;
543
+ };
544
+ /**
545
+ * GET /contacts/{contact_id}/lists
546
+ * Get Contact Lists
547
+ * tier: read · scope: contacts:read
548
+ */
549
+ get_contact_lists_contacts__contact_id__lists_get: {
550
+ input: {
551
+ path: {
552
+ /** Contact primary key (`mashup_contacts.id`). */
553
+ contact_id: number;
554
+ };
555
+ headers?: {
556
+ "X-Target-Org-Id"?: string | null;
557
+ };
558
+ };
559
+ output: ApiResponse_CrmCollectionPayload_;
560
+ };
561
+ /**
562
+ * GET /contacts/{contact_id}/meetings
563
+ * Get Contact Meetings
564
+ * tier: read · scope: contacts:read
565
+ */
566
+ get_contact_meetings_contacts__contact_id__meetings_get: {
567
+ input: {
568
+ path: {
569
+ /** Contact id. */
570
+ contact_id: number;
571
+ };
572
+ headers?: {
573
+ "X-Target-Org-Id"?: string | null;
574
+ };
575
+ };
576
+ output: ApiResponse_CrmCollectionPayload_;
577
+ };
578
+ /**
579
+ * GET /contacts/{contact_id}/next-best-step
580
+ * Get Contact Next Best Step
581
+ * tier: billable · scope: enrichment:run
582
+ */
583
+ get_contact_next_best_step_contacts__contact_id__next_best_step_get: {
584
+ input: {
585
+ path: {
586
+ /** Contact primary key. */
587
+ contact_id: number;
588
+ };
589
+ headers?: {
590
+ "X-Target-Org-Id"?: string | null;
591
+ };
592
+ };
593
+ output: ApiResponse_CrmRecordPayload_;
594
+ };
595
+ /**
596
+ * POST /contacts/profile-pictures
597
+ * Get Contact Profile Pictures
598
+ * tier: read · scope: contacts:read
599
+ */
600
+ get_contact_profile_pictures_contacts_profile_pictures_post: {
601
+ input: {
602
+ headers?: {
603
+ "X-Target-Org-Id"?: string | null;
604
+ };
605
+ body: ProfilePicturesRequest;
606
+ };
607
+ output: ApiResponse_CrmRecordPayload_;
608
+ };
609
+ /**
610
+ * GET /contacts/row-detail/{record_id}
611
+ * Get Contact Row Detail
612
+ * tier: read · scope: contacts:read
613
+ */
614
+ get_contact_row_detail_contacts_row_detail__record_id__get: {
615
+ input: {
616
+ path: {
617
+ /** Record primary key. */
618
+ record_id: number;
619
+ };
620
+ query: {
621
+ /** Required: the list the record is read through. */
622
+ list_id: number;
623
+ };
624
+ headers?: {
625
+ "X-Target-Org-Id"?: string | null;
626
+ };
627
+ };
628
+ output: ApiResponse_CrmRecordPayload_;
629
+ };
630
+ /**
631
+ * GET /contacts/{contact_id}/sequences
632
+ * Get Contact Sequences
633
+ * tier: read · scope: contacts:read
634
+ */
635
+ get_contact_sequences_contacts__contact_id__sequences_get: {
636
+ input: {
637
+ path: {
638
+ /** Contact id. */
639
+ contact_id: number;
640
+ };
641
+ headers?: {
642
+ "X-Target-Org-Id"?: string | null;
643
+ };
644
+ };
645
+ output: ApiResponse_CrmCollectionPayload_;
646
+ };
647
+ /**
648
+ * GET /contacts/{contact_id}/signals
649
+ * Get Contact Signals
650
+ * tier: read · scope: contacts:read
651
+ */
652
+ get_contact_signals_contacts__contact_id__signals_get: {
653
+ input: {
654
+ path: {
655
+ /** Contact id. */
656
+ contact_id: number;
657
+ };
658
+ headers?: {
659
+ "X-Target-Org-Id"?: string | null;
660
+ };
661
+ };
662
+ output: ApiResponse_CrmRecordPayload_;
663
+ };
664
+ /**
665
+ * GET /contacts/{contact_id}/sites-visited
666
+ * Get Contact Sites Visited
667
+ * tier: read · scope: contacts:read
668
+ */
669
+ get_contact_sites_visited_contacts__contact_id__sites_visited_get: {
670
+ input: {
671
+ path: {
672
+ /** Contact primary key. */
673
+ contact_id: number;
674
+ };
675
+ query?: {
676
+ /** Lookback window. Bounded here rather than left open: the query is an unindexed analytics scan and an unbounded window is a cheap way to exhaust it. */
677
+ days?: number;
678
+ };
679
+ headers?: {
680
+ "X-Target-Org-Id"?: string | null;
681
+ };
682
+ };
683
+ output: ApiResponse_CrmRecordPayload_;
684
+ };
685
+ /**
686
+ * GET /contacts/{contact_id}/tags
687
+ * Get Contact Tag Ids
688
+ * tier: read · scope: contacts:read
689
+ */
690
+ get_contact_tag_ids_contacts__contact_id__tags_get: {
691
+ input: {
692
+ path: {
693
+ /** Contact id. */
694
+ contact_id: number;
695
+ };
696
+ headers?: {
697
+ "X-Target-Org-Id"?: string | null;
698
+ };
699
+ };
700
+ output: ApiResponse_CrmRecordPayload_;
701
+ };
702
+ /**
703
+ * GET /duplicates/settings
704
+ * Get Duplicate Settings
705
+ * tier: read · scope: contacts:read
706
+ */
707
+ get_duplicate_settings_duplicates_settings_get: {
708
+ input: {
709
+ headers?: {
710
+ "X-Target-Org-Id"?: string | null;
711
+ };
712
+ };
713
+ output: ApiResponse_CrmRecordPayload_;
714
+ };
715
+ /**
716
+ * POST /contacts/column-values
717
+ * Get Record Column Values
718
+ * tier: read · scope: contacts:read
719
+ */
720
+ get_record_column_values_contacts_column_values_post: {
721
+ input: {
722
+ headers?: {
723
+ "X-Target-Org-Id"?: string | null;
724
+ };
725
+ body: RecordColumnValuesRequest;
726
+ };
727
+ output: ApiResponse_CrmRecordPayload_;
728
+ };
729
+ /**
730
+ * GET /contacts/base-columns
731
+ * List Base Columns
732
+ * tier: read · scope: contacts:read
733
+ */
734
+ list_base_columns_contacts_base_columns_get: {
735
+ input: {
736
+ query: {
737
+ /** Required: the list decides which base columns exist. */
738
+ list_id: number;
739
+ };
740
+ headers?: {
741
+ "X-Target-Org-Id"?: string | null;
742
+ };
743
+ };
744
+ output: ApiResponse_CrmCollectionPayload_;
745
+ };
746
+ /**
747
+ * GET /contacts/column-names
748
+ * List Column Names
749
+ * tier: read · scope: contacts:read
750
+ */
751
+ list_column_names_contacts_column_names_get: {
752
+ input: {
753
+ query?: {
754
+ /** Include this list's own columns. */
755
+ list_id?: number | null;
756
+ };
757
+ headers?: {
758
+ "X-Target-Org-Id"?: string | null;
759
+ };
760
+ };
761
+ output: ApiResponse_CrmCollectionPayload_;
762
+ };
763
+ /**
764
+ * GET /contacts/column-definitions
765
+ * List Contact Column Definitions
766
+ * tier: read · scope: contacts:read
767
+ */
768
+ list_contact_column_definitions_contacts_column_definitions_get: {
769
+ input: {
770
+ query?: {
771
+ /** Include the columns specific to this list. The list also decides whether contact or company columns are returned - a companies list returns company columns from this contacts path. */
772
+ list_id?: number | null;
773
+ };
774
+ headers?: {
775
+ "X-Target-Org-Id"?: string | null;
776
+ };
777
+ };
778
+ output: ApiResponse_CrmCollectionPayload_;
779
+ };
780
+ /**
781
+ * GET /contacts/columns
782
+ * List Contact Columns
783
+ * tier: read · scope: contacts:read
784
+ */
785
+ list_contact_columns_contacts_columns_get: {
786
+ input: {
787
+ query?: {
788
+ /** Optional list ID. When provided, list-specific dynamic columns are included alongside global ones. */
789
+ list_id?: number | null;
790
+ };
791
+ headers?: {
792
+ "X-Target-Org-Id"?: string | null;
793
+ };
794
+ };
795
+ output: ApiResponse_list_Column__;
796
+ };
797
+ /**
798
+ * GET /contacts/{contact_id}/documents
799
+ * List Contact Documents
800
+ * tier: read · scope: contacts:read
801
+ */
802
+ list_contact_documents_contacts__contact_id__documents_get: {
803
+ input: {
804
+ path: {
805
+ /** Contact id. */
806
+ contact_id: number;
807
+ };
808
+ query?: {
809
+ /** Only documents in this folder. */
810
+ folder?: string | null;
811
+ };
812
+ headers?: {
813
+ "X-Target-Org-Id"?: string | null;
814
+ };
815
+ };
816
+ output: ApiResponse_CrmCollectionPayload_;
817
+ };
818
+ /**
819
+ * GET /contacts/tags
820
+ * List Contact Tags
821
+ * tier: read · scope: contacts:read
822
+ */
823
+ list_contact_tags_contacts_tags_get: {
824
+ input: {
825
+ query?: {
826
+ /** Include archived tags. */
827
+ include_archived?: boolean;
828
+ };
829
+ headers?: {
830
+ "X-Target-Org-Id"?: string | null;
831
+ };
832
+ };
833
+ output: ApiResponse_ContactTagListResponse_;
834
+ };
835
+ /**
836
+ * GET /contacts
837
+ * List Contacts
838
+ * tier: read · scope: contacts:read
839
+ */
840
+ list_contacts_contacts_get: {
841
+ input: {
842
+ query?: {
843
+ /** Page number (1-indexed) */
844
+ page?: number;
845
+ /** Items per page (max 200) */
846
+ limit?: number;
847
+ /** Filter by work email (exact match) */
848
+ email?: string | null;
849
+ /** Filter by list ID */
850
+ list_id?: number | null;
851
+ /** Filter by first or last name (partial match) */
852
+ name?: string | null;
853
+ /** Filter by job title (partial match) */
854
+ job_title?: string | null;
855
+ /** Filter by seniority level (exact match) */
856
+ seniority_level?: string | null;
857
+ /** Filter by company name (partial match) */
858
+ company_name?: string | null;
859
+ /** Filter by company ID */
860
+ company_id?: number | null;
861
+ /** Filter by country (exact match) */
862
+ country?: string | null;
863
+ /** Filter by state (exact match) */
864
+ state?: string | null;
865
+ /** Filter by city (partial match) */
866
+ city?: string | null;
867
+ /** Filter by job department (partial match) */
868
+ job_department?: string | null;
869
+ /** Filter by company industry (partial match) */
870
+ industry?: string | null;
871
+ /** When true, each contact includes a `custom_fields` object of custom column values keyed by column slug. Default false keeps the legacy response shape and adds no extra query. */
872
+ include_custom_fields?: boolean;
873
+ };
874
+ headers?: {
875
+ "X-Target-Org-Id"?: string | null;
876
+ };
877
+ };
878
+ output: ApiResponse_list_ContactListItem__;
879
+ };
880
+ /**
881
+ * GET /contacts/custom-column-definitions
882
+ * List Custom Column Definitions
883
+ * tier: read · scope: contacts:read
884
+ */
885
+ list_custom_column_definitions_contacts_custom_column_definitions_get: {
886
+ input: {
887
+ query?: {
888
+ /** `contact` or `company`. Anything else is refused. */
889
+ entity_type?: string;
890
+ };
891
+ headers?: {
892
+ "X-Target-Org-Id"?: string | null;
893
+ };
894
+ };
895
+ output: ApiResponse_CrmCollectionPayload_;
896
+ };
897
+ /**
898
+ * GET /duplicates/detection/runs
899
+ * List Duplicate Detection Runs
900
+ * tier: read · scope: contacts:read
901
+ */
902
+ list_duplicate_detection_runs_duplicates_detection_runs_get: {
903
+ input: {
904
+ query?: {
905
+ /** Only runs for this record type. */
906
+ entity_type?: ("contact" | "company" | "deal") | null;
907
+ /** How many runs, newest first. */
908
+ limit?: number;
909
+ };
910
+ headers?: {
911
+ "X-Target-Org-Id"?: string | null;
912
+ };
913
+ };
914
+ output: ApiResponse_CrmCollectionPayload_;
915
+ };
916
+ /**
917
+ * GET /contacts/workflow-executions
918
+ * List Record Workflow Executions
919
+ * tier: read · scope: contacts:read
920
+ */
921
+ list_record_workflow_executions_contacts_workflow_executions_get: {
922
+ input: {
923
+ query: {
924
+ /** The list the row belongs to. */
925
+ list_id: number;
926
+ /** The row (contact) id. */
927
+ record_id: number;
928
+ /** Only runs of this workflow. */
929
+ workflow_id?: string | null;
930
+ /** Only this status. */
931
+ status?: string | null;
932
+ /** Include each run's step events. */
933
+ include_events?: boolean;
934
+ };
935
+ headers?: {
936
+ "X-Target-Org-Id"?: string | null;
937
+ };
938
+ };
939
+ output: ApiResponse_CrmCollectionPayload_;
940
+ };
941
+ /**
942
+ * GET /contacts/searchable-fields
943
+ * List Searchable Fields
944
+ * tier: read · scope: contacts:read
945
+ */
946
+ list_searchable_fields_contacts_searchable_fields_get: {
947
+ input: {
948
+ query?: {
949
+ /** `contact` or `company`. Anything else is refused. */
950
+ entity_type?: string;
951
+ };
952
+ headers?: {
953
+ "X-Target-Org-Id"?: string | null;
954
+ };
955
+ };
956
+ output: ApiResponse_CrmCollectionPayload_;
957
+ };
958
+ /**
959
+ * POST /contacts/{contact_id}/merge
960
+ * Merge Contact
961
+ * tier: destructive · scope: contacts:delete
962
+ */
963
+ merge_contact_contacts__contact_id__merge_post: {
964
+ input: {
965
+ path: {
966
+ /** The contact that SURVIVES the merge. */
967
+ contact_id: number;
968
+ };
969
+ headers?: {
970
+ "X-Target-Org-Id"?: string | null;
971
+ };
972
+ body: MergeRecordRequest;
973
+ };
974
+ output: ApiResponse_CrmRecordPayload_;
975
+ };
976
+ /**
977
+ * POST /contacts/tags/merge
978
+ * Merge Contact Tags
979
+ * tier: write · scope: contacts:write
980
+ */
981
+ merge_contact_tags_contacts_tags_merge_post: {
982
+ input: {
983
+ headers?: {
984
+ "X-Target-Org-Id"?: string | null;
985
+ };
986
+ body: ContactTagMergeRequest;
987
+ };
988
+ output: ApiResponse_ContactTagWriteResult_;
989
+ };
990
+ /**
991
+ * POST /contacts/merge-filtered
992
+ * Merge Filtered Contacts
993
+ * tier: write · scope: contacts:write
994
+ */
995
+ merge_filtered_contacts_contacts_merge_filtered_post: {
996
+ input: {
997
+ query?: {
998
+ /** Optional per-column filter JSON, applied alongside `filter`. */
999
+ filterModel?: string | null;
1000
+ /** Optional sort JSON. */
1001
+ sortModel?: string | null;
1002
+ };
1003
+ headers?: {
1004
+ "X-Target-Org-Id"?: string | null;
1005
+ };
1006
+ body: MergeFilteredRequest;
1007
+ };
1008
+ output: ApiResponse_CrmRecordPayload_;
1009
+ };
1010
+ /**
1011
+ * POST /contacts/workflow-executions/{execution_id}/pause
1012
+ * Pause Record Workflow Execution
1013
+ * tier: write · scope: contacts:write
1014
+ */
1015
+ pause_record_workflow_execution_contacts_workflow_executions__execution_id__pause_post: {
1016
+ input: {
1017
+ path: {
1018
+ /** Workflow execution id. */
1019
+ execution_id: string;
1020
+ };
1021
+ headers?: {
1022
+ "X-Target-Org-Id"?: string | null;
1023
+ };
1024
+ };
1025
+ output: ApiResponse_CrmRecordPayload_;
1026
+ };
1027
+ /**
1028
+ * GET /contacts/{contact_id}/merge/preview
1029
+ * Preview Contact Merge
1030
+ * tier: read · scope: contacts:read
1031
+ */
1032
+ preview_contact_merge_contacts__contact_id__merge_preview_get: {
1033
+ input: {
1034
+ path: {
1035
+ /** The contact that SURVIVES the merge. */
1036
+ contact_id: number;
1037
+ };
1038
+ query: {
1039
+ /** The contact that would be merged AWAY. */
1040
+ secondary: number;
1041
+ };
1042
+ headers?: {
1043
+ "X-Target-Org-Id"?: string | null;
1044
+ };
1045
+ };
1046
+ output: ApiResponse_CrmRecordPayload_;
1047
+ };
1048
+ /**
1049
+ * POST /duplicates/settings/preview-detection-rule
1050
+ * Preview Detection Rule
1051
+ * tier: read · scope: contacts:read
1052
+ */
1053
+ preview_detection_rule_duplicates_settings_preview_detection_rule_post: {
1054
+ input: {
1055
+ headers?: {
1056
+ "X-Target-Org-Id"?: string | null;
1057
+ };
1058
+ body: PreviewDetectionRuleRequest;
1059
+ };
1060
+ output: ApiResponse_CrmRecordPayload_;
1061
+ };
1062
+ /**
1063
+ * POST /contacts/{contact_id}/documents/types/{doc_type}/regenerate
1064
+ * Regenerate Contact Document
1065
+ * tier: billable · scope: enrichment:run
1066
+ */
1067
+ regenerate_contact_document_contacts__contact_id__documents_types__doc_type__regenerate_post: {
1068
+ input: {
1069
+ path: {
1070
+ /** Contact id. */
1071
+ contact_id: number;
1072
+ /** Document type. */
1073
+ doc_type: string;
1074
+ };
1075
+ headers?: {
1076
+ "X-Target-Org-Id"?: string | null;
1077
+ };
1078
+ };
1079
+ output: ApiResponse_CrmRecordPayload_;
1080
+ };
1081
+ /**
1082
+ * POST /contacts/workflow-executions/{execution_id}/resume
1083
+ * Resume Record Workflow Execution
1084
+ * tier: write · scope: contacts:write
1085
+ */
1086
+ resume_record_workflow_execution_contacts_workflow_executions__execution_id__resume_post: {
1087
+ input: {
1088
+ path: {
1089
+ /** Workflow execution id. */
1090
+ execution_id: string;
1091
+ };
1092
+ headers?: {
1093
+ "X-Target-Org-Id"?: string | null;
1094
+ };
1095
+ };
1096
+ output: ApiResponse_CrmRecordPayload_;
1097
+ };
1098
+ /**
1099
+ * POST /duplicates/detection/run
1100
+ * Run Duplicate Detection
1101
+ * tier: write · scope: contacts:write
1102
+ */
1103
+ run_duplicate_detection_duplicates_detection_run_post: {
1104
+ input: {
1105
+ headers?: {
1106
+ "X-Target-Org-Id"?: string | null;
1107
+ };
1108
+ body: RunDetectionRequest;
1109
+ };
1110
+ output: ApiResponse_CrmRecordPayload_;
1111
+ };
1112
+ /**
1113
+ * POST /contacts/workflow-executions/run
1114
+ * Run Record Workflow
1115
+ * tier: billable · scope: enrichment:run
1116
+ */
1117
+ run_record_workflow_contacts_workflow_executions_run_post: {
1118
+ input: {
1119
+ headers?: {
1120
+ "X-Target-Org-Id"?: string | null;
1121
+ };
1122
+ body: RunRecordWorkflowRequest;
1123
+ };
1124
+ output: ApiResponse_CrmRecordPayload_;
1125
+ };
1126
+ /**
1127
+ * POST /contacts/{contact_id}/documents/from-skill
1128
+ * Save Skill Result To Contact
1129
+ * tier: write · scope: contacts:write
1130
+ */
1131
+ save_skill_result_to_contact_contacts__contact_id__documents_from_skill_post: {
1132
+ input: {
1133
+ path: {
1134
+ /** Contact primary key. */
1135
+ contact_id: number;
1136
+ };
1137
+ headers?: {
1138
+ "X-Target-Org-Id"?: string | null;
1139
+ };
1140
+ body: SaveSkillResultRequest;
1141
+ };
1142
+ output: ApiResponse_CrmRecordPayload_;
1143
+ };
1144
+ /**
1145
+ * POST /duplicates/auto-merge
1146
+ * Trigger Auto Merge
1147
+ * tier: destructive · scope: contacts:delete
1148
+ */
1149
+ trigger_auto_merge_duplicates_auto_merge_post: {
1150
+ input: {
1151
+ headers?: {
1152
+ "X-Target-Org-Id"?: string | null;
1153
+ };
1154
+ body: AutoMergeRequest;
1155
+ };
1156
+ output: ApiResponse_CrmRecordPayload_;
1157
+ };
1158
+ /**
1159
+ * POST /contacts/tags/unassign
1160
+ * Unassign Contact Tags
1161
+ * tier: write · scope: contacts:write
1162
+ */
1163
+ unassign_contact_tags_contacts_tags_unassign_post: {
1164
+ input: {
1165
+ headers?: {
1166
+ "X-Target-Org-Id"?: string | null;
1167
+ };
1168
+ body: ContactTagAssignRequest;
1169
+ };
1170
+ output: ApiResponse_ContactTagWriteResult_;
1171
+ };
1172
+ /**
1173
+ * POST /contacts/unlock-info
1174
+ * Unlock Contact Info
1175
+ * tier: billable · scope: enrichment:run
1176
+ */
1177
+ unlock_contact_info_contacts_unlock_info_post: {
1178
+ input: {
1179
+ query?: {
1180
+ /** Per-column filter JSON, resolved against `list_id`. */
1181
+ filterModel?: string | null;
1182
+ };
1183
+ headers?: {
1184
+ "X-Target-Org-Id"?: string | null;
1185
+ };
1186
+ body: UnlockContactInfoRequest;
1187
+ };
1188
+ output: ApiResponse_CrmRecordPayload_;
1189
+ };
1190
+ /**
1191
+ * PATCH /contacts/{contact_id}
1192
+ * Update Contact
1193
+ * tier: write · scope: contacts:write
1194
+ */
1195
+ update_contact_contacts__contact_id__patch: {
1196
+ input: {
1197
+ path: {
1198
+ /** Contact ID */
1199
+ contact_id: number;
1200
+ };
1201
+ headers?: {
1202
+ "X-Target-Org-Id"?: string | null;
1203
+ };
1204
+ body: ContactUpdateRequest;
1205
+ };
1206
+ output: ApiResponse_dict_;
1207
+ };
1208
+ /**
1209
+ * PUT /contacts/{contact_id}/documents/{document_id}
1210
+ * Update Contact Document
1211
+ * tier: write · scope: contacts:write
1212
+ */
1213
+ update_contact_document_contacts__contact_id__documents__document_id__put: {
1214
+ input: {
1215
+ path: {
1216
+ /** Contact id. */
1217
+ contact_id: number;
1218
+ /** Document id. */
1219
+ document_id: string;
1220
+ };
1221
+ headers?: {
1222
+ "X-Target-Org-Id"?: string | null;
1223
+ };
1224
+ body: ContactDocumentUpdateRequest;
1225
+ };
1226
+ output: ApiResponse_CrmRecordPayload_;
1227
+ };
1228
+ /**
1229
+ * PATCH /contacts/tags/{tag_id}
1230
+ * Update Contact Tag
1231
+ * tier: write · scope: contacts:write
1232
+ */
1233
+ update_contact_tag_contacts_tags__tag_id__patch: {
1234
+ input: {
1235
+ path: {
1236
+ /** Tag id. */
1237
+ tag_id: string;
1238
+ };
1239
+ headers?: {
1240
+ "X-Target-Org-Id"?: string | null;
1241
+ };
1242
+ body: ContactTagUpdateRequest;
1243
+ };
1244
+ output: ApiResponse_ContactTag_;
1245
+ };
1246
+ /**
1247
+ * PUT /duplicates/settings
1248
+ * Update Duplicate Settings
1249
+ * tier: write · scope: contacts:write
1250
+ */
1251
+ update_duplicate_settings_duplicates_settings_put: {
1252
+ input: {
1253
+ headers?: {
1254
+ "X-Target-Org-Id"?: string | null;
1255
+ };
1256
+ body: Record<string, unknown>;
1257
+ };
1258
+ output: ApiResponse_CrmRecordPayload_;
1259
+ };
1260
+ /**
1261
+ * POST /contacts/verify-email
1262
+ * Verify Contact Emails
1263
+ * tier: billable · scope: enrichment:run
1264
+ */
1265
+ verify_contact_emails_contacts_verify_email_post: {
1266
+ input: {
1267
+ query?: {
1268
+ /** Restrict a filtered selection to this list. */
1269
+ list_id?: number | null;
1270
+ /** Per-column filter JSON. With `list_id`, verifies every matching contact instead of the ids in the body. */
1271
+ filterModel?: string | null;
1272
+ };
1273
+ headers?: {
1274
+ "X-Target-Org-Id"?: string | null;
1275
+ };
1276
+ body: VerifyContactEmailRequest;
1277
+ };
1278
+ output: ApiResponse_CrmCollectionPayload_;
1279
+ };
1280
+ /**
1281
+ * POST /contacts/verify-email/async
1282
+ * Verify Contact Emails Async
1283
+ * tier: billable · scope: enrichment:run
1284
+ */
1285
+ verify_contact_emails_async_contacts_verify_email_async_post: {
1286
+ input: {
1287
+ headers?: {
1288
+ "X-Target-Org-Id"?: string | null;
1289
+ };
1290
+ body: VerifyContactEmailAsyncRequest;
1291
+ };
1292
+ output: ApiResponse_CrmRecordPayload_;
1293
+ };
1294
+ /**
1295
+ * POST /contacts/withdraw-from-sequences
1296
+ * Withdraw Contacts From Sequences
1297
+ * tier: write · scope: contacts:write
1298
+ */
1299
+ withdraw_contacts_from_sequences_contacts_withdraw_from_sequences_post: {
1300
+ input: {
1301
+ headers?: {
1302
+ "X-Target-Org-Id"?: string | null;
1303
+ };
1304
+ body: WithdrawFromSequencesRequest;
1305
+ };
1306
+ output: ApiResponse_CrmRecordPayload_;
1307
+ };
1308
+ }
1309
+
1310
+ // 68 schemas referenced above (the same as G8Contract.<Name>).
1311
+
1312
+ export interface ApiResponse_ContactBulkGetResponse_ {
1313
+ data: ContactBulkGetResponse;
1314
+ pagination?: PaginationMeta | null;
1315
+ }
1316
+
1317
+ export interface ApiResponse_ContactCreateResponse_ {
1318
+ data: ContactCreateResponse;
1319
+ pagination?: PaginationMeta | null;
1320
+ }
1321
+
1322
+ export interface ApiResponse_ContactRelatedBatchResponse_ {
1323
+ data: ContactRelatedBatchResponse;
1324
+ pagination?: PaginationMeta | null;
1325
+ }
1326
+
1327
+ export interface ApiResponse_ContactResponse_ {
1328
+ data: ContactResponse;
1329
+ pagination?: PaginationMeta | null;
1330
+ }
1331
+
1332
+ export interface ApiResponse_ContactTagListResponse_ {
1333
+ data: ContactTagListResponse;
1334
+ pagination?: PaginationMeta | null;
1335
+ }
1336
+
1337
+ export interface ApiResponse_ContactTagWriteResult_ {
1338
+ data: ContactTagWriteResult;
1339
+ pagination?: PaginationMeta | null;
1340
+ }
1341
+
1342
+ export interface ApiResponse_ContactTag_ {
1343
+ data: ContactTag;
1344
+ pagination?: PaginationMeta | null;
1345
+ }
1346
+
1347
+ export interface ApiResponse_CreateContactColumnResponse_ {
1348
+ data: CreateContactColumnResponse;
1349
+ pagination?: PaginationMeta | null;
1350
+ }
1351
+
1352
+ export interface ApiResponse_CrmCollectionPayload_ {
1353
+ data: CrmCollectionPayload;
1354
+ pagination?: PaginationMeta | null;
1355
+ }
1356
+
1357
+ export interface ApiResponse_CrmRecordPayload_ {
1358
+ data: CrmRecordPayload;
1359
+ pagination?: PaginationMeta | null;
1360
+ }
1361
+
1362
+ export interface ApiResponse_dict_ {
1363
+ data: Record<string, unknown>;
1364
+ pagination?: PaginationMeta | null;
1365
+ }
1366
+
1367
+ export interface ApiResponse_list_Column__ {
1368
+ data: Array<Column>;
1369
+ pagination?: PaginationMeta | null;
1370
+ }
1371
+
1372
+ export interface ApiResponse_list_ContactListItem__ {
1373
+ data: Array<ContactListItem>;
1374
+ pagination?: PaginationMeta | null;
1375
+ }
1376
+
1377
+ /** Mirrors `ApproveRequest`. The app refuses anything but these two decisions. */
1378
+ export interface ApproveExecutionRequest {
1379
+ /** Approve or reject the paused step. */
1380
+ decision: "approve" | "reject";
1381
+ /** Recorded with a rejection. */
1382
+ reason?: string | null;
1383
+ }
1384
+
1385
+ /**
1386
+ * Set the owner on every record matching a selection.
1387
+ *
1388
+ * A null `owner_id` UNASSIGNS the matching records rather than leaving them
1389
+ * alone, so an omitted owner is a destructive instruction, not a no-op.
1390
+ */
1391
+ export interface AssignOwnerMatchingRequest {
1392
+ /** Per-column filters. */
1393
+ filterModel?: Record<string, unknown>;
1394
+ /** Restrict the selection to this list. */
1395
+ list_id?: number | null;
1396
+ /** Owner to assign. Null clears the owner on every match. */
1397
+ owner_id?: string | null;
1398
+ /** Advanced AND/OR filter tree. */
1399
+ segmentFilter?: SegmentFilterGroup | null;
1400
+ }
1401
+
1402
+ /**
1403
+ * Run auto-merge once. NOT REVERSIBLE unless you undo each merge.
1404
+ *
1405
+ * Honours the org's own auto-merge and shadow-mode settings: with either
1406
+ * disabled the response SAYS SO instead of failing, so a 200 does not by
1407
+ * itself mean records were merged. Send `dry_run=true` first.
1408
+ */
1409
+ export interface AutoMergeRequest {
1410
+ /** Report what would merge without merging it. */
1411
+ dry_run?: boolean;
1412
+ /** Object to merge. */
1413
+ entity_type: "contact" | "company";
1414
+ }
1415
+
1416
+ /**
1417
+ * Column entity representing a database column definition.
1418
+ * Used to describe table column metadata for MashupContact and other entities.
1419
+ */
1420
+ export interface Column {
1421
+ data_type?: ColumnType;
1422
+ id?: number | null;
1423
+ /** Automatically computed: True if object_id is None/empty, False otherwise. */
1424
+ is_global: boolean;
1425
+ name?: string | null;
1426
+ object_id?: string | null;
1427
+ source?: ColumnSource;
1428
+ title: string;
1429
+ }
1430
+
1431
+ /**
1432
+ * Which entity a field in the contact field list belongs to.
1433
+ *
1434
+ * The ``GET /contacts/columns`` response deliberately combines fields from
1435
+ * three provenances into one list (issue #21184): the person record, their
1436
+ * employer's company record, and user-created custom columns. Consumers
1437
+ * (form-mapping UI, AI-agent field listing, CSV import) need to tell them
1438
+ * apart — a company field like ``COMPANY_REVENUE`` describes the employer,
1439
+ * not the contact.
1440
+ *
1441
+ * - ``contact``: a field on the person record (``MashupContact.*``) — the default.
1442
+ * - ``company``: a field on the contact's employer (``MashupCompany.*``),
1443
+ * surfaced so contacts can be mapped/filtered by company attributes.
1444
+ * - ``custom``: a user-created dynamic column (global or list-scoped).
1445
+ */
1446
+ export type ColumnSource = "contact" | "company" | "custom";
1447
+
1448
+ /**
1449
+ * User-selectable dynamic-column data types.
1450
+ *
1451
+ * Every member must have a physical type in the repos' pg_type_map
1452
+ * (contacts/companies CDP repos + enrichment DynamicColumnRepository:
1453
+ * int→INTEGER, numeric→NUMERIC, text→TEXT, boolean→BOOLEAN) and belong to
1454
+ * the user-owned family in lists/usecases/dynamic_column_write_contract.py —
1455
+ * both already list these four. Write paths coerce values per type via
1456
+ * shared.infrustructure.db.cdp.dynamic_column_values.coerce_dynamic_value.
1457
+ */
1458
+ export type ColumnType = "text" | "int" | "numeric" | "boolean";
1459
+
1460
+ /** One contact: the full record, or `found: false`. */
1461
+ export interface ContactBulkGetItem {
1462
+ /** The same record `GET /contacts/{contact_id}` returns. Null when not found. */
1463
+ contact?: ContactResponse | null;
1464
+ contact_id: number;
1465
+ /** False when the contact does not exist or is outside this key's scope (indistinguishable on purpose, like the per-contact 404). */
1466
+ found: boolean;
1467
+ }
1468
+
1469
+ /** Which contacts to read in full. */
1470
+ export interface ContactBulkGetRequest {
1471
+ /** Up to 100 contact ids, the ids `GET /contacts` returns. Duplicates are read once; the response keeps first-seen order. */
1472
+ contact_ids: Array<number>;
1473
+ /** When true, each found contact includes a `custom_fields` object keyed by column slug, as `GET /contacts/{contact_id}?include_custom_fields=true` does. */
1474
+ include_custom_fields?: boolean;
1475
+ }
1476
+
1477
+ export interface ContactBulkGetResponse {
1478
+ items?: Array<ContactBulkGetItem>;
1479
+ }
1480
+
1481
+ export interface ContactCompanySummary {
1482
+ city?: string | null;
1483
+ country?: string | null;
1484
+ domain?: string | null;
1485
+ employee_count?: string | null;
1486
+ id?: number | null;
1487
+ industry?: string | null;
1488
+ linkedin_url?: string | null;
1489
+ logo_url?: string | null;
1490
+ name?: string | null;
1491
+ state?: string | null;
1492
+ website?: string | null;
1493
+ }
1494
+
1495
+ /** Request body for creating contacts. */
1496
+ export interface ContactCreateRequest {
1497
+ /** City */
1498
+ city?: string | null;
1499
+ /** Company domain for matching */
1500
+ company_domain?: string | null;
1501
+ /** Existing company id (mashup_companies.id) to attach */
1502
+ company_id?: number | null;
1503
+ /** Country */
1504
+ country?: string | null;
1505
+ /** When true, custom_fields keys that match no existing column are created as NEW custom columns (list-scoped when list_id is set) and then written. */
1506
+ create_missing_fields?: boolean;
1507
+ /** Custom column values keyed by the column's display title (e.g. 'Followup 1'), its slug (e.g. 'udo_followup_1_ab12cd34'), or a case/space variant of the title. Keys matching no existing column are reported in the response's `custom_fields.ignored` unless `create_missing_fields` is true. */
1508
+ custom_fields?: (Record<string, string | null>) | null;
1509
+ /** Direct phone number */
1510
+ direct_phone?: string | null;
1511
+ /** Contact first name */
1512
+ first_name?: string | null;
1513
+ /** Department */
1514
+ job_department?: string | null;
1515
+ /** Job title */
1516
+ job_title?: string | null;
1517
+ /** Contact last name */
1518
+ last_name?: string | null;
1519
+ /** LinkedIn profile URL */
1520
+ linkedin_url?: string | null;
1521
+ /** Optional target list ID. When provided, the contact is added to this list after it is created; omit to create the contact without a list. */
1522
+ list_id?: number | null;
1523
+ /** Mobile phone number */
1524
+ mobile_phone?: string | null;
1525
+ /** Personal email addresses */
1526
+ personal_emails?: string | null;
1527
+ /** Seniority level */
1528
+ seniority_level?: string | null;
1529
+ /** State/Province */
1530
+ state?: string | null;
1531
+ /** Work email address */
1532
+ work_email?: string | null;
1533
+ }
1534
+
1535
+ export interface ContactCreateResponse {
1536
+ company_attached?: boolean;
1537
+ contact_id?: number | null;
1538
+ count: number;
1539
+ custom_fields?: CustomFieldWriteReport;
1540
+ merged?: boolean;
1541
+ status: string;
1542
+ validation_errors?: Array<string>;
1543
+ }
1544
+
1545
+ /** Mirrors `campaign_builder.models.contact_documents.UpdateContactDocumentRequest`. */
1546
+ export interface ContactDocumentUpdateRequest {
1547
+ /** Replacement document body. */
1548
+ content?: string | null;
1549
+ /** Replacement structured payload. */
1550
+ structured_data?: Record<string, unknown> | null;
1551
+ }
1552
+
1553
+ /** Lighter contact representation for list endpoints. */
1554
+ export interface ContactListItem {
1555
+ city?: string | null;
1556
+ company_id?: number | null;
1557
+ country?: string | null;
1558
+ custom_fields?: (Record<string, string | null>) | null;
1559
+ direct_phone?: string | null;
1560
+ first_name?: string | null;
1561
+ id?: number | null;
1562
+ job_department?: string | null;
1563
+ job_title?: string | null;
1564
+ last_name?: string | null;
1565
+ linkedin_url?: string | null;
1566
+ mobile_phone?: string | null;
1567
+ owner_id?: string | null;
1568
+ owner_name?: string | null;
1569
+ seniority_level?: string | null;
1570
+ state?: string | null;
1571
+ work_email?: string | null;
1572
+ }
1573
+
1574
+ /** Which contacts, and which of their related records, to read in one call. */
1575
+ export interface ContactRelatedBatchRequest {
1576
+ /** Up to 100 contact ids, the same ids the per-contact routes take. Duplicates are read once; the response keeps first-seen order. */
1577
+ contact_ids: Array<number>;
1578
+ /** Related records to return per contact. `sequences` matches `GET /contacts/{contact_id}/sequences`; `lists` matches `GET /contacts/{contact_id}/lists` (keyed on the contact primary key). */
1579
+ include?: Array<"sequences" | "lists">;
1580
+ }
1581
+
1582
+ export interface ContactRelatedBatchResponse {
1583
+ items?: Array<ContactRelatedItem>;
1584
+ }
1585
+
1586
+ /** One contact's related records. A field is present only when requested. */
1587
+ export interface ContactRelatedItem {
1588
+ contact_id: number;
1589
+ /** False when the contact does not exist or is outside this key's scope (indistinguishable on purpose, like the per-contact 404). */
1590
+ found: boolean;
1591
+ lists?: Array<Record<string, unknown>> | null;
1592
+ sequences?: Array<Record<string, unknown>> | null;
1593
+ }
1594
+
1595
+ export interface ContactResponse {
1596
+ about?: string | null;
1597
+ city?: string | null;
1598
+ company?: ContactCompanySummary | null;
1599
+ confidence_score?: number | null;
1600
+ country?: string | null;
1601
+ created_at?: string | null;
1602
+ custom_fields?: (Record<string, string | null>) | null;
1603
+ direct_phone?: string | null;
1604
+ facebook_url?: string | null;
1605
+ first_name?: string | null;
1606
+ full_name?: string | null;
1607
+ id: number;
1608
+ job_department?: string | null;
1609
+ job_title?: string | null;
1610
+ last_name?: string | null;
1611
+ linkedin_url?: string | null;
1612
+ meta_data?: Record<string, unknown> | null;
1613
+ mobile_phone?: string | null;
1614
+ personal_emails?: unknown | null;
1615
+ seniority_level?: string | null;
1616
+ state?: string | null;
1617
+ twitter_url?: string | null;
1618
+ updated_at?: string | null;
1619
+ work_email?: string | null;
1620
+ }
1621
+
1622
+ export interface ContactTag {
1623
+ archived?: boolean | null;
1624
+ color?: string | null;
1625
+ /** Contacts currently carrying the tag. */
1626
+ contact_count?: number | null;
1627
+ description?: string | null;
1628
+ id?: string | null;
1629
+ name?: string | null;
1630
+ [key: string]: unknown;
1631
+ }
1632
+
1633
+ export interface ContactTagAssignRequest {
1634
+ /** Contacts to tag. */
1635
+ contact_ids?: Array<number>;
1636
+ tag_ids: Array<string>;
1637
+ }
1638
+
1639
+ export interface ContactTagCreateRequest {
1640
+ /** Six-digit hex colour, e.g. `#4F46E5`. */
1641
+ color?: string | null;
1642
+ description?: string | null;
1643
+ name: string;
1644
+ }
1645
+
1646
+ export interface ContactTagListResponse {
1647
+ tags?: Array<ContactTag>;
1648
+ total?: number;
1649
+ [key: string]: unknown;
1650
+ }
1651
+
1652
+ export interface ContactTagMergeRequest {
1653
+ /** Tags to fold in. Removed on success. */
1654
+ source_tag_ids: Array<string>;
1655
+ /** Tag that survives and absorbs the assignments. */
1656
+ target_tag_id: string;
1657
+ }
1658
+
1659
+ /** Every field is optional; omit one to leave it untouched. */
1660
+ export interface ContactTagUpdateRequest {
1661
+ /** Archive without deleting. */
1662
+ archived?: boolean | null;
1663
+ color?: string | null;
1664
+ description?: string | null;
1665
+ name?: string | null;
1666
+ }
1667
+
1668
+ /** Whatever the handler reports about a write - counts, ids, or both. */
1669
+ export type ContactTagWriteResult = Record<string, unknown>;
1670
+
1671
+ /** Request body for updating a contact. All fields optional (partial update). */
1672
+ export interface ContactUpdateRequest {
1673
+ city?: string | null;
1674
+ company_domain?: string | null;
1675
+ company_id?: number | null;
1676
+ country?: string | null;
1677
+ direct_phone?: string | null;
1678
+ first_name?: string | null;
1679
+ job_department?: string | null;
1680
+ job_title?: string | null;
1681
+ last_name?: string | null;
1682
+ linkedin_url?: string | null;
1683
+ mobile_phone?: string | null;
1684
+ seniority_level?: string | null;
1685
+ state?: string | null;
1686
+ work_email?: string | null;
1687
+ }
1688
+
1689
+ /**
1690
+ * Request body for `POST /contacts/columns/create`.
1691
+ *
1692
+ * Mirrors the shared `CreateColumnRequest` shape (`title`, `data_type`,
1693
+ * `list_id`, `created_by`) plus an OPTIONAL `enrichment` block that, when
1694
+ * supplied, provisions a companion waterfall pipeline in the same
1695
+ * request — so the new column is immediately runnable via
1696
+ * `POST /enrichment/waterfall/enrich`.
1697
+ *
1698
+ * Without the `enrichment` block the column is created, but it has no
1699
+ * enrichment plan; the UI "Enrich" button (and `g8_enrich_contacts` in
1700
+ * waterfall mode) will return 422 (`waterfall_config_missing`) until a
1701
+ * pipeline is provisioned separately via
1702
+ * `POST /enrichment/waterfall/configs`.
1703
+ *
1704
+ * Backwards compatible: callers that previously POSTed only `title` /
1705
+ * `data_type` / `list_id` / `created_by` continue to work unchanged.
1706
+ */
1707
+ export interface CreateContactColumnRequest {
1708
+ /** Email of the user creating the column (for audit). */
1709
+ created_by: string;
1710
+ /** Column data type. Currently only 'text' is supported. */
1711
+ data_type?: ColumnType;
1712
+ /** STRONGLY RECOMMENDED. Optional waterfall enrichment block. When supplied, a companion `enrichment_configs` row is created alongside the column so the UI 'Enrich' button works immediately. Without it the column exists but isn't enrichable until a pipeline is configured via POST /enrichment/waterfall/configs. */
1713
+ enrichment?: CreateFieldEnrichmentInput | null;
1714
+ /** If set, the column is list-scoped (only visible on that list). Required when `enrichment` is supplied — waterfall pipelines are list-scoped. */
1715
+ list_id?: number | null;
1716
+ /** Column title shown in the UI (e.g. 'Lead Score') */
1717
+ title: string;
1718
+ }
1719
+
1720
+ /**
1721
+ * Response shape for `POST /contacts/columns/create`.
1722
+ *
1723
+ * Mirrors the `Column` entity fields verbatim so existing callers reading
1724
+ * `data.id` / `data.title` / `data.name` / `data.is_global` etc. keep
1725
+ * working without code changes. Adds one new optional `enrichment` field
1726
+ * that is populated when the request included an `enrichment` block.
1727
+ */
1728
+ export interface CreateContactColumnResponse {
1729
+ data_type?: ColumnType;
1730
+ /** Populated when the request included an `enrichment` block. Use `enrichment.column_id` for subsequent POST /enrichment/waterfall/enrich calls. */
1731
+ enrichment?: CreateFieldEnrichmentResponse | null;
1732
+ id?: number | null;
1733
+ /** Computed: True when object_id is null/empty (global column). */
1734
+ is_global?: boolean;
1735
+ name?: string | null;
1736
+ object_id?: string | null;
1737
+ title: string;
1738
+ }
1739
+
1740
+ /**
1741
+ * Optional enrichment-pipeline block attached at column-create time.
1742
+ *
1743
+ * When supplied, `POST /fields` creates a companion `enrichment_configs`
1744
+ * row in the same request so the new column is immediately runnable via
1745
+ * `POST /enrichment/waterfall/enrich`. Without this block the column
1746
+ * exists but has no enrichment plan — calling /waterfall/enrich on it
1747
+ * returns 422 (`waterfall_config_missing`).
1748
+ *
1749
+ * Currently only `type='waterfall'` is supported; AI / formula
1750
+ * enrichment will follow once the rest of the agent surface lands.
1751
+ */
1752
+ export interface CreateFieldEnrichmentInput {
1753
+ /** Optional post-enrichment email verification config. */
1754
+ email_verification?: EmailVerificationInput | null;
1755
+ /** Target field identifier. Defaults to the new column's slug. */
1756
+ field_to_enrich?: string | null;
1757
+ /** Pipeline name. Defaults to `<column title> Enrichment` if omitted. */
1758
+ name?: string | null;
1759
+ /** Ordered list of provider names. Without `target_field`, server maps each to its default email-finder action (legacy). With `target_field`, filters the column template to these providers (correct per-field action preserved). Mutually exclusive with `steps`. */
1760
+ providers?: Array<string> | null;
1761
+ /** If true, skip rows where the target field is already populated. */
1762
+ skip_existing_values?: boolean;
1763
+ /** Full caller-supplied step list. Persisted verbatim. Mutually exclusive with `providers`. */
1764
+ steps?: Array<WaterfallStepInput> | null;
1765
+ /** Kind of data this column holds — CONTACT_DIRECT_PHONE, CONTACT_MOBILE_PHONE, CONTACT_WORK_EMAIL, CONTACT_LINKEDIN_URL, COMPANY_PHONE, ... or a friendly synonym ('phone', 'mobile', 'email', 'linkedin'). When set, the pipeline is built from the server's per-column TEMPLATE so each provider runs its CORRECT action for that data kind (e.g. leadmagic `mobile_finder` for a phone, NOT `email_finder`) — the same actions the web UI's 'Add column -> Waterfall' picks. Combine with `providers[]` to keep only those providers from the template. Mutually exclusive with `steps`. When omitted, the legacy `providers[]` email-finder shortcut is unchanged. */
1766
+ target_field?: string | null;
1767
+ /** Pipeline kind. Only 'waterfall' is supported today. */
1768
+ type?: string;
1769
+ }
1770
+
1771
+ /** Echo of the companion enrichment config created by `enrichment` block. */
1772
+ export interface CreateFieldEnrichmentResponse {
1773
+ /** column_id slug to pass to /enrichment/waterfall/enrich */
1774
+ column_id: string;
1775
+ config_id: string;
1776
+ email_verification?: Record<string, unknown> | null;
1777
+ name: string;
1778
+ providers?: Array<string>;
1779
+ type: string;
1780
+ }
1781
+
1782
+ /** An open envelope for a LIST result, so a bare list keeps its shape. */
1783
+ export interface CrmCollectionPayload {
1784
+ items?: Array<unknown>;
1785
+ [key: string]: unknown;
1786
+ }
1787
+
1788
+ /**
1789
+ * An open envelope for one record, one dashboard or one job receipt.
1790
+ *
1791
+ * Open because most of these reads are COMPUTED shapes - an engagement
1792
+ * summary, a next-best-step, an intelligence status - that grow with the
1793
+ * product, and dropping a field from an advisory read makes it say "nothing
1794
+ * to report" rather than "we did not tell you".
1795
+ */
1796
+ export type CrmRecordPayload = Record<string, unknown>;
1797
+
1798
+ /**
1799
+ * How a write path handled the request's custom (dynamic) column keys.
1800
+ *
1801
+ * Shared by every Developer API write surface that accepts custom columns
1802
+ * (``POST /contacts``, ``PUT /contacts/assert[/batch]``,
1803
+ * ``PUT /companies/assert[/batch]``).
1804
+ *
1805
+ * Every field defaults to empty, so a client that ignores this object sees no
1806
+ * behavioural change. It exists because these keys were previously dropped
1807
+ * with NO caller-visible signal — the only trace was a server-side
1808
+ * ``logger.warning`` in ``append_to_audience``.
1809
+ */
1810
+ export interface CustomFieldWriteReport {
1811
+ /** Caller keys for which a NEW custom column was created by this request. */
1812
+ created?: Array<string>;
1813
+ /** Caller keys that matched no custom column and were NOT written. Create the column first (POST /fields) or pass create_missing_fields=true. */
1814
+ ignored?: Array<string>;
1815
+ /** Caller keys that resolved to a custom column and were written. */
1816
+ written?: Array<string>;
1817
+ }
1818
+
1819
+ /**
1820
+ * Email verification config attached to a waterfall pipeline.
1821
+ *
1822
+ * Mirrors the canonical `EmailVerificationConfigDto` in
1823
+ * `enrichment/interfaces/fastapi/waterfall_dtos.py` so the dev-API and the
1824
+ * UI persist an identical settings shape (the CF worker reads `settings.
1825
+ * email_verification.*` regardless of which surface saved the pipeline).
1826
+ */
1827
+ export interface EmailVerificationInput {
1828
+ /** Treat catch-all responses as valid (domains that accept any address). */
1829
+ accept_catchall?: boolean;
1830
+ /** Enable post-enrichment email verification */
1831
+ enabled?: boolean;
1832
+ /** Verification provider. Charges credits when use_system_credentials=True. */
1833
+ provider?: "zerobounce" | "hunter" | "icypeas" | "leadmagic";
1834
+ /** Use graph8-managed API keys (charges credits). False = use org's BYOK keys. */
1835
+ use_system_credentials?: boolean;
1836
+ /** Verification statuses to accept as valid. Typical: ['valid'] or ['valid','catch-all']. */
1837
+ valid_statuses?: Array<string>;
1838
+ }
1839
+
1840
+ /**
1841
+ * Page through contacts, optionally projecting a narrow column set.
1842
+ *
1843
+ * `mapping_columns` is not only a smaller payload: naming a narrow set lets
1844
+ * the planner drop joins the full row would force, so it is materially
1845
+ * cheaper on a wide org.
1846
+ */
1847
+ export interface FetchContactsRequest {
1848
+ /** Serialized per-column filter JSON. Omit for no filter. */
1849
+ filter?: string | null;
1850
+ /** Records per page. */
1851
+ limit?: number;
1852
+ /** Columns to return. Omit for every column. */
1853
+ mapping_columns?: Array<string> | null;
1854
+ /** Page number (1-indexed). */
1855
+ page?: number;
1856
+ }
1857
+
1858
+ /**
1859
+ * One structured filter condition.
1860
+ *
1861
+ * Mirrors `shared.interfaces.fastapi.dtos.DtoCondition`.
1862
+ */
1863
+ export interface FilterCondition {
1864
+ /** Field name to apply the condition to. */
1865
+ field: string;
1866
+ /** Operator, e.g. `=`, `in`, `like`. */
1867
+ operator?: string;
1868
+ /** Value to compare against. */
1869
+ value?: unknown;
1870
+ /** Secondary value, for range operators. */
1871
+ value_to?: unknown | null;
1872
+ }
1873
+
1874
+ /** Which side of a merge wins one field. */
1875
+ export interface MergeFieldOverride {
1876
+ /** Field name, e.g. `CONTACT_JOB_TITLE`. */
1877
+ field: string;
1878
+ /** Which record's value to keep. */
1879
+ winner: "primary" | "secondary";
1880
+ }
1881
+
1882
+ /**
1883
+ * Add every record matching a filter into a target list.
1884
+ *
1885
+ * Mirrors `MergeFilteredContactsRequest` / `MergeFilteredCompaniesRequest`,
1886
+ * which are field-identical. Despite the name this MERGES A SELECTION INTO A
1887
+ * LIST - it does not merge duplicate records together. `/duplicates` is the
1888
+ * surface that does that.
1889
+ *
1890
+ * On a 409 the call is telling you some records need a decision; re-send
1891
+ * with `conflict_resolution` set.
1892
+ */
1893
+ export interface MergeFilteredRequest {
1894
+ /** Required when retrying after a 409. `add_all` takes every warned record, `skip_all` takes none of them, `custom` takes the ids in `include_warned_ids`. Blocked records are excluded either way. */
1895
+ conflict_resolution?: ("add_all" | "skip_all" | "custom") | null;
1896
+ /** Source-column to target-column mapping for custom columns. */
1897
+ dynamic_column_mapping?: Record<string, string>;
1898
+ /** Conditions selecting the source records. */
1899
+ filter?: Array<FilterCondition>;
1900
+ /** With `conflict_resolution=custom`, the warned ids to include. */
1901
+ include_warned_ids?: Array<string> | null;
1902
+ /** Advanced AND/OR filter tree. */
1903
+ segmentFilter?: SegmentFilterGroup | null;
1904
+ /** List the matching records are added to. */
1905
+ target_list_id: number;
1906
+ }
1907
+
1908
+ /**
1909
+ * Merge `secondary_id` INTO the record in the path. The secondary stops existing.
1910
+ *
1911
+ * Mirrors `_MergeContactRequest` / `_MergeCompanyRequest`, which are identical.
1912
+ */
1913
+ export interface MergeRecordRequest {
1914
+ /** The bulk criterion, when `trigger` is `bulk_criterion`. */
1915
+ bulk_criterion?: string | null;
1916
+ /** Decide individual fields instead of the app's rules. */
1917
+ field_overrides?: Array<MergeFieldOverride>;
1918
+ /** The record merged AWAY. */
1919
+ secondary_id: number;
1920
+ /** The duplicate suggestion this merge acts on, if any. */
1921
+ suggestion_id?: string | null;
1922
+ /** What prompted the merge. Recorded on the audit row. */
1923
+ trigger?: "manual" | "bulk_criterion";
1924
+ }
1925
+
1926
+ export interface PaginationMeta {
1927
+ /** Whether there are more pages */
1928
+ has_next: boolean;
1929
+ /** Items per page */
1930
+ limit: number;
1931
+ /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
1932
+ next_cursor?: string | null;
1933
+ /** Current page number (1-indexed) */
1934
+ page: number;
1935
+ /** Total number of items */
1936
+ total: number;
1937
+ }
1938
+
1939
+ /**
1940
+ * Dry-run a duplicate-detection rule. Writes nothing.
1941
+ *
1942
+ * Returns how many pairs the rule would match plus a small sample, which is
1943
+ * the only way to size a rule before auto-merge starts acting on it.
1944
+ */
1945
+ export interface PreviewDetectionRuleRequest {
1946
+ /** Override the default confidence bucket. */
1947
+ confidence_bucket?: ("high" | "medium" | "low") | null;
1948
+ /** Object the rule matches on. */
1949
+ entity_type: "contact" | "company" | "deal";
1950
+ /** Column the rule compares. */
1951
+ field: string;
1952
+ /** How two values are considered equal. */
1953
+ match_mode: "exact" | "normalized" | "fuzzy_levenshtein" | "domain_match" | "phone_e164" | "linkedin_handle";
1954
+ /** Name for the rule being previewed. */
1955
+ rule_name: string;
1956
+ /** Override the platform default score for this rule. */
1957
+ score?: number | null;
1958
+ /** Platform rule template the rule is built from. */
1959
+ template: string;
1960
+ }
1961
+
1962
+ /**
1963
+ * Resolve profile photos for a batch of LinkedIn URLs.
1964
+ *
1965
+ * Returns an entry only for contacts that have an allow-listed https photo,
1966
+ * so a missing key means "no photo", not "lookup failed".
1967
+ */
1968
+ export interface ProfilePicturesRequest {
1969
+ /** LinkedIn profile URLs (deduplicated, max 200). */
1970
+ linkedin_urls?: Array<string>;
1971
+ }
1972
+
1973
+ /**
1974
+ * Read every column value for ONE row, resolved against a list.
1975
+ *
1976
+ * The list decides whether `record_id` is read as a contact or a company,
1977
+ * and which list-scoped custom columns are in play - which is why it is
1978
+ * required rather than inferred.
1979
+ */
1980
+ export interface RecordColumnValuesRequest {
1981
+ /** List the record is read through. */
1982
+ list_id: number;
1983
+ /** Record primary key. */
1984
+ record_id: number;
1985
+ }
1986
+
1987
+ /** Mirrors `duplicates.interfaces.router._RunDetectionRequest`. */
1988
+ export interface RunDetectionRequest {
1989
+ /** What to scan. */
1990
+ entity_type: "contact" | "company" | "deal";
1991
+ }
1992
+
1993
+ /** Mirrors `RunWorkflowRequest`. `run_mode` is closed to the app's three values. */
1994
+ export interface RunRecordWorkflowRequest {
1995
+ /** List (workbench) the workflow belongs to. */
1996
+ list_id: number;
1997
+ /** Rows to run it on, for `selected`. */
1998
+ record_ids: Array<number>;
1999
+ /** Which rows to run on. */
2000
+ run_mode?: "selected" | "filtered" | "all";
2001
+ /** Workflow to run. */
2002
+ workflow_id: string;
2003
+ }
2004
+
2005
+ /** Attach the output of a skill run to a record as a document. */
2006
+ export interface SaveSkillResultRequest {
2007
+ /** Action within that execution. */
2008
+ action_name: string;
2009
+ /** Document body to store. */
2010
+ content: string;
2011
+ /** The skill execution that produced the content. */
2012
+ execution_id: string;
2013
+ }
2014
+
2015
+ /**
2016
+ * An AND/OR group of leaves and nested groups, at most three groups deep.
2017
+ *
2018
+ * Mirrors `SegmentFilterGroup` in `contacts.domain.value_objects.ag_grid_models`.
2019
+ * `op` is closed because the app REFUSES an unrecognised connector rather
2020
+ * than defaulting to AND - defaulting would silently return a different
2021
+ * result set, and on a destructive route that is a different set of records
2022
+ * acted on.
2023
+ *
2024
+ * FIXED DEPTH, NOT RECURSIVE. The app's model is self-referencing; the
2025
+ * published one deliberately is not, because a schema that reaches itself
2026
+ * through `$ref` sends the docs renderer into unbounded recursion. Three
2027
+ * group levels (this one, `SegmentFilterSubgroup`, `SegmentFilterInnerGroup`)
2028
+ * cover every filter the app's own builder produces; the app's larger depth
2029
+ * and leaf budget still applies and surfaces as a 422.
2030
+ */
2031
+ export interface SegmentFilterGroup {
2032
+ /** Nested groups and/or leaf conditions. */
2033
+ children?: Array<SegmentFilterSubgroup | SegmentFilterLeaf>;
2034
+ /** Connector for this group. Case-insensitive. */
2035
+ op: "AND" | "OR" | "and" | "or";
2036
+ }
2037
+
2038
+ /** The third and deepest group level: leaf conditions only. */
2039
+ export interface SegmentFilterInnerGroup {
2040
+ /** Leaf conditions. */
2041
+ children?: Array<SegmentFilterLeaf>;
2042
+ /** Connector for this group. Case-insensitive. */
2043
+ op: "AND" | "OR" | "and" | "or";
2044
+ }
2045
+
2046
+ /**
2047
+ * One field-level condition inside an advanced-filter tree.
2048
+ *
2049
+ * Mirrors `contacts.domain.value_objects.ag_grid_models.SegmentFilterLeaf`.
2050
+ * `op` is CLOSED here: the app compiles its UI vocabulary down to this
2051
+ * canonical set before sending, and an unrecognised operator reaching the
2052
+ * SQL builder is a 500 rather than a refusal naming the valid operators.
2053
+ */
2054
+ export interface SegmentFilterLeaf {
2055
+ /** Column to test, e.g. `CONTACT_JOB_TITLE`. */
2056
+ field: string;
2057
+ /** Comparison to apply. */
2058
+ op: "eq" | "neq" | "lt" | "lte" | "gt" | "gte" | "contains" | "icontains" | "starts_with" | "ends_with" | "in" | "not_in" | "between" | "is_null" | "is_not_null";
2059
+ /** Value to compare against. */
2060
+ value?: unknown | null;
2061
+ /** Upper bound. Only meaningful with `between`. */
2062
+ valueTo?: unknown | null;
2063
+ }
2064
+
2065
+ /** The second group level: leaves and/or innermost groups. */
2066
+ export interface SegmentFilterSubgroup {
2067
+ /** Innermost groups and/or leaf conditions. */
2068
+ children?: Array<SegmentFilterInnerGroup | SegmentFilterLeaf>;
2069
+ /** Connector for this group. Case-insensitive. */
2070
+ op: "AND" | "OR" | "and" | "or";
2071
+ }
2072
+
2073
+ /**
2074
+ * Reveal withheld contact details. SPENDS CREDITS.
2075
+ *
2076
+ * Charges per contact actually unlocked. Already-unlocked contacts are not
2077
+ * charged again, so re-sending the same ids is safe but not free to compute.
2078
+ */
2079
+ export interface UnlockContactInfoRequest {
2080
+ /** Resolve the complete matching set server-side. */
2081
+ allMatching?: boolean;
2082
+ /** Contacts to unlock (max 1000). */
2083
+ contact_ids?: Array<number> | null;
2084
+ /** Per-column filters. */
2085
+ filterModel?: Record<string, unknown>;
2086
+ /** Unlock the contacts in this list. */
2087
+ list_id?: number | null;
2088
+ /** Advanced AND/OR filter tree. */
2089
+ segmentFilter?: SegmentFilterGroup | null;
2090
+ }
2091
+
2092
+ /**
2093
+ * Queue verification for a LIST or a filtered selection.
2094
+ *
2095
+ * SPENDS CREDITS, and unlike the synchronous route the size is not known
2096
+ * when the call returns - `all_matching` resolves the selection server-side.
2097
+ */
2098
+ export interface VerifyContactEmailAsyncRequest {
2099
+ /** Resolve the complete matching set server-side, not just a page. */
2100
+ allMatching?: boolean;
2101
+ /** Per-column filters, keyed by column name. */
2102
+ filterModel?: Record<string, unknown>;
2103
+ /** Restrict the selection to this list. */
2104
+ list_id?: number | null;
2105
+ /** Advanced cross-column AND/OR filter tree. */
2106
+ segmentFilter?: SegmentFilterGroup | null;
2107
+ }
2108
+
2109
+ /**
2110
+ * Re-check the deliverability of a named batch of contacts' emails.
2111
+ *
2112
+ * SPENDS CREDITS: each address is sent to the email-verification service.
2113
+ * Use the async variant for a whole list or a filtered selection.
2114
+ */
2115
+ export interface VerifyContactEmailRequest {
2116
+ /** Contact primary keys (max 1000). Empty verifies nothing. */
2117
+ contact_pks?: Array<number>;
2118
+ }
2119
+
2120
+ /**
2121
+ * Single step in a caller-supplied waterfall sequence.
2122
+ *
2123
+ * Mirrors `WaterfallStepDto` in `enrichment/interfaces/fastapi/waterfall_dtos.py`.
2124
+ * Persisted verbatim into `enrichment_configs.config.steps[]` so the CF
2125
+ * worker can resolve provider, action and credentials the same way
2126
+ * UI-saved pipelines do.
2127
+ */
2128
+ export interface WaterfallStepInput {
2129
+ /** Provider action: lookup_person, find_email, enrich_person, ... */
2130
+ action: string;
2131
+ /** Human-readable label shown in UI. Auto-titled from `action` if omitted. */
2132
+ action_display_name?: string | null;
2133
+ confidence_threshold?: number;
2134
+ /** Provider-specific options (e.g. apollo `reveal_phone_numbers=true`). */
2135
+ config?: Record<string, unknown>;
2136
+ enabled?: boolean;
2137
+ /** Step identifier. Auto-generated (`step_<provider>_<uuid8>`) if omitted. */
2138
+ id?: string | null;
2139
+ /** Maps provider input names to graph8 column identifiers (CONTACT_*). */
2140
+ input_mapping?: Record<string, string>;
2141
+ /** True = use graph8-managed credentials + charge credits. False = use org BYOK. */
2142
+ is_system_provider?: boolean;
2143
+ max_retries?: number;
2144
+ /** 0-indexed execution order. */
2145
+ order?: number;
2146
+ /** Dotted path the worker writes into (e.g. 'contact.work_email'). */
2147
+ output_field?: string | null;
2148
+ /** Optional output field remap (deprecated — prefer `output_field`). */
2149
+ output_mapping?: Record<string, string>;
2150
+ /** Provider name: graph8, hunter, prospeo, dropcontact, apollo, ... */
2151
+ provider: string;
2152
+ stop_on_success?: boolean;
2153
+ }
2154
+
2155
+ /**
2156
+ * Take contacts OUT of a sequence. They stop receiving its steps.
2157
+ *
2158
+ * `remove_all=true` withdraws them from EVERY sequence they are enrolled
2159
+ * in and ignores `sequence_id`; that is the wider blast radius of the two
2160
+ * and it is never the default.
2161
+ */
2162
+ export interface WithdrawFromSequencesRequest {
2163
+ /** Contact primary keys to withdraw (max 5000). */
2164
+ contact_ids?: Array<number>;
2165
+ /** Withdraw from EVERY enrolled sequence. Ignores `sequence_id`. */
2166
+ remove_all?: boolean;
2167
+ /** Sequence to withdraw from. Required unless `remove_all` is true. */
2168
+ sequence_id?: string | null;
2169
+ /** Origin label recorded on the resulting event. */
2170
+ source?: string | null;
2171
+ /** Terminal state to record: removed | completed | not_interested. */
2172
+ target_state?: string | null;
2173
+ }