@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,858 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.intent`: Intent
4
+
5
+ 16 operations (2 read, 1 destructive, 13 billable).
6
+
7
+ 13 of these also have a hand-written method (`g8.intent`), 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: [intent.d.ts](intent.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`intentStats`](#op-intentstats) ★ | `GET /api/v1/intent/stats` | read | `intent:read` | Intent Stats |
26
+ | [`keywordCompanies`](#op-keywordcompanies) ★ | `POST /api/v1/intent/keywords/{keyword_id}/companies` | billable | `intent:run` | Keyword Companies |
27
+ | [`keywordContacts`](#op-keywordcontacts) ★ | `POST /api/v1/intent/keywords/{keyword_id}/contacts` | billable | `intent:run` | Keyword Contacts |
28
+ | [`keywordUpdateFilters`](#op-keywordupdatefilters) | `POST /api/v1/intent/keywords/{keyword_id}/filters` | billable | `intent:run` | Keyword Update Filters |
29
+ | [`keywordUrls`](#op-keywordurls) ★ | `POST /api/v1/intent/keywords/{keyword_id}/urls` | billable | `intent:run` | Keyword Urls |
30
+ | [`keywordsAdd`](#op-keywordsadd) | `POST /api/v1/intent/keywords/add` | billable | `intent:run` | Keywords Add |
31
+ | [`keywordsCreateFromDomain`](#op-keywordscreatefromdomain) ★ | `POST /api/v1/intent/keywords/create-from-domain` | billable | `intent:run` | Keywords Create From Domain |
32
+ | [`keywordsCreateFromSearch`](#op-keywordscreatefromsearch) | `POST /api/v1/intent/keywords/create-from-search` | billable | `intent:run` | Keywords Create From Search |
33
+ | [`keywordsDelete`](#op-keywordsdelete) ★ | `DELETE /api/v1/intent/keywords/{keyword_id}` | destructive | `intent:delete` | Keywords Delete |
34
+ | [`keywordsList`](#op-keywordslist) ★ | `POST /api/v1/intent/keywords/list` | billable | `intent:run` | Keywords List |
35
+ | [`pagesByDomain`](#op-pagesbydomain) ★ | `POST /api/v1/intent/pages-by-domain` | billable | `intent:run` | Pages By Domain |
36
+ | [`pagesContacts`](#op-pagescontacts) ★ | `POST /api/v1/intent/pages/contacts` | billable | `intent:run` | Pages Contacts |
37
+ | [`pagesSearch`](#op-pagessearch) ★ | `POST /api/v1/intent/pages/search` | billable | `intent:run` | Pages Search |
38
+ | [`pagesVisitorCounts`](#op-pagesvisitorcounts) ★ | `POST /api/v1/intent/pages/visitor-counts` | billable | `intent:run` | Pages Visitor Counts |
39
+ | [`pagesVisitors`](#op-pagesvisitors) ★ | `POST /api/v1/intent/pages/visitors` | billable | `intent:run` | Pages Visitors |
40
+ | [`urlCompanies`](#op-urlcompanies) ★ | `POST /api/v1/intent/url-companies` | read | `intent:read` | Url Companies |
41
+
42
+ ---
43
+
44
+ <a id="op-intentstats"></a>
45
+
46
+ ### `g8.api.intent.intentStats(input?)`
47
+
48
+ **Intent Stats**
49
+
50
+ - HTTP: `GET /api/v1/intent/stats`
51
+ - operationId: `intent_stats_intent_stats_get` (also callable as `g8.api.call("intent_stats_intent_stats_get", input)`)
52
+ - Tier: `read`: reads data; safe to call and to retry
53
+ - API-key scope: `intent:read`
54
+ - ★ Hand-written: [`g8.intent.stats()`](../sdk-clients.md#g8-intent-stats)
55
+
56
+ Index-coverage stats: document count + size.
57
+
58
+ Useful for health checks before committing to a compete-tracking program.
59
+
60
+ **Input**: none.
61
+
62
+ **Returns** `unknown`.
63
+
64
+ **Example**
65
+
66
+ ```ts
67
+ const result = await g8.api.intent.intentStats();
68
+ ```
69
+
70
+ ---
71
+
72
+ <a id="op-keywordcompanies"></a>
73
+
74
+ ### `g8.api.intent.keywordCompanies(input)`
75
+
76
+ **Keyword Companies**
77
+
78
+ - HTTP: `POST /api/v1/intent/keywords/{keyword_id}/companies`
79
+ - operationId: `keyword_companies_intent_keywords__keyword_id__companies_post` (also callable as `g8.api.call("keyword_companies_intent_keywords__keyword_id__companies_post", input)`)
80
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
81
+ - API-key scope: `intent:run`
82
+ - ★ Hand-written: [`g8.intent.keywordCompanies()`](../sdk-clients.md#g8-intent-keywordcompanies)
83
+
84
+ Companies resolved against a keyword's URL set (intent_resolved).
85
+
86
+ **Input**
87
+
88
+ | Field | Type | Required | Description |
89
+ |---|---|---|---|
90
+ | `path.keyword_id` | `string (uuid)` | yes | |
91
+ | `body` | `KeywordDetailRequest` | yes | Request body; fields below. |
92
+
93
+ Body fields (`KeywordDetailRequest`):
94
+
95
+ | Field | Type | Required | Description |
96
+ |---|---|---|---|
97
+ | `body.conditions` | `Array<Record<string, unknown>>` | no | Optional `[{field, operator, value}]` filter conditions. |
98
+ | `body.limit` | `integer` | no | default `100`, min 1, max 500 |
99
+ | `body.page` | `integer` | no | default `1`, min 1 |
100
+
101
+ **Returns** `unknown`.
102
+
103
+ **Example**
104
+
105
+ ```ts
106
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
107
+ const result = await g8.api.intent.keywordCompanies({
108
+ path: { keyword_id: "00000000-0000-0000-0000-000000000000" },
109
+ body: {},
110
+ });
111
+ ```
112
+
113
+ ---
114
+
115
+ <a id="op-keywordcontacts"></a>
116
+
117
+ ### `g8.api.intent.keywordContacts(input)`
118
+
119
+ **Keyword Contacts**
120
+
121
+ - HTTP: `POST /api/v1/intent/keywords/{keyword_id}/contacts`
122
+ - operationId: `keyword_contacts_intent_keywords__keyword_id__contacts_post` (also callable as `g8.api.call("keyword_contacts_intent_keywords__keyword_id__contacts_post", input)`)
123
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
124
+ - API-key scope: `intent:run`
125
+ - ★ Hand-written: [`g8.intent.keywordContacts()`](../sdk-clients.md#g8-intent-keywordcontacts)
126
+
127
+ People resolved against a keyword's URL set (intent_resolved).
128
+
129
+ **Input**
130
+
131
+ | Field | Type | Required | Description |
132
+ |---|---|---|---|
133
+ | `path.keyword_id` | `string (uuid)` | yes | |
134
+ | `body` | `KeywordDetailRequest` | yes | Request body; fields below. |
135
+
136
+ Body fields (`KeywordDetailRequest`):
137
+
138
+ | Field | Type | Required | Description |
139
+ |---|---|---|---|
140
+ | `body.conditions` | `Array<Record<string, unknown>>` | no | Optional `[{field, operator, value}]` filter conditions. |
141
+ | `body.limit` | `integer` | no | default `100`, min 1, max 500 |
142
+ | `body.page` | `integer` | no | default `1`, min 1 |
143
+
144
+ **Returns** `unknown`.
145
+
146
+ **Example**
147
+
148
+ ```ts
149
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
150
+ const result = await g8.api.intent.keywordContacts({
151
+ path: { keyword_id: "00000000-0000-0000-0000-000000000000" },
152
+ body: {},
153
+ });
154
+ ```
155
+
156
+ ---
157
+
158
+ <a id="op-keywordupdatefilters"></a>
159
+
160
+ ### `g8.api.intent.keywordUpdateFilters(input)`
161
+
162
+ **Keyword Update Filters**
163
+
164
+ - HTTP: `POST /api/v1/intent/keywords/{keyword_id}/filters`
165
+ - operationId: `keyword_update_filters_intent_keywords__keyword_id__filters_post` (also callable as `g8.api.call("keyword_update_filters_intent_keywords__keyword_id__filters_post", input)`)
166
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
167
+ - API-key scope: `intent:run`
168
+
169
+ Replace a keyword's `search_filters` JSON.
170
+
171
+ **Input**
172
+
173
+ | Field | Type | Required | Description |
174
+ |---|---|---|---|
175
+ | `path.keyword_id` | `string (uuid)` | yes | |
176
+ | `body` | `KeywordFiltersUpdateRequest` | yes | Request body; fields below. |
177
+
178
+ Body fields (`KeywordFiltersUpdateRequest`):
179
+
180
+ | Field | Type | Required | Description |
181
+ |---|---|---|---|
182
+ | `body.search_filters` | `Record<string, unknown>` | yes | Full-replacement `search_filters` JSON. Typed fields in `intent.domain.models.keyword.KeywordSearchFilters`: audience, exclude_page_types, min_commercial_intent_level, max_urls_per_domain, llm_triage, exclude_domains. Extra keys allowed. |
183
+
184
+ **Returns** `unknown`.
185
+
186
+ **Example**
187
+
188
+ ```ts
189
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
190
+ const result = await g8.api.intent.keywordUpdateFilters({
191
+ path: { keyword_id: "00000000-0000-0000-0000-000000000000" },
192
+ body: { search_filters: {} },
193
+ });
194
+ ```
195
+
196
+ ---
197
+
198
+ <a id="op-keywordurls"></a>
199
+
200
+ ### `g8.api.intent.keywordUrls(input)`
201
+
202
+ **Keyword Urls**
203
+
204
+ - HTTP: `POST /api/v1/intent/keywords/{keyword_id}/urls`
205
+ - operationId: `keyword_urls_intent_keywords__keyword_id__urls_post` (also callable as `g8.api.call("keyword_urls_intent_keywords__keyword_id__urls_post", input)`)
206
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
207
+ - API-key scope: `intent:run`
208
+ - ★ Hand-written: [`g8.intent.keywordUrls()`](../sdk-clients.md#g8-intent-keywordurls)
209
+
210
+ URLs linked to a compete-tracking keyword (data4seo_task_results).
211
+
212
+ **Input**
213
+
214
+ | Field | Type | Required | Description |
215
+ |---|---|---|---|
216
+ | `path.keyword_id` | `string (uuid)` | yes | |
217
+ | `body` | `KeywordDetailRequest` | yes | Request body; fields below. |
218
+
219
+ Body fields (`KeywordDetailRequest`):
220
+
221
+ | Field | Type | Required | Description |
222
+ |---|---|---|---|
223
+ | `body.conditions` | `Array<Record<string, unknown>>` | no | Optional `[{field, operator, value}]` filter conditions. |
224
+ | `body.limit` | `integer` | no | default `100`, min 1, max 500 |
225
+ | `body.page` | `integer` | no | default `1`, min 1 |
226
+
227
+ **Returns** `unknown`.
228
+
229
+ **Example**
230
+
231
+ ```ts
232
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
233
+ const result = await g8.api.intent.keywordUrls({
234
+ path: { keyword_id: "00000000-0000-0000-0000-000000000000" },
235
+ body: {},
236
+ });
237
+ ```
238
+
239
+ ---
240
+
241
+ <a id="op-keywordsadd"></a>
242
+
243
+ ### `g8.api.intent.keywordsAdd(input)`
244
+
245
+ **Keywords Add**
246
+
247
+ - HTTP: `POST /api/v1/intent/keywords/add`
248
+ - operationId: `keywords_add_intent_keywords_add_post` (also callable as `g8.api.call("keywords_add_intent_keywords_add_post", input)`)
249
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
250
+ - API-key scope: `intent:run`
251
+
252
+ Bulk-add plain compete-tracking keyword rows (web-UI "Add keywords" parity).
253
+
254
+ Thin public proxy over the SAME handler the graph8 web UI's Buyer Intent >
255
+ Keywords bulk-add uses (``POST /intent/keywords/add-keywords`` internally).
256
+ One deliberate strictness on top of the UI path: entries are trimmed of
257
+ leading/trailing whitespace before saving (the UI screen saves them raw).
258
+ Everything else matches the UI path:
259
+
260
+ - Keywords are stored lowercased; the response carries the stored text.
261
+ - A keyword that already exists for this org + ``signal_type`` (and is not
262
+ soft-deleted) is skipped silently by the handler; this route reports it
263
+ as ``skipped`` with reason ``already_exists``. Soft-deleted keywords can
264
+ be re-added.
265
+ - For ``signal_type='intent'`` each NEWLY created keyword fires a
266
+ background SERP fetch that seeds its URL set asynchronously - URLs and
267
+ resolved contacts/companies appear later, not in this response.
268
+ - Unlike ``create-from-search`` this saves the plain phrase only (no
269
+ search seeding, no ``search_filters``); use
270
+ ``/keywords/{id}/filters`` afterwards to set per-keyword filters.
271
+
272
+ **Input**
273
+
274
+ | Field | Type | Required | Description |
275
+ |---|---|---|---|
276
+ | `body` | `KeywordsAddRequest` | yes | Request body; fields below. |
277
+
278
+ Body fields (`KeywordsAddRequest`):
279
+
280
+ | Field | Type | Required | Description |
281
+ |---|---|---|---|
282
+ | `body.keywords` | `Array<string>` | yes | 1-50 keyword phrases to add as plain compete-tracking rows. Stored lowercased. Empty / whitespace-only entries and in-request duplicates (case-insensitive, trimmed) are skipped, not saved twice. min items 1, max items 50 |
283
+ | `body.signal_type` | `"intent" \| "jobs" \| "job_changes"` | no | Signal source discriminator, same vocabulary as the web UI: 'intent' (default, buyer-intent tracking), 'jobs', or 'job_changes'. default `"intent"` |
284
+
285
+ **Returns** `ApiResponse_KeywordsAddResponse_`: the envelope `{ data: KeywordsAddResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
286
+
287
+ Other envelope fields: `pagination` (PaginationMeta).
288
+
289
+ `KeywordsAddResponse` fields:
290
+
291
+ | Field | Type | Required | Description |
292
+ |---|---|---|---|
293
+ | `created` | `Array<KeywordAddedItem>` | no | default `[]` |
294
+ | `created_count` | `integer` | no | default `0` |
295
+ | `skipped` | `Array<KeywordsAddSkippedItem>` | no | default `[]` |
296
+ | `skipped_count` | `integer` | no | default `0` |
297
+
298
+ **Example**
299
+
300
+ ```ts
301
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
302
+ const result = await g8.api.intent.keywordsAdd({ body: { keywords: ["example"] } });
303
+ ```
304
+
305
+ ---
306
+
307
+ <a id="op-keywordscreatefromdomain"></a>
308
+
309
+ ### `g8.api.intent.keywordsCreateFromDomain(input)`
310
+
311
+ **Keywords Create From Domain**
312
+
313
+ - HTTP: `POST /api/v1/intent/keywords/create-from-domain`
314
+ - operationId: `keywords_create_from_domain_intent_keywords_create_from_domain_post` (also callable as `g8.api.call("keywords_create_from_domain_intent_keywords_create_from_domain_post", input)`)
315
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
316
+ - API-key scope: `intent:run`
317
+ - ★ Hand-written: [`g8.intent.createFromDomain()`](../sdk-clients.md#g8-intent-createfromdomain)
318
+
319
+ One-shot compete-tracking keyword create.
320
+
321
+ Under the hood:
322
+ 1. `pages-by-domain` -> on-domain / subdomain URLs only
323
+ 2. `contacts` -> pre-resolved people across those URLs
324
+ 3. `save-from-search` -> persists the keyword row with both
325
+
326
+ The off-domain guard is strict: every page returned from step 1 is
327
+ re-checked against `^(.+\.)?<domain>$` before save, so nothing that
328
+ isn't actually on the competitor's site can slip in.
329
+
330
+ **Input**
331
+
332
+ | Field | Type | Required | Description |
333
+ |---|---|---|---|
334
+ | `body` | `KeywordCreateFromDomainRequest` | yes | Request body; fields below. |
335
+
336
+ Body fields (`KeywordCreateFromDomainRequest`):
337
+
338
+ | Field | Type | Required | Description |
339
+ |---|---|---|---|
340
+ | `body.domain` | `string` | yes | Competitor domain to track, e.g. 'cognism.com'. min length 3, max length 253 |
341
+ | `body.contact_limit` | `integer` | no | Max contacts to pre-resolve. default `200`, min 1, max 500 |
342
+ | `body.page_limit` | `integer` | no | Max pages to seed from the domain. default `200`, min 1, max 500 |
343
+
344
+ **Returns** `ApiResponse_KeywordCreateFromDomainResponse_`: the envelope `{ data: KeywordCreateFromDomainResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
345
+
346
+ Other envelope fields: `pagination` (PaginationMeta).
347
+
348
+ `KeywordCreateFromDomainResponse` fields:
349
+
350
+ | Field | Type | Required | Description |
351
+ |---|---|---|---|
352
+ | `keyword` | `string` | yes | |
353
+ | `companies_seeded` | `integer` | no | default `0` |
354
+ | `contacts_seeded` | `integer` | no | default `0` |
355
+ | `keyword_id` | `string \| null` | no | |
356
+ | `message` | `string` | no | default `""` |
357
+ | `off_domain_rejected` | `integer` | no | default `0` |
358
+ | `pages_seeded` | `integer` | no | default `0` |
359
+
360
+ **Example**
361
+
362
+ ```ts
363
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
364
+ const result = await g8.api.intent.keywordsCreateFromDomain({ body: { domain: "acme.com" } });
365
+ ```
366
+
367
+ ---
368
+
369
+ <a id="op-keywordscreatefromsearch"></a>
370
+
371
+ ### `g8.api.intent.keywordsCreateFromSearch(input)`
372
+
373
+ **Keywords Create From Search**
374
+
375
+ - HTTP: `POST /api/v1/intent/keywords/create-from-search`
376
+ - operationId: `keywords_create_from_search_intent_keywords_create_from_search_post` (also callable as `g8.api.call("keywords_create_from_search_intent_keywords_create_from_search_post", input)`)
377
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
378
+ - API-key scope: `intent:run`
379
+
380
+ Bulk-create compete-tracking keywords from free-text queries.
381
+
382
+ The array/free-text sibling of ``create-from-domain``. For EACH keyword
383
+ (max 10, processed sequentially) it runs:
384
+
385
+ 1. ``pages/search`` - text/semantic search of the intent index
386
+ 2. ``contacts_for_urls`` - resolve people who visited those pages
387
+ 3. ``save_keyword_from_search``- persist the keyword + URLs + contacts
388
+
389
+ Each keyword is isolated: a failure on one yields ``status="error"`` for
390
+ that item and never fails the whole batch. Empty / whitespace-only entries
391
+ and in-request duplicates (case-insensitive, trimmed) are ``status="skipped"``
392
+ before any search/resolve work.
393
+
394
+ NOTE - not idempotent across requests: re-posting the same keyword text in a
395
+ LATER request replaces the prior saved row and returns a NEW ``keyword_id``
396
+ (the underlying save is replace-on-save for an exact keyword+filters match).
397
+
398
+ **Input**
399
+
400
+ | Field | Type | Required | Description |
401
+ |---|---|---|---|
402
+ | `body` | `KeywordsCreateFromSearchRequest` | yes | Request body; fields below. |
403
+
404
+ Body fields (`KeywordsCreateFromSearchRequest`):
405
+
406
+ | Field | Type | Required | Description |
407
+ |---|---|---|---|
408
+ | `body.keywords` | `Array<string>` | yes | 1-10 free-text keyword queries. Each is searched against the intent page index, contacts/companies are resolved, and a compete-tracking keyword row is saved. Duplicates within the request (case-insensitive, trimmed) are skipped, not re-saved. min items 1, max items 10 |
409
+ | `body.contact_limit` | `integer` | no | Max contacts to pre-resolve per keyword. default `50`, min 1, max 100 |
410
+ | `body.page_limit` | `integer` | no | Max pages to seed per keyword. Deliberately smaller than create-from-domain's 200 default since this runs once per keyword. default `20`, min 1, max 50 |
411
+ | `body.search_filters` | `Record<string, unknown> \| null` | no | Optional intent-search filters applied to EVERY keyword in the batch (audience, page_type, commercial_score_min, etc.). Stored verbatim on each saved keyword row so the daily resolver replays them. |
412
+ | `body.semantic_ratio` | `number` | no | 0 = text search (default, cheapest), 1 = semantic, between = hybrid. default `0`, min 0, max 1 |
413
+
414
+ **Returns** `ApiResponse_KeywordsCreateFromSearchResponse_`: the envelope `{ data: KeywordsCreateFromSearchResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
415
+
416
+ Other envelope fields: `pagination` (PaginationMeta).
417
+
418
+ `KeywordsCreateFromSearchResponse` fields:
419
+
420
+ | Field | Type | Required | Description |
421
+ |---|---|---|---|
422
+ | `created_count` | `integer` | no | default `0` |
423
+ | `error_count` | `integer` | no | default `0` |
424
+ | `results` | `Array<KeywordCreateFromSearchItem>` | no | default `[]` |
425
+ | `skipped_count` | `integer` | no | default `0` |
426
+
427
+ **Example**
428
+
429
+ ```ts
430
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
431
+ const result = await g8.api.intent.keywordsCreateFromSearch({ body: { keywords: ["example"] } });
432
+ ```
433
+
434
+ ---
435
+
436
+ <a id="op-keywordsdelete"></a>
437
+
438
+ ### `g8.api.intent.keywordsDelete(input)`
439
+
440
+ **Keywords Delete**
441
+
442
+ - HTTP: `DELETE /api/v1/intent/keywords/{keyword_id}`
443
+ - operationId: `keywords_delete_intent_keywords__keyword_id__delete` (also callable as `g8.api.call("keywords_delete_intent_keywords__keyword_id__delete", input)`)
444
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
445
+ - API-key scope: `intent:delete`
446
+ - ★ Hand-written: [`g8.intent.deleteKeyword()`](../sdk-clients.md#g8-intent-deletekeyword)
447
+
448
+ Soft-delete a compete-tracking keyword row.
449
+
450
+ **Input**
451
+
452
+ | Field | Type | Required | Description |
453
+ |---|---|---|---|
454
+ | `path.keyword_id` | `string (uuid)` | yes | Keyword row UUID. |
455
+
456
+ **Returns** `unknown`.
457
+
458
+ **Example**
459
+
460
+ ```ts
461
+ // destructive: deletes or archives data; confirm with a human before calling.
462
+ const result = await g8.api.intent.keywordsDelete({ path: { keyword_id: "00000000-0000-0000-0000-000000000000" } });
463
+ ```
464
+
465
+ ---
466
+
467
+ <a id="op-keywordslist"></a>
468
+
469
+ ### `g8.api.intent.keywordsList(input)`
470
+
471
+ **Keywords List**
472
+
473
+ - HTTP: `POST /api/v1/intent/keywords/list`
474
+ - operationId: `keywords_list_intent_keywords_list_post` (also callable as `g8.api.call("keywords_list_intent_keywords_list_post", input)`)
475
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
476
+ - API-key scope: `intent:run`
477
+ - ★ Hand-written: [`g8.intent.listKeywords()`](../sdk-clients.md#g8-intent-listkeywords)
478
+
479
+ All compete-tracking keyword rows for the org.
480
+
481
+ Each row carries `total_resolved_contacts` and
482
+ `total_resolved_companies` so the caller can rank rows by actual
483
+ compete intelligence delivered.
484
+
485
+ **Input**
486
+
487
+ | Field | Type | Required | Description |
488
+ |---|---|---|---|
489
+ | `body` | `KeywordsListRequest` | yes | Request body; fields below. |
490
+
491
+ Body fields (`KeywordsListRequest`):
492
+
493
+ | Field | Type | Required | Description |
494
+ |---|---|---|---|
495
+ | `body.keyword_contains` | `string \| null` | no | Case-insensitive keyword substring filter. |
496
+ | `body.limit` | `integer` | no | default `100`, min 1, max 500 |
497
+ | `body.page` | `integer` | no | default `1`, min 1 |
498
+
499
+ **Returns** `unknown`.
500
+
501
+ **Example**
502
+
503
+ ```ts
504
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
505
+ const result = await g8.api.intent.keywordsList({ body: {} });
506
+ ```
507
+
508
+ ---
509
+
510
+ <a id="op-pagesbydomain"></a>
511
+
512
+ ### `g8.api.intent.pagesByDomain(input)`
513
+
514
+ **Pages By Domain**
515
+
516
+ - HTTP: `POST /api/v1/intent/pages-by-domain`
517
+ - operationId: `pages_by_domain_intent_pages_by_domain_post` (also callable as `g8.api.call("pages_by_domain_intent_pages_by_domain_post", input)`)
518
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
519
+ - API-key scope: `intent:run`
520
+ - ★ Hand-written: [`g8.intent.pagesByDomain()`](../sdk-clients.md#g8-intent-pagesbydomain)
521
+
522
+ Every indexed page on a competitor domain (and its subdomains).
523
+
524
+ Queries ClickHouse `intent.crawl_pages` directly via a
525
+ `domain_root = X OR domain_root LIKE '%.X'` filter. Orders by
526
+ `commercial_score DESC`. Primary consumer: compete-tracking keyword
527
+ setup - avoids polluting a keyword row with news articles that only
528
+ mention the competitor.
529
+
530
+ **Input**
531
+
532
+ | Field | Type | Required | Description |
533
+ |---|---|---|---|
534
+ | `body` | `PagesByDomainRequest` | yes | Request body; fields below. |
535
+
536
+ Body fields (`PagesByDomainRequest`):
537
+
538
+ | Field | Type | Required | Description |
539
+ |---|---|---|---|
540
+ | `body.domain` | `string` | yes | Competitor root domain. Subdomains auto-matched. min length 3, max length 253 |
541
+ | `body.limit` | `integer` | no | default `200`, min 1, max 500 |
542
+ | `body.offset` | `integer` | no | default `0`, min 0 |
543
+
544
+ **Returns** `ApiResponse_PagesByDomainResponse_`: the envelope `{ data: PagesByDomainResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
545
+
546
+ Other envelope fields: `pagination` (PaginationMeta).
547
+
548
+ `PagesByDomainResponse` fields:
549
+
550
+ | Field | Type | Required | Description |
551
+ |---|---|---|---|
552
+ | `domain` | `string` | yes | |
553
+ | `pages` | `Array<IntentPageItem>` | no | default `[]` |
554
+ | `took_ms` | `integer` | no | default `0` |
555
+ | `total_hits` | `integer` | no | default `0` |
556
+
557
+ **Example**
558
+
559
+ ```ts
560
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
561
+ const result = await g8.api.intent.pagesByDomain({ body: { domain: "acme.com" } });
562
+ ```
563
+
564
+ ---
565
+
566
+ <a id="op-pagescontacts"></a>
567
+
568
+ ### `g8.api.intent.pagesContacts(input)`
569
+
570
+ **Pages Contacts**
571
+
572
+ - HTTP: `POST /api/v1/intent/pages/contacts`
573
+ - operationId: `pages_contacts_intent_pages_contacts_post` (also callable as `g8.api.call("pages_contacts_intent_pages_contacts_post", input)`)
574
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
575
+ - API-key scope: `intent:run`
576
+ - ★ Hand-written: [`g8.intent.pageContacts()`](../sdk-clients.md#g8-intent-pagecontacts)
577
+
578
+ Aggregated, deduplicated resolved contacts across a URL list.
579
+
580
+ One batched HEM pull, then the 4-path identity fan-out. Used to
581
+ pre-populate the `contacts` array on a save-from-search keyword so the
582
+ row shows contact counts immediately (not after the daily resolver).
583
+
584
+ **Input**
585
+
586
+ | Field | Type | Required | Description |
587
+ |---|---|---|---|
588
+ | `body` | `PagesContactsRequest` | yes | Request body; fields below. |
589
+
590
+ Body fields (`PagesContactsRequest`):
591
+
592
+ | Field | Type | Required | Description |
593
+ |---|---|---|---|
594
+ | `body.urls` | `Array<string>` | yes | min items 1, max items 200 |
595
+ | `body.limit` | `integer` | no | default `100`, min 1, max 500 |
596
+ | `body.mode` | `string` | no | default `"quick"` |
597
+ | `body.offset` | `integer` | no | default `0`, min 0 |
598
+
599
+ **Returns** `unknown`.
600
+
601
+ **Example**
602
+
603
+ ```ts
604
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
605
+ const result = await g8.api.intent.pagesContacts({ body: { urls: ["https://example.com"] } });
606
+ ```
607
+
608
+ ---
609
+
610
+ <a id="op-pagessearch"></a>
611
+
612
+ ### `g8.api.intent.pagesSearch(input)`
613
+
614
+ **Pages Search**
615
+
616
+ - HTTP: `POST /api/v1/intent/pages/search`
617
+ - operationId: `pages_search_intent_pages_search_post` (also callable as `g8.api.call("pages_search_intent_pages_search_post", input)`)
618
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
619
+ - API-key scope: `intent:run`
620
+ - ★ Hand-written: [`g8.intent.searchPages()`](../sdk-clients.md#g8-intent-searchpages)
621
+
622
+ Text / semantic / hybrid search across the intent-enriched page index.
623
+
624
+ Honors the same operator syntax the internal search box supports:
625
+ `site:<domain>`, `intitle:X`, `inurl:X`, `type:blog`, `audience:b2b`,
626
+ `-exclude`, or just a bare domain for domain-mode.
627
+
628
+ **Input**
629
+
630
+ | Field | Type | Required | Description |
631
+ |---|---|---|---|
632
+ | `body` | `PagesSearchRequest` | yes | Request body; fields below. |
633
+
634
+ Body fields (`PagesSearchRequest`):
635
+
636
+ | Field | Type | Required | Description |
637
+ |---|---|---|---|
638
+ | `body.query` | `string` | yes | min length 1, max length 500 |
639
+ | `body.filters` | `Record<string, unknown> \| null` | no | |
640
+ | `body.include_visitors` | `boolean` | no | default `true` |
641
+ | `body.limit` | `integer` | no | default `50`, min 1, max 500 |
642
+ | `body.offset` | `integer` | no | default `0`, min 0 |
643
+ | `body.semantic_ratio` | `number` | no | 0 = text, 1 = semantic, between = hybrid default `0`, min 0, max 1 |
644
+ | `body.sort` | `Array<string> \| null` | no | |
645
+
646
+ **Returns** `ApiResponse_PagesSearchResponse_`: the envelope `{ data: PagesSearchResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
647
+
648
+ Other envelope fields: `pagination` (PaginationMeta).
649
+
650
+ `PagesSearchResponse` fields:
651
+
652
+ | Field | Type | Required | Description |
653
+ |---|---|---|---|
654
+ | `query` | `string` | yes | |
655
+ | `mode` | `string` | no | default `"text"` |
656
+ | `pages` | `Array<IntentPageItem>` | no | default `[]` |
657
+ | `took_ms` | `integer` | no | default `0` |
658
+ | `total_hits` | `integer` | no | default `0` |
659
+
660
+ **Example**
661
+
662
+ ```ts
663
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
664
+ const result = await g8.api.intent.pagesSearch({ body: { query: "example" } });
665
+ ```
666
+
667
+ ---
668
+
669
+ <a id="op-pagesvisitorcounts"></a>
670
+
671
+ ### `g8.api.intent.pagesVisitorCounts(input)`
672
+
673
+ **Pages Visitor Counts**
674
+
675
+ - HTTP: `POST /api/v1/intent/pages/visitor-counts`
676
+ - operationId: `pages_visitor_counts_intent_pages_visitor_counts_post` (also callable as `g8.api.call("pages_visitor_counts_intent_pages_visitor_counts_post", input)`)
677
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
678
+ - API-key scope: `intent:run`
679
+ - ★ Hand-written: [`g8.intent.pageVisitorCounts()`](../sdk-clients.md#g8-intent-pagevisitorcounts)
680
+
681
+ Batched unique-visitor count per page URL.
682
+
683
+ Reads the pre-aggregated `intent.url_visitor_counts` MV first; falls
684
+ back to the raw `intent.optimized_signals_v1` if the MV doesn't exist
685
+ yet. Fast enough to call with thousands of URLs.
686
+
687
+ **Input**
688
+
689
+ | Field | Type | Required | Description |
690
+ |---|---|---|---|
691
+ | `body` | `PagesVisitorCountsRequest` | yes | Request body; fields below. |
692
+
693
+ Body fields (`PagesVisitorCountsRequest`):
694
+
695
+ | Field | Type | Required | Description |
696
+ |---|---|---|---|
697
+ | `body.urls` | `Array<string>` | yes | min items 1, max items 15000 |
698
+
699
+ **Returns** `unknown`.
700
+
701
+ **Example**
702
+
703
+ ```ts
704
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
705
+ const result = await g8.api.intent.pagesVisitorCounts({ body: { urls: ["https://example.com"] } });
706
+ ```
707
+
708
+ ---
709
+
710
+ <a id="op-pagesvisitors"></a>
711
+
712
+ ### `g8.api.intent.pagesVisitors(input)`
713
+
714
+ **Pages Visitors**
715
+
716
+ - HTTP: `POST /api/v1/intent/pages/visitors`
717
+ - operationId: `pages_visitors_intent_pages_visitors_post` (also callable as `g8.api.call("pages_visitors_intent_pages_visitors_post", input)`)
718
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
719
+ - API-key scope: `intent:run`
720
+ - ★ Hand-written: [`g8.intent.pageVisitors()`](../sdk-clients.md#g8-intent-pagevisitors)
721
+
722
+ Resolve the people who visited a specific page URL.
723
+
724
+ Backed by the same S1 -> S2 chain the FE drill-down uses. Returns
725
+ HEM, profile fields (verified), and a `source` tier (verified / b2b /
726
+ b2c / company / anonymous) so the caller can filter confidence.
727
+
728
+ **Input**
729
+
730
+ | Field | Type | Required | Description |
731
+ |---|---|---|---|
732
+ | `body` | `PagesVisitorsRequest` | yes | Request body; fields below. |
733
+
734
+ Body fields (`PagesVisitorsRequest`):
735
+
736
+ | Field | Type | Required | Description |
737
+ |---|---|---|---|
738
+ | `body.url` | `string` | yes | Canonical PAGE_URL, e.g. 'cognism.com/pricing' (no scheme, no www). min length 1, max length 1024 |
739
+ | `body.limit` | `integer` | no | default `50`, min 1, max 500 |
740
+ | `body.mode` | `string` | no | 'quick' (~500ms) or 'full' (~2-3s, all paths). default `"quick"` |
741
+ | `body.offset` | `integer` | no | default `0`, min 0 |
742
+
743
+ **Returns** `unknown`.
744
+
745
+ **Example**
746
+
747
+ ```ts
748
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
749
+ const result = await g8.api.intent.pagesVisitors({ body: { url: "https://example.com" } });
750
+ ```
751
+
752
+ ---
753
+
754
+ <a id="op-urlcompanies"></a>
755
+
756
+ ### `g8.api.intent.urlCompanies(input)`
757
+
758
+ **Url Companies**
759
+
760
+ - HTTP: `POST /api/v1/intent/url-companies`
761
+ - operationId: `url_companies_intent_url_companies_post` (also callable as `g8.api.call("url_companies_intent_url_companies_post", input)`)
762
+ - Tier: `read`: reads data; safe to call and to retry
763
+ - API-key scope: `intent:read`
764
+ - ★ Hand-written: [`g8.intent.urlCompanies()`](../sdk-clients.md#g8-intent-urlcompanies)
765
+
766
+ Companies whose people visited a single URL, with a B2B/B2C split.
767
+
768
+ Aggregated from `{org_id}.intent_resolved`. Contact-resolved companies
769
+ only - IP-only company resolution is a separate treatment and is not
770
+ included here.
771
+
772
+ The response shape is field-for-field identical to the main-app
773
+ `POST /intent-search/url-companies` that backs the FE drill-down; key
774
+ parity between the two is locked by
775
+ `developer_api/tests/test_intent_url_companies_api.py`.
776
+
777
+ Failure semantics deliberately differ from that main-app route: it
778
+ swallows lookup errors and returns an empty result, which over this
779
+ surface would be indistinguishable from "nobody visited". Consistent
780
+ with its `/intent/pages/*` siblings, this raises 503 instead so a caller
781
+ can tell a degraded backend from a genuine zero.
782
+
783
+ **Input**
784
+
785
+ | Field | Type | Required | Description |
786
+ |---|---|---|---|
787
+ | `body` | `UrlCompaniesRequest` | yes | Request body; fields below. |
788
+
789
+ Body fields (`UrlCompaniesRequest`):
790
+
791
+ | Field | Type | Required | Description |
792
+ |---|---|---|---|
793
+ | `body.url` | `string` | yes | Canonical page_url (no scheme, no www) |
794
+ | `body.days` | `integer` | no | default `90`, min 1, max 365 |
795
+ | `body.limit` | `integer` | no | default `200`, min 1, max 500 |
796
+
797
+ **Returns** `unknown`.
798
+
799
+ **Example**
800
+
801
+ ```ts
802
+ const result = await g8.api.intent.urlCompanies({ body: { url: "https://example.com" } });
803
+ ```
804
+
805
+ ---
806
+
807
+ ## Referenced types
808
+
809
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
810
+
811
+ <a id="type-intentpageitem"></a>
812
+
813
+ ### `IntentPageItem`
814
+
815
+ | Field | Type | Required | Description |
816
+ |---|---|---|---|
817
+ | `audience` | `string \| null` | no | |
818
+ | `commercial_score` | `number \| null` | no | |
819
+ | `domain_root` | `string \| null` | no | |
820
+ | `mention_score` | `number \| null` | no | |
821
+ | `page_type` | `string \| null` | no | |
822
+ | `summary` | `string \| null` | no | |
823
+ | `title` | `string \| null` | no | |
824
+ | `url` | `string \| null` | no | |
825
+
826
+ <a id="type-keywordaddeditem"></a>
827
+
828
+ ### `KeywordAddedItem`
829
+
830
+ | Field | Type | Required | Description |
831
+ |---|---|---|---|
832
+ | `id` | `string` | yes | |
833
+ | `keyword` | `string` | yes | Stored (lowercased) keyword text. |
834
+ | `signal_type` | `string` | yes | |
835
+ | `created_at` | `string (date-time) \| null` | no | |
836
+
837
+ <a id="type-keywordcreatefromsearchitem"></a>
838
+
839
+ ### `KeywordCreateFromSearchItem`
840
+
841
+ | Field | Type | Required | Description |
842
+ |---|---|---|---|
843
+ | `keyword` | `string` | yes | |
844
+ | `status` | `string` | yes | 'created' \| 'skipped' \| 'error' |
845
+ | `companies_seeded` | `integer` | no | default `0` |
846
+ | `contacts_seeded` | `integer` | no | default `0` |
847
+ | `error` | `string \| null` | no | |
848
+ | `keyword_id` | `string \| null` | no | |
849
+ | `pages_seeded` | `integer` | no | default `0` |
850
+
851
+ <a id="type-keywordsaddskippeditem"></a>
852
+
853
+ ### `KeywordsAddSkippedItem`
854
+
855
+ | Field | Type | Required | Description |
856
+ |---|---|---|---|
857
+ | `keyword` | `string` | yes | |
858
+ | `reason` | `string` | yes | 'empty' \| 'duplicate_in_request' \| 'already_exists' |