@graph8/sdk 0.308.1 → 0.357.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 (654) hide show
  1. package/README.md +81 -0
  2. package/blocks/README.md +32 -0
  3. package/blocks/_foundation/README.md +78 -0
  4. package/blocks/_foundation/block.json +79 -0
  5. package/blocks/_foundation/components/api-error.tsx +62 -0
  6. package/blocks/_foundation/components/confirm-spend-dialog.tsx +142 -0
  7. package/blocks/_foundation/components/empty-state.tsx +24 -0
  8. package/blocks/_foundation/hooks/use-g8-mutation.ts +88 -0
  9. package/blocks/_foundation/hooks/use-g8-query.ts +87 -0
  10. package/blocks/_foundation/hooks/use-job-poll.ts +130 -0
  11. package/blocks/_foundation/hooks/use-paginated.ts +105 -0
  12. package/blocks/_foundation/lib/g8-client.ts +128 -0
  13. package/blocks/_foundation/recipes/verify-proxy-key.ts +18 -0
  14. package/blocks/_foundation/server/proxy.ts +233 -0
  15. package/blocks/_foundation/server/route.ts +30 -0
  16. package/blocks/agents/README.md +133 -0
  17. package/blocks/agents/block.json +223 -0
  18. package/blocks/agents/components/agent-builder.tsx +199 -0
  19. package/blocks/agents/components/agent-knowledge-panel.tsx +144 -0
  20. package/blocks/agents/components/agent-runs.tsx +175 -0
  21. package/blocks/agents/components/agent-skills-panel.tsx +126 -0
  22. package/blocks/agents/components/agent-test-console.tsx +175 -0
  23. package/blocks/agents/lib/agent-types.ts +114 -0
  24. package/blocks/agents/recipes/create-agent-and-attach-skill.ts +50 -0
  25. package/blocks/agents/recipes/run-and-follow-agent-run.ts +46 -0
  26. package/blocks/agents/recipes/test-agent-before-activating.ts +36 -0
  27. package/blocks/analytics/README.md +73 -0
  28. package/blocks/analytics/block.json +178 -0
  29. package/blocks/analytics/components/funnel-chart.tsx +79 -0
  30. package/blocks/analytics/components/kpi-tiles.tsx +74 -0
  31. package/blocks/analytics/components/leaderboard.tsx +86 -0
  32. package/blocks/analytics/components/report-builder.tsx +200 -0
  33. package/blocks/analytics/hooks/use-report.ts +26 -0
  34. package/blocks/analytics/lib/analytics-types.ts +108 -0
  35. package/blocks/analytics/lib/use-debounced.ts +16 -0
  36. package/blocks/analytics/recipes/01-weekly-outbound-report.ts +32 -0
  37. package/blocks/analytics/recipes/02-revenue-snapshot.ts +22 -0
  38. package/blocks/analytics/recipes/03-saved-report.ts +30 -0
  39. package/blocks/appointments/README.md +80 -0
  40. package/blocks/appointments/block.json +218 -0
  41. package/blocks/appointments/components/availability-editor.tsx +192 -0
  42. package/blocks/appointments/components/booking-page.tsx +154 -0
  43. package/blocks/appointments/components/event-type-editor.tsx +214 -0
  44. package/blocks/appointments/components/meeting-detail.tsx +147 -0
  45. package/blocks/appointments/components/meeting-list.tsx +148 -0
  46. package/blocks/appointments/hooks/use-available-slots.ts +29 -0
  47. package/blocks/appointments/hooks/use-schedules.ts +18 -0
  48. package/blocks/appointments/lib/appointments-types.ts +159 -0
  49. package/blocks/appointments/lib/idempotency.ts +30 -0
  50. package/blocks/appointments/recipes/01-create-event-type-and-hours.ts +27 -0
  51. package/blocks/appointments/recipes/02-find-slots-and-book.ts +34 -0
  52. package/blocks/appointments/recipes/03-bookings-digest.ts +22 -0
  53. package/blocks/appointments/recipes/04-calendar-invite.ts +21 -0
  54. package/blocks/block.schema.json +130 -0
  55. package/blocks/block.types.ts +109 -0
  56. package/blocks/campaigns/README.md +118 -0
  57. package/blocks/campaigns/block.json +361 -0
  58. package/blocks/campaigns/components/campaign-assets.tsx +180 -0
  59. package/blocks/campaigns/components/campaign-audience-step.tsx +91 -0
  60. package/blocks/campaigns/components/campaign-launch-step.tsx +147 -0
  61. package/blocks/campaigns/components/campaign-list.tsx +120 -0
  62. package/blocks/campaigns/components/campaign-metrics.tsx +93 -0
  63. package/blocks/campaigns/components/campaign-select.tsx +52 -0
  64. package/blocks/campaigns/components/campaign-sequence-step.tsx +158 -0
  65. package/blocks/campaigns/components/campaign-wizard.tsx +238 -0
  66. package/blocks/campaigns/components/form-field.tsx +29 -0
  67. package/blocks/campaigns/components/icp-editor.tsx +230 -0
  68. package/blocks/campaigns/components/persona-editor.tsx +210 -0
  69. package/blocks/campaigns/hooks/use-company-profile.ts +34 -0
  70. package/blocks/campaigns/lib/campaigns-utils.ts +155 -0
  71. package/blocks/campaigns/recipes/attach-audience-and-launch.ts +33 -0
  72. package/blocks/campaigns/recipes/campaign-report.ts +22 -0
  73. package/blocks/campaigns/recipes/generate-ideas-and-create-campaign.ts +51 -0
  74. package/blocks/campaigns/recipes/set-up-icp-and-personas.ts +37 -0
  75. package/blocks/coach/README.md +93 -0
  76. package/blocks/coach/block.json +125 -0
  77. package/blocks/coach/components/call-scorecard.tsx +126 -0
  78. package/blocks/coach/components/coaching-feed.tsx +140 -0
  79. package/blocks/coach/lib/coach-types.ts +116 -0
  80. package/blocks/coach/recipes/read-a-scorecard.ts +27 -0
  81. package/blocks/coach/recipes/weekly-coaching-digest.ts +53 -0
  82. package/blocks/copilot/README.md +99 -0
  83. package/blocks/copilot/block.json +151 -0
  84. package/blocks/copilot/components/copilot-memory.tsx +87 -0
  85. package/blocks/copilot/components/copilot-panel.tsx +189 -0
  86. package/blocks/copilot/components/copilot-team-chat.tsx +111 -0
  87. package/blocks/copilot/lib/copilot-types.ts +111 -0
  88. package/blocks/copilot/recipes/ask-the-copilot.ts +35 -0
  89. package/blocks/copilot/recipes/post-in-a-work-channel.ts +33 -0
  90. package/blocks/copilot/recipes/remember-and-recall.ts +19 -0
  91. package/blocks/crm/README.md +122 -0
  92. package/blocks/crm/block.json +378 -0
  93. package/blocks/crm/components/activity-timeline.tsx +99 -0
  94. package/blocks/crm/components/company-detail.tsx +118 -0
  95. package/blocks/crm/components/company-table.tsx +173 -0
  96. package/blocks/crm/components/contact-detail.tsx +135 -0
  97. package/blocks/crm/components/contact-table.tsx +217 -0
  98. package/blocks/crm/components/dedupe-review.tsx +164 -0
  99. package/blocks/crm/components/import-wizard.tsx +193 -0
  100. package/blocks/crm/components/notes-panel.tsx +112 -0
  101. package/blocks/crm/components/record-form.tsx +191 -0
  102. package/blocks/crm/components/task-list.tsx +107 -0
  103. package/blocks/crm/hooks/use-custom-fields.ts +18 -0
  104. package/blocks/crm/hooks/use-debounced.ts +13 -0
  105. package/blocks/crm/hooks/use-page-query.ts +52 -0
  106. package/blocks/crm/lib/crm-types.ts +136 -0
  107. package/blocks/crm/recipes/custom-fields-and-values.ts +28 -0
  108. package/blocks/crm/recipes/dedupe-and-merge.ts +30 -0
  109. package/blocks/crm/recipes/notes-tasks-and-activity.ts +23 -0
  110. package/blocks/crm/recipes/upsert-contact-with-company.ts +33 -0
  111. package/blocks/deals/README.md +78 -0
  112. package/blocks/deals/block.json +198 -0
  113. package/blocks/deals/components/deal-detail.tsx +134 -0
  114. package/blocks/deals/components/forecast-view.tsx +112 -0
  115. package/blocks/deals/components/pipeline-board.tsx +142 -0
  116. package/blocks/deals/components/stage-editor.tsx +96 -0
  117. package/blocks/deals/hooks/use-pipeline-deals.ts +67 -0
  118. package/blocks/deals/hooks/use-pipelines.ts +19 -0
  119. package/blocks/deals/lib/deals-types.ts +128 -0
  120. package/blocks/deals/recipes/01-create-deal-and-advance.ts +32 -0
  121. package/blocks/deals/recipes/02-pipeline-report.ts +35 -0
  122. package/blocks/deals/recipes/03-stale-deals-sweep.ts +20 -0
  123. package/blocks/dialer/README.md +114 -0
  124. package/blocks/dialer/block.json +260 -0
  125. package/blocks/dialer/components/call-log.tsx +78 -0
  126. package/blocks/dialer/components/call-queue.tsx +188 -0
  127. package/blocks/dialer/components/dialer-workspace.tsx +47 -0
  128. package/blocks/dialer/components/disposition-panel.tsx +75 -0
  129. package/blocks/dialer/components/live-calls-table.tsx +107 -0
  130. package/blocks/dialer/components/session-start-form.tsx +111 -0
  131. package/blocks/dialer/components/softphone.tsx +122 -0
  132. package/blocks/dialer/components/transcript-viewer.tsx +82 -0
  133. package/blocks/dialer/hooks/use-dialer-numbers.ts +19 -0
  134. package/blocks/dialer/hooks/use-dialer-session.ts +68 -0
  135. package/blocks/dialer/hooks/use-dispositions.ts +29 -0
  136. package/blocks/dialer/lib/dialer-types.ts +158 -0
  137. package/blocks/dialer/lib/softphone-transport.ts +67 -0
  138. package/blocks/dialer/lib/twilio-transport.ts +74 -0
  139. package/blocks/dialer/recipes/01-create-session-and-dial.ts +39 -0
  140. package/blocks/dialer/recipes/02-disposition-calls.ts +26 -0
  141. package/blocks/dialer/recipes/03-review-a-call.ts +23 -0
  142. package/blocks/enrichment/README.md +105 -0
  143. package/blocks/enrichment/block.json +204 -0
  144. package/blocks/enrichment/components/bulk-enrich-panel.tsx +205 -0
  145. package/blocks/enrichment/components/email-verify-badge.tsx +82 -0
  146. package/blocks/enrichment/components/enrich-button.tsx +136 -0
  147. package/blocks/enrichment/components/waterfall-config.tsx +127 -0
  148. package/blocks/enrichment/hooks/use-providers.ts +18 -0
  149. package/blocks/enrichment/lib/enrichment-types.ts +104 -0
  150. package/blocks/enrichment/recipes/bulk-enrich-and-poll.ts +41 -0
  151. package/blocks/enrichment/recipes/lookup-and-verify.ts +25 -0
  152. package/blocks/enrichment/recipes/waterfall-pipeline.ts +26 -0
  153. package/blocks/forms/README.md +112 -0
  154. package/blocks/forms/block.json +200 -0
  155. package/blocks/forms/components/form-builder.tsx +150 -0
  156. package/blocks/forms/components/form-embed.tsx +103 -0
  157. package/blocks/forms/components/form-mapping-editor.tsx +125 -0
  158. package/blocks/forms/components/site-audit-panel.tsx +73 -0
  159. package/blocks/forms/components/submissions-table.tsx +158 -0
  160. package/blocks/forms/lib/form-types.ts +127 -0
  161. package/blocks/forms/recipes/install-snippet-and-form.ts +21 -0
  162. package/blocks/forms/recipes/retry-failed-deliveries.ts +26 -0
  163. package/blocks/forms/recipes/route-form-to-list.ts +44 -0
  164. package/blocks/inbox/README.md +72 -0
  165. package/blocks/inbox/block.json +194 -0
  166. package/blocks/inbox/components/inbox-list.tsx +156 -0
  167. package/blocks/inbox/components/inbox-screen.tsx +49 -0
  168. package/blocks/inbox/components/reply-composer.tsx +183 -0
  169. package/blocks/inbox/components/tag-and-assign.tsx +189 -0
  170. package/blocks/inbox/components/thread-badge.tsx +17 -0
  171. package/blocks/inbox/components/thread-view.tsx +108 -0
  172. package/blocks/inbox/hooks/use-inbox-thread.ts +24 -0
  173. package/blocks/inbox/hooks/use-inbox-threads.ts +40 -0
  174. package/blocks/inbox/lib/idempotency.ts +30 -0
  175. package/blocks/inbox/lib/inbox-types.ts +100 -0
  176. package/blocks/inbox/recipes/01-triage-and-reply.ts +43 -0
  177. package/blocks/inbox/recipes/02-tag-and-assign.ts +31 -0
  178. package/blocks/inbox/recipes/03-hot-contacts-digest.ts +16 -0
  179. package/blocks/integrations/README.md +75 -0
  180. package/blocks/integrations/block.json +172 -0
  181. package/blocks/integrations/components/integration-list.tsx +165 -0
  182. package/blocks/integrations/components/sync-status.tsx +223 -0
  183. package/blocks/integrations/components/webhook-manager.tsx +300 -0
  184. package/blocks/integrations/lib/integrations-utils.ts +62 -0
  185. package/blocks/integrations/recipes/crm-sync-health.ts +19 -0
  186. package/blocks/integrations/recipes/push-contacts-to-crm.ts +20 -0
  187. package/blocks/integrations/recipes/register-webhook.ts +18 -0
  188. package/blocks/integrations/recipes/verify-webhook-route.ts +33 -0
  189. package/blocks/intent/README.md +57 -0
  190. package/blocks/intent/block.json +138 -0
  191. package/blocks/intent/components/account-intent-score.tsx +91 -0
  192. package/blocks/intent/components/intent-feed.tsx +215 -0
  193. package/blocks/intent/components/intent-keyword-manager.tsx +331 -0
  194. package/blocks/intent/hooks/use-account-intent.ts +46 -0
  195. package/blocks/intent/lib/intent-utils.ts +95 -0
  196. package/blocks/intent/recipes/rank-intent-accounts.ts +36 -0
  197. package/blocks/intent/recipes/track-competitor-domain.ts +23 -0
  198. package/blocks/intent/recipes/who-visited-url.ts +18 -0
  199. package/blocks/lifecycle/README.md +79 -0
  200. package/blocks/lifecycle/block.json +198 -0
  201. package/blocks/lifecycle/components/churn-list.tsx +92 -0
  202. package/blocks/lifecycle/components/customer-table.tsx +119 -0
  203. package/blocks/lifecycle/components/lead-queue.tsx +127 -0
  204. package/blocks/lifecycle/components/lifecycle-board.tsx +102 -0
  205. package/blocks/lifecycle/components/stage-move-dialog.tsx +75 -0
  206. package/blocks/lifecycle/hooks/use-debounced.ts +13 -0
  207. package/blocks/lifecycle/hooks/use-lifecycle-stages.ts +27 -0
  208. package/blocks/lifecycle/lib/lifecycle.ts +99 -0
  209. package/blocks/lifecycle/recipes/customer-brief.ts +23 -0
  210. package/blocks/lifecycle/recipes/move-company-stage.ts +17 -0
  211. package/blocks/lifecycle/recipes/read-lifecycle-board.ts +21 -0
  212. package/blocks/lifecycle/recipes/unlock-stage-contacts.ts +25 -0
  213. package/blocks/lists/README.md +96 -0
  214. package/blocks/lists/block.json +166 -0
  215. package/blocks/lists/components/add-to-list-button.tsx +111 -0
  216. package/blocks/lists/components/list-picker.tsx +94 -0
  217. package/blocks/lists/components/list-table.tsx +160 -0
  218. package/blocks/lists/components/suppression-manager.tsx +153 -0
  219. package/blocks/lists/recipes/create-list-and-add-contacts.ts +35 -0
  220. package/blocks/lists/recipes/refresh-and-check-lists.ts +21 -0
  221. package/blocks/lists/recipes/suppress-and-reinstate.ts +30 -0
  222. package/blocks/mailboxes/README.md +71 -0
  223. package/blocks/mailboxes/block.json +187 -0
  224. package/blocks/mailboxes/components/connect-mailbox.tsx +284 -0
  225. package/blocks/mailboxes/components/domain-purchase.tsx +271 -0
  226. package/blocks/mailboxes/components/mailbox-list.tsx +185 -0
  227. package/blocks/mailboxes/components/warmup-health.tsx +232 -0
  228. package/blocks/mailboxes/lib/mailboxes-utils.ts +69 -0
  229. package/blocks/mailboxes/recipes/buy-domain-and-mailboxes.ts +64 -0
  230. package/blocks/mailboxes/recipes/connect-imap-mailbox.ts +38 -0
  231. package/blocks/mailboxes/recipes/is-it-safe-to-send.ts +17 -0
  232. package/blocks/mailboxes/recipes/warmup-report.ts +31 -0
  233. package/blocks/newsletter/README.md +122 -0
  234. package/blocks/newsletter/block.json +224 -0
  235. package/blocks/newsletter/components/issue-form.tsx +124 -0
  236. package/blocks/newsletter/components/issue-scheduler.tsx +152 -0
  237. package/blocks/newsletter/components/newsletter-editor.tsx +131 -0
  238. package/blocks/newsletter/components/newsletter-stats.tsx +93 -0
  239. package/blocks/newsletter/components/subscriber-table.tsx +173 -0
  240. package/blocks/newsletter/lib/newsletter-types.ts +97 -0
  241. package/blocks/newsletter/recipes/create-newsletter-and-draft-issue.ts +27 -0
  242. package/blocks/newsletter/recipes/import-audience-and-send.ts +43 -0
  243. package/blocks/newsletter/recipes/issue-performance-report.ts +26 -0
  244. package/blocks/nurture/README.md +110 -0
  245. package/blocks/nurture/block.json +191 -0
  246. package/blocks/nurture/components/nurture-builder.tsx +114 -0
  247. package/blocks/nurture/components/nurture-enroll.tsx +107 -0
  248. package/blocks/nurture/components/nurture-form.tsx +120 -0
  249. package/blocks/nurture/components/nurture-stats.tsx +81 -0
  250. package/blocks/nurture/lib/nurture-types.ts +109 -0
  251. package/blocks/nurture/recipes/create-a-nurture.ts +34 -0
  252. package/blocks/nurture/recipes/enroll-contacts-and-launch.ts +24 -0
  253. package/blocks/nurture/recipes/nurture-health-check.ts +28 -0
  254. package/blocks/objects/README.md +120 -0
  255. package/blocks/objects/block.json +243 -0
  256. package/blocks/objects/components/attribute-field-input.tsx +82 -0
  257. package/blocks/objects/components/attribute-form-dialog.tsx +159 -0
  258. package/blocks/objects/components/object-not-found.tsx +34 -0
  259. package/blocks/objects/components/object-record-detail.tsx +143 -0
  260. package/blocks/objects/components/object-schema-editor.tsx +197 -0
  261. package/blocks/objects/components/object-table.tsx +130 -0
  262. package/blocks/objects/components/record-form-dialog.tsx +112 -0
  263. package/blocks/objects/components/record-roles-panel.tsx +106 -0
  264. package/blocks/objects/hooks/use-object-schema.ts +36 -0
  265. package/blocks/objects/lib/object-types.ts +214 -0
  266. package/blocks/objects/recipes/define-object-and-add-records.ts +24 -0
  267. package/blocks/objects/recipes/update-audit-and-archive-records.ts +39 -0
  268. package/blocks/objects/recipes/upsert-records-from-your-system.ts +30 -0
  269. package/blocks/pages/README.md +104 -0
  270. package/blocks/pages/block.json +223 -0
  271. package/blocks/pages/components/brand-kit-editor.tsx +152 -0
  272. package/blocks/pages/components/content-library.tsx +163 -0
  273. package/blocks/pages/components/page-editor.tsx +253 -0
  274. package/blocks/pages/components/page-list.tsx +159 -0
  275. package/blocks/pages/components/seo-report.tsx +159 -0
  276. package/blocks/pages/lib/studio.ts +77 -0
  277. package/blocks/pages/recipes/audit-site-seo.ts +28 -0
  278. package/blocks/pages/recipes/create-and-publish-page.ts +26 -0
  279. package/blocks/pages/recipes/edit-page-section.ts +25 -0
  280. package/blocks/pages/recipes/refresh-brand-kit.ts +22 -0
  281. package/blocks/quotes/README.md +79 -0
  282. package/blocks/quotes/block.json +183 -0
  283. package/blocks/quotes/components/product-picker.tsx +80 -0
  284. package/blocks/quotes/components/quote-builder.tsx +195 -0
  285. package/blocks/quotes/components/quote-list.tsx +79 -0
  286. package/blocks/quotes/components/quote-viewer.tsx +135 -0
  287. package/blocks/quotes/components/signature-status.tsx +77 -0
  288. package/blocks/quotes/hooks/use-debounced.ts +13 -0
  289. package/blocks/quotes/lib/quotes.ts +142 -0
  290. package/blocks/quotes/recipes/create-and-send-quote.ts +44 -0
  291. package/blocks/quotes/recipes/revise-sent-quote.ts +18 -0
  292. package/blocks/quotes/recipes/track-quote-signature.ts +22 -0
  293. package/blocks/radar/README.md +106 -0
  294. package/blocks/radar/block.json +189 -0
  295. package/blocks/radar/components/competitor-battle-card.tsx +53 -0
  296. package/blocks/radar/components/competitor-tracker.tsx +158 -0
  297. package/blocks/radar/components/radar-overview.tsx +67 -0
  298. package/blocks/radar/components/radar-report.tsx +86 -0
  299. package/blocks/radar/hooks/use-competitors.ts +23 -0
  300. package/blocks/radar/lib/radar-types.ts +124 -0
  301. package/blocks/radar/recipes/battle-card.ts +28 -0
  302. package/blocks/radar/recipes/deep-dive-report.ts +32 -0
  303. package/blocks/radar/recipes/marketing-snapshot.ts +18 -0
  304. package/blocks/radar/recipes/track-and-scan.ts +39 -0
  305. package/blocks/search/README.md +129 -0
  306. package/blocks/search/block.json +185 -0
  307. package/blocks/search/components/filter-builder.tsx +149 -0
  308. package/blocks/search/components/prospect-results.tsx +175 -0
  309. package/blocks/search/components/save-to-list-dialog.tsx +135 -0
  310. package/blocks/search/components/saved-searches.tsx +95 -0
  311. package/blocks/search/hooks/use-filter-options.ts +41 -0
  312. package/blocks/search/lib/search-types.ts +149 -0
  313. package/blocks/search/recipes/explore-filter-values.ts +27 -0
  314. package/blocks/search/recipes/saved-searches.ts +34 -0
  315. package/blocks/search/recipes/search-and-save-to-list.ts +37 -0
  316. package/blocks/sequencer/README.md +87 -0
  317. package/blocks/sequencer/block.json +214 -0
  318. package/blocks/sequencer/components/enroll-dialog.tsx +93 -0
  319. package/blocks/sequencer/components/sequence-builder.tsx +306 -0
  320. package/blocks/sequencer/components/sequence-list.tsx +200 -0
  321. package/blocks/sequencer/components/sequence-stats.tsx +256 -0
  322. package/blocks/sequencer/components/step-editor.tsx +213 -0
  323. package/blocks/sequencer/lib/sequencer-utils.ts +168 -0
  324. package/blocks/sequencer/recipes/create-multichannel-sequence.ts +51 -0
  325. package/blocks/sequencer/recipes/launch-and-enroll.ts +44 -0
  326. package/blocks/sequencer/recipes/pause-when-unsafe.ts +30 -0
  327. package/blocks/sequencer/recipes/sequence-report.ts +22 -0
  328. package/blocks/social-ads/README.md +128 -0
  329. package/blocks/social-ads/block.json +256 -0
  330. package/blocks/social-ads/components/ad-campaign-list.tsx +136 -0
  331. package/blocks/social-ads/components/audience-sync.tsx +150 -0
  332. package/blocks/social-ads/components/creative-gallery.tsx +121 -0
  333. package/blocks/social-ads/components/post-composer.tsx +122 -0
  334. package/blocks/social-ads/components/social-post-list.tsx +116 -0
  335. package/blocks/social-ads/hooks/use-social-accounts.ts +16 -0
  336. package/blocks/social-ads/lib/social-ads-types.ts +167 -0
  337. package/blocks/social-ads/recipes/creative-to-gallery.ts +41 -0
  338. package/blocks/social-ads/recipes/schedule-post.ts +51 -0
  339. package/blocks/social-ads/recipes/sync-audience-and-launch.ts +41 -0
  340. package/blocks/visitors/README.md +56 -0
  341. package/blocks/visitors/block.json +139 -0
  342. package/blocks/visitors/components/snippet-install.tsx +169 -0
  343. package/blocks/visitors/components/traffic-chart.tsx +156 -0
  344. package/blocks/visitors/components/visitor-company-card.tsx +92 -0
  345. package/blocks/visitors/components/visitor-feed.tsx +157 -0
  346. package/blocks/visitors/lib/visitors-utils.ts +78 -0
  347. package/blocks/visitors/recipes/check-snippet-installed.ts +24 -0
  348. package/blocks/visitors/recipes/recent-company-visits.ts +27 -0
  349. package/blocks/visitors/recipes/traffic-summary.ts +24 -0
  350. package/blocks/webchat/README.md +87 -0
  351. package/blocks/webchat/block.json +134 -0
  352. package/blocks/webchat/components/chat-widget-config.tsx +160 -0
  353. package/blocks/webchat/components/conversation-list.tsx +74 -0
  354. package/blocks/webchat/lib/webchat-types.ts +83 -0
  355. package/blocks/webchat/recipes/create-bot-and-style-widget.ts +24 -0
  356. package/blocks/webchat/recipes/list-chat-visitors.ts +24 -0
  357. package/blocks/workbench/README.md +135 -0
  358. package/blocks/workbench/block.json +259 -0
  359. package/blocks/workbench/components/column-recipe-editor.tsx +183 -0
  360. package/blocks/workbench/components/run-progress.tsx +132 -0
  361. package/blocks/workbench/components/workbench-add-rows.tsx +100 -0
  362. package/blocks/workbench/components/workbench-grid.tsx +159 -0
  363. package/blocks/workbench/components/workbench-row-actions.tsx +102 -0
  364. package/blocks/workbench/components/workbench-table-list.tsx +105 -0
  365. package/blocks/workbench/hooks/use-workbench-table.ts +30 -0
  366. package/blocks/workbench/lib/waterfall-presets.ts +119 -0
  367. package/blocks/workbench/lib/workbench-types.ts +191 -0
  368. package/blocks/workbench/recipes/build-enriched-table.ts +65 -0
  369. package/blocks/workbench/recipes/import-from-search.ts +42 -0
  370. package/blocks/workbench/recipes/scrape-into-table.ts +36 -0
  371. package/blocks/workbench/recipes/waterfall-column.ts +55 -0
  372. package/blocks/workflows/README.md +100 -0
  373. package/blocks/workflows/block.json +188 -0
  374. package/blocks/workflows/components/run-history.tsx +136 -0
  375. package/blocks/workflows/components/trigger-config.tsx +134 -0
  376. package/blocks/workflows/components/workflow-editor.tsx +142 -0
  377. package/blocks/workflows/components/workflow-list.tsx +153 -0
  378. package/blocks/workflows/hooks/use-workflow.ts +51 -0
  379. package/blocks/workflows/lib/graph.ts +187 -0
  380. package/blocks/workflows/recipes/create-workflow.ts +35 -0
  381. package/blocks/workflows/recipes/find-failed-runs.ts +15 -0
  382. package/blocks/workflows/recipes/run-workflow-and-wait.ts +32 -0
  383. package/blocks/workflows/recipes/set-trigger.ts +22 -0
  384. package/dist/cli.js +5330 -29
  385. package/dist/index.browser.js +7740 -0
  386. package/dist/index.browser.js.map +1 -0
  387. package/dist/index.browser.mjs +7717 -0
  388. package/dist/index.browser.mjs.map +1 -0
  389. package/dist/index.d.mts +1440 -21
  390. package/dist/index.d.ts +1440 -21
  391. package/dist/index.js +42 -3
  392. package/dist/index.js.map +1 -1
  393. package/dist/index.mjs +42 -3
  394. package/dist/index.mjs.map +1 -1
  395. package/dist/react.browser.js +7598 -0
  396. package/dist/react.browser.js.map +1 -0
  397. package/dist/react.browser.mjs +7568 -0
  398. package/dist/react.browser.mjs.map +1 -0
  399. package/dist/react.d.mts +1340 -18
  400. package/dist/react.d.ts +1340 -18
  401. package/dist/react.js +41 -2
  402. package/dist/react.js.map +1 -1
  403. package/dist/react.mjs +41 -2
  404. package/dist/react.mjs.map +1 -1
  405. package/dist/types/agentSetup.d.ts +6 -6
  406. package/dist/types/blocks/add.d.ts +53 -0
  407. package/dist/types/blocks/create.d.ts +46 -0
  408. package/dist/types/blocks/doctor.d.ts +26 -0
  409. package/dist/types/blocks/registry.d.ts +134 -0
  410. package/dist/types/cli.d.ts +16 -0
  411. package/dist/types/core.d.ts +1 -1
  412. package/dist/types/crypto-browser.d.ts +2 -0
  413. package/dist/types/crypto-node.d.ts +6 -0
  414. package/dist/types/react.d.ts +1 -1
  415. package/dist/types/version.d.ts +2 -2
  416. package/dist/types/webhooks.d.ts +2 -2
  417. package/dist/ui/index.d.mts +54 -0
  418. package/dist/ui/index.d.ts +54 -0
  419. package/dist/ui/index.js +105 -0
  420. package/dist/ui/index.js.map +1 -0
  421. package/dist/ui/index.mjs +44 -0
  422. package/dist/ui/index.mjs.map +1 -0
  423. package/dist/ui/lib/compose-refs.d.mts +19 -0
  424. package/dist/ui/lib/compose-refs.d.ts +19 -0
  425. package/dist/ui/lib/compose-refs.js +76 -0
  426. package/dist/ui/lib/compose-refs.js.map +1 -0
  427. package/dist/ui/lib/compose-refs.mjs +41 -0
  428. package/dist/ui/lib/compose-refs.mjs.map +1 -0
  429. package/dist/ui/lib/use-mobile.d.mts +4 -0
  430. package/dist/ui/lib/use-mobile.d.ts +4 -0
  431. package/dist/ui/lib/use-mobile.js +57 -0
  432. package/dist/ui/lib/use-mobile.js.map +1 -0
  433. package/dist/ui/lib/use-mobile.mjs +22 -0
  434. package/dist/ui/lib/use-mobile.mjs.map +1 -0
  435. package/dist/ui/lib/utils.d.mts +10 -0
  436. package/dist/ui/lib/utils.d.ts +10 -0
  437. package/dist/ui/lib/utils.js +33 -0
  438. package/dist/ui/lib/utils.js.map +1 -0
  439. package/dist/ui/lib/utils.mjs +9 -0
  440. package/dist/ui/lib/utils.mjs.map +1 -0
  441. package/dist/ui/primitives/alert-dialog.d.mts +22 -0
  442. package/dist/ui/primitives/alert-dialog.d.ts +22 -0
  443. package/dist/ui/primitives/alert-dialog.js +163 -0
  444. package/dist/ui/primitives/alert-dialog.js.map +1 -0
  445. package/dist/ui/primitives/alert-dialog.mjs +119 -0
  446. package/dist/ui/primitives/alert-dialog.mjs.map +1 -0
  447. package/dist/ui/primitives/avatar.d.mts +8 -0
  448. package/dist/ui/primitives/avatar.d.ts +8 -0
  449. package/dist/ui/primitives/avatar.js +91 -0
  450. package/dist/ui/primitives/avatar.js.map +1 -0
  451. package/dist/ui/primitives/avatar.mjs +55 -0
  452. package/dist/ui/primitives/avatar.mjs.map +1 -0
  453. package/dist/ui/primitives/breadcrumb.d.mts +13 -0
  454. package/dist/ui/primitives/breadcrumb.d.ts +13 -0
  455. package/dist/ui/primitives/breadcrumb.js +127 -0
  456. package/dist/ui/primitives/breadcrumb.js.map +1 -0
  457. package/dist/ui/primitives/breadcrumb.mjs +97 -0
  458. package/dist/ui/primitives/breadcrumb.mjs.map +1 -0
  459. package/dist/ui/primitives/button.d.mts +15 -0
  460. package/dist/ui/primitives/button.d.ts +15 -0
  461. package/dist/ui/primitives/button.js +91 -0
  462. package/dist/ui/primitives/button.js.map +1 -0
  463. package/dist/ui/primitives/button.mjs +56 -0
  464. package/dist/ui/primitives/button.mjs.map +1 -0
  465. package/dist/ui/primitives/card.d.mts +10 -0
  466. package/dist/ui/primitives/card.d.ts +10 -0
  467. package/dist/ui/primitives/card.js +101 -0
  468. package/dist/ui/primitives/card.js.map +1 -0
  469. package/dist/ui/primitives/card.mjs +62 -0
  470. package/dist/ui/primitives/card.mjs.map +1 -0
  471. package/dist/ui/primitives/carousel.d.mts +45 -0
  472. package/dist/ui/primitives/carousel.d.ts +45 -0
  473. package/dist/ui/primitives/carousel.js +300 -0
  474. package/dist/ui/primitives/carousel.js.map +1 -0
  475. package/dist/ui/primitives/carousel.mjs +261 -0
  476. package/dist/ui/primitives/carousel.mjs.map +1 -0
  477. package/dist/ui/primitives/chart.d.mts +68 -0
  478. package/dist/ui/primitives/chart.d.ts +68 -0
  479. package/dist/ui/primitives/chart.js +280 -0
  480. package/dist/ui/primitives/chart.js.map +1 -0
  481. package/dist/ui/primitives/chart.mjs +241 -0
  482. package/dist/ui/primitives/chart.mjs.map +1 -0
  483. package/dist/ui/primitives/collapsible.d.mts +8 -0
  484. package/dist/ui/primitives/collapsible.d.ts +8 -0
  485. package/dist/ui/primitives/collapsible.js +72 -0
  486. package/dist/ui/primitives/collapsible.js.map +1 -0
  487. package/dist/ui/primitives/collapsible.mjs +36 -0
  488. package/dist/ui/primitives/collapsible.mjs.map +1 -0
  489. package/dist/ui/primitives/context-menu.d.mts +29 -0
  490. package/dist/ui/primitives/context-menu.d.ts +29 -0
  491. package/dist/ui/primitives/context-menu.js +203 -0
  492. package/dist/ui/primitives/context-menu.js.map +1 -0
  493. package/dist/ui/primitives/context-menu.mjs +155 -0
  494. package/dist/ui/primitives/context-menu.mjs.map +1 -0
  495. package/dist/ui/primitives/dialog.d.mts +26 -0
  496. package/dist/ui/primitives/dialog.d.ts +26 -0
  497. package/dist/ui/primitives/dialog.js +192 -0
  498. package/dist/ui/primitives/dialog.js.map +1 -0
  499. package/dist/ui/primitives/dialog.mjs +148 -0
  500. package/dist/ui/primitives/dialog.mjs.map +1 -0
  501. package/dist/ui/primitives/drawer.d.mts +26 -0
  502. package/dist/ui/primitives/drawer.d.ts +26 -0
  503. package/dist/ui/primitives/drawer.js +146 -0
  504. package/dist/ui/primitives/drawer.js.map +1 -0
  505. package/dist/ui/primitives/drawer.mjs +103 -0
  506. package/dist/ui/primitives/drawer.mjs.map +1 -0
  507. package/dist/ui/primitives/input.d.mts +5 -0
  508. package/dist/ui/primitives/input.d.ts +5 -0
  509. package/dist/ui/primitives/input.js +46 -0
  510. package/dist/ui/primitives/input.js.map +1 -0
  511. package/dist/ui/primitives/input.mjs +22 -0
  512. package/dist/ui/primitives/input.mjs.map +1 -0
  513. package/dist/ui/primitives/item.d.mts +27 -0
  514. package/dist/ui/primitives/item.d.ts +27 -0
  515. package/dist/ui/primitives/item.js +221 -0
  516. package/dist/ui/primitives/item.js.map +1 -0
  517. package/dist/ui/primitives/item.mjs +188 -0
  518. package/dist/ui/primitives/item.mjs.map +1 -0
  519. package/dist/ui/primitives/kbd.d.mts +15 -0
  520. package/dist/ui/primitives/kbd.d.ts +15 -0
  521. package/dist/ui/primitives/kbd.js +45 -0
  522. package/dist/ui/primitives/kbd.js.map +1 -0
  523. package/dist/ui/primitives/kbd.mjs +21 -0
  524. package/dist/ui/primitives/kbd.mjs.map +1 -0
  525. package/dist/ui/primitives/label.d.mts +6 -0
  526. package/dist/ui/primitives/label.d.ts +6 -0
  527. package/dist/ui/primitives/label.js +55 -0
  528. package/dist/ui/primitives/label.js.map +1 -0
  529. package/dist/ui/primitives/label.mjs +21 -0
  530. package/dist/ui/primitives/label.mjs.map +1 -0
  531. package/dist/ui/primitives/resizable.d.mts +10 -0
  532. package/dist/ui/primitives/resizable.d.ts +10 -0
  533. package/dist/ui/primitives/resizable.js +68 -0
  534. package/dist/ui/primitives/resizable.js.map +1 -0
  535. package/dist/ui/primitives/resizable.mjs +42 -0
  536. package/dist/ui/primitives/resizable.mjs.map +1 -0
  537. package/dist/ui/primitives/save-status.d.mts +31 -0
  538. package/dist/ui/primitives/save-status.d.ts +31 -0
  539. package/dist/ui/primitives/save-status.js +150 -0
  540. package/dist/ui/primitives/save-status.js.map +1 -0
  541. package/dist/ui/primitives/save-status.mjs +126 -0
  542. package/dist/ui/primitives/save-status.mjs.map +1 -0
  543. package/dist/ui/primitives/separator.d.mts +6 -0
  544. package/dist/ui/primitives/separator.d.ts +6 -0
  545. package/dist/ui/primitives/separator.js +62 -0
  546. package/dist/ui/primitives/separator.js.map +1 -0
  547. package/dist/ui/primitives/separator.mjs +28 -0
  548. package/dist/ui/primitives/separator.mjs.map +1 -0
  549. package/dist/ui/primitives/sheet.d.mts +16 -0
  550. package/dist/ui/primitives/sheet.d.ts +16 -0
  551. package/dist/ui/primitives/sheet.js +170 -0
  552. package/dist/ui/primitives/sheet.js.map +1 -0
  553. package/dist/ui/primitives/sheet.mjs +129 -0
  554. package/dist/ui/primitives/sheet.mjs.map +1 -0
  555. package/dist/ui/primitives/sidebar.d.mts +74 -0
  556. package/dist/ui/primitives/sidebar.d.ts +74 -0
  557. package/dist/ui/primitives/sidebar.js +697 -0
  558. package/dist/ui/primitives/sidebar.js.map +1 -0
  559. package/dist/ui/primitives/sidebar.mjs +651 -0
  560. package/dist/ui/primitives/sidebar.mjs.map +1 -0
  561. package/dist/ui/primitives/skeleton.d.mts +5 -0
  562. package/dist/ui/primitives/skeleton.d.ts +5 -0
  563. package/dist/ui/primitives/skeleton.js +40 -0
  564. package/dist/ui/primitives/skeleton.js.map +1 -0
  565. package/dist/ui/primitives/skeleton.mjs +16 -0
  566. package/dist/ui/primitives/skeleton.mjs.map +1 -0
  567. package/dist/ui/primitives/slider.d.mts +20 -0
  568. package/dist/ui/primitives/slider.d.ts +20 -0
  569. package/dist/ui/primitives/slider.js +112 -0
  570. package/dist/ui/primitives/slider.js.map +1 -0
  571. package/dist/ui/primitives/slider.mjs +78 -0
  572. package/dist/ui/primitives/slider.mjs.map +1 -0
  573. package/dist/ui/primitives/sortable.d.mts +50 -0
  574. package/dist/ui/primitives/sortable.d.ts +50 -0
  575. package/dist/ui/primitives/sortable.js +456 -0
  576. package/dist/ui/primitives/sortable.js.map +1 -0
  577. package/dist/ui/primitives/sortable.mjs +435 -0
  578. package/dist/ui/primitives/sortable.mjs.map +1 -0
  579. package/dist/ui/primitives/switch.d.mts +6 -0
  580. package/dist/ui/primitives/switch.d.ts +6 -0
  581. package/dist/ui/primitives/switch.js +67 -0
  582. package/dist/ui/primitives/switch.js.map +1 -0
  583. package/dist/ui/primitives/switch.mjs +33 -0
  584. package/dist/ui/primitives/switch.mjs.map +1 -0
  585. package/dist/ui/primitives/table.d.mts +12 -0
  586. package/dist/ui/primitives/table.d.ts +12 -0
  587. package/dist/ui/primitives/table.js +130 -0
  588. package/dist/ui/primitives/table.js.map +1 -0
  589. package/dist/ui/primitives/table.mjs +89 -0
  590. package/dist/ui/primitives/table.mjs.map +1 -0
  591. package/dist/ui/primitives/tabs.d.mts +9 -0
  592. package/dist/ui/primitives/tabs.d.ts +9 -0
  593. package/dist/ui/primitives/tabs.js +86 -0
  594. package/dist/ui/primitives/tabs.js.map +1 -0
  595. package/dist/ui/primitives/tabs.mjs +49 -0
  596. package/dist/ui/primitives/tabs.mjs.map +1 -0
  597. package/dist/ui/primitives/textarea.d.mts +5 -0
  598. package/dist/ui/primitives/textarea.d.ts +5 -0
  599. package/dist/ui/primitives/textarea.js +43 -0
  600. package/dist/ui/primitives/textarea.js.map +1 -0
  601. package/dist/ui/primitives/textarea.mjs +19 -0
  602. package/dist/ui/primitives/textarea.mjs.map +1 -0
  603. package/dist/ui/primitives/tooltip.d.mts +9 -0
  604. package/dist/ui/primitives/tooltip.d.ts +9 -0
  605. package/dist/ui/primitives/tooltip.js +94 -0
  606. package/dist/ui/primitives/tooltip.js.map +1 -0
  607. package/dist/ui/primitives/tooltip.mjs +57 -0
  608. package/dist/ui/primitives/tooltip.mjs.map +1 -0
  609. package/docs/agents.md +72 -29
  610. package/docs/api/README.md +6 -3
  611. package/docs/api/appObjects.d.ts +1 -1
  612. package/docs/api/appObjects.md +1 -1
  613. package/docs/api/by-path.md +29 -0
  614. package/docs/api/objects.d.ts +72 -5
  615. package/docs/api/objects.md +84 -7
  616. package/docs/api/processLists.d.ts +247 -0
  617. package/docs/api/processLists.md +409 -0
  618. package/docs/api/reports.d.ts +476 -0
  619. package/docs/api/reports.md +539 -0
  620. package/docs/api/scheduleBuy.d.ts +12 -8
  621. package/docs/api/scheduleBuy.md +13 -10
  622. package/docs/api/seo.d.ts +406 -3
  623. package/docs/api/seo.md +505 -1
  624. package/docs/api/workspaceBackup.d.ts +324 -0
  625. package/docs/api/workspaceBackup.md +427 -0
  626. package/package.json +174 -5
  627. package/stacks/6sense.json +46 -0
  628. package/stacks/README.md +20 -0
  629. package/stacks/apollo.json +128 -0
  630. package/stacks/clay.json +59 -0
  631. package/stacks/gong.json +72 -0
  632. package/stacks/hubspot.json +162 -0
  633. package/stacks/intercom.json +53 -0
  634. package/stacks/mailchimp.json +71 -0
  635. package/stacks/outreach.json +86 -0
  636. package/stacks/salesforce.json +94 -0
  637. package/stacks/stack.schema.json +32 -0
  638. package/stacks/starter.json +22 -0
  639. package/styles/styles.css +2 -0
  640. package/styles/theme.css +181 -0
  641. package/styles/tokens.css +284 -0
  642. package/templates/next-app/README.md.tmpl +35 -0
  643. package/templates/next-app/_pages/redirect-page.tsx.tmpl +5 -0
  644. package/templates/next-app/_pages/route-page.tsx.tmpl +9 -0
  645. package/templates/next-app/app/globals.css.tmpl +8 -0
  646. package/templates/next-app/app/layout.tsx.tmpl +19 -0
  647. package/templates/next-app/components/app-shell.tsx.tmpl +34 -0
  648. package/templates/next-app/dot-env.local.example.tmpl +6 -0
  649. package/templates/next-app/dot-gitignore.tmpl +7 -0
  650. package/templates/next-app/lib/nav.ts.tmpl +2 -0
  651. package/templates/next-app/next.config.mjs.tmpl +4 -0
  652. package/templates/next-app/package.json.tmpl +25 -0
  653. package/templates/next-app/postcss.config.mjs.tmpl +4 -0
  654. package/templates/next-app/tsconfig.json.tmpl +21 -0
