@graph8/sdk 0.251.0 → 0.260.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +9 -2
  2. package/dist/cli.js +216 -0
  3. package/dist/index.d.mts +104 -7
  4. package/dist/index.d.ts +104 -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 +102 -7
  10. package/dist/react.d.ts +102 -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 +1696 -0
  140. package/docs/api/deals.md +2432 -0
  141. package/docs/api/deliverability.d.ts +418 -0
  142. package/docs/api/deliverability.md +677 -0
  143. package/docs/api/desk.d.ts +1765 -0
  144. package/docs/api/desk.md +3007 -0
  145. package/docs/api/dialer.d.ts +1185 -0
  146. package/docs/api/dialer.md +2166 -0
  147. package/docs/api/dialerAnalytics.d.ts +187 -0
  148. package/docs/api/dialerAnalytics.md +257 -0
  149. package/docs/api/documents.d.ts +895 -0
  150. package/docs/api/documents.md +1440 -0
  151. package/docs/api/duplicates.d.ts +195 -0
  152. package/docs/api/duplicates.md +315 -0
  153. package/docs/api/eSign.d.ts +38 -0
  154. package/docs/api/eSign.md +54 -0
  155. package/docs/api/eSignature.d.ts +242 -0
  156. package/docs/api/eSignature.md +341 -0
  157. package/docs/api/enrichment.d.ts +3207 -0
  158. package/docs/api/enrichment.md +5225 -0
  159. package/docs/api/events.d.ts +115 -0
  160. package/docs/api/events.md +105 -0
  161. package/docs/api/fields.d.ts +482 -0
  162. package/docs/api/fields.md +566 -0
  163. package/docs/api/forms.d.ts +1012 -0
  164. package/docs/api/forms.md +1542 -0
  165. package/docs/api/gtmCampaigns.d.ts +662 -0
  166. package/docs/api/gtmCampaigns.md +1044 -0
  167. package/docs/api/gtmContext.d.ts +1187 -0
  168. package/docs/api/gtmContext.md +2112 -0
  169. package/docs/api/gtmDeliverability.d.ts +60 -0
  170. package/docs/api/gtmDeliverability.md +63 -0
  171. package/docs/api/gtmKnowledgeBase.d.ts +76 -0
  172. package/docs/api/gtmKnowledgeBase.md +91 -0
  173. package/docs/api/gtmLaunchHelpers.d.ts +123 -0
  174. package/docs/api/gtmLaunchHelpers.md +148 -0
  175. package/docs/api/gtmLibrary.d.ts +448 -0
  176. package/docs/api/gtmLibrary.md +780 -0
  177. package/docs/api/health.d.ts +39 -0
  178. package/docs/api/health.md +58 -0
  179. package/docs/api/imageLibrary.d.ts +341 -0
  180. package/docs/api/imageLibrary.md +569 -0
  181. package/docs/api/imports.d.ts +157 -0
  182. package/docs/api/imports.md +174 -0
  183. package/docs/api/inbox.d.ts +709 -0
  184. package/docs/api/inbox.md +1067 -0
  185. package/docs/api/install.d.ts +213 -0
  186. package/docs/api/install.md +317 -0
  187. package/docs/api/installedApps.d.ts +131 -0
  188. package/docs/api/installedApps.md +241 -0
  189. package/docs/api/integrationStatus.d.ts +142 -0
  190. package/docs/api/integrationStatus.md +205 -0
  191. package/docs/api/integrations.d.ts +2327 -0
  192. package/docs/api/integrations.md +3791 -0
  193. package/docs/api/intent.d.ts +482 -0
  194. package/docs/api/intent.md +858 -0
  195. package/docs/api/knowledge.d.ts +501 -0
  196. package/docs/api/knowledge.md +843 -0
  197. package/docs/api/knowledgeBase.d.ts +84 -0
  198. package/docs/api/knowledgeBase.md +96 -0
  199. package/docs/api/landingPages.d.ts +1411 -0
  200. package/docs/api/landingPages.md +2488 -0
  201. package/docs/api/leads.d.ts +133 -0
  202. package/docs/api/leads.md +180 -0
  203. package/docs/api/library.d.ts +217 -0
  204. package/docs/api/library.md +338 -0
  205. package/docs/api/linkedIn.d.ts +227 -0
  206. package/docs/api/linkedIn.md +289 -0
  207. package/docs/api/linkedInOutreach.d.ts +727 -0
  208. package/docs/api/linkedInOutreach.md +990 -0
  209. package/docs/api/lists.d.ts +1106 -0
  210. package/docs/api/lists.md +1609 -0
  211. package/docs/api/logs.d.ts +71 -0
  212. package/docs/api/logs.md +70 -0
  213. package/docs/api/mailboxes.d.ts +1050 -0
  214. package/docs/api/mailboxes.md +1690 -0
  215. package/docs/api/marketingIntelligence.d.ts +256 -0
  216. package/docs/api/marketingIntelligence.md +454 -0
  217. package/docs/api/marketplace.d.ts +3173 -0
  218. package/docs/api/marketplace.md +5953 -0
  219. package/docs/api/mcp.d.ts +69 -0
  220. package/docs/api/mcp.md +69 -0
  221. package/docs/api/me.d.ts +54 -0
  222. package/docs/api/me.md +56 -0
  223. package/docs/api/meetings.d.ts +539 -0
  224. package/docs/api/meetings.md +747 -0
  225. package/docs/api/newsletter.d.ts +1613 -0
  226. package/docs/api/newsletter.md +2746 -0
  227. package/docs/api/notes.d.ts +517 -0
  228. package/docs/api/notes.md +888 -0
  229. package/docs/api/notifications.d.ts +94 -0
  230. package/docs/api/notifications.md +105 -0
  231. package/docs/api/objects.d.ts +621 -0
  232. package/docs/api/objects.md +1098 -0
  233. package/docs/api/openSearch.d.ts +234 -0
  234. package/docs/api/openSearch.md +297 -0
  235. package/docs/api/ops.d.ts +299 -0
  236. package/docs/api/ops.md +339 -0
  237. package/docs/api/orgGovernance.d.ts +393 -0
  238. package/docs/api/orgGovernance.md +623 -0
  239. package/docs/api/orgVideos.d.ts +184 -0
  240. package/docs/api/orgVideos.md +252 -0
  241. package/docs/api/organizationSettings.d.ts +626 -0
  242. package/docs/api/organizationSettings.md +911 -0
  243. package/docs/api/phoneNumbers.d.ts +484 -0
  244. package/docs/api/phoneNumbers.md +777 -0
  245. package/docs/api/profile.d.ts +329 -0
  246. package/docs/api/profile.md +540 -0
  247. package/docs/api/programmaticPages.d.ts +400 -0
  248. package/docs/api/programmaticPages.md +626 -0
  249. package/docs/api/providerDomains.d.ts +866 -0
  250. package/docs/api/providerDomains.md +1446 -0
  251. package/docs/api/providerUsage.d.ts +129 -0
  252. package/docs/api/providerUsage.md +186 -0
  253. package/docs/api/public.d.ts +69 -0
  254. package/docs/api/public.md +78 -0
  255. package/docs/api/publicCopilot.d.ts +67 -0
  256. package/docs/api/publicCopilot.md +80 -0
  257. package/docs/api/publicSignals.d.ts +66 -0
  258. package/docs/api/publicSignals.md +71 -0
  259. package/docs/api/publicVisitors.d.ts +97 -0
  260. package/docs/api/publicVisitors.md +118 -0
  261. package/docs/api/quotes.d.ts +1564 -0
  262. package/docs/api/quotes.md +2553 -0
  263. package/docs/api/radar.d.ts +808 -0
  264. package/docs/api/radar.md +1431 -0
  265. package/docs/api/radarReports.d.ts +208 -0
  266. package/docs/api/radarReports.md +306 -0
  267. package/docs/api/recordRoles.d.ts +143 -0
  268. package/docs/api/recordRoles.md +175 -0
  269. package/docs/api/repos.d.ts +146 -0
  270. package/docs/api/repos.md +211 -0
  271. package/docs/api/research.d.ts +295 -0
  272. package/docs/api/research.md +534 -0
  273. package/docs/api/revenue.d.ts +402 -0
  274. package/docs/api/revenue.md +608 -0
  275. package/docs/api/revenueAnalytics.d.ts +147 -0
  276. package/docs/api/revenueAnalytics.md +212 -0
  277. package/docs/api/revenueLifecycle.d.ts +207 -0
  278. package/docs/api/revenueLifecycle.md +274 -0
  279. package/docs/api/revenueRecords.d.ts +372 -0
  280. package/docs/api/revenueRecords.md +563 -0
  281. package/docs/api/roles.d.ts +431 -0
  282. package/docs/api/roles.md +812 -0
  283. package/docs/api/salesCoach.d.ts +877 -0
  284. package/docs/api/salesCoach.md +1540 -0
  285. package/docs/api/sandbox.d.ts +210 -0
  286. package/docs/api/sandbox.md +380 -0
  287. package/docs/api/scans.d.ts +104 -0
  288. package/docs/api/scans.md +136 -0
  289. package/docs/api/scheduleBuy.d.ts +293 -0
  290. package/docs/api/scheduleBuy.md +431 -0
  291. package/docs/api/scraping.d.ts +266 -0
  292. package/docs/api/scraping.md +383 -0
  293. package/docs/api/sdrAnalytics.d.ts +138 -0
  294. package/docs/api/sdrAnalytics.md +246 -0
  295. package/docs/api/search.d.ts +598 -0
  296. package/docs/api/search.md +866 -0
  297. package/docs/api/seo.d.ts +447 -0
  298. package/docs/api/seo.md +660 -0
  299. package/docs/api/sequenceLifecycle.d.ts +439 -0
  300. package/docs/api/sequenceLifecycle.md +513 -0
  301. package/docs/api/sequences.d.ts +1936 -0
  302. package/docs/api/sequences.md +3232 -0
  303. package/docs/api/settings.d.ts +448 -0
  304. package/docs/api/settings.md +731 -0
  305. package/docs/api/signals.d.ts +1441 -0
  306. package/docs/api/signals.md +2526 -0
  307. package/docs/api/signatures.d.ts +719 -0
  308. package/docs/api/signatures.md +1247 -0
  309. package/docs/api/skills.d.ts +230 -0
  310. package/docs/api/skills.md +466 -0
  311. package/docs/api/snippet.d.ts +85 -0
  312. package/docs/api/snippet.md +106 -0
  313. package/docs/api/socialPublishing.d.ts +824 -0
  314. package/docs/api/socialPublishing.md +1245 -0
  315. package/docs/api/studioDocuments.d.ts +244 -0
  316. package/docs/api/studioDocuments.md +348 -0
  317. package/docs/api/support.d.ts +90 -0
  318. package/docs/api/support.md +76 -0
  319. package/docs/api/suppressions.d.ts +241 -0
  320. package/docs/api/suppressions.md +343 -0
  321. package/docs/api/surveys.d.ts +847 -0
  322. package/docs/api/surveys.md +1223 -0
  323. package/docs/api/tasks.d.ts +813 -0
  324. package/docs/api/tasks.md +1344 -0
  325. package/docs/api/teamMembers.d.ts +668 -0
  326. package/docs/api/teamMembers.md +1040 -0
  327. package/docs/api/teams.d.ts +784 -0
  328. package/docs/api/teams.md +1395 -0
  329. package/docs/api/usage.d.ts +277 -0
  330. package/docs/api/usage.md +389 -0
  331. package/docs/api/visitors.d.ts +690 -0
  332. package/docs/api/visitors.md +1075 -0
  333. package/docs/api/voice.d.ts +4661 -0
  334. package/docs/api/voice.md +7905 -0
  335. package/docs/api/webAnalytics.d.ts +964 -0
  336. package/docs/api/webAnalytics.md +1452 -0
  337. package/docs/api/webChat.d.ts +1704 -0
  338. package/docs/api/webChat.md +2048 -0
  339. package/docs/api/webhooks.d.ts +251 -0
  340. package/docs/api/webhooks.md +386 -0
  341. package/docs/api/websiteEditor.d.ts +324 -0
  342. package/docs/api/websiteEditor.md +517 -0
  343. package/docs/api/work.d.ts +2298 -0
  344. package/docs/api/work.md +3096 -0
  345. package/docs/api/workbench.d.ts +2962 -0
  346. package/docs/api/workbench.md +4884 -0
  347. package/docs/api/workflows.d.ts +1218 -0
  348. package/docs/api/workflows.md +2302 -0
  349. package/docs/sdk-clients.md +4339 -0
  350. package/package.json +10 -3
