@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,1690 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.mailboxes`: Mailboxes
4
+
5
+ 38 operations (15 read, 14 write, 6 destructive, 3 billable).
6
+
7
+ 5 of these also have a hand-written method (`g8.mailboxes`), 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: [mailboxes.d.ts](mailboxes.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`archiveMailbox`](#op-archivemailbox) | `POST /api/v1/mailboxes/{mailbox_id}/archive` | destructive | `campaigns:delete` | Archive Mailbox |
26
+ | [`archivePersona`](#op-archivepersona) | `DELETE /api/v1/mailboxes/personas/{persona_id}` | destructive | `campaigns:delete` | Archive Persona |
27
+ | [`bulkImportMailboxes`](#op-bulkimportmailboxes) | `POST /api/v1/mailboxes/bulk-import` | write | `campaigns:write` | Bulk Import Mailboxes |
28
+ | [`createMailbox`](#op-createmailbox) ★ | `POST /api/v1/mailboxes` | write | `campaigns:write` | Create Mailbox |
29
+ | [`createPlacementTest`](#op-createplacementtest) | `POST /api/v1/placement/tests` | billable | `campaigns:run` | Create Placement Test |
30
+ | [`createSenderPersona`](#op-createsenderpersona) | `POST /api/v1/mailboxes/personas` | write | `campaigns:write` | Create Sender Persona |
31
+ | [`deleteMailbox`](#op-deletemailbox) ★ | `DELETE /api/v1/mailboxes/{mailbox_id}` | destructive | `campaigns:delete` | Delete Mailbox |
32
+ | [`deleteScheduledPlacementTest`](#op-deletescheduledplacementtest) | `DELETE /api/v1/placement/scheduled/{schedule_id}` | destructive | `campaigns:delete` | Delete Scheduled Placement Test |
33
+ | [`deleteWarmup`](#op-deletewarmup) | `DELETE /api/v1/warmup/{mailbox_id}` | destructive | `campaigns:delete` | Delete Warmup |
34
+ | [`disableWarmup`](#op-disablewarmup) | `POST /api/v1/warmup/{mailbox_id}/disable` | write | `campaigns:write` | Disable Warmup |
35
+ | [`enableWarmup`](#op-enablewarmup) | `POST /api/v1/warmup/{mailbox_id}/enable` | write | `campaigns:write` | Enable Warmup |
36
+ | [`estimatePlacementTestCost`](#op-estimateplacementtestcost) | `POST /api/v1/placement/tests/estimate` | read | `campaigns:read` | Estimate Placement Test Cost |
37
+ | [`getFleetHealth`](#op-getfleethealth) | `GET /api/v1/mailboxes/fleet-health` | read | `campaigns:read` | Get Fleet Health |
38
+ | [`getMailbox`](#op-getmailbox) ★ | `GET /api/v1/mailboxes/{mailbox_id}` | read | `campaigns:read` | Get Mailbox |
39
+ | [`getMailboxAssociatedSequences`](#op-getmailboxassociatedsequences) | `GET /api/v1/mailboxes/{mailbox_id}/associated-sequences` | read | `campaigns:read` | Get Mailbox Associated Sequences |
40
+ | [`getMailboxHealth`](#op-getmailboxhealth) | `GET /api/v1/mailboxes/{mailbox_id}/health` | read | `campaigns:read` | Get Mailbox Health |
41
+ | [`getPlacementDomainStats`](#op-getplacementdomainstats) | `GET /api/v1/placement/domains/stats` | read | `campaigns:read` | Get Placement Domain Stats |
42
+ | [`getPlacementDomainSummary`](#op-getplacementdomainsummary) | `GET /api/v1/placement/domains/{domain_id}/summary` | read | `campaigns:read` | Get Placement Domain Summary |
43
+ | [`getPlacementTest`](#op-getplacementtest) | `GET /api/v1/placement/tests/{test_id}` | read | `campaigns:read` | Get Placement Test |
44
+ | [`getScheduledPlacementTest`](#op-getscheduledplacementtest) | `GET /api/v1/placement/scheduled/{schedule_id}` | read | `campaigns:read` | Get Scheduled Placement Test |
45
+ | [`getSenderPersona`](#op-getsenderpersona) | `GET /api/v1/mailboxes/personas/{persona_id}` | read | `campaigns:read` | Get Sender Persona |
46
+ | [`getWarmupAnalytics`](#op-getwarmupanalytics) | `GET /api/v1/warmup/{mailbox_id}/analytics` | read | `campaigns:read` | Get Warmup Analytics |
47
+ | [`listMyMailboxes`](#op-listmymailboxes) | `GET /api/v1/mailboxes/my` | read | `campaigns:read` | List My Mailboxes |
48
+ | [`listPlacementTests`](#op-listplacementtests) | `GET /api/v1/placement/tests` | read | `campaigns:read` | List Placement Tests |
49
+ | [`listScheduledPlacementTests`](#op-listscheduledplacementtests) | `GET /api/v1/placement/scheduled` | read | `campaigns:read` | List Scheduled Placement Tests |
50
+ | [`listSenderPersonas`](#op-listsenderpersonas) | `GET /api/v1/mailboxes/personas` | read | `campaigns:read` | List Sender Personas |
51
+ | [`pauseScheduledPlacementTest`](#op-pausescheduledplacementtest) | `POST /api/v1/placement/scheduled/{schedule_id}/pause` | write | `campaigns:write` | Pause Scheduled Placement Test |
52
+ | [`requestMailboxCancellation`](#op-requestmailboxcancellation) | `POST /api/v1/mailboxes/{mailbox_id}/request-cancellation` | destructive | `campaigns:delete` | Request Mailbox Cancellation |
53
+ | [`resumeScheduledPlacementTest`](#op-resumescheduledplacementtest) | `POST /api/v1/placement/scheduled/{schedule_id}/resume` | write | `campaigns:write` | Resume Scheduled Placement Test |
54
+ | [`runMailboxPlacementTest`](#op-runmailboxplacementtest) | `POST /api/v1/mailboxes/{mailbox_id}/health/placement-test` | billable | `campaigns:run` | Run Mailbox Placement Test |
55
+ | [`setupWarmup`](#op-setupwarmup) | `POST /api/v1/warmup/setup` | write | `campaigns:write` | Setup Warmup |
56
+ | [`shareMailbox`](#op-sharemailbox) | `POST /api/v1/mailboxes/{mailbox_id}/share` | write | `campaigns:write` | Share Mailbox |
57
+ | [`testMailboxConnection`](#op-testmailboxconnection) ★ | `POST /api/v1/mailboxes/{mailbox_id}/test-connection` | write | `campaigns:write` | Test Mailbox Connection |
58
+ | [`uncancelMailboxes`](#op-uncancelmailboxes) | `POST /api/v1/mailboxes/uncancel` | billable | `campaigns:run` | Uncancel Mailboxes |
59
+ | [`updateMailbox`](#op-updatemailbox) ★ | `PATCH /api/v1/mailboxes/{mailbox_id}` | write | `campaigns:write` | Update Mailbox |
60
+ | [`updateSenderPersona`](#op-updatesenderpersona) | `PATCH /api/v1/mailboxes/personas/{persona_id}` | write | `campaigns:write` | Update Sender Persona |
61
+ | [`updateWarmupSettings`](#op-updatewarmupsettings) | `PATCH /api/v1/warmup/{mailbox_id}/settings` | write | `campaigns:write` | Update Warmup Settings |
62
+ | [`uploadPersonaPhoto`](#op-uploadpersonaphoto) | `POST /api/v1/mailboxes/personas/{persona_id}/photo` | write | `campaigns:write` | Upload Persona Photo |
63
+
64
+ ---
65
+
66
+ <a id="op-archivemailbox"></a>
67
+
68
+ ### `g8.api.mailboxes.archiveMailbox(input)`
69
+
70
+ **Archive Mailbox**
71
+
72
+ - HTTP: `POST /api/v1/mailboxes/{mailbox_id}/archive`
73
+ - operationId: `archive_mailbox_mailboxes__mailbox_id__archive_post` (also callable as `g8.api.call("archive_mailbox_mailboxes__mailbox_id__archive_post", input)`)
74
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
75
+ - API-key scope: `campaigns:delete`
76
+
77
+ Archive a mailbox, or restore it. Explicit rather than a toggle.
78
+
79
+ Archiving hides the mailbox from pickers so nothing new is attached to it;
80
+ it is not deleted, keeps its history, and `is_archived=false` brings it
81
+ back. It does not cancel a purchased mailbox's billing - that is
82
+ `request-cancellation`.
83
+
84
+ Needs a personal API key whose user holds a mailbox write permission.
85
+
86
+ **Input**
87
+
88
+ | Field | Type | Required | Description |
89
+ |---|---|---|---|
90
+ | `path.mailbox_id` | `integer` | yes | Mailbox id (mailboxes.id) |
91
+ | `body` | `MailboxArchiveRequest` | yes | Request body; fields below. |
92
+
93
+ Body fields (`MailboxArchiveRequest`):
94
+
95
+ | Field | Type | Required | Description |
96
+ |---|---|---|---|
97
+ | `body.is_archived` | `boolean` | yes | True hides the mailbox from pickers and stops new use; false restores it |
98
+
99
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
100
+
101
+ Other envelope fields: `pagination` (PaginationMeta).
102
+
103
+ **Example**
104
+
105
+ ```ts
106
+ // destructive: deletes or archives data; confirm with a human before calling.
107
+ const result = await g8.api.mailboxes.archiveMailbox({ path: { mailbox_id: 1 }, body: { is_archived: true } });
108
+ ```
109
+
110
+ ---
111
+
112
+ <a id="op-archivepersona"></a>
113
+
114
+ ### `g8.api.mailboxes.archivePersona(input)`
115
+
116
+ **Archive Persona**
117
+
118
+ - HTTP: `DELETE /api/v1/mailboxes/personas/{persona_id}`
119
+ - operationId: `archive_persona_mailboxes_personas__persona_id__delete` (also callable as `g8.api.call("archive_persona_mailboxes_personas__persona_id__delete", input)`)
120
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
121
+ - API-key scope: `campaigns:delete`
122
+
123
+ Archive a sender persona. It stops being usable for new purchases.
124
+
125
+ ARCHIVES rather than erases: mailboxes already bought under this identity
126
+ keep working, and the persona stays readable so their provenance is not
127
+ lost. 409 if an active buying plan still depends on it - cancel or finish
128
+ the plan first.
129
+
130
+ Org admins and owners only, and a personal API key: a persona carries a
131
+ real person's identity details.
132
+
133
+ **Input**
134
+
135
+ | Field | Type | Required | Description |
136
+ |---|---|---|---|
137
+ | `path.persona_id` | `integer` | yes | Sender persona id - from GET /mailboxes/personas |
138
+
139
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
140
+
141
+ Other envelope fields: `pagination` (PaginationMeta).
142
+
143
+ **Example**
144
+
145
+ ```ts
146
+ // destructive: deletes or archives data; confirm with a human before calling.
147
+ const result = await g8.api.mailboxes.archivePersona({ path: { persona_id: 1 } });
148
+ ```
149
+
150
+ ---
151
+
152
+ <a id="op-bulkimportmailboxes"></a>
153
+
154
+ ### `g8.api.mailboxes.bulkImportMailboxes(input)`
155
+
156
+ **Bulk Import Mailboxes**
157
+
158
+ - HTTP: `POST /api/v1/mailboxes/bulk-import`
159
+ - operationId: `bulk_import_mailboxes_mailboxes_bulk_import_post` (also callable as `g8.api.call("bulk_import_mailboxes_mailboxes_bulk_import_post", input)`)
160
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
161
+ - API-key scope: `campaigns:write`
162
+
163
+ Connect many mailboxes you already own, from CSV. Buys nothing.
164
+
165
+ 202 means ACCEPTED, not imported: the work runs in the background and the
166
+ response carries no per-row outcome. Poll `GET /mailboxes` to see what
167
+ landed, and expect rows to appear gradually rather than all at once.
168
+
169
+ Credentials in the CSV are write-only - stored encrypted and never
170
+ returned by this or any other endpoint.
171
+
172
+ **Input**
173
+
174
+ | Field | Type | Required | Description |
175
+ |---|---|---|---|
176
+ | `body` | `MailboxBulkImportRequest` | yes | Request body; fields below. |
177
+
178
+ Body fields (`MailboxBulkImportRequest`):
179
+
180
+ | Field | Type | Required | Description |
181
+ |---|---|---|---|
182
+ | `body.csv_content` | `string` | yes | Raw CSV. Credential columns are stored encrypted and never returned. |
183
+
184
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
185
+
186
+ Other envelope fields: `pagination` (PaginationMeta).
187
+
188
+ **Example**
189
+
190
+ ```ts
191
+ const result = await g8.api.mailboxes.bulkImportMailboxes({ body: { csv_content: "example" } });
192
+ ```
193
+
194
+ ---
195
+
196
+ <a id="op-createmailbox"></a>
197
+
198
+ ### `g8.api.mailboxes.createMailbox(input)`
199
+
200
+ **Create Mailbox**
201
+
202
+ - HTTP: `POST /api/v1/mailboxes`
203
+ - operationId: `create_mailbox_mailboxes_post` (also callable as `g8.api.call("create_mailbox_mailboxes_post", input)`)
204
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
205
+ - API-key scope: `campaigns:write`
206
+ - ★ Hand-written: [`g8.mailboxes.create()`](../sdk-clients.md#g8-mailboxes-create)
207
+
208
+ Connect an existing mailbox over IMAP/SMTP.
209
+
210
+ Credentials are write-only — they are stored encrypted and never returned by
211
+ this or any other endpoint. Google/Microsoft mailboxes need the browser OAuth
212
+ flow and cannot be connected here.
213
+
214
+ Routes to the same ``CreateMailboxHandler`` the in-app "add mailbox" screen
215
+ uses, so validation and provider detection behave identically.
216
+
217
+ **Input**
218
+
219
+ | Field | Type | Required | Description |
220
+ |---|---|---|---|
221
+ | `body` | `MailboxCreateRequest` | yes | Request body; fields below. |
222
+
223
+ Body fields (`MailboxCreateRequest`):
224
+
225
+ | Field | Type | Required | Description |
226
+ |---|---|---|---|
227
+ | `body.email` | `string` | yes | The mailbox address, e.g. sales@acme.com |
228
+ | `body.imap_address` | `string` | yes | IMAP host, e.g. imap.acme.com |
229
+ | `body.imap_password` | `string` | yes | Write-only. Never returned by any endpoint. |
230
+ | `body.imap_username` | `string` | yes | |
231
+ | `body.smtp_address` | `string` | yes | SMTP host, e.g. smtp.acme.com |
232
+ | `body.smtp_password` | `string` | yes | Write-only. Never returned by any endpoint. |
233
+ | `body.smtp_username` | `string` | yes | |
234
+ | `body.authentication` | `string` | no | default `"plain"` |
235
+ | `body.daily_limit` | `integer` | no | Max sends per day for this mailbox default `40`, min 1 |
236
+ | `body.display_name` | `string \| null` | no | |
237
+ | `body.enable_starttls_auto` | `boolean` | no | default `true` |
238
+ | `body.imap_port` | `integer` | no | default `993` |
239
+ | `body.signature_html` | `string \| null` | no | |
240
+ | `body.signature_plain` | `string \| null` | no | |
241
+ | `body.smtp_port` | `integer` | no | default `465` |
242
+ | `body.use_html_signature` | `boolean` | no | default `false` |
243
+
244
+ **Returns** `ApiResponse_MailboxResponse_`: the envelope `{ data: MailboxResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
245
+
246
+ Other envelope fields: `pagination` (PaginationMeta).
247
+
248
+ `MailboxResponse` fields:
249
+
250
+ | Field | Type | Required | Description |
251
+ |---|---|---|---|
252
+ | `id` | `integer` | yes | |
253
+ | `allows_nurture` | `boolean \| null` | no | |
254
+ | `connection_status` | `string \| null` | no | active \| paused \| disconnected \| expired \| ... |
255
+ | `created_at` | `string \| null` | no | |
256
+ | `created_by` | `string \| null` | no | |
257
+ | `daily_limit` | `integer \| null` | no | |
258
+ | `display_name` | `string \| null` | no | |
259
+ | `email` | `string \| null` | no | |
260
+ | `is_archived` | `boolean \| null` | no | |
261
+ | `provider` | `string \| null` | no | |
262
+ | `updated_at` | `string \| null` | no | |
263
+ | `warmup_enabled` | `boolean \| null` | no | |
264
+
265
+ **Example**
266
+
267
+ ```ts
268
+ const result = await g8.api.mailboxes.createMailbox({
269
+ body: {
270
+ email: "jane@acme.com",
271
+ imap_address: "example",
272
+ imap_password: "example",
273
+ imap_username: "Example",
274
+ smtp_address: "example",
275
+ smtp_password: "example",
276
+ smtp_username: "Example",
277
+ },
278
+ });
279
+ ```
280
+
281
+ ---
282
+
283
+ <a id="op-createplacementtest"></a>
284
+
285
+ ### `g8.api.mailboxes.createPlacementTest(input)`
286
+
287
+ **Create Placement Test**
288
+
289
+ - HTTP: `POST /api/v1/placement/tests`
290
+ - operationId: `create_placement_test_placement_tests_post` (also callable as `g8.api.call("create_placement_test_placement_tests_post", input)`)
291
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
292
+ - API-key scope: `campaigns:run`
293
+
294
+ Run an inbox-placement test. THIS CHARGES 20 CREDITS PER MAILBOX.
295
+
296
+ Charged when the test is CREATED, not when it finishes, so a cancelled or
297
+ failed test has still cost. Estimate first.
298
+
299
+ A `frequency` other than `once` creates a recurring schedule that charges
300
+ again on every run - see `GET /placement/scheduled` and `/pause`.
301
+
302
+ **Input**
303
+
304
+ | Field | Type | Required | Description |
305
+ |---|---|---|---|
306
+ | `body` | `CreateTestRequest` | yes | Request body; fields below. |
307
+
308
+ Body fields (`CreateTestRequest`):
309
+
310
+ | Field | Type | Required | Description |
311
+ |---|---|---|---|
312
+ | `body.mailbox_ids` | `Array<integer>` | yes | 1-20 mailboxes. The app's own ceiling; each one costs credits. min items 1, max items 20 |
313
+ | `body.test_name` | `string` | yes | |
314
+ | `body.custom_body` | `string \| null` | no | |
315
+ | `body.custom_subject` | `string \| null` | no | |
316
+ | `body.frequency` | `string` | no | `once`, `weekly`, `biweekly` or `monthly`. Anything but `once` keeps charging on that cadence until paused. default `"once"` |
317
+ | `body.receiver_types` | `Array<string> \| null` | no | Which seed inboxes to test against, e.g. `personal_gmail`. Omit for the app's default panel - a narrower list tests less and costs the same. |
318
+ | `body.sending_interval` | `integer` | no | Minutes between sends, spreading the test out. default `1` |
319
+
320
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
321
+
322
+ Other envelope fields: `pagination` (PaginationMeta).
323
+
324
+ **Example**
325
+
326
+ ```ts
327
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
328
+ const result = await g8.api.mailboxes.createPlacementTest({ body: { mailbox_ids: [123], test_name: "Example" } });
329
+ ```
330
+
331
+ ---
332
+
333
+ <a id="op-createsenderpersona"></a>
334
+
335
+ ### `g8.api.mailboxes.createSenderPersona(input)`
336
+
337
+ **Create Sender Persona**
338
+
339
+ - HTTP: `POST /api/v1/mailboxes/personas`
340
+ - operationId: `create_sender_persona_mailboxes_personas_post` (also callable as `g8.api.call("create_sender_persona_mailboxes_personas_post", input)`)
341
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
342
+ - API-key scope: `campaigns:write`
343
+
344
+ Create a sender persona - an identity mailboxes can be bought under.
345
+
346
+ Give `first_name`, `last_name` and `email`, or a `team_member_id` to take
347
+ them from. The identity is registrant data at the registrar for every
348
+ domain bought under it, so use a real person who has agreed to it.
349
+
350
+ 409 if the email is already a persona. Org admins and owners only, and a
351
+ personal API key.
352
+
353
+ **Input**
354
+
355
+ | Field | Type | Required | Description |
356
+ |---|---|---|---|
357
+ | `body` | `SenderPersonaWriteRequest` | yes | Request body; fields below. |
358
+
359
+ Body fields (`SenderPersonaWriteRequest`):
360
+
361
+ | Field | Type | Required | Description |
362
+ |---|---|---|---|
363
+ | `body.address_line1` | `string \| null` | no | Registrant address, line 1 max length 255 |
364
+ | `body.address_line2` | `string \| null` | no | Registrant address, line 2 max length 255 |
365
+ | `body.city` | `string \| null` | no | City max length 255 |
366
+ | `body.country` | `string \| null` | no | Country max length 100 |
367
+ | `body.email` | `string \| null` | no | The persona's own address max length 254 |
368
+ | `body.first_name` | `string \| null` | no | Given name max length 100 |
369
+ | `body.last_name` | `string \| null` | no | Family name max length 100 |
370
+ | `body.organization` | `string \| null` | no | Organisation name max length 255 |
371
+ | `body.phone` | `string \| null` | no | Contact phone max length 50 |
372
+ | `body.photo_url` | `string \| null` | no | Photo URL max length 1000 |
373
+ | `body.postal_code` | `string \| null` | no | Postal code max length 100 |
374
+ | `body.state` | `string \| null` | no | State or region max length 100 |
375
+ | `body.team_member_id` | `string (uuid) \| null` | no | Team member whose identity this persona uses |
376
+ | `body.title` | `string \| null` | no | Job title shown in signatures max length 100 |
377
+
378
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
379
+
380
+ Other envelope fields: `pagination` (PaginationMeta).
381
+
382
+ **Example**
383
+
384
+ ```ts
385
+ const result = await g8.api.mailboxes.createSenderPersona({ body: {} });
386
+ ```
387
+
388
+ ---
389
+
390
+ <a id="op-deletemailbox"></a>
391
+
392
+ ### `g8.api.mailboxes.deleteMailbox(input)`
393
+
394
+ **Delete Mailbox**
395
+
396
+ - HTTP: `DELETE /api/v1/mailboxes/{mailbox_id}`
397
+ - operationId: `delete_mailbox_mailboxes__mailbox_id__delete` (also callable as `g8.api.call("delete_mailbox_mailboxes__mailbox_id__delete", input)`)
398
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
399
+ - API-key scope: `campaigns:delete`
400
+ - ★ Hand-written: [`g8.mailboxes.delete()`](../sdk-clients.md#g8-mailboxes-delete)
401
+
402
+ Delete a mailbox. Sequences already referencing it stop being able to send from it.
403
+
404
+ **Input**
405
+
406
+ | Field | Type | Required | Description |
407
+ |---|---|---|---|
408
+ | `path.mailbox_id` | `integer` | yes | Mailbox ID (mailboxes.id) |
409
+
410
+ **Returns** `ApiResponse_MailboxDeleteResponse_`: the envelope `{ data: MailboxDeleteResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
411
+
412
+ Other envelope fields: `pagination` (PaginationMeta).
413
+
414
+ `MailboxDeleteResponse` fields:
415
+
416
+ | Field | Type | Required | Description |
417
+ |---|---|---|---|
418
+ | `deleted` | `boolean` | yes | |
419
+ | `mailbox_id` | `integer` | yes | |
420
+
421
+ **Example**
422
+
423
+ ```ts
424
+ // destructive: deletes or archives data; confirm with a human before calling.
425
+ const result = await g8.api.mailboxes.deleteMailbox({ path: { mailbox_id: 123 } });
426
+ ```
427
+
428
+ ---
429
+
430
+ <a id="op-deletescheduledplacementtest"></a>
431
+
432
+ ### `g8.api.mailboxes.deleteScheduledPlacementTest(input)`
433
+
434
+ **Delete Scheduled Placement Test**
435
+
436
+ - HTTP: `DELETE /api/v1/placement/scheduled/{schedule_id}`
437
+ - operationId: `delete_scheduled_placement_test_placement_scheduled__schedule_id__delete` (also callable as `g8.api.call("delete_scheduled_placement_test_placement_scheduled__schedule_id__delete", input)`)
438
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
439
+ - API-key scope: `campaigns:delete`
440
+
441
+ Remove a recurring test. Tests it has already run are kept.
442
+
443
+ **Input**
444
+
445
+ | Field | Type | Required | Description |
446
+ |---|---|---|---|
447
+ | `path.schedule_id` | `string` | yes | Schedule id. A STRING, not a number: it is an opaque InboxKit identifier persisted as `inboxkit_schedule_id VARCHAR(100)` and interpolated straight into an InboxKit URL. `test_id`, `domain_id` and `mailbox_id` on this surface really are integers - the app draws the same distinction, and flattening it would 422 every id `GET /placement/scheduled` hands back. |
448
+
449
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
450
+
451
+ Other envelope fields: `pagination` (PaginationMeta).
452
+
453
+ **Example**
454
+
455
+ ```ts
456
+ // destructive: deletes or archives data; confirm with a human before calling.
457
+ const result = await g8.api.mailboxes.deleteScheduledPlacementTest({ path: { schedule_id: "id" } });
458
+ ```
459
+
460
+ ---
461
+
462
+ <a id="op-deletewarmup"></a>
463
+
464
+ ### `g8.api.mailboxes.deleteWarmup(input)`
465
+
466
+ **Delete Warmup**
467
+
468
+ - HTTP: `DELETE /api/v1/warmup/{mailbox_id}`
469
+ - operationId: `delete_warmup_warmup__mailbox_id__delete` (also callable as `g8.api.call("delete_warmup_warmup__mailbox_id__delete", input)`)
470
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
471
+ - API-key scope: `campaigns:delete`
472
+
473
+ Remove this mailbox's warmup account entirely. NOT REVERSIBLE.
474
+
475
+ Different from `POST /warmup/{mailbox_id}/disable`, which pauses warmup
476
+ and keeps the account: this deletes it at the provider and clears every
477
+ warmup field on the mailbox, so re-enrolling starts the reputation build
478
+ from zero. Disable is what you want for a pause.
479
+
480
+ Best-effort at the provider: if the provider call fails the local fields
481
+ are still cleared, so a success here means graph8 no longer considers the
482
+ mailbox warmed - confirm with `GET /warmup/{mailbox_id}/analytics`.
483
+
484
+ **Input**
485
+
486
+ | Field | Type | Required | Description |
487
+ |---|---|---|---|
488
+ | `path.mailbox_id` | `integer` | yes | Mailbox id (mailboxes.id) |
489
+
490
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
491
+
492
+ Other envelope fields: `pagination` (PaginationMeta).
493
+
494
+ **Example**
495
+
496
+ ```ts
497
+ // destructive: deletes or archives data; confirm with a human before calling.
498
+ const result = await g8.api.mailboxes.deleteWarmup({ path: { mailbox_id: 1 } });
499
+ ```
500
+
501
+ ---
502
+
503
+ <a id="op-disablewarmup"></a>
504
+
505
+ ### `g8.api.mailboxes.disableWarmup(input)`
506
+
507
+ **Disable Warmup**
508
+
509
+ - HTTP: `POST /api/v1/warmup/{mailbox_id}/disable`
510
+ - operationId: `disable_warmup_warmup__mailbox_id__disable_post` (also callable as `g8.api.call("disable_warmup_warmup__mailbox_id__disable_post", input)`)
511
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
512
+ - API-key scope: `campaigns:write`
513
+
514
+ Stop warming this mailbox.
515
+
516
+ Reversible, but reputation is not: a mailbox taken off warmup and left
517
+ idle loses the standing the warmup was building.
518
+
519
+ **Input**
520
+
521
+ | Field | Type | Required | Description |
522
+ |---|---|---|---|
523
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
524
+
525
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
526
+
527
+ Other envelope fields: `pagination` (PaginationMeta).
528
+
529
+ **Example**
530
+
531
+ ```ts
532
+ const result = await g8.api.mailboxes.disableWarmup({ path: { mailbox_id: 123 } });
533
+ ```
534
+
535
+ ---
536
+
537
+ <a id="op-enablewarmup"></a>
538
+
539
+ ### `g8.api.mailboxes.enableWarmup(input)`
540
+
541
+ **Enable Warmup**
542
+
543
+ - HTTP: `POST /api/v1/warmup/{mailbox_id}/enable`
544
+ - operationId: `enable_warmup_warmup__mailbox_id__enable_post` (also callable as `g8.api.call("enable_warmup_warmup__mailbox_id__enable_post", input)`)
545
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
546
+ - API-key scope: `campaigns:write`
547
+
548
+ Start warming this mailbox. It begins SENDING MAIL on its own.
549
+
550
+ **Input**
551
+
552
+ | Field | Type | Required | Description |
553
+ |---|---|---|---|
554
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
555
+
556
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
557
+
558
+ Other envelope fields: `pagination` (PaginationMeta).
559
+
560
+ **Example**
561
+
562
+ ```ts
563
+ const result = await g8.api.mailboxes.enableWarmup({ path: { mailbox_id: 123 } });
564
+ ```
565
+
566
+ ---
567
+
568
+ <a id="op-estimateplacementtestcost"></a>
569
+
570
+ ### `g8.api.mailboxes.estimatePlacementTestCost(input)`
571
+
572
+ **Estimate Placement Test Cost**
573
+
574
+ - HTTP: `POST /api/v1/placement/tests/estimate`
575
+ - operationId: `estimate_placement_test_cost_placement_tests_estimate_post` (also callable as `g8.api.call("estimate_placement_test_cost_placement_tests_estimate_post", input)`)
576
+ - Tier: `read`: reads data; safe to call and to retry
577
+ - API-key scope: `campaigns:read`
578
+
579
+ What a placement test WOULD cost, and whether the mailboxes qualify.
580
+
581
+ Charges nothing. Call this before `POST /placement/tests`, which charges
582
+ 20 credits per mailbox - this is the only way to learn the number before
583
+ spending it.
584
+
585
+ **Input**
586
+
587
+ | Field | Type | Required | Description |
588
+ |---|---|---|---|
589
+ | `body` | `EstimateTestRequest` | yes | Request body; fields below. |
590
+
591
+ Body fields (`EstimateTestRequest`):
592
+
593
+ | Field | Type | Required | Description |
594
+ |---|---|---|---|
595
+ | `body.mailbox_ids` | `Array<integer>` | yes | The mailboxes the test would send from. |
596
+
597
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
598
+
599
+ Other envelope fields: `pagination` (PaginationMeta).
600
+
601
+ **Example**
602
+
603
+ ```ts
604
+ const result = await g8.api.mailboxes.estimatePlacementTestCost({ body: { mailbox_ids: [123] } });
605
+ ```
606
+
607
+ ---
608
+
609
+ <a id="op-getfleethealth"></a>
610
+
611
+ ### `g8.api.mailboxes.getFleetHealth(input?)`
612
+
613
+ **Get Fleet Health**
614
+
615
+ - HTTP: `GET /api/v1/mailboxes/fleet-health`
616
+ - operationId: `get_fleet_health_mailboxes_fleet_health_get` (also callable as `g8.api.call("get_fleet_health_mailboxes_fleet_health_get", input)`)
617
+ - Tier: `read`: reads data; safe to call and to retry
618
+ - API-key scope: `campaigns:read`
619
+
620
+ Deliverability health across every mailbox in the org.
621
+
622
+ The roll-up a sending dashboard opens with: how many mailboxes are healthy,
623
+ degraded or failing, so a rebuilt UI can show the same headline.
624
+
625
+ **Input**: none.
626
+
627
+ **Returns** `ApiResponse_MailboxFleetHealthResponse_`: the envelope `{ data: MailboxFleetHealthResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
628
+
629
+ Other envelope fields: `pagination` (PaginationMeta).
630
+
631
+ **Example**
632
+
633
+ ```ts
634
+ const result = await g8.api.mailboxes.getFleetHealth();
635
+ ```
636
+
637
+ ---
638
+
639
+ <a id="op-getmailbox"></a>
640
+
641
+ ### `g8.api.mailboxes.getMailbox(input)`
642
+
643
+ **Get Mailbox**
644
+
645
+ - HTTP: `GET /api/v1/mailboxes/{mailbox_id}`
646
+ - operationId: `get_mailbox_mailboxes__mailbox_id__get` (also callable as `g8.api.call("get_mailbox_mailboxes__mailbox_id__get", input)`)
647
+ - Tier: `read`: reads data; safe to call and to retry
648
+ - API-key scope: `campaigns:read`
649
+ - ★ Hand-written: [`g8.mailboxes.get()`](../sdk-clients.md#g8-mailboxes-get)
650
+
651
+ Get a single mailbox by id. Credentials are never included.
652
+
653
+ **Input**
654
+
655
+ | Field | Type | Required | Description |
656
+ |---|---|---|---|
657
+ | `path.mailbox_id` | `integer` | yes | Mailbox ID (mailboxes.id) |
658
+
659
+ **Returns** `ApiResponse_MailboxResponse_`: the envelope `{ data: MailboxResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
660
+
661
+ Other envelope fields: `pagination` (PaginationMeta).
662
+
663
+ `MailboxResponse` fields:
664
+
665
+ | Field | Type | Required | Description |
666
+ |---|---|---|---|
667
+ | `id` | `integer` | yes | |
668
+ | `allows_nurture` | `boolean \| null` | no | |
669
+ | `connection_status` | `string \| null` | no | active \| paused \| disconnected \| expired \| ... |
670
+ | `created_at` | `string \| null` | no | |
671
+ | `created_by` | `string \| null` | no | |
672
+ | `daily_limit` | `integer \| null` | no | |
673
+ | `display_name` | `string \| null` | no | |
674
+ | `email` | `string \| null` | no | |
675
+ | `is_archived` | `boolean \| null` | no | |
676
+ | `provider` | `string \| null` | no | |
677
+ | `updated_at` | `string \| null` | no | |
678
+ | `warmup_enabled` | `boolean \| null` | no | |
679
+
680
+ **Example**
681
+
682
+ ```ts
683
+ const result = await g8.api.mailboxes.getMailbox({ path: { mailbox_id: 123 } });
684
+ ```
685
+
686
+ ---
687
+
688
+ <a id="op-getmailboxassociatedsequences"></a>
689
+
690
+ ### `g8.api.mailboxes.getMailboxAssociatedSequences(input)`
691
+
692
+ **Get Mailbox Associated Sequences**
693
+
694
+ - HTTP: `GET /api/v1/mailboxes/{mailbox_id}/associated-sequences`
695
+ - operationId: `get_mailbox_associated_sequences_mailboxes__mailbox_id__associated_sequences_get` (also callable as `g8.api.call("get_mailbox_associated_sequences_mailboxes__mailbox_id__associated_sequences_get", input)`)
696
+ - Tier: `read`: reads data; safe to call and to retry
697
+ - API-key scope: `campaigns:read`
698
+
699
+ Every sequence that references this mailbox, at any status.
700
+
701
+ Check this before archiving or cancelling a mailbox - the app blocks those
702
+ actions while a sequence is still wired to it, and a rebuilt UI needs the
703
+ same signal to avoid silently breaking a live send.
704
+
705
+ Exposed as GET rather than the app's POST: it reads and has no body. The
706
+ app's POST is left untouched.
707
+
708
+ **Input**
709
+
710
+ | Field | Type | Required | Description |
711
+ |---|---|---|---|
712
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
713
+
714
+ **Returns** `ApiResponse_MailboxAssociatedSequencesResponse_`: the envelope `{ data: MailboxAssociatedSequencesResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
715
+
716
+ Other envelope fields: `pagination` (PaginationMeta).
717
+
718
+ `MailboxAssociatedSequencesResponse` fields:
719
+
720
+ | Field | Type | Required | Description |
721
+ |---|---|---|---|
722
+ | `has_associations` | `boolean` | no | default `false` |
723
+ | `sequences` | `Array<AssociatedSequence>` | no | |
724
+
725
+ **Example**
726
+
727
+ ```ts
728
+ const result = await g8.api.mailboxes.getMailboxAssociatedSequences({ path: { mailbox_id: 1 } });
729
+ ```
730
+
731
+ ---
732
+
733
+ <a id="op-getmailboxhealth"></a>
734
+
735
+ ### `g8.api.mailboxes.getMailboxHealth(input)`
736
+
737
+ **Get Mailbox Health**
738
+
739
+ - HTTP: `GET /api/v1/mailboxes/{mailbox_id}/health`
740
+ - operationId: `get_mailbox_health_mailboxes__mailbox_id__health_get` (also callable as `g8.api.call("get_mailbox_health_mailboxes__mailbox_id__health_get", input)`)
741
+ - Tier: `read`: reads data; safe to call and to retry
742
+ - API-key scope: `campaigns:read`
743
+
744
+ Deliverability health for one mailbox.
745
+
746
+ **Input**
747
+
748
+ | Field | Type | Required | Description |
749
+ |---|---|---|---|
750
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
751
+
752
+ **Returns** `ApiResponse_MailboxHealthResponse_`: the envelope `{ data: MailboxHealthResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
753
+
754
+ Other envelope fields: `pagination` (PaginationMeta).
755
+
756
+ `MailboxHealthResponse` fields:
757
+
758
+ | Field | Type | Required | Description |
759
+ |---|---|---|---|
760
+ | `mailbox_id` | `integer \| null` | no | |
761
+ | `status` | `string \| null` | no | Health status as the app computes it. |
762
+
763
+ **Example**
764
+
765
+ ```ts
766
+ const result = await g8.api.mailboxes.getMailboxHealth({ path: { mailbox_id: 1 } });
767
+ ```
768
+
769
+ ---
770
+
771
+ <a id="op-getplacementdomainstats"></a>
772
+
773
+ ### `g8.api.mailboxes.getPlacementDomainStats(input?)`
774
+
775
+ **Get Placement Domain Stats**
776
+
777
+ - HTTP: `GET /api/v1/placement/domains/stats`
778
+ - operationId: `get_placement_domain_stats_placement_domains_stats_get` (also callable as `g8.api.call("get_placement_domain_stats_placement_domains_stats_get", input)`)
779
+ - Tier: `read`: reads data; safe to call and to retry
780
+ - API-key scope: `campaigns:read`
781
+
782
+ Placement across every sending domain, at a glance.
783
+
784
+ **Input**: none.
785
+
786
+ **Returns** `ApiResponse_DeliverabilityListPayload_`: the envelope `{ data: DeliverabilityListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
787
+
788
+ Other envelope fields: `pagination` (PaginationMeta).
789
+
790
+ `DeliverabilityListPayload` fields:
791
+
792
+ | Field | Type | Required | Description |
793
+ |---|---|---|---|
794
+ | `items` | `Array<unknown>` | no | |
795
+
796
+ **Example**
797
+
798
+ ```ts
799
+ const result = await g8.api.mailboxes.getPlacementDomainStats();
800
+ ```
801
+
802
+ ---
803
+
804
+ <a id="op-getplacementdomainsummary"></a>
805
+
806
+ ### `g8.api.mailboxes.getPlacementDomainSummary(input)`
807
+
808
+ **Get Placement Domain Summary**
809
+
810
+ - HTTP: `GET /api/v1/placement/domains/{domain_id}/summary`
811
+ - operationId: `get_placement_domain_summary_placement_domains__domain_id__summary_get` (also callable as `g8.api.call("get_placement_domain_summary_placement_domains__domain_id__summary_get", input)`)
812
+ - Tier: `read`: reads data; safe to call and to retry
813
+ - API-key scope: `campaigns:read`
814
+
815
+ One domain's placement, with its test history paged beneath it.
816
+
817
+ **Input**
818
+
819
+ | Field | Type | Required | Description |
820
+ |---|---|---|---|
821
+ | `path.domain_id` | `integer` | yes | Domain id. |
822
+ | `query.history_page` | `integer` | no | default `1` |
823
+ | `query.history_limit` | `integer` | no | default `20` |
824
+
825
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
826
+
827
+ Other envelope fields: `pagination` (PaginationMeta).
828
+
829
+ **Example**
830
+
831
+ ```ts
832
+ const result = await g8.api.mailboxes.getPlacementDomainSummary({ path: { domain_id: 123 } });
833
+ ```
834
+
835
+ ---
836
+
837
+ <a id="op-getplacementtest"></a>
838
+
839
+ ### `g8.api.mailboxes.getPlacementTest(input)`
840
+
841
+ **Get Placement Test**
842
+
843
+ - HTTP: `GET /api/v1/placement/tests/{test_id}`
844
+ - operationId: `get_placement_test_placement_tests__test_id__get` (also callable as `g8.api.call("get_placement_test_placement_tests__test_id__get", input)`)
845
+ - Tier: `read`: reads data; safe to call and to retry
846
+ - API-key scope: `campaigns:read`
847
+
848
+ One test, with a panel per seed provider.
849
+
850
+ Open-shaped: the panel set changes as providers are added, and a missing
851
+ panel reads as "we did not test there" when the truth may be "you did not
852
+ land there".
853
+
854
+ **Input**
855
+
856
+ | Field | Type | Required | Description |
857
+ |---|---|---|---|
858
+ | `path.test_id` | `integer` | yes | Test id. |
859
+
860
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
861
+
862
+ Other envelope fields: `pagination` (PaginationMeta).
863
+
864
+ **Example**
865
+
866
+ ```ts
867
+ const result = await g8.api.mailboxes.getPlacementTest({ path: { test_id: 123 } });
868
+ ```
869
+
870
+ ---
871
+
872
+ <a id="op-getscheduledplacementtest"></a>
873
+
874
+ ### `g8.api.mailboxes.getScheduledPlacementTest(input)`
875
+
876
+ **Get Scheduled Placement Test**
877
+
878
+ - HTTP: `GET /api/v1/placement/scheduled/{schedule_id}`
879
+ - operationId: `get_scheduled_placement_test_placement_scheduled__schedule_id__get` (also callable as `g8.api.call("get_scheduled_placement_test_placement_scheduled__schedule_id__get", input)`)
880
+ - Tier: `read`: reads data; safe to call and to retry
881
+ - API-key scope: `campaigns:read`
882
+
883
+ One recurring test: its cadence, its mailboxes and its next run.
884
+
885
+ **Input**
886
+
887
+ | Field | Type | Required | Description |
888
+ |---|---|---|---|
889
+ | `path.schedule_id` | `string` | yes | Schedule id. A STRING, not a number: it is an opaque InboxKit identifier persisted as `inboxkit_schedule_id VARCHAR(100)` and interpolated straight into an InboxKit URL. `test_id`, `domain_id` and `mailbox_id` on this surface really are integers - the app draws the same distinction, and flattening it would 422 every id `GET /placement/scheduled` hands back. |
890
+
891
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
892
+
893
+ Other envelope fields: `pagination` (PaginationMeta).
894
+
895
+ **Example**
896
+
897
+ ```ts
898
+ const result = await g8.api.mailboxes.getScheduledPlacementTest({ path: { schedule_id: "id" } });
899
+ ```
900
+
901
+ ---
902
+
903
+ <a id="op-getsenderpersona"></a>
904
+
905
+ ### `g8.api.mailboxes.getSenderPersona(input)`
906
+
907
+ **Get Sender Persona**
908
+
909
+ - HTTP: `GET /api/v1/mailboxes/personas/{persona_id}`
910
+ - operationId: `get_sender_persona_mailboxes_personas__persona_id__get` (also callable as `g8.api.call("get_sender_persona_mailboxes_personas__persona_id__get", input)`)
911
+ - Tier: `read`: reads data; safe to call and to retry
912
+ - API-key scope: `campaigns:read`
913
+
914
+ One sender persona in full, archived or not. Org admins and owners only.
915
+
916
+ **Input**
917
+
918
+ | Field | Type | Required | Description |
919
+ |---|---|---|---|
920
+ | `path.persona_id` | `integer` | yes | Sender persona id - from GET /mailboxes/personas |
921
+
922
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
923
+
924
+ Other envelope fields: `pagination` (PaginationMeta).
925
+
926
+ **Example**
927
+
928
+ ```ts
929
+ const result = await g8.api.mailboxes.getSenderPersona({ path: { persona_id: 1 } });
930
+ ```
931
+
932
+ ---
933
+
934
+ <a id="op-getwarmupanalytics"></a>
935
+
936
+ ### `g8.api.mailboxes.getWarmupAnalytics(input)`
937
+
938
+ **Get Warmup Analytics**
939
+
940
+ - HTTP: `GET /api/v1/warmup/{mailbox_id}/analytics`
941
+ - operationId: `get_warmup_analytics_warmup__mailbox_id__analytics_get` (also callable as `g8.api.call("get_warmup_analytics_warmup__mailbox_id__analytics_get", input)`)
942
+ - Tier: `read`: reads data; safe to call and to retry
943
+ - API-key scope: `campaigns:read`
944
+
945
+ How the warmup is going: volume, landing rate and reputation trend.
946
+
947
+ **Input**
948
+
949
+ | Field | Type | Required | Description |
950
+ |---|---|---|---|
951
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
952
+
953
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
954
+
955
+ Other envelope fields: `pagination` (PaginationMeta).
956
+
957
+ **Example**
958
+
959
+ ```ts
960
+ const result = await g8.api.mailboxes.getWarmupAnalytics({ path: { mailbox_id: 123 } });
961
+ ```
962
+
963
+ ---
964
+
965
+ <a id="op-listmymailboxes"></a>
966
+
967
+ ### `g8.api.mailboxes.listMyMailboxes(input?)`
968
+
969
+ **List My Mailboxes**
970
+
971
+ - HTTP: `GET /api/v1/mailboxes/my`
972
+ - operationId: `list_my_mailboxes_mailboxes_my_get` (also callable as `g8.api.call("list_my_mailboxes_mailboxes_my_get", input)`)
973
+ - Tier: `read`: reads data; safe to call and to retry
974
+ - API-key scope: `campaigns:read`
975
+
976
+ Mailboxes created by the principal behind this key.
977
+
978
+ Hard-scoped server-side to the caller - it does not trust a client-supplied
979
+ owner filter, which is what separates it from the generic mailbox list.
980
+
981
+ **Input**
982
+
983
+ | Field | Type | Required | Description |
984
+ |---|---|---|---|
985
+ | `query.include_archived` | `boolean` | no | Include archived mailboxes. default `false` |
986
+
987
+ **Returns** `ApiResponse_MyMailboxesResponse_`: the envelope `{ data: MyMailboxesResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
988
+
989
+ Other envelope fields: `pagination` (PaginationMeta).
990
+
991
+ `MyMailboxesResponse` fields:
992
+
993
+ | Field | Type | Required | Description |
994
+ |---|---|---|---|
995
+ | `mailboxes` | `Array<MailboxSummary>` | no | |
996
+ | `total` | `integer` | no | default `0` |
997
+
998
+ **Example**
999
+
1000
+ ```ts
1001
+ const result = await g8.api.mailboxes.listMyMailboxes();
1002
+ ```
1003
+
1004
+ ---
1005
+
1006
+ <a id="op-listplacementtests"></a>
1007
+
1008
+ ### `g8.api.mailboxes.listPlacementTests(input?)`
1009
+
1010
+ **List Placement Tests**
1011
+
1012
+ - HTTP: `GET /api/v1/placement/tests`
1013
+ - operationId: `list_placement_tests_placement_tests_get` (also callable as `g8.api.call("list_placement_tests_placement_tests_get", input)`)
1014
+ - Tier: `read`: reads data; safe to call and to retry
1015
+ - API-key scope: `campaigns:read`
1016
+
1017
+ Placement tests, newest first.
1018
+
1019
+ **Input**
1020
+
1021
+ | Field | Type | Required | Description |
1022
+ |---|---|---|---|
1023
+ | `query.page` | `integer` | no | default `1` |
1024
+ | `query.limit` | `integer` | no | default `50` |
1025
+ | `query.status` | `string \| null` | no | Filter by test status. The wire name is `status`, matching the app; the handler parameter is renamed only because `status` is already imported from FastAPI in this module. |
1026
+ | `query.domain_id` | `integer \| null` | no | Only tests for this domain. |
1027
+ | `query.mailbox_id` | `integer \| null` | no | Only tests for this mailbox. |
1028
+
1029
+ **Returns** `ApiResponse_DeliverabilityListPayload_`: the envelope `{ data: DeliverabilityListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1030
+
1031
+ Other envelope fields: `pagination` (PaginationMeta).
1032
+
1033
+ `DeliverabilityListPayload` fields:
1034
+
1035
+ | Field | Type | Required | Description |
1036
+ |---|---|---|---|
1037
+ | `items` | `Array<unknown>` | no | |
1038
+
1039
+ **Example**
1040
+
1041
+ ```ts
1042
+ const result = await g8.api.mailboxes.listPlacementTests();
1043
+ ```
1044
+
1045
+ ---
1046
+
1047
+ <a id="op-listscheduledplacementtests"></a>
1048
+
1049
+ ### `g8.api.mailboxes.listScheduledPlacementTests(input?)`
1050
+
1051
+ **List Scheduled Placement Tests**
1052
+
1053
+ - HTTP: `GET /api/v1/placement/scheduled`
1054
+ - operationId: `list_scheduled_placement_tests_placement_scheduled_get` (also callable as `g8.api.call("list_scheduled_placement_tests_placement_scheduled_get", input)`)
1055
+ - Tier: `read`: reads data; safe to call and to retry
1056
+ - API-key scope: `campaigns:read`
1057
+
1058
+ Every recurring test, and therefore every recurring CHARGE.
1059
+
1060
+ Read this before wondering where credits are going: a test created with a
1061
+ `frequency` other than `once` charges again on every run until paused.
1062
+
1063
+ **Input**: none.
1064
+
1065
+ **Returns** `ApiResponse_DeliverabilityListPayload_`: the envelope `{ data: DeliverabilityListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1066
+
1067
+ Other envelope fields: `pagination` (PaginationMeta).
1068
+
1069
+ `DeliverabilityListPayload` fields:
1070
+
1071
+ | Field | Type | Required | Description |
1072
+ |---|---|---|---|
1073
+ | `items` | `Array<unknown>` | no | |
1074
+
1075
+ **Example**
1076
+
1077
+ ```ts
1078
+ const result = await g8.api.mailboxes.listScheduledPlacementTests();
1079
+ ```
1080
+
1081
+ ---
1082
+
1083
+ <a id="op-listsenderpersonas"></a>
1084
+
1085
+ ### `g8.api.mailboxes.listSenderPersonas(input?)`
1086
+
1087
+ **List Sender Personas**
1088
+
1089
+ - HTTP: `GET /api/v1/mailboxes/personas`
1090
+ - operationId: `list_sender_personas_mailboxes_personas_get` (also callable as `g8.api.call("list_sender_personas_mailboxes_personas_get", input)`)
1091
+ - Tier: `read`: reads data; safe to call and to retry
1092
+ - API-key scope: `campaigns:read`
1093
+
1094
+ The org's sender personas, with how many mailboxes each one holds.
1095
+
1096
+ Org admins and owners only, and a personal API key: a persona carries a
1097
+ real person's identity details.
1098
+
1099
+ **Input**
1100
+
1101
+ | Field | Type | Required | Description |
1102
+ |---|---|---|---|
1103
+ | `query.include_archived` | `boolean` | no | Include archived personas default `false` |
1104
+
1105
+ **Returns** `ApiResponse_MailboxDomainListPayload_`: the envelope `{ data: MailboxDomainListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1106
+
1107
+ Other envelope fields: `pagination` (PaginationMeta).
1108
+
1109
+ `MailboxDomainListPayload` fields:
1110
+
1111
+ | Field | Type | Required | Description |
1112
+ |---|---|---|---|
1113
+ | `items` | `Array<unknown>` | no | |
1114
+
1115
+ **Example**
1116
+
1117
+ ```ts
1118
+ const result = await g8.api.mailboxes.listSenderPersonas();
1119
+ ```
1120
+
1121
+ ---
1122
+
1123
+ <a id="op-pausescheduledplacementtest"></a>
1124
+
1125
+ ### `g8.api.mailboxes.pauseScheduledPlacementTest(input)`
1126
+
1127
+ **Pause Scheduled Placement Test**
1128
+
1129
+ - HTTP: `POST /api/v1/placement/scheduled/{schedule_id}/pause`
1130
+ - operationId: `pause_scheduled_placement_test_placement_scheduled__schedule_id__pause_post` (also callable as `g8.api.call("pause_scheduled_placement_test_placement_scheduled__schedule_id__pause_post", input)`)
1131
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1132
+ - API-key scope: `campaigns:write`
1133
+
1134
+ Stop a recurring test charging. Reversible with `/resume`.
1135
+
1136
+ Pausing does not refund a run already charged; it stops the next one.
1137
+
1138
+ **Input**
1139
+
1140
+ | Field | Type | Required | Description |
1141
+ |---|---|---|---|
1142
+ | `path.schedule_id` | `string` | yes | Schedule id. A STRING, not a number: it is an opaque InboxKit identifier persisted as `inboxkit_schedule_id VARCHAR(100)` and interpolated straight into an InboxKit URL. `test_id`, `domain_id` and `mailbox_id` on this surface really are integers - the app draws the same distinction, and flattening it would 422 every id `GET /placement/scheduled` hands back. |
1143
+
1144
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1145
+
1146
+ Other envelope fields: `pagination` (PaginationMeta).
1147
+
1148
+ **Example**
1149
+
1150
+ ```ts
1151
+ const result = await g8.api.mailboxes.pauseScheduledPlacementTest({ path: { schedule_id: "id" } });
1152
+ ```
1153
+
1154
+ ---
1155
+
1156
+ <a id="op-requestmailboxcancellation"></a>
1157
+
1158
+ ### `g8.api.mailboxes.requestMailboxCancellation(input)`
1159
+
1160
+ **Request Mailbox Cancellation**
1161
+
1162
+ - HTTP: `POST /api/v1/mailboxes/{mailbox_id}/request-cancellation`
1163
+ - operationId: `request_mailbox_cancellation_mailboxes__mailbox_id__request_cancellation_post` (also callable as `g8.api.call("request_mailbox_cancellation_mailboxes__mailbox_id__request_cancellation_post", input)`)
1164
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
1165
+ - API-key scope: `campaigns:delete`
1166
+
1167
+ Stop paying for a purchased mailbox. STOPS SPEND; eventually destroys it.
1168
+
1169
+ Two steps, and this is the first: the mailbox is scheduled for
1170
+ cancellation at the provider and keeps working until its current period
1171
+ ends. A poller then flips it to cancelled, after which
1172
+ `DELETE /mailboxes/{mailbox_id}` removes graph8's record of it.
1173
+
1174
+ Reversible with `POST /mailboxes/uncancel` while it is still scheduled -
1175
+ which resumes billing.
1176
+
1177
+ 422 for a mailbox that was not purchased through graph8, or one already in
1178
+ the cancellation flow. 502 if the provider refused - read that as "nothing
1179
+ was cancelled", not as a partial success.
1180
+
1181
+ Needs a personal API key whose user holds a mailbox write permission.
1182
+
1183
+ **Input**
1184
+
1185
+ | Field | Type | Required | Description |
1186
+ |---|---|---|---|
1187
+ | `path.mailbox_id` | `integer` | yes | Mailbox id (mailboxes.id) |
1188
+
1189
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1190
+
1191
+ Other envelope fields: `pagination` (PaginationMeta).
1192
+
1193
+ **Example**
1194
+
1195
+ ```ts
1196
+ // destructive: deletes or archives data; confirm with a human before calling.
1197
+ const result = await g8.api.mailboxes.requestMailboxCancellation({ path: { mailbox_id: 1 } });
1198
+ ```
1199
+
1200
+ ---
1201
+
1202
+ <a id="op-resumescheduledplacementtest"></a>
1203
+
1204
+ ### `g8.api.mailboxes.resumeScheduledPlacementTest(input)`
1205
+
1206
+ **Resume Scheduled Placement Test**
1207
+
1208
+ - HTTP: `POST /api/v1/placement/scheduled/{schedule_id}/resume`
1209
+ - operationId: `resume_scheduled_placement_test_placement_scheduled__schedule_id__resume_post` (also callable as `g8.api.call("resume_scheduled_placement_test_placement_scheduled__schedule_id__resume_post", input)`)
1210
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1211
+ - API-key scope: `campaigns:write`
1212
+
1213
+ Start a paused recurring test again. IT RESUMES CHARGING.
1214
+
1215
+ **Input**
1216
+
1217
+ | Field | Type | Required | Description |
1218
+ |---|---|---|---|
1219
+ | `path.schedule_id` | `string` | yes | Schedule id. A STRING, not a number: it is an opaque InboxKit identifier persisted as `inboxkit_schedule_id VARCHAR(100)` and interpolated straight into an InboxKit URL. `test_id`, `domain_id` and `mailbox_id` on this surface really are integers - the app draws the same distinction, and flattening it would 422 every id `GET /placement/scheduled` hands back. |
1220
+
1221
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1222
+
1223
+ Other envelope fields: `pagination` (PaginationMeta).
1224
+
1225
+ **Example**
1226
+
1227
+ ```ts
1228
+ const result = await g8.api.mailboxes.resumeScheduledPlacementTest({ path: { schedule_id: "id" } });
1229
+ ```
1230
+
1231
+ ---
1232
+
1233
+ <a id="op-runmailboxplacementtest"></a>
1234
+
1235
+ ### `g8.api.mailboxes.runMailboxPlacementTest(input)`
1236
+
1237
+ **Run Mailbox Placement Test**
1238
+
1239
+ - HTTP: `POST /api/v1/mailboxes/{mailbox_id}/health/placement-test`
1240
+ - operationId: `run_mailbox_placement_test_mailboxes__mailbox_id__health_placement_test_post` (also callable as `g8.api.call("run_mailbox_placement_test_mailboxes__mailbox_id__health_placement_test_post", input)`)
1241
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1242
+ - API-key scope: `campaigns:run`
1243
+
1244
+ Run an inbox-placement test for ONE mailbox. THIS CHARGES CREDITS.
1245
+
1246
+ Same charging path as `POST /placement/tests`: credits are held and
1247
+ charged when the test is CREATED, not when it completes. Call
1248
+ `POST /placement/tests/estimate` first if you want the figure - that one
1249
+ is free.
1250
+
1251
+ One test per mailbox per 72 hours; a call inside the window is a 429
1252
+ carrying `cooldown_until`. The test itself completes asynchronously - read
1253
+ it back with `GET /placement/tests/{test_id}`.
1254
+
1255
+ Org admins and owners only, enforced by the handler itself.
1256
+
1257
+ **Input**
1258
+
1259
+ | Field | Type | Required | Description |
1260
+ |---|---|---|---|
1261
+ | `path.mailbox_id` | `integer` | yes | Mailbox id (mailboxes.id) |
1262
+
1263
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1264
+
1265
+ Other envelope fields: `pagination` (PaginationMeta).
1266
+
1267
+ **Example**
1268
+
1269
+ ```ts
1270
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1271
+ const result = await g8.api.mailboxes.runMailboxPlacementTest({ path: { mailbox_id: 1 } });
1272
+ ```
1273
+
1274
+ ---
1275
+
1276
+ <a id="op-setupwarmup"></a>
1277
+
1278
+ ### `g8.api.mailboxes.setupWarmup(input)`
1279
+
1280
+ **Setup Warmup**
1281
+
1282
+ - HTTP: `POST /api/v1/warmup/setup`
1283
+ - operationId: `setup_warmup_warmup_setup_post` (also callable as `g8.api.call("setup_warmup_warmup_setup_post", input)`)
1284
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1285
+ - API-key scope: `campaigns:write`
1286
+
1287
+ Enrol a mailbox with a warmup provider.
1288
+
1289
+ `warmup_settings` is passed through untouched: the accepted keys differ
1290
+ per provider and change with them, so this contract does not second-guess
1291
+ what the provider takes.
1292
+
1293
+ **Input**
1294
+
1295
+ | Field | Type | Required | Description |
1296
+ |---|---|---|---|
1297
+ | `body` | `SetupWarmupRequest` | yes | Request body; fields below. |
1298
+
1299
+ Body fields (`SetupWarmupRequest`):
1300
+
1301
+ | Field | Type | Required | Description |
1302
+ |---|---|---|---|
1303
+ | `body.mailbox_id` | `integer` | yes | |
1304
+ | `body.provider` | `string` | yes | The warmup provider to enrol with. |
1305
+ | `body.warmup_settings` | `Record<string, unknown> \| null` | no | Provider-specific settings. Open because the accepted keys differ per provider and change with them - the app passes this through untouched, and a closed mirror here would drop a setting the provider supports. |
1306
+
1307
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1308
+
1309
+ Other envelope fields: `pagination` (PaginationMeta).
1310
+
1311
+ **Example**
1312
+
1313
+ ```ts
1314
+ const result = await g8.api.mailboxes.setupWarmup({ body: { mailbox_id: 123, provider: "example" } });
1315
+ ```
1316
+
1317
+ ---
1318
+
1319
+ <a id="op-sharemailbox"></a>
1320
+
1321
+ ### `g8.api.mailboxes.shareMailbox(input)`
1322
+
1323
+ **Share Mailbox**
1324
+
1325
+ - HTTP: `POST /api/v1/mailboxes/{mailbox_id}/share`
1326
+ - operationId: `share_mailbox_mailboxes__mailbox_id__share_post` (also callable as `g8.api.call("share_mailbox_mailboxes__mailbox_id__share_post", input)`)
1327
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1328
+ - API-key scope: `campaigns:write`
1329
+
1330
+ Let the rest of the org send from this mailbox, or stop letting them.
1331
+
1332
+ Sharing hands over a sending CREDENTIAL, not a view: anyone in the org can
1333
+ then attach it to their own sequences. Explicit rather than a toggle, so a
1334
+ retried request cannot silently flip it back.
1335
+
1336
+ Owner-only (plus org admins and owners) - sharing is the one mailbox
1337
+ mutation a team-mate the mailbox is already shared with cannot perform.
1338
+ Needs a personal API key.
1339
+
1340
+ **Input**
1341
+
1342
+ | Field | Type | Required | Description |
1343
+ |---|---|---|---|
1344
+ | `path.mailbox_id` | `integer` | yes | Mailbox id (mailboxes.id) |
1345
+ | `body` | `MailboxShareRequest` | yes | Request body; fields below. |
1346
+
1347
+ Body fields (`MailboxShareRequest`):
1348
+
1349
+ | Field | Type | Required | Description |
1350
+ |---|---|---|---|
1351
+ | `body.shared_with_team` | `boolean` | yes | True makes the mailbox usable by every member of the org |
1352
+
1353
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1354
+
1355
+ Other envelope fields: `pagination` (PaginationMeta).
1356
+
1357
+ **Example**
1358
+
1359
+ ```ts
1360
+ const result = await g8.api.mailboxes.shareMailbox({ path: { mailbox_id: 1 }, body: { shared_with_team: true } });
1361
+ ```
1362
+
1363
+ ---
1364
+
1365
+ <a id="op-testmailboxconnection"></a>
1366
+
1367
+ ### `g8.api.mailboxes.testMailboxConnection(input)`
1368
+
1369
+ **Test Mailbox Connection**
1370
+
1371
+ - HTTP: `POST /api/v1/mailboxes/{mailbox_id}/test-connection`
1372
+ - operationId: `test_mailbox_connection_mailboxes__mailbox_id__test_connection_post` (also callable as `g8.api.call("test_mailbox_connection_mailboxes__mailbox_id__test_connection_post", input)`)
1373
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1374
+ - API-key scope: `campaigns:write`
1375
+ - ★ Hand-written: [`g8.mailboxes.testConnection()`](../sdk-clients.md#g8-mailboxes-testconnection)
1376
+
1377
+ Verify a mailbox's IMAP/SMTP credentials and refresh its connection status.
1378
+
1379
+ Send an empty body to test what is stored. Supply credentials to test
1380
+ candidate values without saving them — useful for validating before a PATCH.
1381
+
1382
+ **Input**
1383
+
1384
+ | Field | Type | Required | Description |
1385
+ |---|---|---|---|
1386
+ | `path.mailbox_id` | `integer` | yes | Mailbox ID (mailboxes.id) |
1387
+ | `body` | `MailboxTestConnectionRequest \| null` | no | Request body; fields below. |
1388
+
1389
+ Body fields:
1390
+
1391
+ | Field | Type | Required | Description |
1392
+ |---|---|---|---|
1393
+ | `body.imap_address` | `string \| null` | no | |
1394
+ | `body.imap_password` | `string \| null` | no | |
1395
+ | `body.imap_port` | `integer \| null` | no | |
1396
+ | `body.imap_username` | `string \| null` | no | |
1397
+ | `body.smtp_address` | `string \| null` | no | |
1398
+ | `body.smtp_password` | `string \| null` | no | |
1399
+ | `body.smtp_port` | `integer \| null` | no | |
1400
+ | `body.smtp_username` | `string \| null` | no | |
1401
+
1402
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1403
+
1404
+ Other envelope fields: `pagination` (PaginationMeta).
1405
+
1406
+ **Example**
1407
+
1408
+ ```ts
1409
+ const result = await g8.api.mailboxes.testMailboxConnection({ path: { mailbox_id: 123 } });
1410
+ ```
1411
+
1412
+ ---
1413
+
1414
+ <a id="op-uncancelmailboxes"></a>
1415
+
1416
+ ### `g8.api.mailboxes.uncancelMailboxes(input)`
1417
+
1418
+ **Uncancel Mailboxes**
1419
+
1420
+ - HTTP: `POST /api/v1/mailboxes/uncancel`
1421
+ - operationId: `uncancel_mailboxes_mailboxes_uncancel_post` (also callable as `g8.api.call("uncancel_mailboxes_mailboxes_uncancel_post", input)`)
1422
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1423
+ - API-key scope: `campaigns:run`
1424
+
1425
+ Undo a scheduled cancellation. RESUMES BILLING on every mailbox listed.
1426
+
1427
+ Bulk by design; pass one id for a single undo. Idempotent - a mailbox that
1428
+ is already active is a no-op success rather than an error.
1429
+
1430
+ Read the per-id breakdown in `results`, not the HTTP status: a mailbox
1431
+ that could not be restored is REPORTED, and the request still returns 200
1432
+ with the ones that were.
1433
+
1434
+ 422 for an org without an active or pre-funded plan. A churned org must
1435
+ not resume mailbox billing, and restoring one would be re-cancelled within
1436
+ days anyway.
1437
+
1438
+ Needs a personal API key whose user holds a mailbox write permission.
1439
+
1440
+ **Input**
1441
+
1442
+ | Field | Type | Required | Description |
1443
+ |---|---|---|---|
1444
+ | `body` | `MailboxUncancelRequest` | yes | Request body; fields below. |
1445
+
1446
+ Body fields (`MailboxUncancelRequest`):
1447
+
1448
+ | Field | Type | Required | Description |
1449
+ |---|---|---|---|
1450
+ | `body.mailbox_ids` | `Array<integer>` | yes | Mailboxes to restore. Up to 50. min items 1, max items 50 |
1451
+
1452
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1453
+
1454
+ Other envelope fields: `pagination` (PaginationMeta).
1455
+
1456
+ **Example**
1457
+
1458
+ ```ts
1459
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1460
+ const result = await g8.api.mailboxes.uncancelMailboxes({ body: { mailbox_ids: [123] } });
1461
+ ```
1462
+
1463
+ ---
1464
+
1465
+ <a id="op-updatemailbox"></a>
1466
+
1467
+ ### `g8.api.mailboxes.updateMailbox(input)`
1468
+
1469
+ **Update Mailbox**
1470
+
1471
+ - HTTP: `PATCH /api/v1/mailboxes/{mailbox_id}`
1472
+ - operationId: `update_mailbox_mailboxes__mailbox_id__patch` (also callable as `g8.api.call("update_mailbox_mailboxes__mailbox_id__patch", input)`)
1473
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1474
+ - API-key scope: `campaigns:write`
1475
+ - ★ Hand-written: [`g8.mailboxes.update()`](../sdk-clients.md#g8-mailboxes-update)
1476
+
1477
+ Update a mailbox. Only supplied fields change; omitted fields are untouched.
1478
+
1479
+ **Input**
1480
+
1481
+ | Field | Type | Required | Description |
1482
+ |---|---|---|---|
1483
+ | `path.mailbox_id` | `integer` | yes | Mailbox ID (mailboxes.id) |
1484
+ | `body` | `MailboxUpdateRequest` | yes | Request body; fields below. |
1485
+
1486
+ Body fields (`MailboxUpdateRequest`):
1487
+
1488
+ | Field | Type | Required | Description |
1489
+ |---|---|---|---|
1490
+ | `body.allows_nurture` | `boolean \| null` | no | |
1491
+ | `body.daily_limit` | `integer \| null` | no | min 1 |
1492
+ | `body.display_name` | `string \| null` | no | |
1493
+ | `body.imap_address` | `string \| null` | no | |
1494
+ | `body.imap_password` | `string \| null` | no | Write-only. |
1495
+ | `body.imap_port` | `integer \| null` | no | |
1496
+ | `body.imap_username` | `string \| null` | no | |
1497
+ | `body.signature_html` | `string \| null` | no | |
1498
+ | `body.signature_plain` | `string \| null` | no | |
1499
+ | `body.smtp_address` | `string \| null` | no | |
1500
+ | `body.smtp_password` | `string \| null` | no | Write-only. |
1501
+ | `body.smtp_port` | `integer \| null` | no | |
1502
+ | `body.smtp_username` | `string \| null` | no | |
1503
+ | `body.use_html_signature` | `boolean \| null` | no | |
1504
+
1505
+ **Returns** `ApiResponse_MailboxResponse_`: the envelope `{ data: MailboxResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1506
+
1507
+ Other envelope fields: `pagination` (PaginationMeta).
1508
+
1509
+ `MailboxResponse` fields:
1510
+
1511
+ | Field | Type | Required | Description |
1512
+ |---|---|---|---|
1513
+ | `id` | `integer` | yes | |
1514
+ | `allows_nurture` | `boolean \| null` | no | |
1515
+ | `connection_status` | `string \| null` | no | active \| paused \| disconnected \| expired \| ... |
1516
+ | `created_at` | `string \| null` | no | |
1517
+ | `created_by` | `string \| null` | no | |
1518
+ | `daily_limit` | `integer \| null` | no | |
1519
+ | `display_name` | `string \| null` | no | |
1520
+ | `email` | `string \| null` | no | |
1521
+ | `is_archived` | `boolean \| null` | no | |
1522
+ | `provider` | `string \| null` | no | |
1523
+ | `updated_at` | `string \| null` | no | |
1524
+ | `warmup_enabled` | `boolean \| null` | no | |
1525
+
1526
+ **Example**
1527
+
1528
+ ```ts
1529
+ const result = await g8.api.mailboxes.updateMailbox({ path: { mailbox_id: 123 }, body: {} });
1530
+ ```
1531
+
1532
+ ---
1533
+
1534
+ <a id="op-updatesenderpersona"></a>
1535
+
1536
+ ### `g8.api.mailboxes.updateSenderPersona(input)`
1537
+
1538
+ **Update Sender Persona**
1539
+
1540
+ - HTTP: `PATCH /api/v1/mailboxes/personas/{persona_id}`
1541
+ - operationId: `update_sender_persona_mailboxes_personas__persona_id__patch` (also callable as `g8.api.call("update_sender_persona_mailboxes_personas__persona_id__patch", input)`)
1542
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1543
+ - API-key scope: `campaigns:write`
1544
+
1545
+ Change a sender persona. Send only the fields that change.
1546
+
1547
+ `first_name`, `last_name` and `email` cannot be set to null. Domains
1548
+ already registered keep the registrant details they were bought with.
1549
+ Org admins and owners only, and a personal API key.
1550
+
1551
+ **Input**
1552
+
1553
+ | Field | Type | Required | Description |
1554
+ |---|---|---|---|
1555
+ | `path.persona_id` | `integer` | yes | Sender persona id - from GET /mailboxes/personas |
1556
+ | `body` | `SenderPersonaWriteRequest` | yes | Request body; fields below. |
1557
+
1558
+ Body fields (`SenderPersonaWriteRequest`):
1559
+
1560
+ | Field | Type | Required | Description |
1561
+ |---|---|---|---|
1562
+ | `body.address_line1` | `string \| null` | no | Registrant address, line 1 max length 255 |
1563
+ | `body.address_line2` | `string \| null` | no | Registrant address, line 2 max length 255 |
1564
+ | `body.city` | `string \| null` | no | City max length 255 |
1565
+ | `body.country` | `string \| null` | no | Country max length 100 |
1566
+ | `body.email` | `string \| null` | no | The persona's own address max length 254 |
1567
+ | `body.first_name` | `string \| null` | no | Given name max length 100 |
1568
+ | `body.last_name` | `string \| null` | no | Family name max length 100 |
1569
+ | `body.organization` | `string \| null` | no | Organisation name max length 255 |
1570
+ | `body.phone` | `string \| null` | no | Contact phone max length 50 |
1571
+ | `body.photo_url` | `string \| null` | no | Photo URL max length 1000 |
1572
+ | `body.postal_code` | `string \| null` | no | Postal code max length 100 |
1573
+ | `body.state` | `string \| null` | no | State or region max length 100 |
1574
+ | `body.team_member_id` | `string (uuid) \| null` | no | Team member whose identity this persona uses |
1575
+ | `body.title` | `string \| null` | no | Job title shown in signatures max length 100 |
1576
+
1577
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1578
+
1579
+ Other envelope fields: `pagination` (PaginationMeta).
1580
+
1581
+ **Example**
1582
+
1583
+ ```ts
1584
+ const result = await g8.api.mailboxes.updateSenderPersona({ path: { persona_id: 1 }, body: {} });
1585
+ ```
1586
+
1587
+ ---
1588
+
1589
+ <a id="op-updatewarmupsettings"></a>
1590
+
1591
+ ### `g8.api.mailboxes.updateWarmupSettings(input)`
1592
+
1593
+ **Update Warmup Settings**
1594
+
1595
+ - HTTP: `PATCH /api/v1/warmup/{mailbox_id}/settings`
1596
+ - operationId: `update_warmup_settings_warmup__mailbox_id__settings_patch` (also callable as `g8.api.call("update_warmup_settings_warmup__mailbox_id__settings_patch", input)`)
1597
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1598
+ - API-key scope: `campaigns:write`
1599
+
1600
+ Change how an already-running warmup behaves.
1601
+
1602
+ The body is OPEN and forwarded as-is, matching the app, which types this
1603
+ parameter as a bare `Dict[str, Any]` and hands it to the provider. Closing
1604
+ it here would reject a setting the provider supports.
1605
+
1606
+ **Input**
1607
+
1608
+ | Field | Type | Required | Description |
1609
+ |---|---|---|---|
1610
+ | `path.mailbox_id` | `integer` | yes | Mailbox id. |
1611
+ | `body` | `UpdateWarmupSettingsRequest` | yes | Request body; fields below. |
1612
+
1613
+ Body type: `UpdateWarmupSettingsRequest` (Record<string, unknown>).
1614
+
1615
+ **Returns** `ApiResponse_DeliverabilityPayload_`: the envelope `{ data: DeliverabilityPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1616
+
1617
+ Other envelope fields: `pagination` (PaginationMeta).
1618
+
1619
+ **Example**
1620
+
1621
+ ```ts
1622
+ const result = await g8.api.mailboxes.updateWarmupSettings({ path: { mailbox_id: 123 }, body: {} });
1623
+ ```
1624
+
1625
+ ---
1626
+
1627
+ <a id="op-uploadpersonaphoto"></a>
1628
+
1629
+ ### `g8.api.mailboxes.uploadPersonaPhoto(input)`
1630
+
1631
+ **Upload Persona Photo**
1632
+
1633
+ - HTTP: `POST /api/v1/mailboxes/personas/{persona_id}/photo`
1634
+ - operationId: `upload_persona_photo_mailboxes_personas__persona_id__photo_post` (also callable as `g8.api.call("upload_persona_photo_mailboxes_personas__persona_id__photo_post", input)`)
1635
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1636
+ - API-key scope: `campaigns:write`
1637
+
1638
+ Set the photo this sender persona uses. Multipart upload.
1639
+
1640
+ REPLACES the current photo. The image is stored by graph8 and referenced
1641
+ from the returned `photo_url`; 503 means photo storage was unavailable and
1642
+ the persona is unchanged, so it is safe to retry.
1643
+
1644
+ Org admins and owners only, and a personal API key.
1645
+
1646
+ **Input**
1647
+
1648
+ | Field | Type | Required | Description |
1649
+ |---|---|---|---|
1650
+ | `path.persona_id` | `integer` | yes | Sender persona id - from GET /mailboxes/personas |
1651
+
1652
+ **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1653
+
1654
+ Other envelope fields: `pagination` (PaginationMeta).
1655
+
1656
+ **Example**
1657
+
1658
+ ```ts
1659
+ const result = await g8.api.mailboxes.uploadPersonaPhoto({ path: { persona_id: 1 } });
1660
+ ```
1661
+
1662
+ ---
1663
+
1664
+ ## Referenced types
1665
+
1666
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
1667
+
1668
+ <a id="type-associatedsequence"></a>
1669
+
1670
+ ### `AssociatedSequence`
1671
+
1672
+ | Field | Type | Required | Description |
1673
+ |---|---|---|---|
1674
+ | `id` | `integer \| null` | no | |
1675
+ | `status` | `string \| null` | no | |
1676
+ | `title` | `string \| null` | no | |
1677
+
1678
+ <a id="type-mailboxsummary"></a>
1679
+
1680
+ ### `MailboxSummary`
1681
+
1682
+ One mailbox as the inventory surfaces it.
1683
+
1684
+ | Field | Type | Required | Description |
1685
+ |---|---|---|---|
1686
+ | `channel_type` | `string \| null` | no | SMTP, GMAIL or INBOXKIT. |
1687
+ | `email` | `string \| null` | no | |
1688
+ | `id` | `integer \| null` | no | |
1689
+ | `is_archived` | `boolean \| null` | no | |
1690
+ | `status` | `string \| null` | no | |