@@ -0,0 +1,539 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.reports`: Reports
4
+
5
+ 7 operations (2 read, 4 write, 1 destructive).
6
+
7
+ No hand-written client covers this area. Call it through `g8.api.reports.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
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: [reports.d.ts](reports.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`archiveObjectReportApi`](#op-archiveobjectreportapi) | `DELETE /api/v1/reports/{report_id}` | destructive | `objects:delete` | Archive Object Report Api |
26
+ | [`createObjectReportApi`](#op-createobjectreportapi) | `POST /api/v1/reports` | write | `objects:write` | Create Object Report Api |
27
+ | [`executeObjectReportApi`](#op-executeobjectreportapi) | `POST /api/v1/reports/{report_id}/execute` | write | `objects:read` | Execute Object Report Api |
28
+ | [`getObjectReportApi`](#op-getobjectreportapi) | `GET /api/v1/reports/{report_id}` | read | `objects:read` | Get Object Report Api |
29
+ | [`listObjectReportsApi`](#op-listobjectreportsapi) | `GET /api/v1/reports` | read | `objects:read` | List Object Reports Api |
30
+ | [`previewObjectReportApi`](#op-previewobjectreportapi) | `POST /api/v1/reports/preview` | write | `objects:read` | Preview Object Report Api |
31
+ | [`updateObjectReportApi`](#op-updateobjectreportapi) | `PATCH /api/v1/reports/{report_id}` | write | `objects:write` | Update Object Report Api |
32
+
33
+ ---
34
+
35
+ <a id="op-archiveobjectreportapi"></a>
36
+
37
+ ### `g8.api.reports.archiveObjectReportApi(input)`
38
+
39
+ **Archive Object Report Api**
40
+
41
+ - HTTP: `DELETE /api/v1/reports/{report_id}`
42
+ - operationId: `archive_object_report_api_reports__report_id__delete` (also callable as `g8.api.call("archive_object_report_api_reports__report_id__delete", input)`)
43
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
44
+ - API-key scope: `objects:delete`
45
+
46
+ Delete (archive) a report this credential owns. Does not touch the source's records.
47
+
48
+ **Input**
49
+
50
+ | Field | Type | Required | Description |
51
+ |---|---|---|---|
52
+ | `path.report_id` | `string (uuid)` | yes | |
53
+
54
+ **Returns** `ApiResponse_NoneType_`: the envelope `{ data: null, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
55
+
56
+ Other envelope fields: `pagination` (PaginationMeta).
57
+
58
+ **Example**
59
+
60
+ ```ts
61
+ // destructive: deletes or archives data; confirm with a human before calling.
62
+ const result = await g8.api.reports.archiveObjectReportApi({ path: { report_id: "00000000-0000-0000-0000-000000000000" } });
63
+ ```
64
+
65
+ ---
66
+
67
+ <a id="op-createobjectreportapi"></a>
68
+
69
+ ### `g8.api.reports.createObjectReportApi(input)`
70
+
71
+ **Create Object Report Api**
72
+
73
+ - HTTP: `POST /api/v1/reports`
74
+ - operationId: `create_object_report_api_reports_post` (also callable as `g8.api.call("create_object_report_api_reports_post", input)`)
75
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
76
+ - API-key scope: `objects:write`
77
+
78
+ Save a report owned by this credential. Private by default; a shared one (``visibility: "org"``) needs
79
+ ``objects:manage`` and current Admin access. Fields the credential cannot see are unknown to it.
80
+
81
+ **Input**
82
+
83
+ | Field | Type | Required | Description |
84
+ |---|---|---|---|
85
+ | `body` | `ReportCreate` | yes | Request body; fields below. |
86
+
87
+ Body fields (`ReportCreate`):
88
+
89
+ | Field | Type | Required | Description |
90
+ |---|---|---|---|
91
+ | `body.chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
92
+ | `body.config` | `ReportConfig` | yes | |
93
+ | `body.object_slug` | `string` | yes | min length 1, max length 100 |
94
+ | `body.title` | `string` | yes | min length 1, max length 200 |
95
+ | `body.description` | `string \| null` | no | max length 2000 |
96
+ | `body.visibility` | `"private" \| "org"` | no | default `"private"` |
97
+
98
+ **Returns** `ApiResponse_ReportDefinitionResponse_`: the envelope `{ data: ReportDefinitionResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
99
+
100
+ Other envelope fields: `pagination` (PaginationMeta).
101
+
102
+ `ReportDefinitionResponse` fields:
103
+
104
+ | Field | Type | Required | Description |
105
+ |---|---|---|---|
106
+ | `can_delete` | `boolean` | yes | |
107
+ | `can_edit` | `boolean` | yes | |
108
+ | `chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
109
+ | `config` | `Record<string, unknown>` | yes | |
110
+ | `created_at` | `string (date-time)` | yes | |
111
+ | `id` | `string (uuid)` | yes | |
112
+ | `is_owner` | `boolean` | yes | |
113
+ | `owner` | `ReportOwner` | yes | |
114
+ | `revision` | `integer` | yes | |
115
+ | `source` | `ReportSource` | yes | |
116
+ | `title` | `string` | yes | |
117
+ | `updated_at` | `string (date-time)` | yes | |
118
+ | `visibility` | `"private" \| "org"` | yes | |
119
+ | `description` | `string \| null` | no | |
120
+ | `restricted` | `Array<RestrictedComponent>` | no | |
121
+ | `restricted_count` | `integer` | no | default `0` |
122
+
123
+ **Example**
124
+
125
+ ```ts
126
+ const result = await g8.api.reports.createObjectReportApi({
127
+ body: {
128
+ chart_type: "table",
129
+ config: {},
130
+ object_slug: "example",
131
+ title: "Example",
132
+ },
133
+ });
134
+ ```
135
+
136
+ ---
137
+
138
+ <a id="op-executeobjectreportapi"></a>
139
+
140
+ ### `g8.api.reports.executeObjectReportApi(input)`
141
+
142
+ **Execute Object Report Api**
143
+
144
+ - HTTP: `POST /api/v1/reports/{report_id}/execute`
145
+ - operationId: `execute_object_report_api_reports__report_id__execute_post` (also callable as `g8.api.call("execute_object_report_api_reports__report_id__execute_post", input)`)
146
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
147
+ - API-key scope: `objects:read`
148
+
149
+ Run a saved report as this credential, now or as of a past date; with ``drilldown`` open the records behind a
150
+ number. A source that was archived is a 409; a config the schema no longer fits is a 422; over 10 s is a 504.
151
+
152
+ **Input**
153
+
154
+ | Field | Type | Required | Description |
155
+ |---|---|---|---|
156
+ | `path.report_id` | `string (uuid)` | yes | |
157
+ | `body` | `ReportRun` | yes | Request body; fields below. |
158
+
159
+ Body fields (`ReportRun`):
160
+
161
+ | Field | Type | Required | Description |
162
+ |---|---|---|---|
163
+ | `body.as_of` | `string (date) \| null` | no | |
164
+ | `body.drilldown` | `DrilldownRequest \| null` | no | |
165
+
166
+ **Returns** `ReportRunApiResponse`: the envelope `{ data: ReportResult | DrilldownResult, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
167
+
168
+ Other envelope fields: `pagination` (PaginationMeta).
169
+
170
+ **Example**
171
+
172
+ ```ts
173
+ const result = await g8.api.reports.executeObjectReportApi({
174
+ path: { report_id: "00000000-0000-0000-0000-000000000000" },
175
+ body: {},
176
+ });
177
+ ```
178
+
179
+ ---
180
+
181
+ <a id="op-getobjectreportapi"></a>
182
+
183
+ ### `g8.api.reports.getObjectReportApi(input)`
184
+
185
+ **Get Object Report Api**
186
+
187
+ - HTTP: `GET /api/v1/reports/{report_id}`
188
+ - operationId: `get_object_report_api_reports__report_id__get` (also callable as `g8.api.call("get_object_report_api_reports__report_id__get", input)`)
189
+ - Tier: `read`: reads data; safe to call and to retry
190
+ - API-key scope: `objects:read`
191
+
192
+ One report. A part of it this credential cannot see comes back as ``{"id": ..., "restricted": true}``.
193
+
194
+ **Input**
195
+
196
+ | Field | Type | Required | Description |
197
+ |---|---|---|---|
198
+ | `path.report_id` | `string (uuid)` | yes | |
199
+
200
+ **Returns** `ApiResponse_ReportDefinitionResponse_`: the envelope `{ data: ReportDefinitionResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
201
+
202
+ Other envelope fields: `pagination` (PaginationMeta).
203
+
204
+ `ReportDefinitionResponse` fields:
205
+
206
+ | Field | Type | Required | Description |
207
+ |---|---|---|---|
208
+ | `can_delete` | `boolean` | yes | |
209
+ | `can_edit` | `boolean` | yes | |
210
+ | `chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
211
+ | `config` | `Record<string, unknown>` | yes | |
212
+ | `created_at` | `string (date-time)` | yes | |
213
+ | `id` | `string (uuid)` | yes | |
214
+ | `is_owner` | `boolean` | yes | |
215
+ | `owner` | `ReportOwner` | yes | |
216
+ | `revision` | `integer` | yes | |
217
+ | `source` | `ReportSource` | yes | |
218
+ | `title` | `string` | yes | |
219
+ | `updated_at` | `string (date-time)` | yes | |
220
+ | `visibility` | `"private" \| "org"` | yes | |
221
+ | `description` | `string \| null` | no | |
222
+ | `restricted` | `Array<RestrictedComponent>` | no | |
223
+ | `restricted_count` | `integer` | no | default `0` |
224
+
225
+ **Example**
226
+
227
+ ```ts
228
+ const result = await g8.api.reports.getObjectReportApi({ path: { report_id: "00000000-0000-0000-0000-000000000000" } });
229
+ ```
230
+
231
+ ---
232
+
233
+ <a id="op-listobjectreportsapi"></a>
234
+
235
+ ### `g8.api.reports.listObjectReportsApi(input?)`
236
+
237
+ **List Object Reports Api**
238
+
239
+ - HTTP: `GET /api/v1/reports`
240
+ - operationId: `list_object_reports_api_reports_get` (also callable as `g8.api.call("list_object_reports_api_reports_get", input)`)
241
+ - Tier: `read`: reads data; safe to call and to retry
242
+ - API-key scope: `objects:read`
243
+
244
+ List the reports this credential may open: its own, and shared ones whose source it can read. ``owner=me``
245
+ narrows to this credential's. ``can_share`` says whether it may save a shared report.
246
+
247
+ **Input**
248
+
249
+ | Field | Type | Required | Description |
250
+ |---|---|---|---|
251
+ | `query.object_slug` | `string \| null` | no | |
252
+ | `query.owner` | `string \| null` | no | |
253
+ | `query.visibility` | `string \| null` | no | |
254
+ | `query.limit` | `integer` | no | default `50` |
255
+ | `query.offset` | `integer` | no | default `0` |
256
+
257
+ **Returns** `ApiResponse_ReportListResponse_`: the envelope `{ data: ReportListResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
258
+
259
+ Other envelope fields: `pagination` (PaginationMeta).
260
+
261
+ `ReportListResponse` fields:
262
+
263
+ | Field | Type | Required | Description |
264
+ |---|---|---|---|
265
+ | `can_share` | `boolean` | yes | |
266
+ | `reports` | `Array<ReportDefinitionResponse>` | yes | |
267
+ | `total` | `integer` | yes | |
268
+
269
+ **Example**
270
+
271
+ ```ts
272
+ const result = await g8.api.reports.listObjectReportsApi();
273
+ ```
274
+
275
+ ---
276
+
277
+ <a id="op-previewobjectreportapi"></a>
278
+
279
+ ### `g8.api.reports.previewObjectReportApi(input)`
280
+
281
+ **Preview Object Report Api**
282
+
283
+ - HTTP: `POST /api/v1/reports/preview`
284
+ - operationId: `preview_object_report_api_reports_preview_post` (also callable as `g8.api.call("preview_object_report_api_reports_preview_post", input)`)
285
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
286
+ - API-key scope: `objects:read`
287
+
288
+ Run an unsaved report with this credential's own access and a 10 second budget (nothing partial is returned).
289
+
290
+ **Input**
291
+
292
+ | Field | Type | Required | Description |
293
+ |---|---|---|---|
294
+ | `body` | `ReportPreview` | yes | Request body; fields below. |
295
+
296
+ Body fields (`ReportPreview`):
297
+
298
+ | Field | Type | Required | Description |
299
+ |---|---|---|---|
300
+ | `body.chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
301
+ | `body.config` | `ReportConfig` | yes | |
302
+ | `body.object_slug` | `string` | yes | min length 1, max length 100 |
303
+ | `body.as_of` | `string (date) \| null` | no | |
304
+
305
+ **Returns** `ApiResponse_ReportResult_`: the envelope `{ data: ReportResult, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
306
+
307
+ Other envelope fields: `pagination` (PaginationMeta).
308
+
309
+ `ReportResult` fields:
310
+
311
+ | Field | Type | Required | Description |
312
+ |---|---|---|---|
313
+ | `chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
314
+ | `source` | `ReportSource` | yes | |
315
+ | `timezone` | `string` | yes | |
316
+ | `as_of` | `AsOf \| null` | no | |
317
+ | `chart_limit` | `integer` | no | default `20` |
318
+ | `chart_other` | `ChartOther \| null` | no | |
319
+ | `chart_truncated` | `boolean` | no | default `false` |
320
+ | `columns` | `Array<ResultColumn>` | no | |
321
+ | `disclosures` | `Array<string>` | no | |
322
+ | `gaps` | `Array<GapNote>` | no | |
323
+ | `history_supported` | `boolean` | no | default `true` |
324
+ | `kind` | `"result"` | no | default `"result"` |
325
+ | `restricted` | `Array<RestrictedComponent>` | no | |
326
+ | `row_limit` | `integer` | no | default `500` |
327
+ | `rows` | `Array<ResultRow>` | no | |
328
+ | `status` | `"ok" \| "restricted"` | no | default `"ok"` |
329
+ | `total_base_records` | `integer` | no | default `0` |
330
+ | `total_groups` | `integer` | no | default `0` |
331
+ | `totals` | `ResultTotals \| null` | no | |
332
+ | `truncated` | `boolean` | no | default `false` |
333
+
334
+ **Example**
335
+
336
+ ```ts
337
+ const result = await g8.api.reports.previewObjectReportApi({ body: { chart_type: "table", config: {}, object_slug: "example" } });
338
+ ```
339
+
340
+ ---
341
+
342
+ <a id="op-updateobjectreportapi"></a>
343
+
344
+ ### `g8.api.reports.updateObjectReportApi(input)`
345
+
346
+ **Update Object Report Api**
347
+
348
+ - HTTP: `PATCH /api/v1/reports/{report_id}`
349
+ - operationId: `update_object_report_api_reports__report_id__patch` (also callable as `g8.api.call("update_object_report_api_reports__report_id__patch", input)`)
350
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
351
+ - API-key scope: `objects:write`
352
+
353
+ Edit a report this credential owns. ``expected_revision`` guards a concurrent edit (409).
354
+
355
+ **Input**
356
+
357
+ | Field | Type | Required | Description |
358
+ |---|---|---|---|
359
+ | `path.report_id` | `string (uuid)` | yes | |
360
+ | `body` | `ReportUpdate` | yes | Request body; fields below. |
361
+
362
+ Body fields (`ReportUpdate`):
363
+
364
+ | Field | Type | Required | Description |
365
+ |---|---|---|---|
366
+ | `body.chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage" \| null` | no | |
367
+ | `body.config` | `ReportConfig \| null` | no | |
368
+ | `body.description` | `string \| null` | no | max length 2000 |
369
+ | `body.expected_revision` | `integer \| null` | no | min 1 |
370
+ | `body.title` | `string \| null` | no | min length 1, max length 200 |
371
+ | `body.visibility` | `"private" \| "org" \| null` | no | |
372
+
373
+ **Returns** `ApiResponse_ReportDefinitionResponse_`: the envelope `{ data: ReportDefinitionResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
374
+
375
+ Other envelope fields: `pagination` (PaginationMeta).
376
+
377
+ `ReportDefinitionResponse` fields:
378
+
379
+ | Field | Type | Required | Description |
380
+ |---|---|---|---|
381
+ | `can_delete` | `boolean` | yes | |
382
+ | `can_edit` | `boolean` | yes | |
383
+ | `chart_type` | `"table" \| "bar" \| "line" \| "funnel" \| "stage_over_time" \| "time_in_stage"` | yes | |
384
+ | `config` | `Record<string, unknown>` | yes | |
385
+ | `created_at` | `string (date-time)` | yes | |
386
+ | `id` | `string (uuid)` | yes | |
387
+ | `is_owner` | `boolean` | yes | |
388
+ | `owner` | `ReportOwner` | yes | |
389
+ | `revision` | `integer` | yes | |
390
+ | `source` | `ReportSource` | yes | |
391
+ | `title` | `string` | yes | |
392
+ | `updated_at` | `string (date-time)` | yes | |
393
+ | `visibility` | `"private" \| "org"` | yes | |
394
+ | `description` | `string \| null` | no | |
395
+ | `restricted` | `Array<RestrictedComponent>` | no | |
396
+ | `restricted_count` | `integer` | no | default `0` |
397
+
398
+ **Example**
399
+
400
+ ```ts
401
+ const result = await g8.api.reports.updateObjectReportApi({
402
+ path: { report_id: "00000000-0000-0000-0000-000000000000" },
403
+ body: {},
404
+ });
405
+ ```
406
+
407
+ ---
408
+
409
+ ## Referenced types
410
+
411
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
412
+
413
+ <a id="type-asof"></a>
414
+
415
+ ### `AsOf`
416
+
417
+ | Field | Type | Required | Description |
418
+ |---|---|---|---|
419
+ | `date` | `string (date)` | yes | |
420
+ | `instant` | `string (date-time)` | yes | |
421
+ | `timezone` | `string` | yes | |
422
+
423
+ <a id="type-chartother"></a>
424
+
425
+ ### `ChartOther`
426
+
427
+ What the chart folds into "Other": every group beyond ``chart_limit``. Only additive measures (count, sum, related_count) are filled in; an average, minimum or maximum cannot be folded and is None.
428
+
429
+ | Field | Type | Required | Description |
430
+ |---|---|---|---|
431
+ | `group_count` | `integer` | yes | |
432
+ | `measures` | `Record<string, number \| integer \| null>` | yes | |
433
+ | `record_count` | `integer` | yes | |
434
+
435
+ <a id="type-drilldownrequest"></a>
436
+
437
+ ### `DrilldownRequest`
438
+
439
+ Open the records behind one number: ``target`` is a result row's ``drilldown``, echoed back unchanged.
440
+
441
+ | Field | Type | Required | Description |
442
+ |---|---|---|---|
443
+ | `target` | `GroupTarget \| StageTarget \| SnapshotTarget \| AllTarget` | yes | |
444
+ | `after_record_id` | `string (uuid) \| null` | no | |
445
+ | `limit` | `integer` | no | default `50`, min 1, max 200 |
446
+
447
+ <a id="type-gapnote"></a>
448
+
449
+ ### `GapNote`
450
+
451
+ | Field | Type | Required | Description |
452
+ |---|---|---|---|
453
+ | `component` | `string` | yes | |
454
+ | `records` | `integer` | yes | |
455
+ | `kind` | `"no_history"` | no | default `"no_history"` |
456
+
457
+ <a id="type-reportconfig"></a>
458
+
459
+ ### `ReportConfig`
460
+
461
+ What a report computes. ``timezone`` (an IANA name) fixes how dates are bucketed and what "end of day" means; when absent the organization's time zone applies (never the server's).
462
+
463
+ | Field | Type | Required | Description |
464
+ |---|---|---|---|
465
+ | `filters` | `Array<ReportFilter>` | no | max items 10 |
466
+ | `group_by` | `Array<ReportGroupBy>` | no | max items 3 |
467
+ | `measures` | `Array<ReportMeasure>` | no | max items 10 |
468
+ | `range` | `ReportRange \| null` | no | |
469
+ | `stage` | `ReportStage \| null` | no | |
470
+ | `timezone` | `string \| null` | no | max length 64 |
471
+
472
+ <a id="type-reportowner"></a>
473
+
474
+ ### `ReportOwner`
475
+
476
+ | Field | Type | Required | Description |
477
+ |---|---|---|---|
478
+ | `id` | `string \| null` | no | |
479
+ | `is_you` | `boolean` | no | default `false` |
480
+ | `name` | `string \| null` | no | |
481
+
482
+ <a id="type-reportsource"></a>
483
+
484
+ ### `ReportSource`
485
+
486
+ | Field | Type | Required | Description |
487
+ |---|---|---|---|
488
+ | `kind` | `"object" \| "process_list"` | yes | |
489
+ | `plural_noun` | `string` | yes | |
490
+ | `singular_noun` | `string` | yes | |
491
+ | `slug` | `string` | yes | |
492
+ | `is_archived` | `boolean` | no | default `false` |
493
+
494
+ <a id="type-restrictedcomponent"></a>
495
+
496
+ ### `RestrictedComponent`
497
+
498
+ A part of a report the viewer may not see. Hidden means ABSENT: it carries no title, no object name, no type and no reason, only its position id (``m0`` the first measure, ``g0`` the first group-by, ``f0`` the first filter, ``stage`` the stage field), so a client can lock that slot in place.
499
+
500
+ | Field | Type | Required | Description |
501
+ |---|---|---|---|
502
+ | `id` | `string` | yes | |
503
+ | `restricted` | `true` | no | default `true` |
504
+
505
+ <a id="type-resultcolumn"></a>
506
+
507
+ ### `ResultColumn`
508
+
509
+ | Field | Type | Required | Description |
510
+ |---|---|---|---|
511
+ | `id` | `string` | yes | |
512
+ | `kind` | `"group_by" \| "measure" \| "stage" \| "gap"` | yes | |
513
+ | `grain` | `"day" \| "week" \| "month" \| "quarter" \| "year" \| null` | no | |
514
+ | `label` | `string \| null` | no | |
515
+ | `restricted` | `boolean` | no | default `false` |
516
+ | `value_type` | `string \| null` | no | |
517
+
518
+ <a id="type-resultrow"></a>
519
+
520
+ ### `ResultRow`
521
+
522
+ | Field | Type | Required | Description |
523
+ |---|---|---|---|
524
+ | `drilldown` | `GroupTarget \| StageTarget \| SnapshotTarget \| AllTarget` | yes | |
525
+ | `key` | `string` | yes | |
526
+ | `group` | `Array<GroupValue>` | no | |
527
+ | `measures` | `Record<string, number \| integer \| null>` | no | |
528
+ | `partial` | `boolean` | no | default `false` |
529
+ | `record_count` | `integer` | no | default `0` |
530
+ | `unstaged` | `Record<string, integer>` | no | |
531
+
532
+ <a id="type-resulttotals"></a>
533
+
534
+ ### `ResultTotals`
535
+
536
+ | Field | Type | Required | Description |
537
+ |---|---|---|---|
538
+ | `record_count` | `integer` | yes | |
539
+ | `measures` | `Record<string, number \| integer \| null>` | no | |
@@ -245,10 +245,10 @@ export interface ScheduleBuyDomainSuggestRequest {
245
245
  /**
246
246
  * Create and LOCK a staggered buying plan. PLACES REAL CREDIT HOLDS.
247
247
  *
248
- * Mirrors the app's ``CreatePlanRequest`` field for field, including its
249
- * mutual-exclusion rule between ``persona_ids`` and the manual
250
- * ``registrants``/``mailbox_aliases`` pair - the app raises that in a
251
- * validator, and it must fire as a 422 here rather than inside the proxy.
248
+ * Mirrors the app's ``CreatePlanRequest`` field for field, including the
249
+ * rule that new plans require ``persona_ids``. Manual ``registrants`` /
250
+ * ``mailbox_aliases`` are still parsed so a legacy payload 422s here
251
+ * rather than inside the proxy.
252
252
  */
253
253
  export interface ScheduleBuyPlanRequest {
254
254
  /** Sends per mailbox per day */
@@ -261,15 +261,15 @@ export interface ScheduleBuyPlanRequest {
261
261
  domains_per_batch?: number;
262
262
  /** Idle mailboxes you already hold, from /suggest */
263
263
  idle_mailboxes_snapshot: number;
264
- /** One alias per mailbox_per_domain. Required unless persona_ids is set. */
264
+ /** Not accepted for new plans. Use persona_ids. */
265
265
  mailbox_aliases?: Array<Record<string, unknown>>;
266
266
  /** Mailboxes bought on each domain */
267
267
  mailboxes_per_domain?: number;
268
- /** Sender personas to buy for. Excludes the two above. */
268
+ /** Sender identity IDs. At least one is required to start a schedule. */
269
269
  persona_ids?: Array<number> | null;
270
- /** Registrant identities. Required unless persona_ids is set. */
270
+ /** Not accepted for new plans. Use persona_ids. */
271
271
  registrants?: Array<Record<string, unknown>>;
272
- /** Adopt these owned EMPTY domains instead of buying */
272
+ /** Adopt these owned domains instead of buying. Each must have fewer live mailboxes than mailboxes_per_domain; the plan tops it up and holds credits for exactly the missing ones */
273
273
  reuse_domains?: Array<string> | null;
274
274
  /** Sending days assumed per month */
275
275
  sending_days_per_month?: number;
@@ -292,6 +292,10 @@ export interface ScheduleBuySuggestRequest {
292
292
  domains_per_batch?: number;
293
293
  /** Mailboxes bought on each domain */
294
294
  mailboxes_per_domain?: number;
295
+ /** Price a REUSE plan over this many owned domains instead */
296
+ reuse_domain_count?: number | null;
297
+ /** With reuse_domain_count: the total mailboxes those domains are missing (each domain: mailboxes_per_domain minus its live mailboxes). Omitted, every domain is priced as empty */
298
+ reuse_missing_mailboxes?: number | null;
295
299
  /** Sending days assumed per month */
296
300
  sending_days_per_month?: number;
297
301
  /** Contacts you intend to reach per month */
@@ -143,13 +143,14 @@ moment this returns. `total_credits_held` in the response is the figure.
143
143
  Org admins and owners only, and only for an org on a paid or pre-funded
144
144
  plan. 402 if the balance cannot cover the plan, 429 if the org has locked
145
145
  more than five plans this hour, 400 for an unsupported extension or an
146
- empty plan.
146
+ empty plan. With `reuse_domains`, 409 when a domain's mailbox count changed
147
+ (or it filled up) while the plan was locking: nothing stays held, re-read
148
+ the domains and lock again.
147
149
 
148
- `persona_ids` and the manual `registrants`/`mailbox_aliases` pair are
149
- mutually exclusive: name the personas OR spell the identities out, never
150
- both. `idle_mailboxes_snapshot` is your own count, used to detect drift -
151
- the server recomputes it and returns its own as
152
- `server_idle_mailboxes`.
150
+ At least one `persona_ids` entry is required. Manual `registrants` /
151
+ `mailbox_aliases` are not accepted for new plans. `idle_mailboxes_snapshot`
152
+ is your own count, used to detect drift - the server recomputes it and
153
+ returns its own as `server_idle_mailboxes`.
153
154
 
154
155
  Send an `Idempotency-Key` header. A retried lock without one places a
155
156
  second full set of holds.
@@ -170,11 +171,11 @@ Body fields (`ScheduleBuyPlanRequest`):
170
171
  | `body.domain_names` | `Array<string> \| null` | no | Approved names to buy, in order min items 1, max items 500 |
171
172
  | `body.domain_tld` | `string` | no | Extension to buy, e.g. '.com' default `".com"` |
172
173
  | `body.domains_per_batch` | `integer` | no | Domains bought per daily batch default `10`, min 1, max 100 |
173
- | `body.mailbox_aliases` | `Array<Record<string, unknown>>` | no | One alias per mailbox_per_domain. Required unless persona_ids is set. |
174
+ | `body.mailbox_aliases` | `Array<Record<string, unknown>>` | no | Not accepted for new plans. Use persona_ids. |
174
175
  | `body.mailboxes_per_domain` | `integer` | no | Mailboxes bought on each domain default `3`, min 1, max 5 |
175
- | `body.persona_ids` | `Array<integer> \| null` | no | Sender personas to buy for. Excludes the two above. min items 1, max items 20 |
176
- | `body.registrants` | `Array<Record<string, unknown>>` | no | Registrant identities. Required unless persona_ids is set. max items 20 |
177
- | `body.reuse_domains` | `Array<string> \| null` | no | Adopt these owned EMPTY domains instead of buying min items 1, max items 500 |
176
+ | `body.persona_ids` | `Array<integer> \| null` | no | Sender identity IDs. At least one is required to start a schedule. max items 20 |
177
+ | `body.registrants` | `Array<Record<string, unknown>>` | no | Not accepted for new plans. Use persona_ids. max items 20 |
178
+ | `body.reuse_domains` | `Array<string> \| null` | no | Adopt these owned domains instead of buying. Each must have fewer live mailboxes than mailboxes_per_domain; the plan tops it up and holds credits for exactly the missing ones min items 1, max items 500 |
178
179
  | `body.sending_days_per_month` | `integer` | no | Sending days assumed per month default `22`, min 1, max 31 |
179
180
  | `body.warmup_provider` | `"warmy" \| "instantly" \| "smartlead"` | no | Warmup engine the bought mailboxes are enrolled with default `"warmy"` |
180
181
  | `body.workspace_uid` | `string \| null` | no | Existing provisioning workspace to reuse |
@@ -367,6 +368,8 @@ Body fields (`ScheduleBuySuggestRequest`):
367
368
  | `body.daily_send_cap` | `integer` | no | Sends per mailbox per day default `15`, min 1, max 100 |
368
369
  | `body.domains_per_batch` | `integer` | no | Domains bought per daily batch default `10`, min 1, max 100 |
369
370
  | `body.mailboxes_per_domain` | `integer` | no | Mailboxes bought on each domain default `3`, min 1, max 5 |
371
+ | `body.reuse_domain_count` | `integer \| null` | no | Price a REUSE plan over this many owned domains instead min 1, max 500 |
372
+ | `body.reuse_missing_mailboxes` | `integer \| null` | no | With reuse_domain_count: the total mailboxes those domains are missing (each domain: mailboxes_per_domain minus its live mailboxes). Omitted, every domain is priced as empty min 1, max 2500 |
370
373
  | `body.sending_days_per_month` | `integer` | no | Sending days assumed per month default `22`, min 1, max 31 |
371
374
 
372
375
  **Returns** `ApiResponse_MailboxDomainPayload_`: the envelope `{ data: MailboxDomainPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.