@@ -0,0 +1,2211 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.companies`: Companies
4
+
5
+ 50 operations (25 read, 9 write, 5 destructive, 11 billable).
6
+
7
+ 8 of these also have a hand-written method (`g8.companies`), 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: [companies.d.ts](companies.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`assignCompanyOwner`](#op-assigncompanyowner) | `POST /api/v1/companies/assign-owner` | write | `companies:write` | Assign Company Owner |
26
+ | [`attachCompanyContact`](#op-attachcompanycontact) | `POST /api/v1/companies/{company_id}/contacts/{contact_id}` | write | `companies:write` | Attach Company Contact |
27
+ | [`bulkEnrichCompanies`](#op-bulkenrichcompanies) | `POST /api/v1/companies/enrich/bulk` | billable | `enrichment:run` | Bulk Enrich Companies |
28
+ | [`bulkEnrichCompanyPeople`](#op-bulkenrichcompanypeople) | `POST /api/v1/companies/enrich/people/bulk` | billable | `enrichment:run` | Bulk Enrich Company People |
29
+ | [`bulkEnrichCompanyStakeholders`](#op-bulkenrichcompanystakeholders) | `POST /api/v1/companies/enrich/stakeholders/bulk` | billable | `enrichment:run` | Bulk Enrich Company Stakeholders |
30
+ | [`createCompany`](#op-createcompany) ★ | `POST /api/v1/companies` | write | `companies:write` | Create Company |
31
+ | [`createCompanyColumn`](#op-createcompanycolumn) ★ | `POST /api/v1/companies/columns/create` | write | `companies:write` | Create Company Column |
32
+ | [`createCompanyTask`](#op-createcompanytask) | `POST /api/v1/companies/{company_id}/tasks` | write | `companies:write` | Create Company Task |
33
+ | [`deleteCompany`](#op-deletecompany) ★ | `DELETE /api/v1/companies/{company_id}` | destructive | `companies:delete` | Delete Company |
34
+ | [`deleteCompanyColumn`](#op-deletecompanycolumn) | `DELETE /api/v1/companies/columns/{column_id}` | destructive | `companies:delete` | Delete Company Column |
35
+ | [`deleteCompanyDocument`](#op-deletecompanydocument) | `DELETE /api/v1/companies/{company_id}/documents/{document_id}` | destructive | `companies:delete` | Delete Company Document |
36
+ | [`enrichCompany`](#op-enrichcompany) | `POST /api/v1/companies/{company_id}/enrich` | billable | `enrichment:run` | Enrich Company |
37
+ | [`generateCompanyDocument`](#op-generatecompanydocument) | `POST /api/v1/companies/{company_id}/documents/types/{doc_type}/generate` | billable | `enrichment:run` | Generate Company Document |
38
+ | [`getCompaniesOpenJobs`](#op-getcompaniesopenjobs) | `POST /api/v1/companies/open-jobs` | read | `companies:read` | Get Companies Open Jobs |
39
+ | [`getCompany`](#op-getcompany) ★ | `GET /api/v1/companies/{company_id}` | read | `companies:read` | Get Company |
40
+ | [`getCompanyBillingPrefill`](#op-getcompanybillingprefill) | `GET /api/v1/companies/{company_id}/billing-prefill` | read | `companies:read` | Get Company Billing Prefill |
41
+ | [`getCompanyContacts`](#op-getcompanycontacts) ★ | `GET /api/v1/companies/{company_id}/contacts` | read | `companies:read` | Get Company Contacts |
42
+ | [`getCompanyDashboard`](#op-getcompanydashboard) | `GET /api/v1/companies/{company_id}/dashboard` | read | `companies:read` | Get Company Dashboard |
43
+ | [`getCompanyDetail`](#op-getcompanydetail) | `GET /api/v1/companies/{company_id}/detail` | read | `companies:read` | Get Company Detail |
44
+ | [`getCompanyEngagementSummary`](#op-getcompanyengagementsummary) | `GET /api/v1/companies/{company_id}/engagement-summary` | read | `companies:read` | Get Company Engagement Summary |
45
+ | [`getCompanyFormFields`](#op-getcompanyformfields) | `GET /api/v1/companies/form-fields` | read | `companies:read` | Get Company Form Fields |
46
+ | [`getCompanyIcpFit`](#op-getcompanyicpfit) | `GET /api/v1/companies/{company_id}/icp-fit` | read | `companies:read` | Get Company Icp Fit |
47
+ | [`getCompanyIntelligenceData`](#op-getcompanyintelligencedata) | `GET /api/v1/companies/{company_id}/intelligence-data/{data_type}` | read | `companies:read` | Get Company Intelligence Data |
48
+ | [`getCompanyIntelligenceStatus`](#op-getcompanyintelligencestatus) | `GET /api/v1/companies/{company_id}/intelligence-status` | read | `companies:read` | Get Company Intelligence Status |
49
+ | [`getCompanyIntelligenceSteps`](#op-getcompanyintelligencesteps) | `GET /api/v1/companies/{company_id}/intelligence-steps` | read | `companies:read` | Get Company Intelligence Steps |
50
+ | [`getCompanyNextBestStep`](#op-getcompanynextbeststep) | `GET /api/v1/companies/{company_id}/next-best-step` | billable | `enrichment:run` | Get Company Next Best Step |
51
+ | [`getCompanyReviewStats`](#op-getcompanyreviewstats) | `GET /api/v1/companies/review-stats` | read | `companies:read` | Get Company Review Stats |
52
+ | [`getCompanySignals`](#op-getcompanysignals) | `GET /api/v1/companies/{company_id}/signals` | read | `companies:read` | Get Company Signals |
53
+ | [`getCompanySitesVisited`](#op-getcompanysitesvisited) | `GET /api/v1/companies/{company_id}/sites-visited` | read | `companies:read` | Get Company Sites Visited |
54
+ | [`getCompanySynthesisReadiness`](#op-getcompanysynthesisreadiness) | `GET /api/v1/companies/{company_id}/synthesis-readiness` | read | `companies:read` | Get Company Synthesis Readiness |
55
+ | [`getCompanyWorkflowStatus`](#op-getcompanyworkflowstatus) | `GET /api/v1/companies/{company_id}/workflow-status` | read | `companies:read` | Get Company Workflow Status |
56
+ | [`importCompanies`](#op-importcompanies) | `POST /api/v1/companies/import` | billable | `enrichment:run` | Import Companies |
57
+ | [`listCompanies`](#op-listcompanies) ★ | `GET /api/v1/companies` | read | `companies:read` | List Companies |
58
+ | [`listCompaniesEnriched`](#op-listcompaniesenriched) | `GET /api/v1/companies/enriched` | read | `companies:read` | List Companies Enriched |
59
+ | [`listCompanyColumns`](#op-listcompanycolumns) ★ | `GET /api/v1/companies/columns` | read | `companies:read` | List Company Columns |
60
+ | [`listCompanyDocuments`](#op-listcompanydocuments) | `GET /api/v1/companies/{company_id}/documents` | read | `companies:read` | List Company Documents |
61
+ | [`listCompanyPeople`](#op-listcompanypeople) | `GET /api/v1/companies/{company_id}/people` | read | `companies:read` | List Company People |
62
+ | [`listCompanyTasks`](#op-listcompanytasks) | `GET /api/v1/companies/{company_id}/tasks` | read | `companies:read` | List Company Tasks |
63
+ | [`listContactsAcrossCompanies`](#op-listcontactsacrosscompanies) | `GET /api/v1/companies/contacts` | read | `companies:read` | List Contacts Across Companies |
64
+ | [`mergeCompany`](#op-mergecompany) | `POST /api/v1/companies/{company_id}/merge` | destructive | `companies:delete` | Merge Company |
65
+ | [`mergeFilteredCompanies`](#op-mergefilteredcompanies) | `POST /api/v1/companies/merge-filtered` | write | `companies:write` | Merge Filtered Companies |
66
+ | [`previewCompanyMerge`](#op-previewcompanymerge) | `GET /api/v1/companies/{company_id}/merge/preview` | read | `companies:read` | Preview Company Merge |
67
+ | [`refreshCompanyBillingPrefill`](#op-refreshcompanybillingprefill) | `POST /api/v1/companies/{company_id}/billing-prefill/refresh` | write | `companies:write` | Refresh Company Billing Prefill |
68
+ | [`regenerateCompanyDocument`](#op-regeneratecompanydocument) | `POST /api/v1/companies/{company_id}/documents/types/{doc_type}/regenerate` | billable | `enrichment:run` | Regenerate Company Document |
69
+ | [`removeCompanyContact`](#op-removecompanycontact) | `DELETE /api/v1/companies/{company_id}/contacts/{contact_id}` | destructive | `companies:delete` | Remove Company Contact |
70
+ | [`retryCompanyIntelligence`](#op-retrycompanyintelligence) | `POST /api/v1/companies/{company_id}/retry-intelligence` | billable | `enrichment:run` | Retry Company Intelligence |
71
+ | [`retryCompanySynthesis`](#op-retrycompanysynthesis) | `POST /api/v1/companies/{company_id}/retry-synthesis` | billable | `enrichment:run` | Retry Company Synthesis |
72
+ | [`saveSkillResultToCompany`](#op-saveskillresulttocompany) | `POST /api/v1/companies/{company_id}/documents/from-skill` | write | `companies:write` | Save Skill Result To Company |
73
+ | [`startCompanyWorkflow`](#op-startcompanyworkflow) | `POST /api/v1/companies/{company_id}/workflows/{workflow_type}/start` | billable | `enrichment:run` | Start Company Workflow |
74
+ | [`updateCompany`](#op-updatecompany) ★ | `PATCH /api/v1/companies/{company_id}` | write | `companies:write` | Update Company |
75
+
76
+ ---
77
+
78
+ <a id="op-assigncompanyowner"></a>
79
+
80
+ ### `g8.api.companies.assignCompanyOwner(input)`
81
+
82
+ **Assign Company Owner**
83
+
84
+ - HTTP: `POST /api/v1/companies/assign-owner`
85
+ - operationId: `assign_company_owner_companies_assign_owner_post` (also callable as `g8.api.call("assign_company_owner_companies_assign_owner_post", input)`)
86
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
87
+ - API-key scope: `companies:write`
88
+
89
+ Set the owner on EVERY company matching a selection.
90
+
91
+ The selection is resolved server-side, so the number of companies affected
92
+ is not bounded by anything in the request. A null `owner_id` UNASSIGNS
93
+ them all.
94
+
95
+ **Input**
96
+
97
+ | Field | Type | Required | Description |
98
+ |---|---|---|---|
99
+ | `body` | `AssignOwnerMatchingRequest` | yes | Request body; fields below. |
100
+
101
+ Body fields (`AssignOwnerMatchingRequest`):
102
+
103
+ | Field | Type | Required | Description |
104
+ |---|---|---|---|
105
+ | `body.filterModel` | `Record<string, unknown>` | no | Per-column filters. |
106
+ | `body.list_id` | `integer \| null` | no | Restrict the selection to this list. |
107
+ | `body.owner_id` | `string \| null` | no | Owner to assign. Null clears the owner on every match. |
108
+ | `body.segmentFilter` | `SegmentFilterGroup \| null` | no | Advanced AND/OR filter tree. |
109
+
110
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
111
+
112
+ Other envelope fields: `pagination` (PaginationMeta).
113
+
114
+ **Example**
115
+
116
+ ```ts
117
+ const result = await g8.api.companies.assignCompanyOwner({ body: {} });
118
+ ```
119
+
120
+ ---
121
+
122
+ <a id="op-attachcompanycontact"></a>
123
+
124
+ ### `g8.api.companies.attachCompanyContact(input)`
125
+
126
+ **Attach Company Contact**
127
+
128
+ - HTTP: `POST /api/v1/companies/{company_id}/contacts/{contact_id}`
129
+ - operationId: `attach_company_contact_companies__company_id__contacts__contact_id__post` (also callable as `g8.api.call("attach_company_contact_companies__company_id__contacts__contact_id__post", input)`)
130
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
131
+ - API-key scope: `companies:write`
132
+
133
+ Link a contact to this company. The contact is gated inside the app handler.
134
+
135
+ **Input**
136
+
137
+ | Field | Type | Required | Description |
138
+ |---|---|---|---|
139
+ | `path.company_id` | `string` | yes | Company id. |
140
+ | `path.contact_id` | `string` | yes | Contact to link to the company. |
141
+
142
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
143
+
144
+ Other envelope fields: `pagination` (PaginationMeta).
145
+
146
+ **Example**
147
+
148
+ ```ts
149
+ const result = await g8.api.companies.attachCompanyContact({ path: { company_id: "id", contact_id: "id" } });
150
+ ```
151
+
152
+ ---
153
+
154
+ <a id="op-bulkenrichcompanies"></a>
155
+
156
+ ### `g8.api.companies.bulkEnrichCompanies(input?)`
157
+
158
+ **Bulk Enrich Companies**
159
+
160
+ - HTTP: `POST /api/v1/companies/enrich/bulk`
161
+ - operationId: `bulk_enrich_companies_companies_enrich_bulk_post` (also callable as `g8.api.call("bulk_enrich_companies_companies_enrich_bulk_post", input)`)
162
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
163
+ - API-key scope: `enrichment:run`
164
+
165
+ Enrich EVERY company in the org that still lacks firmographics. SPENDS CREDITS.
166
+
167
+ One paid provider lookup per company. There is no selection: the scope is
168
+ the whole org, so the spend is bounded by the org's data, not the request.
169
+
170
+ **Input**: none.
171
+
172
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
173
+
174
+ Other envelope fields: `pagination` (PaginationMeta).
175
+
176
+ **Example**
177
+
178
+ ```ts
179
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
180
+ const result = await g8.api.companies.bulkEnrichCompanies();
181
+ ```
182
+
183
+ ---
184
+
185
+ <a id="op-bulkenrichcompanypeople"></a>
186
+
187
+ ### `g8.api.companies.bulkEnrichCompanyPeople(input?)`
188
+
189
+ **Bulk Enrich Company People**
190
+
191
+ - HTTP: `POST /api/v1/companies/enrich/people/bulk`
192
+ - operationId: `bulk_enrich_company_people_companies_enrich_people_bulk_post` (also callable as `g8.api.call("bulk_enrich_company_people_companies_enrich_people_bulk_post", input)`)
193
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
194
+ - API-key scope: `enrichment:run`
195
+
196
+ Enrich the people of every company in the org. SPENDS CREDITS. Org-wide.
197
+
198
+ **Input**: none.
199
+
200
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
201
+
202
+ Other envelope fields: `pagination` (PaginationMeta).
203
+
204
+ **Example**
205
+
206
+ ```ts
207
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
208
+ const result = await g8.api.companies.bulkEnrichCompanyPeople();
209
+ ```
210
+
211
+ ---
212
+
213
+ <a id="op-bulkenrichcompanystakeholders"></a>
214
+
215
+ ### `g8.api.companies.bulkEnrichCompanyStakeholders(input?)`
216
+
217
+ **Bulk Enrich Company Stakeholders**
218
+
219
+ - HTTP: `POST /api/v1/companies/enrich/stakeholders/bulk`
220
+ - operationId: `bulk_enrich_company_stakeholders_companies_enrich_stakeholders_bulk_post` (also callable as `g8.api.call("bulk_enrich_company_stakeholders_companies_enrich_stakeholders_bulk_post", input)`)
221
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
222
+ - API-key scope: `enrichment:run`
223
+
224
+ Find and enrich the buying committee at every company. SPENDS CREDITS. Org-wide.
225
+
226
+ **Input**: none.
227
+
228
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
229
+
230
+ Other envelope fields: `pagination` (PaginationMeta).
231
+
232
+ **Example**
233
+
234
+ ```ts
235
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
236
+ const result = await g8.api.companies.bulkEnrichCompanyStakeholders();
237
+ ```
238
+
239
+ ---
240
+
241
+ <a id="op-createcompany"></a>
242
+
243
+ ### `g8.api.companies.createCompany(input)`
244
+
245
+ **Create Company**
246
+
247
+ - HTTP: `POST /api/v1/companies`
248
+ - operationId: `create_company_companies_post` (also callable as `g8.api.call("create_company_companies_post", input)`)
249
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
250
+ - API-key scope: `companies:write`
251
+ - ★ Hand-written: [`g8.companies.create()`](../sdk-clients.md#g8-companies-create)
252
+
253
+ Create a company.
254
+
255
+ ``domain`` is required; the company is deduped by domain (an existing
256
+ company with the same domain is reused rather than duplicated). Returns the
257
+ ``company_id`` (mashup_companies.id) — pass it to
258
+ ``g8_update_contact``/``company_id`` to attach the company to a contact, or
259
+ use it on a deal. Optionally add the company to a list via ``list_id``.
260
+
261
+ Routes to the same production ``CreateCompanyHandler`` the in-app "add
262
+ company" flow uses (dedups, generates COMPANY_ID, creates the ABM/CRM
263
+ overlay so the company is immediately pickable on a Deal).
264
+
265
+ **Input**
266
+
267
+ | Field | Type | Required | Description |
268
+ |---|---|---|---|
269
+ | `body` | `CompanyCreateRequest` | yes | Request body; fields below. |
270
+
271
+ Body fields (`CompanyCreateRequest`):
272
+
273
+ | Field | Type | Required | Description |
274
+ |---|---|---|---|
275
+ | `body.domain` | `string` | yes | Company domain, e.g. acme.com (required) |
276
+ | `body.address` | `string \| null` | no | |
277
+ | `body.city` | `string \| null` | no | |
278
+ | `body.country` | `string \| null` | no | |
279
+ | `body.employee_count` | `string \| null` | no | |
280
+ | `body.industry` | `string \| null` | no | |
281
+ | `body.linkedin_url` | `string \| null` | no | |
282
+ | `body.list_id` | `integer \| null` | no | Optional list to add the company to after creation |
283
+ | `body.name` | `string \| null` | no | |
284
+ | `body.phone` | `string \| null` | no | |
285
+ | `body.state` | `string \| null` | no | |
286
+ | `body.website` | `string \| null` | no | |
287
+ | `body.zip` | `string \| null` | no | |
288
+
289
+ **Returns** `ApiResponse_CompanyCreateResponse_`: the envelope `{ data: CompanyCreateResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
290
+
291
+ Other envelope fields: `pagination` (PaginationMeta).
292
+
293
+ `CompanyCreateResponse` fields:
294
+
295
+ | Field | Type | Required | Description |
296
+ |---|---|---|---|
297
+ | `status` | `string` | yes | |
298
+ | `company_id` | `integer \| null` | no | |
299
+ | `merged` | `boolean` | no | default `false` |
300
+
301
+ **Example**
302
+
303
+ ```ts
304
+ const result = await g8.api.companies.createCompany({ body: { domain: "acme.com" } });
305
+ ```
306
+
307
+ ---
308
+
309
+ <a id="op-createcompanycolumn"></a>
310
+
311
+ ### `g8.api.companies.createCompanyColumn(input)`
312
+
313
+ **Create Company Column**
314
+
315
+ - HTTP: `POST /api/v1/companies/columns/create`
316
+ - operationId: `create_company_column_companies_columns_create_post` (also callable as `g8.api.call("create_company_column_companies_columns_create_post", input)`)
317
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
318
+ - API-key scope: `companies:write`
319
+ - ★ Hand-written: [`g8.companies.createColumn()`](../sdk-clients.md#g8-companies-createcolumn)
320
+
321
+ Create a custom company column. Global if list_id is null, list-scoped otherwise.
322
+
323
+ Optionally pass an `enrichment` block to provision a companion waterfall
324
+ pipeline in the same request — STRONGLY RECOMMENDED so the UI 'Enrich'
325
+ button works out-of-the-box. Without it the column is created but isn't
326
+ enrichable until a pipeline is provisioned via
327
+ POST /enrichment/waterfall/configs.
328
+
329
+ **Input**
330
+
331
+ | Field | Type | Required | Description |
332
+ |---|---|---|---|
333
+ | `body` | `CreateCompanyColumnRequest` | yes | Request body; fields below. |
334
+
335
+ Body fields (`CreateCompanyColumnRequest`):
336
+
337
+ | Field | Type | Required | Description |
338
+ |---|---|---|---|
339
+ | `body.created_by` | `string (email)` | yes | Email of the user creating the column (for audit). |
340
+ | `body.title` | `string` | yes | Column title shown in the UI (e.g. 'Tier') |
341
+ | `body.data_type` | `ColumnType` | no | Column data type. Currently only 'text' is supported. default `"text"` |
342
+ | `body.enrichment` | `CreateFieldEnrichmentInput \| null` | no | 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. |
343
+ | `body.list_id` | `integer \| null` | no | If set, the column is list-scoped (only visible on that list). Required when `enrichment` is supplied — waterfall pipelines are list-scoped. |
344
+
345
+ **Returns** `ApiResponse_CreateCompanyColumnResponse_`: the envelope `{ data: CreateCompanyColumnResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
346
+
347
+ Other envelope fields: `pagination` (PaginationMeta).
348
+
349
+ `CreateCompanyColumnResponse` fields:
350
+
351
+ | Field | Type | Required | Description |
352
+ |---|---|---|---|
353
+ | `title` | `string` | yes | |
354
+ | `data_type` | `ColumnType` | no | default `"text"` |
355
+ | `enrichment` | `CreateFieldEnrichmentResponse \| null` | no | Populated when the request included an `enrichment` block. Use `enrichment.column_id` for subsequent POST /enrichment/waterfall/enrich calls. |
356
+ | `id` | `integer \| null` | no | |
357
+ | `is_global` | `boolean` | no | Computed: True when object_id is null/empty (global column). default `false` |
358
+ | `name` | `string \| null` | no | |
359
+ | `object_id` | `string \| null` | no | |
360
+
361
+ **Example**
362
+
363
+ ```ts
364
+ const result = await g8.api.companies.createCompanyColumn({ body: { created_by: "jane@acme.com", title: "Example" } });
365
+ ```
366
+
367
+ ---
368
+
369
+ <a id="op-createcompanytask"></a>
370
+
371
+ ### `g8.api.companies.createCompanyTask(input)`
372
+
373
+ **Create Company Task**
374
+
375
+ - HTTP: `POST /api/v1/companies/{company_id}/tasks`
376
+ - operationId: `create_company_task_companies__company_id__tasks_post` (also callable as `g8.api.call("create_company_task_companies__company_id__tasks_post", input)`)
377
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
378
+ - API-key scope: `companies:write`
379
+
380
+ Create a task attached to this company.
381
+
382
+ **Input**
383
+
384
+ | Field | Type | Required | Description |
385
+ |---|---|---|---|
386
+ | `path.company_id` | `integer` | yes | Company id. |
387
+ | `body` | `CompanyTaskCreateRequest` | yes | Request body; fields below. |
388
+
389
+ Body fields (`CompanyTaskCreateRequest`):
390
+
391
+ | Field | Type | Required | Description |
392
+ |---|---|---|---|
393
+ | `body.title` | `string` | yes | Task title. |
394
+ | `body.assignee_id` | `string \| null` | no | Assignee user id. |
395
+ | `body.assignee_name` | `string \| null` | no | Assignee display name. |
396
+ | `body.description` | `string \| null` | no | Task body. |
397
+ | `body.due_date` | `string \| null` | no | ISO-8601 due date. |
398
+ | `body.priority` | `integer \| null` | no | Priority, higher is more urgent. |
399
+ | `body.tags` | `Array<string> \| null` | no | Up to 20 labels. max items 20 |
400
+ | `body.task_type` | `string \| null` | no | Task type, e.g. `call`. |
401
+
402
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
403
+
404
+ Other envelope fields: `pagination` (PaginationMeta).
405
+
406
+ **Example**
407
+
408
+ ```ts
409
+ const result = await g8.api.companies.createCompanyTask({ path: { company_id: 123 }, body: { title: "Example" } });
410
+ ```
411
+
412
+ ---
413
+
414
+ <a id="op-deletecompany"></a>
415
+
416
+ ### `g8.api.companies.deleteCompany(input)`
417
+
418
+ **Delete Company**
419
+
420
+ - HTTP: `DELETE /api/v1/companies/{company_id}`
421
+ - operationId: `delete_company_companies__company_id__delete` (also callable as `g8.api.call("delete_company_companies__company_id__delete", input)`)
422
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
423
+ - API-key scope: `companies:delete`
424
+ - ★ Hand-written: [`g8.companies.delete()`](../sdk-clients.md#g8-companies-delete)
425
+
426
+ Soft-delete a company.
427
+
428
+ **Input**
429
+
430
+ | Field | Type | Required | Description |
431
+ |---|---|---|---|
432
+ | `path.company_id` | `integer` | yes | Company ID |
433
+
434
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
435
+
436
+ Other envelope fields: `pagination` (PaginationMeta).
437
+
438
+ **Example**
439
+
440
+ ```ts
441
+ // destructive: deletes or archives data; confirm with a human before calling.
442
+ const result = await g8.api.companies.deleteCompany({ path: { company_id: 123 } });
443
+ ```
444
+
445
+ ---
446
+
447
+ <a id="op-deletecompanycolumn"></a>
448
+
449
+ ### `g8.api.companies.deleteCompanyColumn(input)`
450
+
451
+ **Delete Company Column**
452
+
453
+ - HTTP: `DELETE /api/v1/companies/columns/{column_id}`
454
+ - operationId: `delete_company_column_companies_columns__column_id__delete` (also callable as `g8.api.call("delete_company_column_companies_columns__column_id__delete", input)`)
455
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
456
+ - API-key scope: `companies:delete`
457
+
458
+ Soft-delete a custom company column (sets deleted_at; data is not physically removed).
459
+
460
+ **Input**
461
+
462
+ | Field | Type | Required | Description |
463
+ |---|---|---|---|
464
+ | `path.column_id` | `integer` | yes | ID of the column to delete |
465
+
466
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
467
+
468
+ Other envelope fields: `pagination` (PaginationMeta).
469
+
470
+ **Example**
471
+
472
+ ```ts
473
+ // destructive: deletes or archives data; confirm with a human before calling.
474
+ const result = await g8.api.companies.deleteCompanyColumn({ path: { column_id: 123 } });
475
+ ```
476
+
477
+ ---
478
+
479
+ <a id="op-deletecompanydocument"></a>
480
+
481
+ ### `g8.api.companies.deleteCompanyDocument(input)`
482
+
483
+ **Delete Company Document**
484
+
485
+ - HTTP: `DELETE /api/v1/companies/{company_id}/documents/{document_id}`
486
+ - operationId: `delete_company_document_companies__company_id__documents__document_id__delete` (also callable as `g8.api.call("delete_company_document_companies__company_id__documents__document_id__delete", input)`)
487
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
488
+ - API-key scope: `companies:delete`
489
+
490
+ Delete one generated document PERMANENTLY. Regenerating it spends credits.
491
+
492
+ **Input**
493
+
494
+ | Field | Type | Required | Description |
495
+ |---|---|---|---|
496
+ | `path.company_id` | `string` | yes | Company id. |
497
+ | `path.document_id` | `string` | yes | Document id. |
498
+
499
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
500
+
501
+ Other envelope fields: `pagination` (PaginationMeta).
502
+
503
+ **Example**
504
+
505
+ ```ts
506
+ // destructive: deletes or archives data; confirm with a human before calling.
507
+ const result = await g8.api.companies.deleteCompanyDocument({ path: { company_id: "id", document_id: "id" } });
508
+ ```
509
+
510
+ ---
511
+
512
+ <a id="op-enrichcompany"></a>
513
+
514
+ ### `g8.api.companies.enrichCompany(input)`
515
+
516
+ **Enrich Company**
517
+
518
+ - HTTP: `POST /api/v1/companies/{company_id}/enrich`
519
+ - operationId: `enrich_company_companies__company_id__enrich_post` (also callable as `g8.api.call("enrich_company_companies__company_id__enrich_post", input)`)
520
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
521
+ - API-key scope: `enrichment:run`
522
+
523
+ Look this company up with the enrichment provider. SPENDS CREDITS.
524
+
525
+ Queues the lookup and returns immediately; the fields land on the company
526
+ when it completes. A company with no domain is refused - the lookup is by
527
+ domain.
528
+
529
+ The app spells this route after the provider it happens to use today. That
530
+ name is not published here: which provider runs is an implementation
531
+ detail, and the route would have to be renamed the day it changes.
532
+
533
+ **Input**
534
+
535
+ | Field | Type | Required | Description |
536
+ |---|---|---|---|
537
+ | `path.company_id` | `string` | yes | Company id. |
538
+
539
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
540
+
541
+ Other envelope fields: `pagination` (PaginationMeta).
542
+
543
+ **Example**
544
+
545
+ ```ts
546
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
547
+ const result = await g8.api.companies.enrichCompany({ path: { company_id: "id" } });
548
+ ```
549
+
550
+ ---
551
+
552
+ <a id="op-generatecompanydocument"></a>
553
+
554
+ ### `g8.api.companies.generateCompanyDocument(input)`
555
+
556
+ **Generate Company Document**
557
+
558
+ - HTTP: `POST /api/v1/companies/{company_id}/documents/types/{doc_type}/generate`
559
+ - operationId: `generate_company_document_companies__company_id__documents_types__doc_type__generate_post` (also callable as `g8.api.call("generate_company_document_companies__company_id__documents_types__doc_type__generate_post", input)`)
560
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
561
+ - API-key scope: `enrichment:run`
562
+
563
+ Generate ONE document of this type. SPENDS CREDITS. Asynchronous.
564
+
565
+ `types/` separates the document TYPE from a document id, so this can
566
+ never be confused with `DELETE /companies/{id}/documents/{document_id}`.
567
+
568
+ **Input**
569
+
570
+ | Field | Type | Required | Description |
571
+ |---|---|---|---|
572
+ | `path.company_id` | `string` | yes | Company id. |
573
+ | `path.doc_type` | `string` | yes | Document type, e.g. `account_brief`. |
574
+
575
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
576
+
577
+ Other envelope fields: `pagination` (PaginationMeta).
578
+
579
+ **Example**
580
+
581
+ ```ts
582
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
583
+ const result = await g8.api.companies.generateCompanyDocument({ path: { company_id: "id", doc_type: "example" } });
584
+ ```
585
+
586
+ ---
587
+
588
+ <a id="op-getcompaniesopenjobs"></a>
589
+
590
+ ### `g8.api.companies.getCompaniesOpenJobs(input)`
591
+
592
+ **Get Companies Open Jobs**
593
+
594
+ - HTTP: `POST /api/v1/companies/open-jobs`
595
+ - operationId: `get_companies_open_jobs_companies_open_jobs_post` (also callable as `g8.api.call("get_companies_open_jobs_companies_open_jobs_post", input)`)
596
+ - Tier: `read`: reads data; safe to call and to retry
597
+ - API-key scope: `companies:read`
598
+
599
+ What are these CRM companies hiring for, right now?
600
+
601
+ A growth/buying signal: a company staffing up is a company with budget.
602
+ Unrelated to `/marketplace/job-posts`, which publishes SDR roles you are
603
+ recruiting for - both are called "jobs" but they share no data.
604
+
605
+ `company_ids` are `mashup_companies.id` values, NOT `linkedin_company_id`.
606
+ Both are bare ints, so passing the wrong one addresses a different company
607
+ rather than erroring.
608
+
609
+ Results split into `items` (resolved) and `unresolved`. An unresolved
610
+ company is normal: it means the company could not be matched to a LinkedIn
611
+ company page, not that it is not hiring. Read `lcid_confidence` before
612
+ trusting a match - 1.0 is an exact LinkedIn-URL match, 0.7 is a domain
613
+ fallback that can mismatch on shared or parked domains. `open_jobs` counts
614
+ postings seen within `window_days`; the source carries no open/closed state,
615
+ so a filled role lingers until it ages out.
616
+
617
+ Org isolation is by Postgres schema, so ids belonging to another org come
618
+ back as `unresolved` with no existence disclosure. Owner-level RBAC
619
+ (`CompanyScopeFilter`) is deliberately not applied: it reads
620
+ `user.permissions`, which an API-key user does not carry, so wiring it in
621
+ would resolve every API-key caller to scope "none" and return zero rows.
622
+
623
+ **Input**
624
+
625
+ | Field | Type | Required | Description |
626
+ |---|---|---|---|
627
+ | `body` | `CompaniesOpenJobsRequest` | yes | Request body; fields below. |
628
+
629
+ Body fields (`CompaniesOpenJobsRequest`):
630
+
631
+ | Field | Type | Required | Description |
632
+ |---|---|---|---|
633
+ | `body.company_ids` | `Array<integer>` | yes | CRM company IDs (mashup_companies.id) - NOT linkedin_company_id min items 1, max items 200 |
634
+ | `body.include_postings` | `boolean` | no | False = counts only (one CH query) default `true` |
635
+ | `body.include_subsidiaries` | `boolean` | no | Roll subsidiary postings into the parent. Off by default: one row = one company. NOTE: when true, `jobs` expands to child companies but `open_jobs` stays parent-only, so len(jobs) can exceed open_jobs. default `false` |
636
+ | `body.limit_per_company` | `integer` | no | default `25`, min 1, max 50 |
637
+ | `body.window_days` | `integer` | no | default `60`, min 1, max 365 |
638
+
639
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
640
+
641
+ Other envelope fields: `pagination` (PaginationMeta).
642
+
643
+ **Example**
644
+
645
+ ```ts
646
+ const result = await g8.api.companies.getCompaniesOpenJobs({ body: { company_ids: [123] } });
647
+ ```
648
+
649
+ ---
650
+
651
+ <a id="op-getcompany"></a>
652
+
653
+ ### `g8.api.companies.getCompany(input)`
654
+
655
+ **Get Company**
656
+
657
+ - HTTP: `GET /api/v1/companies/{company_id}`
658
+ - operationId: `get_company_companies__company_id__get` (also callable as `g8.api.call("get_company_companies__company_id__get", input)`)
659
+ - Tier: `read`: reads data; safe to call and to retry
660
+ - API-key scope: `companies:read`
661
+ - ★ Hand-written: [`g8.companies.get()`](../sdk-clients.md#g8-companies-get)
662
+
663
+ Get detailed information about a single company.
664
+
665
+ **Input**
666
+
667
+ | Field | Type | Required | Description |
668
+ |---|---|---|---|
669
+ | `path.company_id` | `integer` | yes | Company ID |
670
+ | `query.include_custom_fields` | `boolean` | no | When true, the response includes a `custom_fields` object of custom column values keyed by column slug. Default false omits it. default `false` |
671
+
672
+ **Returns** `ApiResponse_CompanyResponse_`: the envelope `{ data: CompanyResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
673
+
674
+ Other envelope fields: `pagination` (PaginationMeta).
675
+
676
+ `CompanyResponse` fields:
677
+
678
+ | Field | Type | Required | Description |
679
+ |---|---|---|---|
680
+ | `id` | `integer` | yes | |
681
+ | `address` | `string \| null` | no | |
682
+ | `city` | `string \| null` | no | |
683
+ | `contact_count` | `integer \| null` | no | |
684
+ | `country` | `string \| null` | no | |
685
+ | `created_at` | `string \| null` | no | |
686
+ | `crunchbase_url` | `string \| null` | no | |
687
+ | `custom_fields` | `Record<string, string \| null> \| null` | no | |
688
+ | `description` | `string \| null` | no | |
689
+ | `domain` | `string \| null` | no | |
690
+ | `employee_count` | `string \| null` | no | |
691
+ | `facebook_url` | `string \| null` | no | |
692
+ | `founded_year` | `integer \| null` | no | |
693
+ | `industry` | `string \| null` | no | |
694
+ | `industry_group` | `string \| null` | no | |
695
+ | `linkedin_followers` | `string \| null` | no | |
696
+ | `linkedin_url` | `string \| null` | no | |
697
+ | `logo_url` | `string \| null` | no | |
698
+ | `meta_data` | `Record<string, unknown> \| null` | no | |
699
+ | `name` | `string \| null` | no | |
700
+ | `phone` | `string \| null` | no | |
701
+ | `revenue` | `string \| null` | no | |
702
+ | `state` | `string \| null` | no | |
703
+ | `twitter_url` | `string \| null` | no | |
704
+ | `updated_at` | `string \| null` | no | |
705
+ | `website` | `string \| null` | no | |
706
+ | `zip` | `string \| null` | no | |
707
+
708
+ **Example**
709
+
710
+ ```ts
711
+ const result = await g8.api.companies.getCompany({ path: { company_id: 123 } });
712
+ ```
713
+
714
+ ---
715
+
716
+ <a id="op-getcompanybillingprefill"></a>
717
+
718
+ ### `g8.api.companies.getCompanyBillingPrefill(input)`
719
+
720
+ **Get Company Billing Prefill**
721
+
722
+ - HTTP: `GET /api/v1/companies/{company_id}/billing-prefill`
723
+ - operationId: `get_company_billing_prefill_companies__company_id__billing_prefill_get` (also callable as `g8.api.call("get_company_billing_prefill_companies__company_id__billing_prefill_get", input)`)
724
+ - Tier: `read`: reads data; safe to call and to retry
725
+ - API-key scope: `companies:read`
726
+
727
+ Billing details discovered for this company, ready to prefill a quote.
728
+
729
+ `status` is the field to read first: `ready` means the details are usable,
730
+ `pending` means discovery has not finished, `empty` means nothing was
731
+ found. Reads only - it does not trigger discovery.
732
+
733
+ **Input**
734
+
735
+ | Field | Type | Required | Description |
736
+ |---|---|---|---|
737
+ | `path.company_id` | `string` | yes | Company id. |
738
+
739
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
740
+
741
+ Other envelope fields: `pagination` (PaginationMeta).
742
+
743
+ **Example**
744
+
745
+ ```ts
746
+ const result = await g8.api.companies.getCompanyBillingPrefill({ path: { company_id: "id" } });
747
+ ```
748
+
749
+ ---
750
+
751
+ <a id="op-getcompanycontacts"></a>
752
+
753
+ ### `g8.api.companies.getCompanyContacts(input)`
754
+
755
+ **Get Company Contacts**
756
+
757
+ - HTTP: `GET /api/v1/companies/{company_id}/contacts`
758
+ - operationId: `get_company_contacts_companies__company_id__contacts_get` (also callable as `g8.api.call("get_company_contacts_companies__company_id__contacts_get", input)`)
759
+ - Tier: `read`: reads data; safe to call and to retry
760
+ - API-key scope: `companies:read`
761
+ - ★ Hand-written: [`g8.companies.contacts()`](../sdk-clients.md#g8-companies-contacts)
762
+
763
+ Get contacts belonging to a company.
764
+
765
+ **Input**
766
+
767
+ | Field | Type | Required | Description |
768
+ |---|---|---|---|
769
+ | `path.company_id` | `integer` | yes | Company ID |
770
+ | `query.limit` | `integer` | no | Items per page (max 200) default `100` |
771
+ | `query.offset` | `integer` | no | Offset for pagination default `0` |
772
+
773
+ **Returns** `ApiResponse_list_CompanyContactItem__`: the envelope `{ data: Array<CompanyContactItem>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
774
+
775
+ Other envelope fields: `pagination` (PaginationMeta).
776
+
777
+ `CompanyContactItem` fields:
778
+
779
+ | Field | Type | Required | Description |
780
+ |---|---|---|---|
781
+ | `id` | `integer` | yes | |
782
+ | `city` | `string \| null` | no | |
783
+ | `country` | `string \| null` | no | |
784
+ | `direct_phone` | `string \| null` | no | |
785
+ | `first_name` | `string \| null` | no | |
786
+ | `full_name` | `string \| null` | no | |
787
+ | `job_title` | `string \| null` | no | |
788
+ | `last_name` | `string \| null` | no | |
789
+ | `linkedin_url` | `string \| null` | no | |
790
+ | `seniority_level` | `string \| null` | no | |
791
+ | `state` | `string \| null` | no | |
792
+ | `work_email` | `string \| null` | no | |
793
+
794
+ **Example**
795
+
796
+ ```ts
797
+ const result = await g8.api.companies.getCompanyContacts({ path: { company_id: 123 } });
798
+ ```
799
+
800
+ ---
801
+
802
+ <a id="op-getcompanydashboard"></a>
803
+
804
+ ### `g8.api.companies.getCompanyDashboard(input)`
805
+
806
+ **Get Company Dashboard**
807
+
808
+ - HTTP: `GET /api/v1/companies/{company_id}/dashboard`
809
+ - operationId: `get_company_dashboard_companies__company_id__dashboard_get` (also callable as `g8.api.call("get_company_dashboard_companies__company_id__dashboard_get", input)`)
810
+ - Tier: `read`: reads data; safe to call and to retry
811
+ - API-key scope: `companies:read`
812
+
813
+ Everything the company detail view shows, in one call.
814
+
815
+ The deal it surfaces is filtered by its own ALWAYS-ENFORCED deal scope:
816
+ being able to see a company never implies being able to see its deals, so
817
+ a key without deal visibility gets the dashboard with no active deal
818
+ rather than a deal it should not see.
819
+
820
+ Open-shaped, and it has three legitimate shapes - a full dashboard, and
821
+ two shells for companies that have not been through the account pipeline.
822
+ Read `document_status` to tell them apart.
823
+
824
+ **Input**
825
+
826
+ | Field | Type | Required | Description |
827
+ |---|---|---|---|
828
+ | `path.company_id` | `string` | yes | Company id. |
829
+
830
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
831
+
832
+ Other envelope fields: `pagination` (PaginationMeta).
833
+
834
+ **Example**
835
+
836
+ ```ts
837
+ const result = await g8.api.companies.getCompanyDashboard({ path: { company_id: "id" } });
838
+ ```
839
+
840
+ ---
841
+
842
+ <a id="op-getcompanydetail"></a>
843
+
844
+ ### `g8.api.companies.getCompanyDetail(input)`
845
+
846
+ **Get Company Detail**
847
+
848
+ - HTTP: `GET /api/v1/companies/{company_id}/detail`
849
+ - operationId: `get_company_detail_companies__company_id__detail_get` (also callable as `g8.api.call("get_company_detail_companies__company_id__detail_get", input)`)
850
+ - Tier: `read`: reads data; safe to call and to retry
851
+ - API-key scope: `companies:read`
852
+
853
+ The composed company record the app's detail page renders.
854
+
855
+ Firmographics, owner, CRM overlay and custom column values in one read.
856
+
857
+ **Input**
858
+
859
+ | Field | Type | Required | Description |
860
+ |---|---|---|---|
861
+ | `path.company_id` | `string` | yes | Company id. |
862
+ | `query.id_kind` | `"auto" \| "company_id"` | no | `auto` resolves the graph8 company id (integer or UUID); `company_id` resolves the global company business key. default `"auto"` |
863
+
864
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
865
+
866
+ Other envelope fields: `pagination` (PaginationMeta).
867
+
868
+ **Example**
869
+
870
+ ```ts
871
+ const result = await g8.api.companies.getCompanyDetail({ path: { company_id: "id" } });
872
+ ```
873
+
874
+ ---
875
+
876
+ <a id="op-getcompanyengagementsummary"></a>
877
+
878
+ ### `g8.api.companies.getCompanyEngagementSummary(input)`
879
+
880
+ **Get Company Engagement Summary**
881
+
882
+ - HTTP: `GET /api/v1/companies/{company_id}/engagement-summary`
883
+ - operationId: `get_company_engagement_summary_companies__company_id__engagement_summary_get` (also callable as `g8.api.call("get_company_engagement_summary_companies__company_id__engagement_summary_get", input)`)
884
+ - Tier: `read`: reads data; safe to call and to retry
885
+ - API-key scope: `companies:read`
886
+
887
+ How much this company has engaged: emails, calls, meetings, visits.
888
+
889
+ **Input**
890
+
891
+ | Field | Type | Required | Description |
892
+ |---|---|---|---|
893
+ | `path.company_id` | `string` | yes | Company id. |
894
+
895
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
896
+
897
+ Other envelope fields: `pagination` (PaginationMeta).
898
+
899
+ **Example**
900
+
901
+ ```ts
902
+ const result = await g8.api.companies.getCompanyEngagementSummary({ path: { company_id: "id" } });
903
+ ```
904
+
905
+ ---
906
+
907
+ <a id="op-getcompanyformfields"></a>
908
+
909
+ ### `g8.api.companies.getCompanyFormFields(input?)`
910
+
911
+ **Get Company Form Fields**
912
+
913
+ - HTTP: `GET /api/v1/companies/form-fields`
914
+ - operationId: `get_company_form_fields_companies_form_fields_get` (also callable as `g8.api.call("get_company_form_fields_companies_form_fields_get", input)`)
915
+ - Tier: `read`: reads data; safe to call and to retry
916
+ - API-key scope: `companies:read`
917
+
918
+ Fields grouped the way the company form presents them.
919
+
920
+ **Input**
921
+
922
+ | Field | Type | Required | Description |
923
+ |---|---|---|---|
924
+ | `query.list_id` | `integer \| null` | no | Include this list's custom fields. |
925
+
926
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
927
+
928
+ Other envelope fields: `pagination` (PaginationMeta).
929
+
930
+ **Example**
931
+
932
+ ```ts
933
+ const result = await g8.api.companies.getCompanyFormFields();
934
+ ```
935
+
936
+ ---
937
+
938
+ <a id="op-getcompanyicpfit"></a>
939
+
940
+ ### `g8.api.companies.getCompanyIcpFit(input)`
941
+
942
+ **Get Company Icp Fit**
943
+
944
+ - HTTP: `GET /api/v1/companies/{company_id}/icp-fit`
945
+ - operationId: `get_company_icp_fit_companies__company_id__icp_fit_get` (also callable as `g8.api.call("get_company_icp_fit_companies__company_id__icp_fit_get", input)`)
946
+ - Tier: `read`: reads data; safe to call and to retry
947
+ - API-key scope: `companies:read`
948
+
949
+ How well this company matches your ideal-customer profiles.
950
+
951
+ A company with no match is a 404 here. The app handler answers 200 with an
952
+ `error` key instead, which makes a missing company indistinguishable from
953
+ a scored one at the status line - translated at this boundary rather than
954
+ published.
955
+
956
+ **Input**
957
+
958
+ | Field | Type | Required | Description |
959
+ |---|---|---|---|
960
+ | `path.company_id` | `integer` | yes | Company business key. |
961
+
962
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
963
+
964
+ Other envelope fields: `pagination` (PaginationMeta).
965
+
966
+ **Example**
967
+
968
+ ```ts
969
+ const result = await g8.api.companies.getCompanyIcpFit({ path: { company_id: 123 } });
970
+ ```
971
+
972
+ ---
973
+
974
+ <a id="op-getcompanyintelligencedata"></a>
975
+
976
+ ### `g8.api.companies.getCompanyIntelligenceData(input)`
977
+
978
+ **Get Company Intelligence Data**
979
+
980
+ - HTTP: `GET /api/v1/companies/{company_id}/intelligence-data/{data_type}`
981
+ - operationId: `get_company_intelligence_data_companies__company_id__intelligence_data__data_type__get` (also callable as `g8.api.call("get_company_intelligence_data_companies__company_id__intelligence_data__data_type__get", input)`)
982
+ - Tier: `read`: reads data; safe to call and to retry
983
+ - API-key scope: `companies:read`
984
+
985
+ The raw intelligence record of one type - the input the documents are written from.
986
+
987
+ **Input**
988
+
989
+ | Field | Type | Required | Description |
990
+ |---|---|---|---|
991
+ | `path.company_id` | `string` | yes | Company id. |
992
+ | `path.data_type` | `string` | yes | Intelligence data type, e.g. `tech_stack`. |
993
+
994
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
995
+
996
+ Other envelope fields: `pagination` (PaginationMeta).
997
+
998
+ **Example**
999
+
1000
+ ```ts
1001
+ const result = await g8.api.companies.getCompanyIntelligenceData({ path: { company_id: "id", data_type: "example" } });
1002
+ ```
1003
+
1004
+ ---
1005
+
1006
+ <a id="op-getcompanyintelligencestatus"></a>
1007
+
1008
+ ### `g8.api.companies.getCompanyIntelligenceStatus(input)`
1009
+
1010
+ **Get Company Intelligence Status**
1011
+
1012
+ - HTTP: `GET /api/v1/companies/{company_id}/intelligence-status`
1013
+ - operationId: `get_company_intelligence_status_companies__company_id__intelligence_status_get` (also callable as `g8.api.call("get_company_intelligence_status_companies__company_id__intelligence_status_get", input)`)
1014
+ - Tier: `read`: reads data; safe to call and to retry
1015
+ - API-key scope: `companies:read`
1016
+
1017
+ One rolled-up status for this company's intelligence run.
1018
+
1019
+ **Input**
1020
+
1021
+ | Field | Type | Required | Description |
1022
+ |---|---|---|---|
1023
+ | `path.company_id` | `string` | yes | Company id. |
1024
+
1025
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1026
+
1027
+ Other envelope fields: `pagination` (PaginationMeta).
1028
+
1029
+ **Example**
1030
+
1031
+ ```ts
1032
+ const result = await g8.api.companies.getCompanyIntelligenceStatus({ path: { company_id: "id" } });
1033
+ ```
1034
+
1035
+ ---
1036
+
1037
+ <a id="op-getcompanyintelligencesteps"></a>
1038
+
1039
+ ### `g8.api.companies.getCompanyIntelligenceSteps(input)`
1040
+
1041
+ **Get Company Intelligence Steps**
1042
+
1043
+ - HTTP: `GET /api/v1/companies/{company_id}/intelligence-steps`
1044
+ - operationId: `get_company_intelligence_steps_companies__company_id__intelligence_steps_get` (also callable as `g8.api.call("get_company_intelligence_steps_companies__company_id__intelligence_steps_get", input)`)
1045
+ - Tier: `read`: reads data; safe to call and to retry
1046
+ - API-key scope: `companies:read`
1047
+
1048
+ Per-step state of the intelligence pipeline for this company.
1049
+
1050
+ The granular view: one entry per step with its own status, progress and
1051
+ error. `intelligence-status` is the single rolled-up answer.
1052
+
1053
+ **Input**
1054
+
1055
+ | Field | Type | Required | Description |
1056
+ |---|---|---|---|
1057
+ | `path.company_id` | `string` | yes | Company id. |
1058
+
1059
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1060
+
1061
+ Other envelope fields: `pagination` (PaginationMeta).
1062
+
1063
+ **Example**
1064
+
1065
+ ```ts
1066
+ const result = await g8.api.companies.getCompanyIntelligenceSteps({ path: { company_id: "id" } });
1067
+ ```
1068
+
1069
+ ---
1070
+
1071
+ <a id="op-getcompanynextbeststep"></a>
1072
+
1073
+ ### `g8.api.companies.getCompanyNextBestStep(input)`
1074
+
1075
+ **Get Company Next Best Step**
1076
+
1077
+ - HTTP: `GET /api/v1/companies/{company_id}/next-best-step`
1078
+ - operationId: `get_company_next_best_step_companies__company_id__next_best_step_get` (also callable as `g8.api.call("get_company_next_best_step_companies__company_id__next_best_step_get", input)`)
1079
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1080
+ - API-key scope: `enrichment:run`
1081
+
1082
+ What to do next with this company, and why. SPENDS CREDITS.
1083
+
1084
+ A GET that costs money: the recommendation is generated by a model on a
1085
+ cache miss, and the cache key includes the company's engagement state, so
1086
+ activity on the account invalidates it. Tiered `billable` for that reason
1087
+ rather than as an ordinary read.
1088
+
1089
+ **Input**
1090
+
1091
+ | Field | Type | Required | Description |
1092
+ |---|---|---|---|
1093
+ | `path.company_id` | `integer` | yes | Company id. |
1094
+
1095
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1096
+
1097
+ Other envelope fields: `pagination` (PaginationMeta).
1098
+
1099
+ **Example**
1100
+
1101
+ ```ts
1102
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1103
+ const result = await g8.api.companies.getCompanyNextBestStep({ path: { company_id: 123 } });
1104
+ ```
1105
+
1106
+ ---
1107
+
1108
+ <a id="op-getcompanyreviewstats"></a>
1109
+
1110
+ ### `g8.api.companies.getCompanyReviewStats(input?)`
1111
+
1112
+ **Get Company Review Stats**
1113
+
1114
+ - HTTP: `GET /api/v1/companies/review-stats`
1115
+ - operationId: `get_company_review_stats_companies_review_stats_get` (also callable as `g8.api.call("get_company_review_stats_companies_review_stats_get", input)`)
1116
+ - Tier: `read`: reads data; safe to call and to retry
1117
+ - API-key scope: `companies:read`
1118
+
1119
+ How many companies and contacts are flagged as needing review.
1120
+
1121
+ ORG-WIDE counts. The app handler takes no record scope, so unlike the
1122
+ listing beside it these totals are not narrowed to what the caller can
1123
+ see - two keys with different record scopes get the same numbers.
1124
+
1125
+ **Input**: none.
1126
+
1127
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1128
+
1129
+ Other envelope fields: `pagination` (PaginationMeta).
1130
+
1131
+ **Example**
1132
+
1133
+ ```ts
1134
+ const result = await g8.api.companies.getCompanyReviewStats();
1135
+ ```
1136
+
1137
+ ---
1138
+
1139
+ <a id="op-getcompanysignals"></a>
1140
+
1141
+ ### `g8.api.companies.getCompanySignals(input)`
1142
+
1143
+ **Get Company Signals**
1144
+
1145
+ - HTTP: `GET /api/v1/companies/{company_id}/signals`
1146
+ - operationId: `get_company_signals_companies__company_id__signals_get` (also callable as `g8.api.call("get_company_signals_companies__company_id__signals_get", input)`)
1147
+ - Tier: `read`: reads data; safe to call and to retry
1148
+ - API-key scope: `companies:read`
1149
+
1150
+ Buying signals recorded against this company, newest first.
1151
+
1152
+ **Input**
1153
+
1154
+ | Field | Type | Required | Description |
1155
+ |---|---|---|---|
1156
+ | `path.company_id` | `integer` | yes | Company id. |
1157
+
1158
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1159
+
1160
+ Other envelope fields: `pagination` (PaginationMeta).
1161
+
1162
+ **Example**
1163
+
1164
+ ```ts
1165
+ const result = await g8.api.companies.getCompanySignals({ path: { company_id: 123 } });
1166
+ ```
1167
+
1168
+ ---
1169
+
1170
+ <a id="op-getcompanysitesvisited"></a>
1171
+
1172
+ ### `g8.api.companies.getCompanySitesVisited(input)`
1173
+
1174
+ **Get Company Sites Visited**
1175
+
1176
+ - HTTP: `GET /api/v1/companies/{company_id}/sites-visited`
1177
+ - operationId: `get_company_sites_visited_companies__company_id__sites_visited_get` (also callable as `g8.api.call("get_company_sites_visited_companies__company_id__sites_visited_get", input)`)
1178
+ - Tier: `read`: reads data; safe to call and to retry
1179
+ - API-key scope: `companies:read`
1180
+
1181
+ Pages people at this company visited on your site.
1182
+
1183
+ **Input**
1184
+
1185
+ | Field | Type | Required | Description |
1186
+ |---|---|---|---|
1187
+ | `path.company_id` | `integer` | yes | Company business key. |
1188
+ | `query.days` | `integer` | no | 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. default `90` |
1189
+
1190
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1191
+
1192
+ Other envelope fields: `pagination` (PaginationMeta).
1193
+
1194
+ **Example**
1195
+
1196
+ ```ts
1197
+ const result = await g8.api.companies.getCompanySitesVisited({ path: { company_id: 123 } });
1198
+ ```
1199
+
1200
+ ---
1201
+
1202
+ <a id="op-getcompanysynthesisreadiness"></a>
1203
+
1204
+ ### `g8.api.companies.getCompanySynthesisReadiness(input)`
1205
+
1206
+ **Get Company Synthesis Readiness**
1207
+
1208
+ - HTTP: `GET /api/v1/companies/{company_id}/synthesis-readiness`
1209
+ - operationId: `get_company_synthesis_readiness_companies__company_id__synthesis_readiness_get` (also callable as `g8.api.call("get_company_synthesis_readiness_companies__company_id__synthesis_readiness_get", input)`)
1210
+ - Tier: `read`: reads data; safe to call and to retry
1211
+ - API-key scope: `companies:read`
1212
+
1213
+ Whether synthesis can run yet, and what is blocking it.
1214
+
1215
+ Worth calling before `retry-synthesis`: `blocking_issues` names what is
1216
+ missing, and retrying without fixing it spends credits to fail again.
1217
+
1218
+ **Input**
1219
+
1220
+ | Field | Type | Required | Description |
1221
+ |---|---|---|---|
1222
+ | `path.company_id` | `string` | yes | Company id. |
1223
+
1224
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1225
+
1226
+ Other envelope fields: `pagination` (PaginationMeta).
1227
+
1228
+ **Example**
1229
+
1230
+ ```ts
1231
+ const result = await g8.api.companies.getCompanySynthesisReadiness({ path: { company_id: "id" } });
1232
+ ```
1233
+
1234
+ ---
1235
+
1236
+ <a id="op-getcompanyworkflowstatus"></a>
1237
+
1238
+ ### `g8.api.companies.getCompanyWorkflowStatus(input)`
1239
+
1240
+ **Get Company Workflow Status**
1241
+
1242
+ - HTTP: `GET /api/v1/companies/{company_id}/workflow-status`
1243
+ - operationId: `get_company_workflow_status_companies__company_id__workflow_status_get` (also callable as `g8.api.call("get_company_workflow_status_companies__company_id__workflow_status_get", input)`)
1244
+ - Tier: `read`: reads data; safe to call and to retry
1245
+ - API-key scope: `companies:read`
1246
+
1247
+ Where this company's intelligence and synthesis workflows stand.
1248
+
1249
+ **Input**
1250
+
1251
+ | Field | Type | Required | Description |
1252
+ |---|---|---|---|
1253
+ | `path.company_id` | `string` | yes | Company id. |
1254
+ | `query.include_documents` | `boolean` | no | Also list the documents each workflow produced. default `false` |
1255
+
1256
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1257
+
1258
+ Other envelope fields: `pagination` (PaginationMeta).
1259
+
1260
+ **Example**
1261
+
1262
+ ```ts
1263
+ const result = await g8.api.companies.getCompanyWorkflowStatus({ path: { company_id: "id" } });
1264
+ ```
1265
+
1266
+ ---
1267
+
1268
+ <a id="op-importcompanies"></a>
1269
+
1270
+ ### `g8.api.companies.importCompanies(input)`
1271
+
1272
+ **Import Companies**
1273
+
1274
+ - HTTP: `POST /api/v1/companies/import`
1275
+ - operationId: `import_companies_companies_import_post` (also callable as `g8.api.call("import_companies_companies_import_post", input)`)
1276
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1277
+ - API-key scope: `enrichment:run`
1278
+
1279
+ Create or update companies from a batch of contacts. SPENDS CREDITS.
1280
+
1281
+ Contacts are grouped by email domain: a new domain creates a company, a
1282
+ known one is updated. Every NEW company then triggers the full
1283
+ intelligence pipeline - a site crawl, several model calls and a paid
1284
+ enrichment lookup - and every contact triggers a paid person lookup. One
1285
+ request with 50 domains and 500 contacts is 50 pipelines plus 550 provider
1286
+ calls, so this is the most expensive operation on the company surface.
1287
+
1288
+ The body is REQUIRED here. The app declares it optional and then reads
1289
+ `data.contacts` unconditionally, so an empty request there is an
1290
+ AttributeError and a 500; requiring it makes the same request a 422.
1291
+
1292
+ Individual rows can fail without failing the call - read the response
1293
+ rather than the status.
1294
+
1295
+ **Input**
1296
+
1297
+ | Field | Type | Required | Description |
1298
+ |---|---|---|---|
1299
+ | `body` | `ImportCompaniesRequest` | yes | Request body; fields below. |
1300
+
1301
+ Body fields (`ImportCompaniesRequest`):
1302
+
1303
+ | Field | Type | Required | Description |
1304
+ |---|---|---|---|
1305
+ | `body.contacts` | `Array<CompanyContactImport>` | yes | Contacts to import. |
1306
+ | `body.source` | `string` | yes | Where the records came from, recorded on the import. |
1307
+
1308
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1309
+
1310
+ Other envelope fields: `pagination` (PaginationMeta).
1311
+
1312
+ **Example**
1313
+
1314
+ ```ts
1315
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1316
+ const result = await g8.api.companies.importCompanies({
1317
+ body: {
1318
+ contacts: [
1319
+ {
1320
+ email: "jane@acme.com",
1321
+ first_name: "Example",
1322
+ last_name: "Example",
1323
+ },
1324
+ ],
1325
+ source: "example",
1326
+ },
1327
+ });
1328
+ ```
1329
+
1330
+ ---
1331
+
1332
+ <a id="op-listcompanies"></a>
1333
+
1334
+ ### `g8.api.companies.listCompanies(input?)`
1335
+
1336
+ **List Companies**
1337
+
1338
+ - HTTP: `GET /api/v1/companies`
1339
+ - operationId: `list_companies_companies_get` (also callable as `g8.api.call("list_companies_companies_get", input)`)
1340
+ - Tier: `read`: reads data; safe to call and to retry
1341
+ - API-key scope: `companies:read`
1342
+ - ★ Hand-written: [`g8.companies.list()`](../sdk-clients.md#g8-companies-list)
1343
+
1344
+ List companies with optional filtering and pagination.
1345
+
1346
+ **Input**
1347
+
1348
+ | Field | Type | Required | Description |
1349
+ |---|---|---|---|
1350
+ | `query.page` | `integer` | no | Page number (1-indexed) default `1` |
1351
+ | `query.limit` | `integer` | no | Items per page (max 200) default `50` |
1352
+ | `query.domain` | `string \| null` | no | Filter by domain (exact match) |
1353
+ | `query.industry` | `string \| null` | no | Filter by industry (partial match) |
1354
+ | `query.name` | `string \| null` | no | Filter by company name (partial match) |
1355
+ | `query.employee_count_min` | `integer \| null` | no | Minimum employee count |
1356
+ | `query.employee_count_max` | `integer \| null` | no | Maximum employee count |
1357
+ | `query.country` | `string \| null` | no | Filter by country (exact match) |
1358
+ | `query.state` | `string \| null` | no | Filter by state (exact match) |
1359
+ | `query.city` | `string \| null` | no | Filter by city (partial match) |
1360
+ | `query.description` | `string \| null` | no | Filter by company description (partial match) |
1361
+ | `query.revenue_min` | `integer \| null` | no | Minimum annual revenue |
1362
+ | `query.revenue_max` | `integer \| null` | no | Maximum annual revenue |
1363
+ | `query.founded_year_min` | `integer \| null` | no | Minimum founding year |
1364
+ | `query.founded_year_max` | `integer \| null` | no | Maximum founding year |
1365
+ | `query.linkedin_followers_min` | `integer \| null` | no | Minimum LinkedIn followers |
1366
+ | `query.linkedin_followers_max` | `integer \| null` | no | Maximum LinkedIn followers |
1367
+ | `query.include_custom_fields` | `boolean` | no | When true, each company 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. default `false` |
1368
+
1369
+ **Returns** `ApiResponse_list_CompanyListItem__`: the envelope `{ data: Array<CompanyListItem>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1370
+
1371
+ Other envelope fields: `pagination` (PaginationMeta).
1372
+
1373
+ `CompanyListItem` fields:
1374
+
1375
+ | Field | Type | Required | Description |
1376
+ |---|---|---|---|
1377
+ | `city` | `string \| null` | no | |
1378
+ | `country` | `string \| null` | no | |
1379
+ | `custom_fields` | `Record<string, string \| null> \| null` | no | |
1380
+ | `description` | `string \| null` | no | |
1381
+ | `domain` | `string \| null` | no | |
1382
+ | `employee_count` | `string \| null` | no | |
1383
+ | `founded_year` | `integer \| null` | no | |
1384
+ | `id` | `integer \| null` | no | |
1385
+ | `industry` | `string \| null` | no | |
1386
+ | `linkedin_followers` | `string \| null` | no | |
1387
+ | `linkedin_url` | `string \| null` | no | |
1388
+ | `logo_url` | `string \| null` | no | |
1389
+ | `name` | `string \| null` | no | |
1390
+ | `owner_id` | `string \| null` | no | |
1391
+ | `owner_name` | `string \| null` | no | |
1392
+ | `revenue` | `string \| null` | no | |
1393
+ | `state` | `string \| null` | no | |
1394
+ | `website` | `string \| null` | no | |
1395
+
1396
+ **Example**
1397
+
1398
+ ```ts
1399
+ const result = await g8.api.companies.listCompanies();
1400
+ ```
1401
+
1402
+ ---
1403
+
1404
+ <a id="op-listcompaniesenriched"></a>
1405
+
1406
+ ### `g8.api.companies.listCompaniesEnriched(input?)`
1407
+
1408
+ **List Companies Enriched**
1409
+
1410
+ - HTTP: `GET /api/v1/companies/enriched`
1411
+ - operationId: `list_companies_enriched_companies_enriched_get` (also callable as `g8.api.call("list_companies_enriched_companies_enriched_get", input)`)
1412
+ - Tier: `read`: reads data; safe to call and to retry
1413
+ - API-key scope: `companies:read`
1414
+
1415
+ Companies with their revenue and account overlays joined on.
1416
+
1417
+ `GET /companies` returns the base record. This returns the same companies
1418
+ with the ABM and revenue overlay fields - tier, score, owner, status -
1419
+ coalesced in, which is what the account views are built from.
1420
+
1421
+ **Input**
1422
+
1423
+ | Field | Type | Required | Description |
1424
+ |---|---|---|---|
1425
+ | `query.skip` | `integer` | no | Rows to skip. default `0` |
1426
+ | `query.limit` | `integer` | no | Rows to return. The app defaults this to 10000 - the entire roster in one response. Defaulted to 100 here; raise it deliberately. default `100` |
1427
+ | `query.search` | `string \| null` | no | Substring match on name or domain. |
1428
+ | `query.status` | `string \| null` | no | Filter by record status, e.g. `prospect`. |
1429
+ | `query.website_status` | `string \| null` | no | Filter by website status. |
1430
+
1431
+ **Returns** `ApiResponse_CrmCollectionPayload_`: the envelope `{ data: CrmCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1432
+
1433
+ Other envelope fields: `pagination` (PaginationMeta).
1434
+
1435
+ `CrmCollectionPayload` fields:
1436
+
1437
+ | Field | Type | Required | Description |
1438
+ |---|---|---|---|
1439
+ | `items` | `Array<unknown>` | no | |
1440
+
1441
+ **Example**
1442
+
1443
+ ```ts
1444
+ const result = await g8.api.companies.listCompaniesEnriched();
1445
+ ```
1446
+
1447
+ ---
1448
+
1449
+ <a id="op-listcompanycolumns"></a>
1450
+
1451
+ ### `g8.api.companies.listCompanyColumns(input?)`
1452
+
1453
+ **List Company Columns**
1454
+
1455
+ - HTTP: `GET /api/v1/companies/columns`
1456
+ - operationId: `list_company_columns_companies_columns_get` (also callable as `g8.api.call("list_company_columns_companies_columns_get", input)`)
1457
+ - Tier: `read`: reads data; safe to call and to retry
1458
+ - API-key scope: `companies:read`
1459
+ - ★ Hand-written: [`g8.companies.listColumns()`](../sdk-clients.md#g8-companies-listcolumns)
1460
+
1461
+ List custom company columns (table columns + global dynamic columns; +list-scoped if list_id given).
1462
+
1463
+ **Input**
1464
+
1465
+ | Field | Type | Required | Description |
1466
+ |---|---|---|---|
1467
+ | `query.list_id` | `integer \| null` | no | Optional list ID. When provided, list-specific dynamic columns are included alongside global ones. |
1468
+
1469
+ **Returns** `ApiResponse_list_Column__`: the envelope `{ data: Array<Column>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1470
+
1471
+ Other envelope fields: `pagination` (PaginationMeta).
1472
+
1473
+ `Column` fields:
1474
+
1475
+ | Field | Type | Required | Description |
1476
+ |---|---|---|---|
1477
+ | `is_global` | `boolean` | yes | Automatically computed: True if object_id is None/empty, False otherwise. |
1478
+ | `title` | `string` | yes | |
1479
+ | `data_type` | `ColumnType` | no | default `"text"` |
1480
+ | `id` | `integer \| null` | no | |
1481
+ | `name` | `string \| null` | no | |
1482
+ | `object_id` | `string \| null` | no | |
1483
+ | `source` | `ColumnSource` | no | default `"contact"` |
1484
+
1485
+ **Example**
1486
+
1487
+ ```ts
1488
+ const result = await g8.api.companies.listCompanyColumns();
1489
+ ```
1490
+
1491
+ ---
1492
+
1493
+ <a id="op-listcompanydocuments"></a>
1494
+
1495
+ ### `g8.api.companies.listCompanyDocuments(input)`
1496
+
1497
+ **List Company Documents**
1498
+
1499
+ - HTTP: `GET /api/v1/companies/{company_id}/documents`
1500
+ - operationId: `list_company_documents_companies__company_id__documents_get` (also callable as `g8.api.call("list_company_documents_companies__company_id__documents_get", input)`)
1501
+ - Tier: `read`: reads data; safe to call and to retry
1502
+ - API-key scope: `companies:read`
1503
+
1504
+ The intelligence documents generated for this company.
1505
+
1506
+ **Input**
1507
+
1508
+ | Field | Type | Required | Description |
1509
+ |---|---|---|---|
1510
+ | `path.company_id` | `string` | yes | Company id. |
1511
+ | `query.folder` | `string \| null` | no | Only documents in this folder. |
1512
+
1513
+ **Returns** `ApiResponse_CrmCollectionPayload_`: the envelope `{ data: CrmCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1514
+
1515
+ Other envelope fields: `pagination` (PaginationMeta).
1516
+
1517
+ `CrmCollectionPayload` fields:
1518
+
1519
+ | Field | Type | Required | Description |
1520
+ |---|---|---|---|
1521
+ | `items` | `Array<unknown>` | no | |
1522
+
1523
+ **Example**
1524
+
1525
+ ```ts
1526
+ const result = await g8.api.companies.listCompanyDocuments({ path: { company_id: "id" } });
1527
+ ```
1528
+
1529
+ ---
1530
+
1531
+ <a id="op-listcompanypeople"></a>
1532
+
1533
+ ### `g8.api.companies.listCompanyPeople(input)`
1534
+
1535
+ **List Company People**
1536
+
1537
+ - HTTP: `GET /api/v1/companies/{company_id}/people`
1538
+ - operationId: `list_company_people_companies__company_id__people_get` (also callable as `g8.api.call("list_company_people_companies__company_id__people_get", input)`)
1539
+ - Tier: `read`: reads data; safe to call and to retry
1540
+ - API-key scope: `companies:read`
1541
+
1542
+ The people at this company, with their buying-committee roles.
1543
+
1544
+ Overlaps `GET /companies/{company_id}/contacts`, which returns the same
1545
+ people as contact records. This one is the account-team view: the roles
1546
+ and engagement scoring the ABM surface reads.
1547
+
1548
+ **Input**
1549
+
1550
+ | Field | Type | Required | Description |
1551
+ |---|---|---|---|
1552
+ | `path.company_id` | `string` | yes | Company id. |
1553
+
1554
+ **Returns** `ApiResponse_CrmCollectionPayload_`: the envelope `{ data: CrmCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1555
+
1556
+ Other envelope fields: `pagination` (PaginationMeta).
1557
+
1558
+ `CrmCollectionPayload` fields:
1559
+
1560
+ | Field | Type | Required | Description |
1561
+ |---|---|---|---|
1562
+ | `items` | `Array<unknown>` | no | |
1563
+
1564
+ **Example**
1565
+
1566
+ ```ts
1567
+ const result = await g8.api.companies.listCompanyPeople({ path: { company_id: "id" } });
1568
+ ```
1569
+
1570
+ ---
1571
+
1572
+ <a id="op-listcompanytasks"></a>
1573
+
1574
+ ### `g8.api.companies.listCompanyTasks(input)`
1575
+
1576
+ **List Company Tasks**
1577
+
1578
+ - HTTP: `GET /api/v1/companies/{company_id}/tasks`
1579
+ - operationId: `list_company_tasks_companies__company_id__tasks_get` (also callable as `g8.api.call("list_company_tasks_companies__company_id__tasks_get", input)`)
1580
+ - Tier: `read`: reads data; safe to call and to retry
1581
+ - API-key scope: `companies:read`
1582
+
1583
+ Tasks attached to this company that the key can see.
1584
+
1585
+ **Input**
1586
+
1587
+ | Field | Type | Required | Description |
1588
+ |---|---|---|---|
1589
+ | `path.company_id` | `integer` | yes | Company id. |
1590
+ | `query.task_status` | `string \| null` | no | Only tasks in this status. |
1591
+
1592
+ **Returns** `ApiResponse_CrmCollectionPayload_`: the envelope `{ data: CrmCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1593
+
1594
+ Other envelope fields: `pagination` (PaginationMeta).
1595
+
1596
+ `CrmCollectionPayload` fields:
1597
+
1598
+ | Field | Type | Required | Description |
1599
+ |---|---|---|---|
1600
+ | `items` | `Array<unknown>` | no | |
1601
+
1602
+ **Example**
1603
+
1604
+ ```ts
1605
+ const result = await g8.api.companies.listCompanyTasks({ path: { company_id: 123 } });
1606
+ ```
1607
+
1608
+ ---
1609
+
1610
+ <a id="op-listcontactsacrosscompanies"></a>
1611
+
1612
+ ### `g8.api.companies.listContactsAcrossCompanies(input?)`
1613
+
1614
+ **List Contacts Across Companies**
1615
+
1616
+ - HTTP: `GET /api/v1/companies/contacts`
1617
+ - operationId: `list_contacts_across_companies_companies_contacts_get` (also callable as `g8.api.call("list_contacts_across_companies_companies_contacts_get", input)`)
1618
+ - Tier: `read`: reads data; safe to call and to retry
1619
+ - API-key scope: `companies:read`
1620
+
1621
+ Contacts across EVERY company, with their company and pipeline context.
1622
+
1623
+ The buying-committee view: `department`, `buying_role` and `in_pipeline`
1624
+ are not available on `GET /contacts`, and each row carries the company it
1625
+ belongs to.
1626
+
1627
+ Published under `/companies` because that is the surface it belongs to,
1628
+ but the rows it returns are CONTACTS and it is filtered by the CONTACT
1629
+ record scope. A key holding `companies:read` without contact visibility
1630
+ resolves that scope to nothing and gets an empty result rather than a
1631
+ company-scoped one - it fails closed, but it is worth knowing which of the
1632
+ two scopes actually governs the rows.
1633
+
1634
+ **Input**
1635
+
1636
+ | Field | Type | Required | Description |
1637
+ |---|---|---|---|
1638
+ | `query.skip` | `integer` | no | default `0` |
1639
+ | `query.limit` | `integer` | no | The app defaults this to 10000; 100 here. default `100` |
1640
+ | `query.search` | `string \| null` | no | Substring match on name or email. |
1641
+ | `query.department` | `string \| null` | no | Filter by job department. |
1642
+ | `query.buying_role` | `string \| null` | no | Filter by buying-committee role, e.g. `decision_maker`. |
1643
+ | `query.in_pipeline` | `boolean` | no | Only contacts attached to an open deal. default `false` |
1644
+ | `query.owner_id` | `string \| null` | no | Filter by contact owner. |
1645
+ | `query.sort_by` | `string` | no | name \| title \| company_name \| department \| email \| updated_at default `"updated_at"` |
1646
+ | `query.sort_order` | `string` | no | asc \| desc default `"desc"` |
1647
+
1648
+ **Returns** `ApiResponse_CrmCollectionPayload_`: the envelope `{ data: CrmCollectionPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1649
+
1650
+ Other envelope fields: `pagination` (PaginationMeta).
1651
+
1652
+ `CrmCollectionPayload` fields:
1653
+
1654
+ | Field | Type | Required | Description |
1655
+ |---|---|---|---|
1656
+ | `items` | `Array<unknown>` | no | |
1657
+
1658
+ **Example**
1659
+
1660
+ ```ts
1661
+ const result = await g8.api.companies.listContactsAcrossCompanies();
1662
+ ```
1663
+
1664
+ ---
1665
+
1666
+ <a id="op-mergecompany"></a>
1667
+
1668
+ ### `g8.api.companies.mergeCompany(input)`
1669
+
1670
+ **Merge Company**
1671
+
1672
+ - HTTP: `POST /api/v1/companies/{company_id}/merge`
1673
+ - operationId: `merge_company_companies__company_id__merge_post` (also callable as `g8.api.call("merge_company_companies__company_id__merge_post", input)`)
1674
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
1675
+ - API-key scope: `companies:delete`
1676
+
1677
+ Merge `secondary_id` INTO this company. THE SECONDARY STOPS EXISTING.
1678
+
1679
+ Its contacts, deals and activity move onto the survivor. Undo is one merge
1680
+ at a time through `POST /duplicates/undo-merge/{merge_history_id}`.
1681
+ Preview first. 409 when a blocker refuses the merge.
1682
+
1683
+ **Input**
1684
+
1685
+ | Field | Type | Required | Description |
1686
+ |---|---|---|---|
1687
+ | `path.company_id` | `integer` | yes | The company that SURVIVES the merge. |
1688
+ | `body` | `MergeRecordRequest` | yes | Request body; fields below. |
1689
+
1690
+ Body fields (`MergeRecordRequest`):
1691
+
1692
+ | Field | Type | Required | Description |
1693
+ |---|---|---|---|
1694
+ | `body.secondary_id` | `integer` | yes | The record merged AWAY. |
1695
+ | `body.bulk_criterion` | `string \| null` | no | The bulk criterion, when `trigger` is `bulk_criterion`. |
1696
+ | `body.field_overrides` | `Array<MergeFieldOverride>` | no | Decide individual fields instead of the app's rules. |
1697
+ | `body.suggestion_id` | `string \| null` | no | The duplicate suggestion this merge acts on, if any. |
1698
+ | `body.trigger` | `"manual" \| "bulk_criterion"` | no | What prompted the merge. Recorded on the audit row. default `"manual"` |
1699
+
1700
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1701
+
1702
+ Other envelope fields: `pagination` (PaginationMeta).
1703
+
1704
+ **Example**
1705
+
1706
+ ```ts
1707
+ // destructive: deletes or archives data; confirm with a human before calling.
1708
+ const result = await g8.api.companies.mergeCompany({ path: { company_id: 123 }, body: { secondary_id: 123 } });
1709
+ ```
1710
+
1711
+ ---
1712
+
1713
+ <a id="op-mergefilteredcompanies"></a>
1714
+
1715
+ ### `g8.api.companies.mergeFilteredCompanies(input)`
1716
+
1717
+ **Merge Filtered Companies**
1718
+
1719
+ - HTTP: `POST /api/v1/companies/merge-filtered`
1720
+ - operationId: `merge_filtered_companies_companies_merge_filtered_post` (also callable as `g8.api.call("merge_filtered_companies_companies_merge_filtered_post", input)`)
1721
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1722
+ - API-key scope: `companies:write`
1723
+
1724
+ Add every company matching a filter into `target_list_id`.
1725
+
1726
+ Despite the name this does NOT merge duplicate companies together - it
1727
+ merges a SELECTION INTO A LIST. `/duplicates` merges records.
1728
+
1729
+ A 409 means some companies need a decision; re-send with
1730
+ `conflict_resolution`.
1731
+
1732
+ **Input**
1733
+
1734
+ | Field | Type | Required | Description |
1735
+ |---|---|---|---|
1736
+ | `body` | `MergeFilteredRequest` | yes | Request body; fields below. |
1737
+ | `query.filterModel` | `string \| null` | no | Optional per-column filter JSON. |
1738
+ | `query.sortModel` | `string \| null` | no | Optional sort JSON. |
1739
+
1740
+ Body fields (`MergeFilteredRequest`):
1741
+
1742
+ | Field | Type | Required | Description |
1743
+ |---|---|---|---|
1744
+ | `body.target_list_id` | `integer` | yes | List the matching records are added to. |
1745
+ | `body.conflict_resolution` | `"add_all" \| "skip_all" \| "custom" \| null` | no | 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. |
1746
+ | `body.dynamic_column_mapping` | `Record<string, string>` | no | Source-column to target-column mapping for custom columns. |
1747
+ | `body.filter` | `Array<FilterCondition>` | no | Conditions selecting the source records. |
1748
+ | `body.include_warned_ids` | `Array<string> \| null` | no | With `conflict_resolution=custom`, the warned ids to include. |
1749
+ | `body.segmentFilter` | `SegmentFilterGroup \| null` | no | Advanced AND/OR filter tree. |
1750
+
1751
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1752
+
1753
+ Other envelope fields: `pagination` (PaginationMeta).
1754
+
1755
+ **Example**
1756
+
1757
+ ```ts
1758
+ const result = await g8.api.companies.mergeFilteredCompanies({ body: { target_list_id: 123 } });
1759
+ ```
1760
+
1761
+ ---
1762
+
1763
+ <a id="op-previewcompanymerge"></a>
1764
+
1765
+ ### `g8.api.companies.previewCompanyMerge(input)`
1766
+
1767
+ **Preview Company Merge**
1768
+
1769
+ - HTTP: `GET /api/v1/companies/{company_id}/merge/preview`
1770
+ - operationId: `preview_company_merge_companies__company_id__merge_preview_get` (also callable as `g8.api.call("preview_company_merge_companies__company_id__merge_preview_get", input)`)
1771
+ - Tier: `read`: reads data; safe to call and to retry
1772
+ - API-key scope: `companies:read`
1773
+
1774
+ Side-by-side comparison and blocker check. Writes nothing.
1775
+
1776
+ Both companies are authorised inside the app handler.
1777
+
1778
+ **Input**
1779
+
1780
+ | Field | Type | Required | Description |
1781
+ |---|---|---|---|
1782
+ | `path.company_id` | `integer` | yes | The company that SURVIVES the merge. |
1783
+ | `query.secondary` | `integer` | yes | The company that would be merged AWAY. |
1784
+
1785
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1786
+
1787
+ Other envelope fields: `pagination` (PaginationMeta).
1788
+
1789
+ **Example**
1790
+
1791
+ ```ts
1792
+ const result = await g8.api.companies.previewCompanyMerge({ path: { company_id: 123 }, query: { secondary: 1 } });
1793
+ ```
1794
+
1795
+ ---
1796
+
1797
+ <a id="op-refreshcompanybillingprefill"></a>
1798
+
1799
+ ### `g8.api.companies.refreshCompanyBillingPrefill(input)`
1800
+
1801
+ **Refresh Company Billing Prefill**
1802
+
1803
+ - HTTP: `POST /api/v1/companies/{company_id}/billing-prefill/refresh`
1804
+ - operationId: `refresh_company_billing_prefill_companies__company_id__billing_prefill_refresh_post` (also callable as `g8.api.call("refresh_company_billing_prefill_companies__company_id__billing_prefill_refresh_post", input)`)
1805
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1806
+ - API-key scope: `companies:write`
1807
+
1808
+ Recompute the billing details suggested for this company's quotes.
1809
+
1810
+ **Input**
1811
+
1812
+ | Field | Type | Required | Description |
1813
+ |---|---|---|---|
1814
+ | `path.company_id` | `string` | yes | Company id. |
1815
+
1816
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1817
+
1818
+ Other envelope fields: `pagination` (PaginationMeta).
1819
+
1820
+ **Example**
1821
+
1822
+ ```ts
1823
+ const result = await g8.api.companies.refreshCompanyBillingPrefill({ path: { company_id: "id" } });
1824
+ ```
1825
+
1826
+ ---
1827
+
1828
+ <a id="op-regeneratecompanydocument"></a>
1829
+
1830
+ ### `g8.api.companies.regenerateCompanyDocument(input)`
1831
+
1832
+ **Regenerate Company Document**
1833
+
1834
+ - HTTP: `POST /api/v1/companies/{company_id}/documents/types/{doc_type}/regenerate`
1835
+ - operationId: `regenerate_company_document_companies__company_id__documents_types__doc_type__regenerate_post` (also callable as `g8.api.call("regenerate_company_document_companies__company_id__documents_types__doc_type__regenerate_post", input)`)
1836
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1837
+ - API-key scope: `enrichment:run`
1838
+
1839
+ Throw away this document and generate it again. SPENDS CREDITS.
1840
+
1841
+ **Input**
1842
+
1843
+ | Field | Type | Required | Description |
1844
+ |---|---|---|---|
1845
+ | `path.company_id` | `string` | yes | Company id. |
1846
+ | `path.doc_type` | `string` | yes | Document type. |
1847
+
1848
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1849
+
1850
+ Other envelope fields: `pagination` (PaginationMeta).
1851
+
1852
+ **Example**
1853
+
1854
+ ```ts
1855
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1856
+ const result = await g8.api.companies.regenerateCompanyDocument({ path: { company_id: "id", doc_type: "example" } });
1857
+ ```
1858
+
1859
+ ---
1860
+
1861
+ <a id="op-removecompanycontact"></a>
1862
+
1863
+ ### `g8.api.companies.removeCompanyContact(input)`
1864
+
1865
+ **Remove Company Contact**
1866
+
1867
+ - HTTP: `DELETE /api/v1/companies/{company_id}/contacts/{contact_id}`
1868
+ - operationId: `remove_company_contact_companies__company_id__contacts__contact_id__delete` (also callable as `g8.api.call("remove_company_contact_companies__company_id__contacts__contact_id__delete", input)`)
1869
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
1870
+ - API-key scope: `companies:delete`
1871
+
1872
+ Unlink a contact from this company. Neither record is deleted.
1873
+
1874
+ **Input**
1875
+
1876
+ | Field | Type | Required | Description |
1877
+ |---|---|---|---|
1878
+ | `path.company_id` | `string` | yes | Company id. |
1879
+ | `path.contact_id` | `string` | yes | Contact to unlink from the company. |
1880
+
1881
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1882
+
1883
+ Other envelope fields: `pagination` (PaginationMeta).
1884
+
1885
+ **Example**
1886
+
1887
+ ```ts
1888
+ // destructive: deletes or archives data; confirm with a human before calling.
1889
+ const result = await g8.api.companies.removeCompanyContact({ path: { company_id: "id", contact_id: "id" } });
1890
+ ```
1891
+
1892
+ ---
1893
+
1894
+ <a id="op-retrycompanyintelligence"></a>
1895
+
1896
+ ### `g8.api.companies.retryCompanyIntelligence(input)`
1897
+
1898
+ **Retry Company Intelligence**
1899
+
1900
+ - HTTP: `POST /api/v1/companies/{company_id}/retry-intelligence`
1901
+ - operationId: `retry_company_intelligence_companies__company_id__retry_intelligence_post` (also callable as `g8.api.call("retry_company_intelligence_companies__company_id__retry_intelligence_post", input)`)
1902
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1903
+ - API-key scope: `enrichment:run`
1904
+
1905
+ Re-run the intelligence pipeline for this company. SPENDS CREDITS.
1906
+
1907
+ A site crawl plus several model calls per document. Omitting `doc_types`
1908
+ regenerates the DEFAULT set, so an empty body is the expensive option and
1909
+ not the cheap one - name the documents you actually need.
1910
+
1911
+ A run stuck for more than half an hour is treated as abandoned and
1912
+ restarted, so this is callable again rather than wedged, but that also
1913
+ means it can be re-triggered on a cadence. It is tiered `billable`.
1914
+
1915
+ **Input**
1916
+
1917
+ | Field | Type | Required | Description |
1918
+ |---|---|---|---|
1919
+ | `path.company_id` | `string` | yes | Company id. |
1920
+ | `body` | `IntelligenceRetryRequest \| null` | no | Request body; fields below. |
1921
+
1922
+ Body fields:
1923
+
1924
+ | Field | Type | Required | Description |
1925
+ |---|---|---|---|
1926
+ | `body.doc_types` | `Array<string> \| null` | no | Document types to generate. Omit for the default set. |
1927
+
1928
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1929
+
1930
+ Other envelope fields: `pagination` (PaginationMeta).
1931
+
1932
+ **Example**
1933
+
1934
+ ```ts
1935
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1936
+ const result = await g8.api.companies.retryCompanyIntelligence({ path: { company_id: "id" } });
1937
+ ```
1938
+
1939
+ ---
1940
+
1941
+ <a id="op-retrycompanysynthesis"></a>
1942
+
1943
+ ### `g8.api.companies.retryCompanySynthesis(input)`
1944
+
1945
+ **Retry Company Synthesis**
1946
+
1947
+ - HTTP: `POST /api/v1/companies/{company_id}/retry-synthesis`
1948
+ - operationId: `retry_company_synthesis_companies__company_id__retry_synthesis_post` (also callable as `g8.api.call("retry_company_synthesis_companies__company_id__retry_synthesis_post", input)`)
1949
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1950
+ - API-key scope: `enrichment:run`
1951
+
1952
+ Re-run synthesis for this company. SPENDS CREDITS.
1953
+
1954
+ Check `synthesis-readiness` first: a run that is missing its inputs spends
1955
+ the same credits to produce nothing. A synthesis already marked running is
1956
+ refused with a 409 - unlike the intelligence retry beside it there is no
1957
+ stale-run reset, so a genuinely stuck run needs support rather than a
1958
+ retry loop.
1959
+
1960
+ **Input**
1961
+
1962
+ | Field | Type | Required | Description |
1963
+ |---|---|---|---|
1964
+ | `path.company_id` | `string` | yes | Company id. |
1965
+
1966
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1967
+
1968
+ Other envelope fields: `pagination` (PaginationMeta).
1969
+
1970
+ **Example**
1971
+
1972
+ ```ts
1973
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1974
+ const result = await g8.api.companies.retryCompanySynthesis({ path: { company_id: "id" } });
1975
+ ```
1976
+
1977
+ ---
1978
+
1979
+ <a id="op-saveskillresulttocompany"></a>
1980
+
1981
+ ### `g8.api.companies.saveSkillResultToCompany(input)`
1982
+
1983
+ **Save Skill Result To Company**
1984
+
1985
+ - HTTP: `POST /api/v1/companies/{company_id}/documents/from-skill`
1986
+ - operationId: `save_skill_result_to_company_companies__company_id__documents_from_skill_post` (also callable as `g8.api.call("save_skill_result_to_company_companies__company_id__documents_from_skill_post", input)`)
1987
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1988
+ - API-key scope: `companies:write`
1989
+
1990
+ Store a skill run's output on this company as a document.
1991
+
1992
+ **Input**
1993
+
1994
+ | Field | Type | Required | Description |
1995
+ |---|---|---|---|
1996
+ | `path.company_id` | `string` | yes | Company id. |
1997
+ | `body` | `SaveSkillResultRequest` | yes | Request body; fields below. |
1998
+
1999
+ Body fields (`SaveSkillResultRequest`):
2000
+
2001
+ | Field | Type | Required | Description |
2002
+ |---|---|---|---|
2003
+ | `body.action_name` | `string` | yes | Action within that execution. |
2004
+ | `body.content` | `string` | yes | Document body to store. |
2005
+ | `body.execution_id` | `string` | yes | The skill execution that produced the content. |
2006
+
2007
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2008
+
2009
+ Other envelope fields: `pagination` (PaginationMeta).
2010
+
2011
+ **Example**
2012
+
2013
+ ```ts
2014
+ const result = await g8.api.companies.saveSkillResultToCompany({
2015
+ path: { company_id: "id" },
2016
+ body: { action_name: "Example", content: "example", execution_id: "id" },
2017
+ });
2018
+ ```
2019
+
2020
+ ---
2021
+
2022
+ <a id="op-startcompanyworkflow"></a>
2023
+
2024
+ ### `g8.api.companies.startCompanyWorkflow(input)`
2025
+
2026
+ **Start Company Workflow**
2027
+
2028
+ - HTTP: `POST /api/v1/companies/{company_id}/workflows/{workflow_type}/start`
2029
+ - operationId: `start_company_workflow_companies__company_id__workflows__workflow_type__start_post` (also callable as `g8.api.call("start_company_workflow_companies__company_id__workflows__workflow_type__start_post", input)`)
2030
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
2031
+ - API-key scope: `enrichment:run`
2032
+
2033
+ Start one intelligence workflow for this company. SPENDS CREDITS.
2034
+
2035
+ Poll `GET /companies/{company_id}/workflow-status`.
2036
+
2037
+ **Input**
2038
+
2039
+ | Field | Type | Required | Description |
2040
+ |---|---|---|---|
2041
+ | `path.company_id` | `string` | yes | Company id. |
2042
+ | `path.workflow_type` | `CompanyWorkflowType` | yes | Which workflow to run. |
2043
+
2044
+ **Returns** `ApiResponse_CrmRecordPayload_`: the envelope `{ data: CrmRecordPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2045
+
2046
+ Other envelope fields: `pagination` (PaginationMeta).
2047
+
2048
+ **Example**
2049
+
2050
+ ```ts
2051
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
2052
+ const result = await g8.api.companies.startCompanyWorkflow({ path: { company_id: "id", workflow_type: "company_intelligence" } });
2053
+ ```
2054
+
2055
+ ---
2056
+
2057
+ <a id="op-updatecompany"></a>
2058
+
2059
+ ### `g8.api.companies.updateCompany(input)`
2060
+
2061
+ **Update Company**
2062
+
2063
+ - HTTP: `PATCH /api/v1/companies/{company_id}`
2064
+ - operationId: `update_company_companies__company_id__patch` (also callable as `g8.api.call("update_company_companies__company_id__patch", input)`)
2065
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2066
+ - API-key scope: `companies:write`
2067
+ - ★ Hand-written: [`g8.companies.update()`](../sdk-clients.md#g8-companies-update)
2068
+
2069
+ Update a company's fields (partial update).
2070
+
2071
+ **Input**
2072
+
2073
+ | Field | Type | Required | Description |
2074
+ |---|---|---|---|
2075
+ | `path.company_id` | `integer` | yes | Company ID |
2076
+ | `body` | `CompanyUpdateRequest` | yes | Request body; fields below. |
2077
+
2078
+ Body fields (`CompanyUpdateRequest`):
2079
+
2080
+ | Field | Type | Required | Description |
2081
+ |---|---|---|---|
2082
+ | `body.address` | `string \| null` | no | |
2083
+ | `body.city` | `string \| null` | no | |
2084
+ | `body.country` | `string \| null` | no | |
2085
+ | `body.domain` | `string \| null` | no | |
2086
+ | `body.employee_count` | `string \| null` | no | |
2087
+ | `body.industry` | `string \| null` | no | |
2088
+ | `body.linkedin_url` | `string \| null` | no | |
2089
+ | `body.name` | `string \| null` | no | |
2090
+ | `body.phone` | `string \| null` | no | |
2091
+ | `body.state` | `string \| null` | no | |
2092
+ | `body.website` | `string \| null` | no | |
2093
+ | `body.zip` | `string \| null` | no | |
2094
+
2095
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2096
+
2097
+ Other envelope fields: `pagination` (PaginationMeta).
2098
+
2099
+ **Example**
2100
+
2101
+ ```ts
2102
+ const result = await g8.api.companies.updateCompany({ path: { company_id: 123 }, body: {} });
2103
+ ```
2104
+
2105
+ ---
2106
+
2107
+ ## Referenced types
2108
+
2109
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
2110
+
2111
+ <a id="type-columnsource"></a>
2112
+
2113
+ ### `ColumnSource`
2114
+
2115
+ Which entity a field in the contact field list belongs to. The ``GET /contacts/columns`` response deliberately combines fields from three provenances into one list (issue #21184): the person record, their employer's company record, and user-created custom columns. Consumers (form-mapping UI, AI-agent field listing, CSV import) need to tell them apart — a company field like ``COMPANY_REVENUE`` describes the employer, not the contact. - ``contact``: a field on the person record (``MashupContact.*``) — the default. - ``company``: a field on the contact's employer (``MashupCompany.*``), surfaced…
2116
+
2117
+ Type: `"contact" | "company" | "custom"`.
2118
+
2119
+ <a id="type-columntype"></a>
2120
+
2121
+ ### `ColumnType`
2122
+
2123
+ User-selectable dynamic-column data types. Every member must have a physical type in the repos' pg_type_map (contacts/companies CDP repos + enrichment DynamicColumnRepository: int→INTEGER, numeric→NUMERIC, text→TEXT, boolean→BOOLEAN) and belong to the user-owned family in lists/usecases/dynamic_column_write_contract.py — both already list these four. Write paths coerce values per type via shared.infrustructure.db.cdp.dynamic_column_values.coerce_dynamic_value.
2124
+
2125
+ Type: `"text" | "int" | "numeric" | "boolean"`.
2126
+
2127
+ <a id="type-companycontactimport"></a>
2128
+
2129
+ ### `CompanyContactImport`
2130
+
2131
+ One contact in a company import. Contacts are grouped by email domain, so `email` decides which company a row lands on - `company_name` only names a company that does not exist yet.
2132
+
2133
+ | Field | Type | Required | Description |
2134
+ |---|---|---|---|
2135
+ | `email` | `string` | yes | Email address. Also the company-grouping key. |
2136
+ | `first_name` | `string` | yes | First name. |
2137
+ | `last_name` | `string` | yes | Last name. |
2138
+ | `company_name` | `string \| null` | no | Company name, used only when the domain is unknown. |
2139
+ | `company_owner` | `string \| null` | no | Company owner. |
2140
+ | `contact_owner` | `string \| null` | no | Contact owner. |
2141
+ | `linkedin_url` | `string \| null` | no | LinkedIn profile URL. |
2142
+ | `phone` | `string \| null` | no | Phone number. |
2143
+ | `role` | `string \| null` | no | Buying-committee role: decision_maker \| influencer \| champion \| end_user \| blocker \| coach. |
2144
+ | `title` | `string \| null` | no | Job title. |
2145
+
2146
+ <a id="type-createfieldenrichmentinput"></a>
2147
+
2148
+ ### `CreateFieldEnrichmentInput`
2149
+
2150
+ Optional enrichment-pipeline block attached at column-create time. When supplied, `POST /fields` creates a companion `enrichment_configs` row in the same request so the new column is immediately runnable via `POST /enrichment/waterfall/enrich`. Without this block the column exists but has no enrichment plan — calling /waterfall/enrich on it returns 422 (`waterfall_config_missing`). Currently only `type='waterfall'` is supported; AI / formula enrichment will follow once the rest of the agent surface lands.
2151
+
2152
+ | Field | Type | Required | Description |
2153
+ |---|---|---|---|
2154
+ | `email_verification` | `EmailVerificationInput \| null` | no | Optional post-enrichment email verification config. |
2155
+ | `field_to_enrich` | `string \| null` | no | Target field identifier. Defaults to the new column's slug. |
2156
+ | `name` | `string \| null` | no | Pipeline name. Defaults to `<column title> Enrichment` if omitted. |
2157
+ | `providers` | `Array<string> \| null` | no | 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`. |
2158
+ | `skip_existing_values` | `boolean` | no | If true, skip rows where the target field is already populated. default `true` |
2159
+ | `steps` | `Array<WaterfallStepInput> \| null` | no | Full caller-supplied step list. Persisted verbatim. Mutually exclusive with `providers`. |
2160
+ | `target_field` | `string \| null` | no | 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`) —… |
2161
+ | `type` | `string` | no | Pipeline kind. Only 'waterfall' is supported today. default `"waterfall"` |
2162
+
2163
+ <a id="type-createfieldenrichmentresponse"></a>
2164
+
2165
+ ### `CreateFieldEnrichmentResponse`
2166
+
2167
+ Echo of the companion enrichment config created by `enrichment` block.
2168
+
2169
+ | Field | Type | Required | Description |
2170
+ |---|---|---|---|
2171
+ | `column_id` | `string` | yes | column_id slug to pass to /enrichment/waterfall/enrich |
2172
+ | `config_id` | `string` | yes | |
2173
+ | `name` | `string` | yes | |
2174
+ | `type` | `string` | yes | |
2175
+ | `email_verification` | `Record<string, unknown> \| null` | no | |
2176
+ | `providers` | `Array<string>` | no | |
2177
+
2178
+ <a id="type-filtercondition"></a>
2179
+
2180
+ ### `FilterCondition`
2181
+
2182
+ One structured filter condition. Mirrors `shared.interfaces.fastapi.dtos.DtoCondition`.
2183
+
2184
+ | Field | Type | Required | Description |
2185
+ |---|---|---|---|
2186
+ | `field` | `string` | yes | Field name to apply the condition to. |
2187
+ | `operator` | `string` | no | Operator, e.g. `=`, `in`, `like`. default `"="` |
2188
+ | `value` | `unknown` | no | Value to compare against. |
2189
+ | `value_to` | `unknown \| null` | no | Secondary value, for range operators. |
2190
+
2191
+ <a id="type-mergefieldoverride"></a>
2192
+
2193
+ ### `MergeFieldOverride`
2194
+
2195
+ Which side of a merge wins one field.
2196
+
2197
+ | Field | Type | Required | Description |
2198
+ |---|---|---|---|
2199
+ | `field` | `string` | yes | Field name, e.g. `CONTACT_JOB_TITLE`. |
2200
+ | `winner` | `"primary" \| "secondary"` | yes | Which record's value to keep. |
2201
+
2202
+ <a id="type-segmentfiltergroup"></a>
2203
+
2204
+ ### `SegmentFilterGroup`
2205
+
2206
+ An AND/OR group of leaves and nested groups, at most three groups deep. Mirrors `SegmentFilterGroup` in `contacts.domain.value_objects.ag_grid_models`. `op` is closed because the app REFUSES an unrecognised connector rather than defaulting to AND - defaulting would silently return a different result set, and on a destructive route that is a different set of records acted on. FIXED DEPTH, NOT RECURSIVE. The app's model is self-referencing; the published one deliberately is not, because a schema that reaches itself through `$ref` sends the docs renderer into unbounded recursion. Three group lev…
2207
+
2208
+ | Field | Type | Required | Description |
2209
+ |---|---|---|---|
2210
+ | `op` | `"AND" \| "OR" \| "and" \| "or"` | yes | Connector for this group. Case-insensitive. |
2211
+ | `children` | `Array<SegmentFilterSubgroup \| SegmentFilterLeaf>` | no | Nested groups and/or leaf conditions. |