@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,1067 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.inbox`: Inbox
4
+
5
+ 22 operations (12 read, 5 write, 1 destructive, 4 external).
6
+
7
+ 6 of these also have a hand-written method (`g8.inbox`), 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: [inbox.d.ts](inbox.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`assignReply`](#op-assignreply) ★ | `POST /api/v1/inbox/{reply_id}/assign` | external | `inbox:run` | Assign Reply |
26
+ | [`autoTagInboxChat`](#op-autotaginboxchat) | `POST /api/v1/inbox/chats/auto-tag` | write | `inbox:write` | Auto Tag Inbox Chat |
27
+ | [`createUniversalActivitySavedView`](#op-createuniversalactivitysavedview) | `POST /api/v1/universal-activity/save-view` | write | `inbox:write` | Create Universal Activity Saved View |
28
+ | [`discardInboxEmailDraft`](#op-discardinboxemaildraft) | `DELETE /api/v1/inbox/emails/{email_id}/draft` | destructive | `inbox:delete` | Discard Inbox Email Draft |
29
+ | [`getDraft`](#op-getdraft) ★ | `GET /api/v1/inbox/{reply_id}/draft` | read | `inbox:read` | Get Draft |
30
+ | [`getInboxChat`](#op-getinboxchat) | `GET /api/v1/inbox/chats/{chat_id}` | read | `inbox:read` | Get Inbox Chat |
31
+ | [`getInboxEmail`](#op-getinboxemail) | `GET /api/v1/inbox/emails/{email_id}` | read | `inbox:read` | Get Inbox Email |
32
+ | [`getReply`](#op-getreply) ★ | `GET /api/v1/inbox/{reply_id}` | read | `inbox:read` | Get Reply |
33
+ | [`getUniversalActivityMetrics`](#op-getuniversalactivitymetrics) | `GET /api/v1/universal-activity/metrics` | read | `inbox:read` | Get Universal Activity Metrics |
34
+ | [`getUniversalActivityPreview`](#op-getuniversalactivitypreview) | `GET /api/v1/universal-activity/preview/{event_id}` | read | `inbox:read` | Get Universal Activity Preview |
35
+ | [`hotContacts`](#op-hotcontacts) | `GET /api/v1/inbox/hot-contacts` | read | `inbox:read` | Hot Contacts |
36
+ | [`listInbox`](#op-listinbox) ★ | `GET /api/v1/inbox` | read | `inbox:read` | List Inbox |
37
+ | [`listUniversalActivityQueues`](#op-listuniversalactivityqueues) | `GET /api/v1/universal-activity/queues` | read | `inbox:read` | List Universal Activity Queues |
38
+ | [`listUniversalActivitySavedViews`](#op-listuniversalactivitysavedviews) | `GET /api/v1/universal-activity/saved-views` | read | `inbox:read` | List Universal Activity Saved Views |
39
+ | [`markInboxChatViewed`](#op-markinboxchatviewed) | `POST /api/v1/inbox/chats/{chat_id}/mark-viewed` | write | `inbox:write` | Mark Inbox Chat Viewed |
40
+ | [`queryUniversalActivity`](#op-queryuniversalactivity) | `POST /api/v1/universal-activity` | write | `inbox:write` | Query Universal Activity |
41
+ | [`searchInboxChats`](#op-searchinboxchats) | `POST /api/v1/inbox/chats/search` | read | `inbox:read` | Search Inbox Chats |
42
+ | [`searchInboxEmails`](#op-searchinboxemails) | `POST /api/v1/inbox/emails/search` | read | `inbox:read` | Search Inbox Emails |
43
+ | [`sendInboxEmail`](#op-sendinboxemail) | `POST /api/v1/inbox/emails/{email_id}/send` | external | `inbox:run` | Send Inbox Email |
44
+ | [`sendReply`](#op-sendreply) ★ | `POST /api/v1/inbox/{reply_id}/send` | external | `inbox:run` | Send Reply |
45
+ | [`starInboxChat`](#op-starinboxchat) | `PUT /api/v1/inbox/chats/{chat_id}/star` | write | `inbox:write` | Star Inbox Chat |
46
+ | [`tagReply`](#op-tagreply) ★ | `POST /api/v1/inbox/{reply_id}/tag` | external | `inbox:run` | Tag Reply |
47
+
48
+ ---
49
+
50
+ <a id="op-assignreply"></a>
51
+
52
+ ### `g8.api.inbox.assignReply(input)`
53
+
54
+ **Assign Reply**
55
+
56
+ - HTTP: `POST /api/v1/inbox/{reply_id}/assign`
57
+ - operationId: `assign_reply_inbox__reply_id__assign_post` (also callable as `g8.api.call("assign_reply_inbox__reply_id__assign_post", input)`)
58
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
59
+ - API-key scope: `inbox:run`
60
+ - ★ Hand-written: [`g8.inbox.assign()`](../sdk-clients.md#g8-inbox-assign)
61
+
62
+ Assign a user to an inbox thread.
63
+
64
+ **Input**
65
+
66
+ | Field | Type | Required | Description |
67
+ |---|---|---|---|
68
+ | `path.reply_id` | `string` | yes | Thread/reply ID |
69
+ | `body` | `AssignRequest` | yes | Request body; fields below. |
70
+ | `query.channel` | `InboxChannel` | no | Channel type default `"email"` |
71
+
72
+ Body fields (`AssignRequest`):
73
+
74
+ | Field | Type | Required | Description |
75
+ |---|---|---|---|
76
+ | `body.assignee_email` | `string` | yes | Email of the user to assign |
77
+
78
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
79
+
80
+ Other envelope fields: `pagination` (PaginationMeta).
81
+
82
+ **Example**
83
+
84
+ ```ts
85
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
86
+ const result = await g8.api.inbox.assignReply({
87
+ path: { reply_id: "id" },
88
+ body: { assignee_email: "jane@acme.com" },
89
+ });
90
+ ```
91
+
92
+ ---
93
+
94
+ <a id="op-autotaginboxchat"></a>
95
+
96
+ ### `g8.api.inbox.autoTagInboxChat(input)`
97
+
98
+ **Auto Tag Inbox Chat**
99
+
100
+ - HTTP: `POST /api/v1/inbox/chats/auto-tag`
101
+ - operationId: `auto_tag_inbox_chat_inbox_chats_auto_tag_post` (also callable as `g8.api.call("auto_tag_inbox_chat_inbox_chats_auto_tag_post", input)`)
102
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
103
+ - API-key scope: `inbox:write`
104
+
105
+ Ask the model to suggest tags for a chat.
106
+
107
+ `org_id` is OVERWRITTEN from the key's own principal whatever the body
108
+ says. The app's `ChatTaggingSuggestRequest` carries an `org_id` field
109
+ because the in-app caller already knows its tenant - accepting it from a
110
+ client here would let a key name someone else's org in a request body.
111
+
112
+ **Input**
113
+
114
+ | Field | Type | Required | Description |
115
+ |---|---|---|---|
116
+ | `body` | `Record<string, unknown>` | yes | Request body; fields below. |
117
+
118
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
119
+
120
+ Other envelope fields: `pagination` (PaginationMeta).
121
+
122
+ **Example**
123
+
124
+ ```ts
125
+ const result = await g8.api.inbox.autoTagInboxChat({ body: {} });
126
+ ```
127
+
128
+ ---
129
+
130
+ <a id="op-createuniversalactivitysavedview"></a>
131
+
132
+ ### `g8.api.inbox.createUniversalActivitySavedView(input)`
133
+
134
+ **Create Universal Activity Saved View**
135
+
136
+ - HTTP: `POST /api/v1/universal-activity/save-view`
137
+ - operationId: `create_universal_activity_saved_view_universal_activity_save_view_post` (also callable as `g8.api.call("create_universal_activity_saved_view_universal_activity_save_view_post", input)`)
138
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
139
+ - API-key scope: `inbox:write`
140
+
141
+ Save a named queue + filter combination.
142
+
143
+ **Input**
144
+
145
+ | Field | Type | Required | Description |
146
+ |---|---|---|---|
147
+ | `body` | `SavedViewCreateRequest` | yes | Request body; fields below. |
148
+
149
+ Body fields (`SavedViewCreateRequest`):
150
+
151
+ | Field | Type | Required | Description |
152
+ |---|---|---|---|
153
+ | `body.name` | `string` | yes | Display name. min length 1 |
154
+ | `body.filters` | `Record<string, unknown>` | no | Filter set to restore. |
155
+ | `body.icon` | `string \| null` | no | |
156
+ | `body.queue` | `string \| null` | no | |
157
+ | `body.shared` | `boolean` | no | Visible to teammates when true. default `false` |
158
+
159
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
160
+
161
+ Other envelope fields: `pagination` (PaginationMeta).
162
+
163
+ **Example**
164
+
165
+ ```ts
166
+ const result = await g8.api.inbox.createUniversalActivitySavedView({ body: { name: "Example" } });
167
+ ```
168
+
169
+ ---
170
+
171
+ <a id="op-discardinboxemaildraft"></a>
172
+
173
+ ### `g8.api.inbox.discardInboxEmailDraft(input)`
174
+
175
+ **Discard Inbox Email Draft**
176
+
177
+ - HTTP: `DELETE /api/v1/inbox/emails/{email_id}/draft`
178
+ - operationId: `discard_inbox_email_draft_inbox_emails__email_id__draft_delete` (also callable as `g8.api.call("discard_inbox_email_draft_inbox_emails__email_id__draft_delete", input)`)
179
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
180
+ - API-key scope: `inbox:delete`
181
+
182
+ Throw away the AI draft on this thread.
183
+
184
+ Discards the DRAFT, not the thread - the conversation and every message
185
+ already sent survive. There is nothing to undo, so a UI should confirm
186
+ before calling it.
187
+
188
+ **Input**
189
+
190
+ | Field | Type | Required | Description |
191
+ |---|---|---|---|
192
+ | `path.email_id` | `string` | yes | Email thread id. |
193
+
194
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
195
+
196
+ Other envelope fields: `pagination` (PaginationMeta).
197
+
198
+ **Example**
199
+
200
+ ```ts
201
+ // destructive: deletes or archives data; confirm with a human before calling.
202
+ const result = await g8.api.inbox.discardInboxEmailDraft({ path: { email_id: "jane@acme.com" } });
203
+ ```
204
+
205
+ ---
206
+
207
+ <a id="op-getdraft"></a>
208
+
209
+ ### `g8.api.inbox.getDraft(input)`
210
+
211
+ **Get Draft**
212
+
213
+ - HTTP: `GET /api/v1/inbox/{reply_id}/draft`
214
+ - operationId: `get_draft_inbox__reply_id__draft_get` (also callable as `g8.api.call("get_draft_inbox__reply_id__draft_get", input)`)
215
+ - Tier: `read`: reads data; safe to call and to retry
216
+ - API-key scope: `inbox:read`
217
+ - ★ Hand-written: [`g8.inbox.draft()`](../sdk-clients.md#g8-inbox-draft)
218
+
219
+ Generate an AI draft reply. Charges credits - returns 402 on insufficient balance.
220
+
221
+ **Input**
222
+
223
+ | Field | Type | Required | Description |
224
+ |---|---|---|---|
225
+ | `path.reply_id` | `string` | yes | Thread/reply ID |
226
+ | `query.channel` | `InboxChannel` | no | Channel type default `"email"` |
227
+
228
+ **Returns** `ApiResponse_DraftResponse_`: the envelope `{ data: DraftResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
229
+
230
+ Other envelope fields: `pagination` (PaginationMeta).
231
+
232
+ `DraftResponse` fields:
233
+
234
+ | Field | Type | Required | Description |
235
+ |---|---|---|---|
236
+ | `content` | `string` | yes | Generated draft text (HTML) |
237
+ | `credits_charged` | `integer` | no | default `0` |
238
+ | `plain_content` | `string \| null` | no | Plain text version |
239
+
240
+ **Example**
241
+
242
+ ```ts
243
+ const result = await g8.api.inbox.getDraft({ path: { reply_id: "id" } });
244
+ ```
245
+
246
+ ---
247
+
248
+ <a id="op-getinboxchat"></a>
249
+
250
+ ### `g8.api.inbox.getInboxChat(input)`
251
+
252
+ **Get Inbox Chat**
253
+
254
+ - HTTP: `GET /api/v1/inbox/chats/{chat_id}`
255
+ - operationId: `get_inbox_chat_inbox_chats__chat_id__get` (also callable as `g8.api.call("get_inbox_chat_inbox_chats__chat_id__get", input)`)
256
+ - Tier: `read`: reads data; safe to call and to retry
257
+ - API-key scope: `inbox:read`
258
+
259
+ One chat thread, with its messages.
260
+
261
+ Returned whole rather than wrapped in a page: this is a single `Chat`, and
262
+ forcing it into an `items` list would hide the thread from a caller
263
+ reading the obvious field.
264
+
265
+ **Input**
266
+
267
+ | Field | Type | Required | Description |
268
+ |---|---|---|---|
269
+ | `path.chat_id` | `string` | yes | Chat id. |
270
+
271
+ **Returns** `ApiResponse_InboxPage_`: the envelope `{ data: InboxPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
272
+
273
+ Other envelope fields: `pagination` (PaginationMeta).
274
+
275
+ `InboxPage` fields:
276
+
277
+ | Field | Type | Required | Description |
278
+ |---|---|---|---|
279
+ | `items` | `Array<Record<string, unknown>>` | no | |
280
+ | `total` | `integer` | no | default `0` |
281
+
282
+ **Example**
283
+
284
+ ```ts
285
+ const result = await g8.api.inbox.getInboxChat({ path: { chat_id: "id" } });
286
+ ```
287
+
288
+ ---
289
+
290
+ <a id="op-getinboxemail"></a>
291
+
292
+ ### `g8.api.inbox.getInboxEmail(input)`
293
+
294
+ **Get Inbox Email**
295
+
296
+ - HTTP: `GET /api/v1/inbox/emails/{email_id}`
297
+ - operationId: `get_inbox_email_inbox_emails__email_id__get` (also callable as `g8.api.call("get_inbox_email_inbox_emails__email_id__get", input)`)
298
+ - Tier: `read`: reads data; safe to call and to retry
299
+ - API-key scope: `inbox:read`
300
+
301
+ One email thread, with its messages.
302
+
303
+ **Input**
304
+
305
+ | Field | Type | Required | Description |
306
+ |---|---|---|---|
307
+ | `path.email_id` | `string` | yes | Email thread id. |
308
+
309
+ **Returns** `ApiResponse_InboxPage_`: the envelope `{ data: InboxPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
310
+
311
+ Other envelope fields: `pagination` (PaginationMeta).
312
+
313
+ `InboxPage` fields:
314
+
315
+ | Field | Type | Required | Description |
316
+ |---|---|---|---|
317
+ | `items` | `Array<Record<string, unknown>>` | no | |
318
+ | `total` | `integer` | no | default `0` |
319
+
320
+ **Example**
321
+
322
+ ```ts
323
+ const result = await g8.api.inbox.getInboxEmail({ path: { email_id: "jane@acme.com" } });
324
+ ```
325
+
326
+ ---
327
+
328
+ <a id="op-getreply"></a>
329
+
330
+ ### `g8.api.inbox.getReply(input)`
331
+
332
+ **Get Reply**
333
+
334
+ - HTTP: `GET /api/v1/inbox/{reply_id}`
335
+ - operationId: `get_reply_inbox__reply_id__get` (also callable as `g8.api.call("get_reply_inbox__reply_id__get", input)`)
336
+ - Tier: `read`: reads data; safe to call and to retry
337
+ - API-key scope: `inbox:read`
338
+ - ★ Hand-written: [`g8.inbox.get()`](../sdk-clients.md#g8-inbox-get)
339
+
340
+ Get a single inbox thread by ID.
341
+
342
+ **Input**
343
+
344
+ | Field | Type | Required | Description |
345
+ |---|---|---|---|
346
+ | `path.reply_id` | `string` | yes | Thread/reply ID |
347
+ | `query.channel` | `InboxChannel` | no | Channel type default `"email"` |
348
+
349
+ **Returns** `ApiResponse_InboxThreadResponse_`: the envelope `{ data: InboxThreadResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
350
+
351
+ Other envelope fields: `pagination` (PaginationMeta).
352
+
353
+ `InboxThreadResponse` fields:
354
+
355
+ | Field | Type | Required | Description |
356
+ |---|---|---|---|
357
+ | `channel` | `string` | yes | |
358
+ | `id` | `string` | yes | |
359
+ | `assignees` | `Array<Record<string, unknown>>` | no | |
360
+ | `contact` | `Record<string, unknown> \| null` | no | Contact snapshot: name, email, company |
361
+ | `created_at` | `string \| null` | no | |
362
+ | `messages` | `Array<InboxMessageItem>` | no | |
363
+ | `status` | `string \| null` | no | |
364
+ | `subject` | `string \| null` | no | |
365
+ | `tags` | `Array<Record<string, unknown>>` | no | |
366
+ | `updated_at` | `string \| null` | no | |
367
+
368
+ **Example**
369
+
370
+ ```ts
371
+ const result = await g8.api.inbox.getReply({ path: { reply_id: "id" } });
372
+ ```
373
+
374
+ ---
375
+
376
+ <a id="op-getuniversalactivitymetrics"></a>
377
+
378
+ ### `g8.api.inbox.getUniversalActivityMetrics(input)`
379
+
380
+ **Get Universal Activity Metrics**
381
+
382
+ - HTTP: `GET /api/v1/universal-activity/metrics`
383
+ - operationId: `get_universal_activity_metrics_universal_activity_metrics_get` (also callable as `g8.api.call("get_universal_activity_metrics_universal_activity_metrics_get", input)`)
384
+ - Tier: `read`: reads data; safe to call and to retry
385
+ - API-key scope: `inbox:read`
386
+
387
+ Activity metrics for a window.
388
+
389
+ `tz` is REQUIRED, deliberately: every bucket boundary is a local calendar
390
+ day, so a default would silently bucket a customer's data in the wrong
391
+ timezone rather than failing loudly.
392
+
393
+ **Input**
394
+
395
+ | Field | Type | Required | Description |
396
+ |---|---|---|---|
397
+ | `query.tz` | `string` | yes | IANA timezone name, e.g. `America/New_York`. |
398
+ | `query.range` | `"today" \| "yesterday" \| "week" \| "month" \| "custom"` | no | default `"today"` |
399
+ | `query.scope` | `"mine" \| "all" \| "team"` | no | `team` is accepted for back-compat; the service aliases it to `mine`. default `"mine"` |
400
+ | `query.start_date` | `string (date) \| null` | no | Custom range start, inclusive, in `tz`. |
401
+ | `query.end_date` | `string (date) \| null` | no | Custom range end, inclusive, in `tz`. |
402
+ | `query.workspace_id` | `string \| null` | no | Workspace UUID; omit for org-wide. |
403
+ | `query.channel` | `string \| null` | no | Restrict to one channel. |
404
+
405
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
406
+
407
+ Other envelope fields: `pagination` (PaginationMeta).
408
+
409
+ **Example**
410
+
411
+ ```ts
412
+ const result = await g8.api.inbox.getUniversalActivityMetrics({ query: { tz: "example" } });
413
+ ```
414
+
415
+ ---
416
+
417
+ <a id="op-getuniversalactivitypreview"></a>
418
+
419
+ ### `g8.api.inbox.getUniversalActivityPreview(input)`
420
+
421
+ **Get Universal Activity Preview**
422
+
423
+ - HTTP: `GET /api/v1/universal-activity/preview/{event_id}`
424
+ - operationId: `get_universal_activity_preview_universal_activity_preview__event_id__get` (also callable as `g8.api.call("get_universal_activity_preview_universal_activity_preview__event_id__get", input)`)
425
+ - Tier: `read`: reads data; safe to call and to retry
426
+ - API-key scope: `inbox:read`
427
+
428
+ Right-pane preview: email, thread and contact data for one event.
429
+
430
+ Applies the same per-user mailbox privacy the app applies - the key sees
431
+ what its owner sees, no more.
432
+
433
+ **Input**
434
+
435
+ | Field | Type | Required | Description |
436
+ |---|---|---|---|
437
+ | `path.event_id` | `string` | yes | Activity event id. |
438
+ | `query.tabs` | `string` | no | Comma-separated tabs to hydrate. default `"preview,thread,contact"` |
439
+
440
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
441
+
442
+ Other envelope fields: `pagination` (PaginationMeta).
443
+
444
+ **Example**
445
+
446
+ ```ts
447
+ const result = await g8.api.inbox.getUniversalActivityPreview({ path: { event_id: "id" } });
448
+ ```
449
+
450
+ ---
451
+
452
+ <a id="op-hotcontacts"></a>
453
+
454
+ ### `g8.api.inbox.hotContacts(input?)`
455
+
456
+ **Hot Contacts**
457
+
458
+ - HTTP: `GET /api/v1/inbox/hot-contacts`
459
+ - operationId: `hot_contacts_inbox_hot_contacts_get` (also callable as `g8.api.call("hot_contacts_inbox_hot_contacts_get", input)`)
460
+ - Tier: `read`: reads data; safe to call and to retry
461
+ - API-key scope: `inbox:read`
462
+
463
+ Most-engaged ('hot') contacts ranked by recent INBOUND interaction
464
+ events (replies / opens / meeting RSVPs) — NOT a static score column.
465
+
466
+ Org-scoped to the authenticated key's organization. Registered before
467
+ `/{reply_id}` so 'hot-contacts' isn't captured as an id.
468
+
469
+ **Input**
470
+
471
+ | Field | Type | Required | Description |
472
+ |---|---|---|---|
473
+ | `query.days` | `integer` | no | Lookback window in days default `30` |
474
+ | `query.limit` | `integer` | no | Max contacts to return default `10` |
475
+
476
+ **Returns** `ApiResponse_HotContactsResult_`: the envelope `{ data: HotContactsResult, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
477
+
478
+ Other envelope fields: `pagination` (PaginationMeta).
479
+
480
+ `HotContactsResult` fields:
481
+
482
+ | Field | Type | Required | Description |
483
+ |---|---|---|---|
484
+ | `days` | `integer` | yes | |
485
+ | `contacts` | `Array<HotContact>` | no | |
486
+
487
+ **Example**
488
+
489
+ ```ts
490
+ const result = await g8.api.inbox.hotContacts();
491
+ ```
492
+
493
+ ---
494
+
495
+ <a id="op-listinbox"></a>
496
+
497
+ ### `g8.api.inbox.listInbox(input?)`
498
+
499
+ **List Inbox**
500
+
501
+ - HTTP: `GET /api/v1/inbox`
502
+ - operationId: `list_inbox_inbox_get` (also callable as `g8.api.call("list_inbox_inbox_get", input)`)
503
+ - Tier: `read`: reads data; safe to call and to retry
504
+ - API-key scope: `inbox:read`
505
+ - ★ Hand-written: [`g8.inbox.list()`](../sdk-clients.md#g8-inbox-list)
506
+
507
+ List inbox threads across email, SMS, and LinkedIn channels.
508
+
509
+ ``status`` accepts ``SENT``, ``AI_RESPONDED`` or ``DRAFT`` (case-insensitive)
510
+ and is forwarded to the channel handler; an unknown value returns 422.
511
+
512
+ CAVEAT — ``assignee``: this cannot filter by an arbitrary email in this
513
+ layer. ``ChannelsService.get_channels`` only exposes ``assigned_to_me`` (a
514
+ boolean bound to the *caller's* identity), so the value is used purely as a
515
+ trigger to return the caller's own assigned threads — NOT threads assigned
516
+ to the requested email. For an org (machine) API key the caller identity is
517
+ the synthetic ``api-key@graph8.com``, which owns no threads, so the result
518
+ is effectively empty. A true per-assignee filter needs an ``assignee_email``
519
+ field on the shared ``ChannelRequest`` (out of scope for the dev-API layer).
520
+
521
+ **Input**
522
+
523
+ | Field | Type | Required | Description |
524
+ |---|---|---|---|
525
+ | `query.channel` | `InboxChannel \| null` | no | Filter by channel: email, sms, linkedin |
526
+ | `query.sequence_id` | `string \| null` | no | Filter by sequence (campaign) ID |
527
+ | `query.status` | `string \| null` | no | Filter by status |
528
+ | `query.assignee` | `string \| null` | no | Filter by assignee email |
529
+ | `query.tag` | `string \| null` | no | Filter by tag ID |
530
+ | `query.page` | `integer` | no | Page number default `1` |
531
+ | `query.page_size` | `integer` | no | Items per page default `50` |
532
+
533
+ **Returns** `ApiResponse_list_InboxThreadResponse__`: the envelope `{ data: Array<InboxThreadResponse>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
534
+
535
+ Other envelope fields: `pagination` (PaginationMeta).
536
+
537
+ `InboxThreadResponse` fields:
538
+
539
+ | Field | Type | Required | Description |
540
+ |---|---|---|---|
541
+ | `channel` | `string` | yes | |
542
+ | `id` | `string` | yes | |
543
+ | `assignees` | `Array<Record<string, unknown>>` | no | |
544
+ | `contact` | `Record<string, unknown> \| null` | no | Contact snapshot: name, email, company |
545
+ | `created_at` | `string \| null` | no | |
546
+ | `messages` | `Array<InboxMessageItem>` | no | |
547
+ | `status` | `string \| null` | no | |
548
+ | `subject` | `string \| null` | no | |
549
+ | `tags` | `Array<Record<string, unknown>>` | no | |
550
+ | `updated_at` | `string \| null` | no | |
551
+
552
+ **Example**
553
+
554
+ ```ts
555
+ const result = await g8.api.inbox.listInbox();
556
+ ```
557
+
558
+ ---
559
+
560
+ <a id="op-listuniversalactivityqueues"></a>
561
+
562
+ ### `g8.api.inbox.listUniversalActivityQueues(input?)`
563
+
564
+ **List Universal Activity Queues**
565
+
566
+ - HTTP: `GET /api/v1/universal-activity/queues`
567
+ - operationId: `list_universal_activity_queues_universal_activity_queues_get` (also callable as `g8.api.call("list_universal_activity_queues_universal_activity_queues_get", input)`)
568
+ - Tier: `read`: reads data; safe to call and to retry
569
+ - API-key scope: `inbox:read`
570
+
571
+ Queue chips.
572
+
573
+ NOTE this is a stub upstream: the chips row was removed in the 2026-05-18
574
+ dashboard pivot and the endpoint stays live only so the existing frontend
575
+ hook keeps resolving. Exposed for shape parity - do not build on its
576
+ contents.
577
+
578
+ **Input**
579
+
580
+ | Field | Type | Required | Description |
581
+ |---|---|---|---|
582
+ | `query.scope` | `"mine" \| "all" \| "team"` | no | default `"mine"` |
583
+
584
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
585
+
586
+ Other envelope fields: `pagination` (PaginationMeta).
587
+
588
+ **Example**
589
+
590
+ ```ts
591
+ const result = await g8.api.inbox.listUniversalActivityQueues();
592
+ ```
593
+
594
+ ---
595
+
596
+ <a id="op-listuniversalactivitysavedviews"></a>
597
+
598
+ ### `g8.api.inbox.listUniversalActivitySavedViews(input?)`
599
+
600
+ **List Universal Activity Saved Views**
601
+
602
+ - HTTP: `GET /api/v1/universal-activity/saved-views`
603
+ - operationId: `list_universal_activity_saved_views_universal_activity_saved_views_get` (also callable as `g8.api.call("list_universal_activity_saved_views_universal_activity_saved_views_get", input)`)
604
+ - Tier: `read`: reads data; safe to call and to retry
605
+ - API-key scope: `inbox:read`
606
+
607
+ Saved queue + filter combinations for this principal, plus shared ones.
608
+
609
+ **Input**: none.
610
+
611
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
612
+
613
+ Other envelope fields: `pagination` (PaginationMeta).
614
+
615
+ **Example**
616
+
617
+ ```ts
618
+ const result = await g8.api.inbox.listUniversalActivitySavedViews();
619
+ ```
620
+
621
+ ---
622
+
623
+ <a id="op-markinboxchatviewed"></a>
624
+
625
+ ### `g8.api.inbox.markInboxChatViewed(input)`
626
+
627
+ **Mark Inbox Chat Viewed**
628
+
629
+ - HTTP: `POST /api/v1/inbox/chats/{chat_id}/mark-viewed`
630
+ - operationId: `mark_inbox_chat_viewed_inbox_chats__chat_id__mark_viewed_post` (also callable as `g8.api.call("mark_inbox_chat_viewed_inbox_chats__chat_id__mark_viewed_post", input)`)
631
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
632
+ - API-key scope: `inbox:write`
633
+
634
+ Mark a chat read. Idempotent - marking a read chat read again is a no-op.
635
+
636
+ **Input**
637
+
638
+ | Field | Type | Required | Description |
639
+ |---|---|---|---|
640
+ | `path.chat_id` | `string` | yes | Chat id. |
641
+
642
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
643
+
644
+ Other envelope fields: `pagination` (PaginationMeta).
645
+
646
+ **Example**
647
+
648
+ ```ts
649
+ const result = await g8.api.inbox.markInboxChatViewed({ path: { chat_id: "id" } });
650
+ ```
651
+
652
+ ---
653
+
654
+ <a id="op-queryuniversalactivity"></a>
655
+
656
+ ### `g8.api.inbox.queryUniversalActivity(input?)`
657
+
658
+ **Query Universal Activity**
659
+
660
+ - HTTP: `POST /api/v1/universal-activity`
661
+ - operationId: `query_universal_activity_universal_activity_post` (also callable as `g8.api.call("query_universal_activity_universal_activity_post", input)`)
662
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
663
+ - API-key scope: `inbox:write`
664
+
665
+ The unified activity timeline, cursor-paginated.
666
+
667
+ POST rather than GET because the filter set is large and structured -
668
+ matching the app, so a rebuilt inbox sends the same body.
669
+
670
+ **Input**
671
+
672
+ | Field | Type | Required | Description |
673
+ |---|---|---|---|
674
+ | `body` | `UniversalActivityQuery` | no | Request body; fields below. |
675
+
676
+ Body fields (`UniversalActivityQuery`):
677
+
678
+ | Field | Type | Required | Description |
679
+ |---|---|---|---|
680
+ | `body.assignee_emails` | `Array<string> \| null` | no | |
681
+ | `body.campaign_ids` | `Array<string> \| null` | no | |
682
+ | `body.channels` | `Array<string> \| null` | no | Restrict to channels, e.g. `["email", "sms"]`. |
683
+ | `body.company_id` | `string \| null` | no | |
684
+ | `body.contact_id` | `string \| null` | no | |
685
+ | `body.cursor` | `string \| null` | no | Opaque cursor from the previous page. |
686
+ | `body.direction` | `string \| null` | no | `inbound` or `outbound`. |
687
+ | `body.exclude_tag_ids` | `Array<string> \| null` | no | |
688
+ | `body.page_size` | `integer` | no | Rows per page (1-100). default `15`, min 1, max 100 |
689
+ | `body.queue` | `"hot_replies" \| "follow_up" \| "booked_meetings" \| "everything" \| null` | no | Named queue to read. |
690
+ | `body.search` | `string \| null` | no | |
691
+ | `body.tag_ids` | `Array<string> \| null` | no | |
692
+ | `body.updated_after` | `string (date-time) \| null` | no | |
693
+ | `body.updated_before` | `string (date-time) \| null` | no | |
694
+ | `body.workspace_all_mail` | `boolean \| null` | no | Only meaningful with `workspace_id`. A workspace normally auto-scopes the email leg to its own campaign and direct sequences; set true to show all mail through that workspace's mailboxes. |
695
+ | `body.workspace_id` | `string \| null` | no | Workspace UUID; omit for org-wide. |
696
+
697
+ **Returns** `ApiResponse_Any_`: the envelope `{ data: unknown, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
698
+
699
+ Other envelope fields: `pagination` (PaginationMeta).
700
+
701
+ **Example**
702
+
703
+ ```ts
704
+ const result = await g8.api.inbox.queryUniversalActivity();
705
+ ```
706
+
707
+ ---
708
+
709
+ <a id="op-searchinboxchats"></a>
710
+
711
+ ### `g8.api.inbox.searchInboxChats(input?)`
712
+
713
+ **Search Inbox Chats**
714
+
715
+ - HTTP: `POST /api/v1/inbox/chats/search`
716
+ - operationId: `search_inbox_chats_inbox_chats_search_post` (also callable as `g8.api.call("search_inbox_chats_inbox_chats_search_post", input)`)
717
+ - Tier: `read`: reads data; safe to call and to retry
718
+ - API-key scope: `inbox:read`
719
+
720
+ Search and page the chat inbox.
721
+
722
+ A POST because the filter is a body, not because it writes anything.
723
+
724
+ `exclude_tag_ids` is the field that makes a Focused view work: the app
725
+ sends the archived / deleted / warmup / bounced tags there. Omit it and
726
+ those threads come back.
727
+
728
+ **Input**
729
+
730
+ | Field | Type | Required | Description |
731
+ |---|---|---|---|
732
+ | `body` | `ChatSearchRequest` | no | Request body; fields below. |
733
+
734
+ Body fields (`ChatSearchRequest`):
735
+
736
+ | Field | Type | Required | Description |
737
+ |---|---|---|---|
738
+ | `body.exclude_tag_ids` | `Array<string> \| null` | no | Drop chats carrying ANY of these tag ids. This is what makes a Focused view work - the app sends the archived/deleted/warmup/bounced tags here. Without it those threads come back. |
739
+ | `body.page` | `integer` | no | default `1`, min 1 |
740
+ | `body.page_size` | `integer` | no | default `20`, min 1, max 100 |
741
+ | `body.sort_by` | `"updated_at" \| "created_at" \| "last_message_at"` | no | Field to sort by. See `SortByField` for the accepted values. default `"created_at"` |
742
+ | `body.sort_order` | `"asc" \| "desc"` | no | default `"desc"` |
743
+ | `body.tags` | `Array<string> \| null` | no | Keep chats carrying ANY of these tag ids. |
744
+ | `body.updated_after` | `string (date-time) \| null` | no | |
745
+ | `body.updated_before` | `string (date-time) \| null` | no | |
746
+ | `body.user_id` | `string \| null` | no | Restrict to one user's chats. |
747
+
748
+ **Returns** `ApiResponse_InboxPage_`: the envelope `{ data: InboxPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
749
+
750
+ Other envelope fields: `pagination` (PaginationMeta).
751
+
752
+ `InboxPage` fields:
753
+
754
+ | Field | Type | Required | Description |
755
+ |---|---|---|---|
756
+ | `items` | `Array<Record<string, unknown>>` | no | |
757
+ | `total` | `integer` | no | default `0` |
758
+
759
+ **Example**
760
+
761
+ ```ts
762
+ const result = await g8.api.inbox.searchInboxChats();
763
+ ```
764
+
765
+ ---
766
+
767
+ <a id="op-searchinboxemails"></a>
768
+
769
+ ### `g8.api.inbox.searchInboxEmails(input)`
770
+
771
+ **Search Inbox Emails**
772
+
773
+ - HTTP: `POST /api/v1/inbox/emails/search`
774
+ - operationId: `search_inbox_emails_inbox_emails_search_post` (also callable as `g8.api.call("search_inbox_emails_inbox_emails_search_post", input)`)
775
+ - Tier: `read`: reads data; safe to call and to retry
776
+ - API-key scope: `inbox:read`
777
+
778
+ Search email threads across one or more mailboxes.
779
+
780
+ `mailboxes` is REQUIRED and an empty list is not "all mailboxes" - the
781
+ inbox is per-mailbox, so an empty list is simply no result. Paging is on
782
+ the query string, matching the app, because the body is the filter.
783
+
784
+ **Input**
785
+
786
+ | Field | Type | Required | Description |
787
+ |---|---|---|---|
788
+ | `body` | `EmailSearchRequest` | yes | Request body; fields below. |
789
+ | `query.page` | `integer` | no | default `1` |
790
+ | `query.page_size` | `integer` | no | default `10` |
791
+
792
+ Body fields (`EmailSearchRequest`):
793
+
794
+ | Field | Type | Required | Description |
795
+ |---|---|---|---|
796
+ | `body.mailboxes` | `Array<string>` | yes | Mailbox addresses to search. REQUIRED: the inbox is per-mailbox, and an empty list is not 'all mailboxes', it is no result. min items 1 |
797
+ | `body.assigned_to_user_email` | `string \| null` | no | Only threads assigned to this user. |
798
+ | `body.campaign_ids` | `Array<string> \| null` | no | |
799
+ | `body.exclude_tag_ids` | `Array<string> \| null` | no | |
800
+ | `body.search` | `string \| null` | no | |
801
+ | `body.search_emails` | `Array<string> \| null` | no | Return threads touching ANY of these addresses, in the thread owner or in a message's from/to. OR-matched - a scope filter, not a full-text search. |
802
+ | `body.sort_by` | `"updated_at" \| "created_at" \| "last_message_at"` | no | default `"updated_at"` |
803
+ | `body.sort_order` | `"asc" \| "desc"` | no | default `"desc"` |
804
+ | `body.status` | `"SENT" \| "AI_RESPONDED" \| "DRAFT" \| null` | no | Keep threads in one delivery state. Closed to the three the internal `EmailStatus` enum accepts - an open string here reaches a strict enum inside the handler and raises a bare `pydantic.ValidationError`, which no handler catches, so it escapes as a 500 instead of a 422. |
805
+ | `body.tag_ids` | `Array<string> \| null` | no | |
806
+ | `body.updated_after` | `string (date-time) \| null` | no | |
807
+ | `body.updated_before` | `string (date-time) \| null` | no | |
808
+
809
+ **Returns** `ApiResponse_InboxPage_`: the envelope `{ data: InboxPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
810
+
811
+ Other envelope fields: `pagination` (PaginationMeta).
812
+
813
+ `InboxPage` fields:
814
+
815
+ | Field | Type | Required | Description |
816
+ |---|---|---|---|
817
+ | `items` | `Array<Record<string, unknown>>` | no | |
818
+ | `total` | `integer` | no | default `0` |
819
+
820
+ **Example**
821
+
822
+ ```ts
823
+ const result = await g8.api.inbox.searchInboxEmails({ body: { mailboxes: ["example"] } });
824
+ ```
825
+
826
+ ---
827
+
828
+ <a id="op-sendinboxemail"></a>
829
+
830
+ ### `g8.api.inbox.sendInboxEmail(input)`
831
+
832
+ **Send Inbox Email**
833
+
834
+ - HTTP: `POST /api/v1/inbox/emails/{email_id}/send`
835
+ - operationId: `send_inbox_email_inbox_emails__email_id__send_post` (also callable as `g8.api.call("send_inbox_email_inbox_emails__email_id__send_post", input)`)
836
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
837
+ - API-key scope: `inbox:run`
838
+
839
+ SEND. THIS DELIVERS A REAL MESSAGE TO A REAL RECIPIENT.
840
+
841
+ Classifies `external`, so it needs the `inbox:run` grant rather than plain
842
+ write - a customer can hand out "read and triage my inbox" without handing
843
+ out "send as me".
844
+
845
+ Pass `message_id` to keep the reply in its thread; without it the message
846
+ arrives as a new conversation.
847
+
848
+ **Input**
849
+
850
+ | Field | Type | Required | Description |
851
+ |---|---|---|---|
852
+ | `path.email_id` | `string` | yes | Email thread id. |
853
+ | `query.mailbox` | `string` | yes | Mailbox address to send FROM. |
854
+ | `query.provider` | `"google_mailbox" \| "smtp"` | yes | Required and not inferred: the same address can be connected either way, and guessing would send through the wrong transport. Declared as a Literal so an unknown value is a request-layer 422 - as a bare `str` it reached `Mailbox(provider)` inside the handler and raised a ValueError, which is a 500 on the single most consequential call on this surface. |
855
+ | `body` | `EmailSendRequest` | yes | Request body; fields below. |
856
+
857
+ Body fields (`EmailSendRequest`):
858
+
859
+ | Field | Type | Required | Description |
860
+ |---|---|---|---|
861
+ | `body.content` | `string` | yes | Body. |
862
+ | `body.from_email` | `Array<string>` | yes | min items 1 |
863
+ | `body.subject` | `string` | yes | Subject. |
864
+ | `body.to` | `Array<string>` | yes | Recipients. At least one. min items 1 |
865
+ | `body.bcc_email` | `Array<string>` | no | |
866
+ | `body.cc_email` | `Array<string>` | no | |
867
+ | `body.message_id` | `string \| null` | no | Message being replied to, to keep the thread. |
868
+
869
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
870
+
871
+ Other envelope fields: `pagination` (PaginationMeta).
872
+
873
+ **Example**
874
+
875
+ ```ts
876
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
877
+ const result = await g8.api.inbox.sendInboxEmail({
878
+ path: { email_id: "jane@acme.com" },
879
+ query: { mailbox: "example", provider: "google_mailbox" },
880
+ body: {
881
+ content: "example",
882
+ from_email: ["jane@acme.com"],
883
+ subject: "Example",
884
+ to: ["+15555550100"],
885
+ },
886
+ });
887
+ ```
888
+
889
+ ---
890
+
891
+ <a id="op-sendreply"></a>
892
+
893
+ ### `g8.api.inbox.sendReply(input)`
894
+
895
+ **Send Reply**
896
+
897
+ - HTTP: `POST /api/v1/inbox/{reply_id}/send`
898
+ - operationId: `send_reply_inbox__reply_id__send_post` (also callable as `g8.api.call("send_reply_inbox__reply_id__send_post", input)`)
899
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
900
+ - API-key scope: `inbox:run`
901
+ - ★ Hand-written: [`g8.inbox.send()`](../sdk-clients.md#g8-inbox-send)
902
+
903
+ Send a reply through the specified channel (email, sms, or linkedin).
904
+
905
+ **Input**
906
+
907
+ | Field | Type | Required | Description |
908
+ |---|---|---|---|
909
+ | `path.reply_id` | `string` | yes | Thread/reply ID |
910
+ | `body` | `SendRequest` | yes | Request body; fields below. |
911
+
912
+ Body fields (`SendRequest`):
913
+
914
+ | Field | Type | Required | Description |
915
+ |---|---|---|---|
916
+ | `body.body` | `string` | yes | Message body to send |
917
+ | `body.channel` | `InboxChannel` | yes | Channel to send through: email, sms, or linkedin |
918
+ | `body.from_address` | `string \| null` | no | Sender address (mailbox email, phone number, or LinkedIn account ID) |
919
+ | `body.subject` | `string \| null` | no | Email subject (optional, for email channel) |
920
+ | `body.to` | `string \| null` | no | Recipient override (email address, phone number, or LinkedIn ID) |
921
+
922
+ **Returns** `ApiResponse_SendResponse_`: the envelope `{ data: SendResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
923
+
924
+ Other envelope fields: `pagination` (PaginationMeta).
925
+
926
+ `SendResponse` fields:
927
+
928
+ | Field | Type | Required | Description |
929
+ |---|---|---|---|
930
+ | `channel` | `string` | no | default `"email"` |
931
+ | `message_id` | `string \| null` | no | |
932
+ | `status` | `string` | no | default `"sent"` |
933
+
934
+ **Example**
935
+
936
+ ```ts
937
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
938
+ const result = await g8.api.inbox.sendReply({
939
+ path: { reply_id: "id" },
940
+ body: { body: "example", channel: "email" },
941
+ });
942
+ ```
943
+
944
+ ---
945
+
946
+ <a id="op-starinboxchat"></a>
947
+
948
+ ### `g8.api.inbox.starInboxChat(input)`
949
+
950
+ **Star Inbox Chat**
951
+
952
+ - HTTP: `PUT /api/v1/inbox/chats/{chat_id}/star`
953
+ - operationId: `star_inbox_chat_inbox_chats__chat_id__star_put` (also callable as `g8.api.call("star_inbox_chat_inbox_chats__chat_id__star_put", input)`)
954
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
955
+ - API-key scope: `inbox:write`
956
+
957
+ SET the starred state. `is_starred` is required and is not a toggle.
958
+
959
+ A toggle is not idempotent: a retried request would silently un-star the
960
+ thread it just starred. A PUT with an explicit value is safe to retry,
961
+ which is why the app models it this way and why this surface does not
962
+ "helpfully" make the field optional.
963
+
964
+ **Input**
965
+
966
+ | Field | Type | Required | Description |
967
+ |---|---|---|---|
968
+ | `path.chat_id` | `string` | yes | Chat id. |
969
+ | `body` | `ChatStarRequest` | yes | Request body; fields below. |
970
+
971
+ Body fields (`ChatStarRequest`):
972
+
973
+ | Field | Type | Required | Description |
974
+ |---|---|---|---|
975
+ | `body.is_starred` | `boolean` | yes | |
976
+
977
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
978
+
979
+ Other envelope fields: `pagination` (PaginationMeta).
980
+
981
+ **Example**
982
+
983
+ ```ts
984
+ const result = await g8.api.inbox.starInboxChat({ path: { chat_id: "id" }, body: { is_starred: true } });
985
+ ```
986
+
987
+ ---
988
+
989
+ <a id="op-tagreply"></a>
990
+
991
+ ### `g8.api.inbox.tagReply(input)`
992
+
993
+ **Tag Reply**
994
+
995
+ - HTTP: `POST /api/v1/inbox/{reply_id}/tag`
996
+ - operationId: `tag_reply_inbox__reply_id__tag_post` (also callable as `g8.api.call("tag_reply_inbox__reply_id__tag_post", input)`)
997
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
998
+ - API-key scope: `inbox:run`
999
+ - ★ Hand-written: [`g8.inbox.tag()`](../sdk-clients.md#g8-inbox-tag)
1000
+
1001
+ Attach tags to an inbox thread.
1002
+
1003
+ **Input**
1004
+
1005
+ | Field | Type | Required | Description |
1006
+ |---|---|---|---|
1007
+ | `path.reply_id` | `string` | yes | Thread/reply ID |
1008
+ | `body` | `developer_api__interfaces__dtos__inbox__TagRequest` | yes | Request body; fields below. |
1009
+ | `query.channel` | `InboxChannel` | no | Channel type default `"email"` |
1010
+
1011
+ Body fields (`developer_api__interfaces__dtos__inbox__TagRequest`):
1012
+
1013
+ | Field | Type | Required | Description |
1014
+ |---|---|---|---|
1015
+ | `body.tag_ids` | `Array<string>` | yes | Tag IDs to associate with the thread |
1016
+
1017
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1018
+
1019
+ Other envelope fields: `pagination` (PaginationMeta).
1020
+
1021
+ **Example**
1022
+
1023
+ ```ts
1024
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
1025
+ const result = await g8.api.inbox.tagReply({ path: { reply_id: "id" }, body: { tag_ids: ["id"] } });
1026
+ ```
1027
+
1028
+ ---
1029
+
1030
+ ## Referenced types
1031
+
1032
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
1033
+
1034
+ <a id="type-hotcontact"></a>
1035
+
1036
+ ### `HotContact`
1037
+
1038
+ One most-engaged contact (ranked by recent inbound activity).
1039
+
1040
+ | Field | Type | Required | Description |
1041
+ |---|---|---|---|
1042
+ | `contact_id` | `string` | yes | |
1043
+ | `email` | `string \| null` | no | |
1044
+ | `events` | `integer` | no | Inbound interaction events in the window default `0` |
1045
+ | `last_at` | `string \| null` | no | Most recent inbound activity (ISO) |
1046
+ | `meetings` | `integer` | no | Of those events, how many were meetings default `0` |
1047
+ | `who` | `string \| null` | no | Display name, else email, else id |
1048
+
1049
+ <a id="type-inboxchannel"></a>
1050
+
1051
+ ### `InboxChannel`
1052
+
1053
+ Type: `"email" | "sms" | "linkedin"`.
1054
+
1055
+ <a id="type-inboxmessageitem"></a>
1056
+
1057
+ ### `InboxMessageItem`
1058
+
1059
+ | Field | Type | Required | Description |
1060
+ |---|---|---|---|
1061
+ | `content` | `string \| null` | no | |
1062
+ | `date` | `string \| null` | no | |
1063
+ | `from_address` | `string \| null` | no | |
1064
+ | `is_draft` | `boolean` | no | default `false` |
1065
+ | `message_id` | `string \| null` | no | |
1066
+ | `responder` | `string \| null` | no | USER, AI, or OTHER |
1067
+ | `to_addresses` | `Array<string>` | no | |