@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,286 @@
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.assertUpsert` (Assert / Upsert): 6 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<"assert_companies_batch_companies_assert_batch_put">;
9
+ *
10
+ * Reference with examples: assertUpsert.md
11
+ */
12
+ /* eslint-disable */
13
+
14
+ /** `g8.api.assertUpsert.<member>` -> the operationId it calls. */
15
+ export interface AssertUpsertMembers {
16
+ assertCompaniesBatch: "assert_companies_batch_companies_assert_batch_put";
17
+ assertCompany: "assert_company_companies_assert_put";
18
+ assertContact: "assert_contact_contacts_assert_put";
19
+ assertContactsBatch: "assert_contacts_batch_contacts_assert_batch_put";
20
+ assertDeal: "assert_deal_deals_assert_put";
21
+ assertDealContact: "assert_deal_contact_contacts__contact_id__deals_assert_put";
22
+ }
23
+
24
+ /** Input and output of every `g8.api.assertUpsert` operation, keyed by operationId. */
25
+ export interface AssertUpsertOperations {
26
+ /**
27
+ * PUT /companies/assert/batch
28
+ * Assert Companies Batch
29
+ * tier: write · scope: contacts:write
30
+ */
31
+ assert_companies_batch_companies_assert_batch_put: {
32
+ input: {
33
+ headers?: {
34
+ "X-Target-Org-Id"?: string | null;
35
+ };
36
+ body: BatchCompanyAssertRequest;
37
+ };
38
+ output: ApiResponse_BatchAssertResponse_;
39
+ };
40
+ /**
41
+ * PUT /companies/assert
42
+ * Assert Company
43
+ * tier: write · scope: contacts:write
44
+ */
45
+ assert_company_companies_assert_put: {
46
+ input: {
47
+ headers?: {
48
+ "X-Target-Org-Id"?: string | null;
49
+ };
50
+ body: CompanyAssertRequest;
51
+ };
52
+ output: ApiResponse_CompanyAssertResponse_;
53
+ };
54
+ /**
55
+ * PUT /contacts/assert
56
+ * Assert Contact
57
+ * tier: write · scope: contacts:write
58
+ */
59
+ assert_contact_contacts_assert_put: {
60
+ input: {
61
+ headers?: {
62
+ "X-Target-Org-Id"?: string | null;
63
+ };
64
+ body: ContactAssertRequest;
65
+ };
66
+ output: ApiResponse_ContactAssertResponse_;
67
+ };
68
+ /**
69
+ * PUT /contacts/assert/batch
70
+ * Assert Contacts Batch
71
+ * tier: write · scope: contacts:write
72
+ */
73
+ assert_contacts_batch_contacts_assert_batch_put: {
74
+ input: {
75
+ headers?: {
76
+ "X-Target-Org-Id"?: string | null;
77
+ };
78
+ body: BatchContactAssertRequest;
79
+ };
80
+ output: ApiResponse_BatchAssertResponse_;
81
+ };
82
+ /**
83
+ * PUT /deals/assert
84
+ * Assert Deal
85
+ * tier: write · scope: contacts:write
86
+ */
87
+ assert_deal_deals_assert_put: {
88
+ input: {
89
+ headers?: {
90
+ "X-Target-Org-Id"?: string | null;
91
+ };
92
+ body: DealAssertRequest;
93
+ };
94
+ output: ApiResponse_DealAssertResponse_;
95
+ };
96
+ /**
97
+ * PUT /contacts/{contact_id}/deals/assert
98
+ * Assert Deal Contact
99
+ * tier: write · scope: contacts:write
100
+ */
101
+ assert_deal_contact_contacts__contact_id__deals_assert_put: {
102
+ input: {
103
+ path: {
104
+ /** Contact ID */
105
+ contact_id: number;
106
+ };
107
+ headers?: {
108
+ "X-Target-Org-Id"?: string | null;
109
+ };
110
+ body: DealContactAssertRequest;
111
+ };
112
+ output: ApiResponse_dict_;
113
+ };
114
+ }
115
+
116
+ // 17 schemas referenced above (the same as G8Contract.<Name>).
117
+
118
+ export interface ApiResponse_BatchAssertResponse_ {
119
+ data: BatchAssertResponse;
120
+ pagination?: PaginationMeta | null;
121
+ }
122
+
123
+ export interface ApiResponse_CompanyAssertResponse_ {
124
+ data: CompanyAssertResponse;
125
+ pagination?: PaginationMeta | null;
126
+ }
127
+
128
+ export interface ApiResponse_ContactAssertResponse_ {
129
+ data: ContactAssertResponse;
130
+ pagination?: PaginationMeta | null;
131
+ }
132
+
133
+ export interface ApiResponse_DealAssertResponse_ {
134
+ data: DealAssertResponse;
135
+ pagination?: PaginationMeta | null;
136
+ }
137
+
138
+ export interface ApiResponse_dict_ {
139
+ data: Record<string, unknown>;
140
+ pagination?: PaginationMeta | null;
141
+ }
142
+
143
+ export interface BatchAssertResponse {
144
+ created?: number;
145
+ custom_fields?: CustomFieldWriteReport;
146
+ errors?: Array<Record<string, unknown>>;
147
+ total: number;
148
+ updated?: number;
149
+ }
150
+
151
+ export interface BatchCompanyAssertRequest {
152
+ /** Up to 100 companies with domain or linkedin_url */
153
+ companies: Array<Record<string, unknown>>;
154
+ /** When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. */
155
+ create_missing_fields?: boolean;
156
+ /** Target list ID */
157
+ list_id: number;
158
+ }
159
+
160
+ export interface BatchContactAssertRequest {
161
+ /** Up to 100 contacts with work_email or linkedin_url */
162
+ contacts: Array<Record<string, unknown>>;
163
+ /** When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. */
164
+ create_missing_fields?: boolean;
165
+ /** Target list ID */
166
+ list_id: number;
167
+ }
168
+
169
+ export interface CompanyAssertRequest {
170
+ annual_revenue?: string | null;
171
+ city?: string | null;
172
+ country?: string | null;
173
+ /** When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. */
174
+ create_missing_fields?: boolean;
175
+ /** Custom column values to write on this record, 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 that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true. */
176
+ custom_fields?: (Record<string, string | null>) | null;
177
+ description?: string | null;
178
+ /** Company domain (primary match key) */
179
+ domain?: string | null;
180
+ employee_count?: number | null;
181
+ industry?: string | null;
182
+ /** LinkedIn URL (fallback match key) */
183
+ linkedin_url?: string | null;
184
+ /** Target list ID */
185
+ list_id: number;
186
+ name?: string | null;
187
+ state?: string | null;
188
+ website?: string | null;
189
+ }
190
+
191
+ export interface CompanyAssertResponse {
192
+ /** 'created' or 'updated' */
193
+ action: string;
194
+ count?: number;
195
+ custom_fields?: CustomFieldWriteReport;
196
+ }
197
+
198
+ export interface ContactAssertRequest {
199
+ city?: string | null;
200
+ company_domain?: string | null;
201
+ country?: string | null;
202
+ /** When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. */
203
+ create_missing_fields?: boolean;
204
+ /** Custom column values to write on this record, 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 that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true. */
205
+ custom_fields?: (Record<string, string | null>) | null;
206
+ direct_phone?: string | null;
207
+ first_name?: string | null;
208
+ job_department?: string | null;
209
+ job_title?: string | null;
210
+ last_name?: string | null;
211
+ /** LinkedIn URL (fallback match key) */
212
+ linkedin_url?: string | null;
213
+ /** Target list ID */
214
+ list_id: number;
215
+ mobile_phone?: string | null;
216
+ personal_emails?: string | null;
217
+ seniority_level?: string | null;
218
+ state?: string | null;
219
+ /** Work email (primary match key) */
220
+ work_email?: string | null;
221
+ }
222
+
223
+ export interface ContactAssertResponse {
224
+ /** 'created' or 'updated' */
225
+ action: string;
226
+ count?: number;
227
+ custom_fields?: CustomFieldWriteReport;
228
+ }
229
+
230
+ /**
231
+ * How a write path handled the request's custom (dynamic) column keys.
232
+ *
233
+ * Shared by every Developer API write surface that accepts custom columns
234
+ * (``POST /contacts``, ``PUT /contacts/assert[/batch]``,
235
+ * ``PUT /companies/assert[/batch]``).
236
+ *
237
+ * Every field defaults to empty, so a client that ignores this object sees no
238
+ * behavioural change. It exists because these keys were previously dropped
239
+ * with NO caller-visible signal — the only trace was a server-side
240
+ * ``logger.warning`` in ``append_to_audience``.
241
+ */
242
+ export interface CustomFieldWriteReport {
243
+ /** Caller keys for which a NEW custom column was created by this request. */
244
+ created?: Array<string>;
245
+ /** Caller keys that matched no custom column and were NOT written. Create the column first (POST /fields) or pass create_missing_fields=true. */
246
+ ignored?: Array<string>;
247
+ /** Caller keys that resolved to a custom column and were written. */
248
+ written?: Array<string>;
249
+ }
250
+
251
+ export interface DealAssertRequest {
252
+ amount?: number | null;
253
+ close_date?: string | null;
254
+ /** Company ID (match key, combined with name) */
255
+ company_id?: string | null;
256
+ currency?: string | null;
257
+ description?: string | null;
258
+ /** Deal name (match key) */
259
+ name: string;
260
+ pipeline_id?: string | null;
261
+ stage_id?: string | null;
262
+ }
263
+
264
+ export interface DealAssertResponse {
265
+ /** 'created' or 'updated' */
266
+ action: string;
267
+ deal_id: string;
268
+ }
269
+
270
+ export interface DealContactAssertRequest {
271
+ /** Deal ID to associate */
272
+ deal_id: string;
273
+ }
274
+
275
+ export interface PaginationMeta {
276
+ /** Whether there are more pages */
277
+ has_next: boolean;
278
+ /** Items per page */
279
+ limit: number;
280
+ /** 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. */
281
+ next_cursor?: string | null;
282
+ /** Current page number (1-indexed) */
283
+ page: number;
284
+ /** Total number of items */
285
+ total: number;
286
+ }
@@ -0,0 +1,370 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.assertUpsert`: Assert / Upsert
4
+
5
+ 6 operations (6 write).
6
+
7
+ 1 of these also have a hand-written method (`g8.contacts`), marked **★** below. Prefer the hand-written method when one exists: it unwraps the `data` envelope and takes friendlier arguments. See [../sdk-clients.md](../sdk-clients.md).
8
+
9
+ Every example below assumes this setup (server-side, API key):
10
+
11
+ ```ts
12
+ import { g8 } from "@graph8/sdk";
13
+
14
+ g8.init({ apiKey: process.env.G8_API_KEY! });
15
+ ```
16
+
17
+ Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
18
+
19
+ Exact TypeScript types for every operation on this page, and every schema they use: [assertUpsert.d.ts](assertUpsert.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`assertCompaniesBatch`](#op-assertcompaniesbatch) | `PUT /api/v1/companies/assert/batch` | write | `contacts:write` | Assert Companies Batch |
26
+ | [`assertCompany`](#op-assertcompany) | `PUT /api/v1/companies/assert` | write | `contacts:write` | Assert Company |
27
+ | [`assertContact`](#op-assertcontact) ★ | `PUT /api/v1/contacts/assert` | write | `contacts:write` | Assert Contact |
28
+ | [`assertContactsBatch`](#op-assertcontactsbatch) | `PUT /api/v1/contacts/assert/batch` | write | `contacts:write` | Assert Contacts Batch |
29
+ | [`assertDeal`](#op-assertdeal) | `PUT /api/v1/deals/assert` | write | `contacts:write` | Assert Deal |
30
+ | [`assertDealContact`](#op-assertdealcontact) | `PUT /api/v1/contacts/{contact_id}/deals/assert` | write | `contacts:write` | Assert Deal Contact |
31
+
32
+ ---
33
+
34
+ <a id="op-assertcompaniesbatch"></a>
35
+
36
+ ### `g8.api.assertUpsert.assertCompaniesBatch(input)`
37
+
38
+ **Assert Companies Batch**
39
+
40
+ - HTTP: `PUT /api/v1/companies/assert/batch`
41
+ - operationId: `assert_companies_batch_companies_assert_batch_put` (also callable as `g8.api.call("assert_companies_batch_companies_assert_batch_put", input)`)
42
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
43
+ - API-key scope: `contacts:write`
44
+
45
+ Batch create or update up to 100 companies. Matches by domain, then linkedin_url.
46
+
47
+ **Input**
48
+
49
+ | Field | Type | Required | Description |
50
+ |---|---|---|---|
51
+ | `body` | `BatchCompanyAssertRequest` | yes | Request body; fields below. |
52
+
53
+ Body fields (`BatchCompanyAssertRequest`):
54
+
55
+ | Field | Type | Required | Description |
56
+ |---|---|---|---|
57
+ | `body.companies` | `Array<Record<string, unknown>>` | yes | Up to 100 companies with domain or linkedin_url max items 100 |
58
+ | `body.list_id` | `integer` | yes | Target list ID |
59
+ | `body.create_missing_fields` | `boolean` | no | When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. default `false` |
60
+
61
+ **Returns** `ApiResponse_BatchAssertResponse_`: the envelope `{ data: BatchAssertResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
62
+
63
+ Other envelope fields: `pagination` (PaginationMeta).
64
+
65
+ `BatchAssertResponse` fields:
66
+
67
+ | Field | Type | Required | Description |
68
+ |---|---|---|---|
69
+ | `total` | `integer` | yes | |
70
+ | `created` | `integer` | no | default `0` |
71
+ | `custom_fields` | `CustomFieldWriteReport` | no | |
72
+ | `errors` | `Array<Record<string, unknown>>` | no | default `[]` |
73
+ | `updated` | `integer` | no | default `0` |
74
+
75
+ **Example**
76
+
77
+ ```ts
78
+ const result = await g8.api.assertUpsert.assertCompaniesBatch({ body: { companies: [{}], list_id: 123 } });
79
+ ```
80
+
81
+ ---
82
+
83
+ <a id="op-assertcompany"></a>
84
+
85
+ ### `g8.api.assertUpsert.assertCompany(input)`
86
+
87
+ **Assert Company**
88
+
89
+ - HTTP: `PUT /api/v1/companies/assert`
90
+ - operationId: `assert_company_companies_assert_put` (also callable as `g8.api.call("assert_company_companies_assert_put", input)`)
91
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
92
+ - API-key scope: `contacts:write`
93
+
94
+ Create or update a company. Matches by domain, then linkedin_url.
95
+
96
+ **Input**
97
+
98
+ | Field | Type | Required | Description |
99
+ |---|---|---|---|
100
+ | `body` | `CompanyAssertRequest` | yes | Request body; fields below. |
101
+
102
+ Body fields (`CompanyAssertRequest`):
103
+
104
+ | Field | Type | Required | Description |
105
+ |---|---|---|---|
106
+ | `body.list_id` | `integer` | yes | Target list ID |
107
+ | `body.annual_revenue` | `string \| null` | no | |
108
+ | `body.city` | `string \| null` | no | |
109
+ | `body.country` | `string \| null` | no | |
110
+ | `body.create_missing_fields` | `boolean` | no | When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. default `false` |
111
+ | `body.custom_fields` | `Record<string, string \| null> \| null` | no | Custom column values to write on this record, 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 that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true. |
112
+ | `body.description` | `string \| null` | no | |
113
+ | `body.domain` | `string \| null` | no | Company domain (primary match key) |
114
+ | `body.employee_count` | `integer \| null` | no | |
115
+ | `body.industry` | `string \| null` | no | |
116
+ | `body.linkedin_url` | `string \| null` | no | LinkedIn URL (fallback match key) |
117
+ | `body.name` | `string \| null` | no | |
118
+ | `body.state` | `string \| null` | no | |
119
+ | `body.website` | `string \| null` | no | |
120
+
121
+ **Returns** `ApiResponse_CompanyAssertResponse_`: the envelope `{ data: CompanyAssertResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
122
+
123
+ Other envelope fields: `pagination` (PaginationMeta).
124
+
125
+ `CompanyAssertResponse` fields:
126
+
127
+ | Field | Type | Required | Description |
128
+ |---|---|---|---|
129
+ | `action` | `string` | yes | 'created' or 'updated' |
130
+ | `count` | `integer` | no | default `1` |
131
+ | `custom_fields` | `CustomFieldWriteReport` | no | |
132
+
133
+ **Example**
134
+
135
+ ```ts
136
+ const result = await g8.api.assertUpsert.assertCompany({ body: { list_id: 123 } });
137
+ ```
138
+
139
+ ---
140
+
141
+ <a id="op-assertcontact"></a>
142
+
143
+ ### `g8.api.assertUpsert.assertContact(input)`
144
+
145
+ **Assert Contact**
146
+
147
+ - HTTP: `PUT /api/v1/contacts/assert`
148
+ - operationId: `assert_contact_contacts_assert_put` (also callable as `g8.api.call("assert_contact_contacts_assert_put", input)`)
149
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
150
+ - API-key scope: `contacts:write`
151
+ - ★ Hand-written: [`g8.contacts.upsert()`](../sdk-clients.md#g8-contacts-upsert)
152
+
153
+ Create or update a contact. Matches by work_email, then linkedin_url.
154
+
155
+ **Input**
156
+
157
+ | Field | Type | Required | Description |
158
+ |---|---|---|---|
159
+ | `body` | `ContactAssertRequest` | yes | Request body; fields below. |
160
+
161
+ Body fields (`ContactAssertRequest`):
162
+
163
+ | Field | Type | Required | Description |
164
+ |---|---|---|---|
165
+ | `body.list_id` | `integer` | yes | Target list ID |
166
+ | `body.city` | `string \| null` | no | |
167
+ | `body.company_domain` | `string \| null` | no | |
168
+ | `body.country` | `string \| null` | no | |
169
+ | `body.create_missing_fields` | `boolean` | no | When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. default `false` |
170
+ | `body.custom_fields` | `Record<string, string \| null> \| null` | no | Custom column values to write on this record, 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 that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true. |
171
+ | `body.direct_phone` | `string \| null` | no | |
172
+ | `body.first_name` | `string \| null` | no | |
173
+ | `body.job_department` | `string \| null` | no | |
174
+ | `body.job_title` | `string \| null` | no | |
175
+ | `body.last_name` | `string \| null` | no | |
176
+ | `body.linkedin_url` | `string \| null` | no | LinkedIn URL (fallback match key) |
177
+ | `body.mobile_phone` | `string \| null` | no | |
178
+ | `body.personal_emails` | `string \| null` | no | |
179
+ | `body.seniority_level` | `string \| null` | no | |
180
+ | `body.state` | `string \| null` | no | |
181
+ | `body.work_email` | `string \| null` | no | Work email (primary match key) |
182
+
183
+ **Returns** `ApiResponse_ContactAssertResponse_`: the envelope `{ data: ContactAssertResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
184
+
185
+ Other envelope fields: `pagination` (PaginationMeta).
186
+
187
+ `ContactAssertResponse` fields:
188
+
189
+ | Field | Type | Required | Description |
190
+ |---|---|---|---|
191
+ | `action` | `string` | yes | 'created' or 'updated' |
192
+ | `count` | `integer` | no | default `1` |
193
+ | `custom_fields` | `CustomFieldWriteReport` | no | |
194
+
195
+ **Example**
196
+
197
+ ```ts
198
+ const result = await g8.api.assertUpsert.assertContact({ body: { list_id: 123 } });
199
+ ```
200
+
201
+ ---
202
+
203
+ <a id="op-assertcontactsbatch"></a>
204
+
205
+ ### `g8.api.assertUpsert.assertContactsBatch(input)`
206
+
207
+ **Assert Contacts Batch**
208
+
209
+ - HTTP: `PUT /api/v1/contacts/assert/batch`
210
+ - operationId: `assert_contacts_batch_contacts_assert_batch_put` (also callable as `g8.api.call("assert_contacts_batch_contacts_assert_batch_put", input)`)
211
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
212
+ - API-key scope: `contacts:write`
213
+
214
+ Batch create or update up to 100 contacts. Matches by work_email, then linkedin_url.
215
+
216
+ **Input**
217
+
218
+ | Field | Type | Required | Description |
219
+ |---|---|---|---|
220
+ | `body` | `BatchContactAssertRequest` | yes | Request body; fields below. |
221
+
222
+ Body fields (`BatchContactAssertRequest`):
223
+
224
+ | Field | Type | Required | Description |
225
+ |---|---|---|---|
226
+ | `body.contacts` | `Array<Record<string, unknown>>` | yes | Up to 100 contacts with work_email or linkedin_url max items 100 |
227
+ | `body.list_id` | `integer` | yes | Target list ID |
228
+ | `body.create_missing_fields` | `boolean` | no | When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly. default `false` |
229
+
230
+ **Returns** `ApiResponse_BatchAssertResponse_`: the envelope `{ data: BatchAssertResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
231
+
232
+ Other envelope fields: `pagination` (PaginationMeta).
233
+
234
+ `BatchAssertResponse` fields:
235
+
236
+ | Field | Type | Required | Description |
237
+ |---|---|---|---|
238
+ | `total` | `integer` | yes | |
239
+ | `created` | `integer` | no | default `0` |
240
+ | `custom_fields` | `CustomFieldWriteReport` | no | |
241
+ | `errors` | `Array<Record<string, unknown>>` | no | default `[]` |
242
+ | `updated` | `integer` | no | default `0` |
243
+
244
+ **Example**
245
+
246
+ ```ts
247
+ const result = await g8.api.assertUpsert.assertContactsBatch({ body: { contacts: [{}], list_id: 123 } });
248
+ ```
249
+
250
+ ---
251
+
252
+ <a id="op-assertdeal"></a>
253
+
254
+ ### `g8.api.assertUpsert.assertDeal(input)`
255
+
256
+ **Assert Deal**
257
+
258
+ - HTTP: `PUT /api/v1/deals/assert`
259
+ - operationId: `assert_deal_deals_assert_put` (also callable as `g8.api.call("assert_deal_deals_assert_put", input)`)
260
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
261
+ - API-key scope: `contacts:write`
262
+
263
+ Create or update a deal. Matches by name + company_id.
264
+
265
+ Deliberately NOT wired into the closed-stage gates or the completeness
266
+ rule: assert is the sync-shaped surface (external systems pushing state,
267
+ no human to answer a 400), the same category the internal router excludes
268
+ for POST /v1/deals/webhook/sync and the CRM pull worker (#15530
269
+ "Out of scope"). Only input hygiene applies here: ids must exist and
270
+ close_date must parse.
271
+
272
+ #16060: a stage move made here now emits ``deal.stage_changed`` and writes
273
+ ``cb_deal_stage_history``, like every other stage writer. ``background_tasks``
274
+ is injected (not a body field, so the request schema is unchanged) and the
275
+ publish is queued only after the session context has exited — a rolled-back
276
+ assert publishes nothing. Because assert is the sync-shaped surface, the
277
+ SAME stage arrives on every tick of the caller's poll loop: the event fires
278
+ only on an actual transition, never on a re-assert of the current stage.
279
+
280
+ **Input**
281
+
282
+ | Field | Type | Required | Description |
283
+ |---|---|---|---|
284
+ | `body` | `DealAssertRequest` | yes | Request body; fields below. |
285
+
286
+ Body fields (`DealAssertRequest`):
287
+
288
+ | Field | Type | Required | Description |
289
+ |---|---|---|---|
290
+ | `body.name` | `string` | yes | Deal name (match key) |
291
+ | `body.amount` | `number \| null` | no | |
292
+ | `body.close_date` | `string \| null` | no | |
293
+ | `body.company_id` | `string \| null` | no | Company ID (match key, combined with name) |
294
+ | `body.currency` | `string \| null` | no | |
295
+ | `body.description` | `string \| null` | no | |
296
+ | `body.pipeline_id` | `string \| null` | no | |
297
+ | `body.stage_id` | `string \| null` | no | |
298
+
299
+ **Returns** `ApiResponse_DealAssertResponse_`: the envelope `{ data: DealAssertResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
300
+
301
+ Other envelope fields: `pagination` (PaginationMeta).
302
+
303
+ `DealAssertResponse` fields:
304
+
305
+ | Field | Type | Required | Description |
306
+ |---|---|---|---|
307
+ | `action` | `string` | yes | 'created' or 'updated' |
308
+ | `deal_id` | `string` | yes | |
309
+
310
+ **Example**
311
+
312
+ ```ts
313
+ const result = await g8.api.assertUpsert.assertDeal({ body: { name: "Example" } });
314
+ ```
315
+
316
+ ---
317
+
318
+ <a id="op-assertdealcontact"></a>
319
+
320
+ ### `g8.api.assertUpsert.assertDealContact(input)`
321
+
322
+ **Assert Deal Contact**
323
+
324
+ - HTTP: `PUT /api/v1/contacts/{contact_id}/deals/assert`
325
+ - operationId: `assert_deal_contact_contacts__contact_id__deals_assert_put` (also callable as `g8.api.call("assert_deal_contact_contacts__contact_id__deals_assert_put", input)`)
326
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
327
+ - API-key scope: `contacts:write`
328
+
329
+ Assert a deal-contact association. Idempotent — no error if already linked.
330
+
331
+ **Input**
332
+
333
+ | Field | Type | Required | Description |
334
+ |---|---|---|---|
335
+ | `path.contact_id` | `integer` | yes | Contact ID |
336
+ | `body` | `DealContactAssertRequest` | yes | Request body; fields below. |
337
+
338
+ Body fields (`DealContactAssertRequest`):
339
+
340
+ | Field | Type | Required | Description |
341
+ |---|---|---|---|
342
+ | `body.deal_id` | `string` | yes | Deal ID to associate |
343
+
344
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
345
+
346
+ Other envelope fields: `pagination` (PaginationMeta).
347
+
348
+ **Example**
349
+
350
+ ```ts
351
+ const result = await g8.api.assertUpsert.assertDealContact({ path: { contact_id: 123 }, body: { deal_id: "id" } });
352
+ ```
353
+
354
+ ---
355
+
356
+ ## Referenced types
357
+
358
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
359
+
360
+ <a id="type-customfieldwritereport"></a>
361
+
362
+ ### `CustomFieldWriteReport`
363
+
364
+ How a write path handled the request's custom (dynamic) column keys. Shared by every Developer API write surface that accepts custom columns (``POST /contacts``, ``PUT /contacts/assert[/batch]``, ``PUT /companies/assert[/batch]``). Every field defaults to empty, so a client that ignores this object sees no behavioural change. It exists because these keys were previously dropped with NO caller-visible signal — the only trace was a server-side ``logger.warning`` in ``append_to_audience``.
365
+
366
+ | Field | Type | Required | Description |
367
+ |---|---|---|---|
368
+ | `created` | `Array<string>` | no | Caller keys for which a NEW custom column was created by this request. |
369
+ | `ignored` | `Array<string>` | no | Caller keys that matched no custom column and were NOT written. Create the column first (POST /fields) or pass create_missing_fields=true. |
370
+ | `written` | `Array<string>` | no | Caller keys that resolved to a custom column and were written. |