@graph8/sdk 0.303.0 → 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 (664) 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 +2220 -23
  390. package/dist/index.d.ts +2220 -23
  391. package/dist/index.js +64 -3
  392. package/dist/index.js.map +1 -1
  393. package/dist/index.mjs +64 -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 +2082 -20
  400. package/dist/react.d.ts +2082 -20
  401. package/dist/react.js +63 -2
  402. package/dist/react.js.map +1 -1
  403. package/dist/react.mjs +63 -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 +7 -3
  611. package/docs/api/appObjects.d.ts +3 -1
  612. package/docs/api/appObjects.md +2 -1
  613. package/docs/api/by-path.md +51 -0
  614. package/docs/api/dataPipelines.d.ts +149 -0
  615. package/docs/api/dataPipelines.md +232 -0
  616. package/docs/api/forms.d.ts +16 -0
  617. package/docs/api/forms.md +8 -0
  618. package/docs/api/objects.d.ts +705 -5
  619. package/docs/api/objects.md +1099 -14
  620. package/docs/api/ops.d.ts +1 -1
  621. package/docs/api/ops.md +1 -1
  622. package/docs/api/processLists.d.ts +247 -0
  623. package/docs/api/processLists.md +409 -0
  624. package/docs/api/quotes.d.ts +3 -1
  625. package/docs/api/quotes.md +7 -2
  626. package/docs/api/radar.d.ts +4 -0
  627. package/docs/api/radar.md +1 -0
  628. package/docs/api/reports.d.ts +476 -0
  629. package/docs/api/reports.md +539 -0
  630. package/docs/api/scheduleBuy.d.ts +12 -8
  631. package/docs/api/scheduleBuy.md +13 -10
  632. package/docs/api/seo.d.ts +406 -3
  633. package/docs/api/seo.md +505 -1
  634. package/docs/api/workspaceBackup.d.ts +324 -0
  635. package/docs/api/workspaceBackup.md +427 -0
  636. package/package.json +174 -5
  637. package/stacks/6sense.json +46 -0
  638. package/stacks/README.md +20 -0
  639. package/stacks/apollo.json +128 -0
  640. package/stacks/clay.json +59 -0
  641. package/stacks/gong.json +72 -0
  642. package/stacks/hubspot.json +162 -0
  643. package/stacks/intercom.json +53 -0
  644. package/stacks/mailchimp.json +71 -0
  645. package/stacks/outreach.json +86 -0
  646. package/stacks/salesforce.json +94 -0
  647. package/stacks/stack.schema.json +32 -0
  648. package/stacks/starter.json +22 -0
  649. package/styles/styles.css +2 -0
  650. package/styles/theme.css +181 -0
  651. package/styles/tokens.css +284 -0
  652. package/templates/next-app/README.md.tmpl +35 -0
  653. package/templates/next-app/_pages/redirect-page.tsx.tmpl +5 -0
  654. package/templates/next-app/_pages/route-page.tsx.tmpl +9 -0
  655. package/templates/next-app/app/globals.css.tmpl +8 -0
  656. package/templates/next-app/app/layout.tsx.tmpl +19 -0
  657. package/templates/next-app/components/app-shell.tsx.tmpl +34 -0
  658. package/templates/next-app/dot-env.local.example.tmpl +6 -0
  659. package/templates/next-app/dot-gitignore.tmpl +7 -0
  660. package/templates/next-app/lib/nav.ts.tmpl +2 -0
  661. package/templates/next-app/next.config.mjs.tmpl +4 -0
  662. package/templates/next-app/package.json.tmpl +25 -0
  663. package/templates/next-app/postcss.config.mjs.tmpl +4 -0
  664. package/templates/next-app/tsconfig.json.tmpl +21 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  # `g8.api.objects`: Objects
4
4
 
5
- 24 operations (9 read, 11 write, 4 destructive).
5
+ 42 operations (14 read, 22 write, 6 destructive).
6
6
 
7
7
  18 of these also have a hand-written method (`g8.objects`), 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
8
 
@@ -26,26 +26,44 @@ Exact TypeScript types for every operation on this page, and every schema they u
26
26
  | [`archiveObject`](#op-archiveobject) ★ | `DELETE /api/v1/objects/{object_slug}` | destructive | `objects:manage` | Archive Object |
27
27
  | [`archiveObjectRecord`](#op-archiveobjectrecord) ★ | `DELETE /api/v1/objects/{object_slug}/records/{record_id}` | destructive | `objects:delete` | Archive Object Record |
28
28
  | [`bulkUpdateObjectRecords`](#op-bulkupdateobjectrecords) | `PATCH /api/v1/objects/{object_slug}/records/bulk` | write | `objects:write` | Bulk Update Object Records |
29
+ | [`commitObjectCsvImport`](#op-commitobjectcsvimport) | `POST /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/commit` | write | `objects:write` | Commit Object Csv Import |
29
30
  | [`createAttribute`](#op-createattribute) ★ | `POST /api/v1/objects/{object_slug}/attributes` | write | `objects:manage` | Create Attribute |
30
31
  | [`createObject`](#op-createobject) ★ | `POST /api/v1/objects` | write | `objects:manage` | Create Object |
32
+ | [`createObjectCsvImport`](#op-createobjectcsvimport) | `POST /api/v1/objects/{object_slug}/imports/csv/drafts` | write | `objects:write` | Create Object Csv Import |
31
33
  | [`createObjectRecord`](#op-createobjectrecord) ★ | `POST /api/v1/objects/{object_slug}/records` | write | `objects:write` | Create Object Record |
32
34
  | [`createObjectRelationship`](#op-createobjectrelationship) | `POST /api/v1/objects/{object_slug}/records/{record_id}/relationships` | write | `objects:write` | Create Object Relationship |
35
+ | [`createObjectView`](#op-createobjectview) | `POST /api/v1/objects/{object_slug}/views` | write | `objects:write` | Create Object View |
36
+ | [`deleteObjectCsvImport`](#op-deleteobjectcsvimport) | `DELETE /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}` | destructive | `objects:write` | Delete Object Csv Import |
33
37
  | [`deleteObjectRelationship`](#op-deleteobjectrelationship) | `DELETE /api/v1/objects/{object_slug}/records/{record_id}/relationships/{relationship_id}` | destructive | `objects:write` | Delete Object Relationship |
38
+ | [`deleteObjectView`](#op-deleteobjectview) | `DELETE /api/v1/objects/{object_slug}/views/{view_id}` | destructive | `objects:delete` | Delete Object View |
39
+ | [`downloadObjectCsvImportErrors`](#op-downloadobjectcsvimporterrors) | `GET /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/errors` | read | `objects:write` | Download Object Csv Import Errors |
40
+ | [`exportObjectRecords`](#op-exportobjectrecords) | `POST /api/v1/objects/{object_slug}/exports` | write | `objects:export` | Export Object Records |
34
41
  | [`getObject`](#op-getobject) ★ | `GET /api/v1/objects/{object_slug}` | read | `objects:read` | Get Object |
42
+ | [`getObjectCsvImport`](#op-getobjectcsvimport) | `GET /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}` | read | `objects:write` | Get Object Csv Import |
35
43
  | [`getObjectRecord`](#op-getobjectrecord) ★ | `GET /api/v1/objects/{object_slug}/records/{record_id}` | read | `objects:read` | Get Object Record |
36
44
  | [`getObjectRecordChanges`](#op-getobjectrecordchanges) ★ | `GET /api/v1/objects/{object_slug}/records/{record_id}/changes` | read | `objects:read` | Get Object Record Changes |
37
45
  | [`getObjectRecordHistory`](#op-getobjectrecordhistory) ★ | `GET /api/v1/objects/{object_slug}/records/{record_id}/history` | read | `objects:read` | Get Object Record History |
38
46
  | [`getObjectRelationshipDefinitions`](#op-getobjectrelationshipdefinitions) | `GET /api/v1/objects/{object_slug}/relationships` | read | `objects:read` | Get Object Relationship Definitions |
39
47
  | [`getObjectRelationships`](#op-getobjectrelationships) | `GET /api/v1/objects/{object_slug}/records/{record_id}/relationships` | read | `objects:read` | Get Object Relationships |
48
+ | [`inspectObjectCsvImport`](#op-inspectobjectcsvimport) | `POST /api/v1/objects/{object_slug}/imports/csv/inspect` | write | `objects:write` | Inspect Object Csv Import |
40
49
  | [`listObjectAttributes`](#op-listobjectattributes) ★ | `GET /api/v1/objects/{object_slug}/attributes` | read | `objects:read` | List Object Attributes |
50
+ | [`listObjectCsvImports`](#op-listobjectcsvimports) | `GET /api/v1/objects/{object_slug}/imports/csv/drafts` | read | `objects:write` | List Object Csv Imports |
41
51
  | [`listObjectRecords`](#op-listobjectrecords) ★ | `GET /api/v1/objects/{object_slug}/records` | read | `objects:read` | List Object Records |
52
+ | [`listObjectViews`](#op-listobjectviews) | `GET /api/v1/objects/{object_slug}/views` | read | `objects:read` | List Object Views |
42
53
  | [`listObjects`](#op-listobjects) ★ | `GET /api/v1/objects` | read | `objects:read` | List Objects |
43
54
  | [`mergeObjectRecords`](#op-mergeobjectrecords) | `POST /api/v1/objects/{object_slug}/records/merge` | write | `objects:write` | Merge Object Records |
55
+ | [`previewObjectCsvImport`](#op-previewobjectcsvimport) | `POST /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/preview` | write | `objects:write` | Preview Object Csv Import |
56
+ | [`queryObjectBoardGroups`](#op-queryobjectboardgroups) | `POST /api/v1/objects/{object_slug}/views/board/groups` | write | `objects:read` | Query Object Board Groups |
57
+ | [`queryObjectBoardRecords`](#op-queryobjectboardrecords) | `POST /api/v1/objects/{object_slug}/views/board/records` | write | `objects:read` | Query Object Board Records |
44
58
  | [`restoreObjectRecord`](#op-restoreobjectrecord) ★ | `POST /api/v1/objects/{object_slug}/records/{record_id}/restore` | write | `objects:write` | Restore Object Record |
59
+ | [`setDefaultObjectView`](#op-setdefaultobjectview) | `PUT /api/v1/objects/{object_slug}/views/default` | write | `objects:write` | Set Default Object View |
45
60
  | [`updateAttribute`](#op-updateattribute) ★ | `PATCH /api/v1/objects/{object_slug}/attributes/{attr_slug}` | write | `objects:manage` | Update Attribute |
46
61
  | [`updateObject`](#op-updateobject) ★ | `PATCH /api/v1/objects/{object_slug}` | write | `objects:manage` | Update Object |
62
+ | [`updateObjectCsvImport`](#op-updateobjectcsvimport) | `PUT /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}` | write | `objects:write` | Update Object Csv Import |
47
63
  | [`updateObjectRecord`](#op-updateobjectrecord) ★ | `PATCH /api/v1/objects/{object_slug}/records/{record_id}` | write | `objects:write` | Update Object Record |
64
+ | [`updateObjectView`](#op-updateobjectview) | `PUT /api/v1/objects/{object_slug}/views/{view_id}` | write | `objects:write` | Update Object View |
48
65
  | [`upsertObjectRecord`](#op-upsertobjectrecord) ★ | `POST /api/v1/objects/{object_slug}/records/upsert` | write | `objects:write` | Upsert Object Record |
66
+ | [`validateFormula`](#op-validateformula) | `POST /api/v1/objects/{object_slug}/attributes/formula/validate` | read | `objects:read` | Validate Formula |
49
67
 
50
68
  ---
51
69
 
@@ -61,7 +79,8 @@ Exact TypeScript types for every operation on this page, and every schema they u
61
79
  - API-key scope: `objects:manage`
62
80
  - ★ Hand-written: [`g8.objects.archiveAttribute()`](../sdk-clients.md#g8-objects-archiveattribute)
63
81
 
64
- Archive a custom field, retaining its values. Restore with PATCH is_archived=false.
82
+ Archive a custom field, retaining its values. Restore with PATCH is_archived=false. Refused (409
83
+ `formula_dependency`) while a computed field reads it, with every dependent the credential may see.
65
84
 
66
85
  **Input**
67
86
 
@@ -91,6 +110,7 @@ Other envelope fields: `pagination` (PaginationMeta).
91
110
  | `is_system` | `boolean` | no | Whether this field is protected as a system attribute. default `false` |
92
111
  | `is_unique` | `boolean` | no | No two active records may hold the same value for this attribute. A collision is rejected with `409 duplicate_active_value`. default `false` |
93
112
  | `sort_order` | `integer` | no | Configured display order; equal values are ordered by API slug. default `0` |
113
+ | `visible_to_role_ids` | `Array<string> \| null` | no | Role ids that may see this field; null means every role. Owners and admins always see every field. A field hidden from the caller is absent from every response. Set it with PATCH on this attribute. |
94
114
 
95
115
  **Example**
96
116
 
@@ -116,7 +136,8 @@ const result = await g8.api.objects.archiveAttribute({ path: { object_slug: "exa
116
136
 
117
137
  PREVIEW. This endpoint is deployed but gated: it returns 404 unless the hosted app platform is enabled for your organization. It is published here so the contract describes the whole surface, not so it can be called today.
118
138
 
119
- Archive a custom object without deleting data; restore with PATCH is_archived=false.
139
+ Archive a custom object without deleting data; restore with PATCH is_archived=false. Refused (409
140
+ `formula_dependency`) while a computed field elsewhere reads it, naming every dependent the credential may see.
120
141
 
121
142
  **Input**
122
143
 
@@ -259,6 +280,80 @@ const result = await g8.api.objects.bulkUpdateObjectRecords({ path: { object_slu
259
280
 
260
281
  ---
261
282
 
283
+ <a id="op-commitobjectcsvimport"></a>
284
+
285
+ ### `g8.api.objects.commitObjectCsvImport(input)`
286
+
287
+ **Commit Object Csv Import**
288
+
289
+ - HTTP: `POST /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/commit`
290
+ - operationId: `commit_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__commit_post` (also callable as `g8.api.call("commit_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__commit_post", input)`)
291
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
292
+ - API-key scope: `objects:write`
293
+
294
+ Commit one previewed page (at most 100 rows) in one transaction. Valid rows are imported; rows that do not validate
295
+ are skipped and listed in skipped_rows (download them from .../errors). Send the page's revision, offset, limit,
296
+ schema_fingerprint and every row's row_number, record_id and revision from the preview. created, updated and skipped
297
+ count this request; resending a committed page replays its receipts as already_imported and counts nothing twice. A
298
+ 409 is never fixed by resending the same body: preview the page again.
299
+
300
+ **Input**
301
+
302
+ | Field | Type | Required | Description |
303
+ |---|---|---|---|
304
+ | `path.object_slug` | `string` | yes | |
305
+ | `path.draft_id` | `string (uuid)` | yes | |
306
+ | `body` | `ObjectImportCommit` | yes | Request body; fields below. |
307
+
308
+ Body fields (`ObjectImportCommit`):
309
+
310
+ | Field | Type | Required | Description |
311
+ |---|---|---|---|
312
+ | `body.expected` | `Array<ImportRowExpectation>` | yes | min items 1, max items 100 |
313
+ | `body.revision` | `integer` | yes | The draft revision this page was planned against min 1 |
314
+ | `body.schema_fingerprint` | `string` | yes | pattern `^[a-f0-9]{64}$` |
315
+ | `body.limit` | `integer` | no | default `100`, min 1, max 100 |
316
+ | `body.offset` | `integer` | no | default `0`, min 0, max 4999 |
317
+
318
+ **Returns** `ApiResponse_ObjectCsvReceipt_`: the envelope `{ data: ObjectCsvReceipt, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
319
+
320
+ Other envelope fields: `pagination` (PaginationMeta).
321
+
322
+ `ObjectCsvReceipt` fields:
323
+
324
+ | Field | Type | Required | Description |
325
+ |---|---|---|---|
326
+ | `already_imported` | `integer` | yes | |
327
+ | `completed` | `integer` | yes | |
328
+ | `created` | `integer` | yes | |
329
+ | `error_file_available` | `boolean` | yes | |
330
+ | `error_rows` | `integer` | yes | |
331
+ | `rows` | `Array<ImportReceiptRow>` | yes | |
332
+ | `skipped` | `integer` | yes | |
333
+ | `status` | `"draft" \| "partial" \| "completed" \| "expired"` | yes | |
334
+ | `total` | `integer` | yes | |
335
+ | `updated` | `integer` | yes | |
336
+ | `replayed` | `boolean` | no | default `false` |
337
+ | `skipped_rows` | `Array<ImportSkippedRow>` | no | |
338
+
339
+ **Example**
340
+
341
+ ```ts
342
+ const result = await g8.api.objects.commitObjectCsvImport({
343
+ path: {
344
+ object_slug: "example",
345
+ draft_id: "00000000-0000-0000-0000-000000000000",
346
+ },
347
+ body: {
348
+ expected: [{ row_number: 2 }],
349
+ revision: 1,
350
+ schema_fingerprint: "example",
351
+ },
352
+ });
353
+ ```
354
+
355
+ ---
356
+
262
357
  <a id="op-createattribute"></a>
263
358
 
264
359
  ### `g8.api.objects.createAttribute(input)`
@@ -274,7 +369,9 @@ const result = await g8.api.objects.bulkUpdateObjectRecords({ path: { object_slu
274
369
 
275
370
  PREVIEW. This endpoint is deployed but gated: it returns 404 unless the hosted app platform is enabled for your organization. It is published here so the contract describes the whole surface, not so it can be called today.
276
371
 
277
- Create a typed CRM field. Requires objects:manage and current Admin access.
372
+ Create a typed CRM field. Requires objects:manage and current Admin access. A computed field is checked against
373
+ the schema the credential may see (an admin key included): a field it cannot see or an object it cannot read is
374
+ `unknown_field` / `unknown_relationship` (422), exactly as validate answers.
278
375
 
279
376
  **Input**
280
377
 
@@ -320,6 +417,7 @@ Other envelope fields: `pagination` (PaginationMeta).
320
417
  | `is_system` | `boolean` | no | Whether this field is protected as a system attribute. default `false` |
321
418
  | `is_unique` | `boolean` | no | No two active records may hold the same value for this attribute. A collision is rejected with `409 duplicate_active_value`. default `false` |
322
419
  | `sort_order` | `integer` | no | Configured display order; equal values are ordered by API slug. default `0` |
420
+ | `visible_to_role_ids` | `Array<string> \| null` | no | Role ids that may see this field; null means every role. Owners and admins always see every field. A field hidden from the caller is absent from every response. Set it with PATCH on this attribute. |
323
421
 
324
422
  **Example**
325
423
 
@@ -392,6 +490,73 @@ const result = await g8.api.objects.createObject({
392
490
 
393
491
  ---
394
492
 
493
+ <a id="op-createobjectcsvimport"></a>
494
+
495
+ ### `g8.api.objects.createObjectCsvImport(input)`
496
+
497
+ **Create Object Csv Import**
498
+
499
+ - HTTP: `POST /api/v1/objects/{object_slug}/imports/csv/drafts`
500
+ - operationId: `create_object_csv_import_objects__object_slug__imports_csv_drafts_post` (also callable as `g8.api.call("create_object_csv_import_objects__object_slug__imports_csv_drafts_post", input)`)
501
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
502
+ - API-key scope: `objects:write`
503
+
504
+ Upload a CSV once with its column mapping (header to field slug), mode create or upsert, and matching field for upsert.
505
+ The file is stored with the import for 30 days or until every row is imported. Writes no records.
506
+
507
+ **Input**
508
+
509
+ | Field | Type | Required | Description |
510
+ |---|---|---|---|
511
+ | `path.object_slug` | `string` | yes | |
512
+ | `body` | `ObjectImportCreate` | yes | Request body; fields below. |
513
+
514
+ Body fields (`ObjectImportCreate`):
515
+
516
+ | Field | Type | Required | Description |
517
+ |---|---|---|---|
518
+ | `body.csv` | `string` | yes | min length 1, max length 2000000 |
519
+ | `body.filename` | `string` | yes | min length 1, max length 255 |
520
+ | `body.mapping` | `Record<string, string>` | no | |
521
+ | `body.matching_attribute` | `string \| null` | no | max length 100 |
522
+ | `body.mode` | `"create" \| "upsert"` | no | default `"create"` |
523
+
524
+ **Returns** `ApiResponse_ObjectImportDetail_`: the envelope `{ data: ObjectImportDetail, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
525
+
526
+ Other envelope fields: `pagination` (PaginationMeta).
527
+
528
+ `ObjectImportDetail` fields:
529
+
530
+ | Field | Type | Required | Description |
531
+ |---|---|---|---|
532
+ | `completed` | `integer` | yes | |
533
+ | `created_at` | `string (date-time)` | yes | |
534
+ | `error_rows` | `integer` | yes | |
535
+ | `expires_at` | `string (date-time)` | yes | |
536
+ | `filename` | `string` | yes | |
537
+ | `headers` | `Array<string>` | yes | |
538
+ | `id` | `string (uuid)` | yes | |
539
+ | `owner_id` | `string` | yes | |
540
+ | `owner_type` | `"user" \| "api"` | yes | |
541
+ | `revision` | `integer` | yes | |
542
+ | `setup` | `ObjectImportSetup` | yes | |
543
+ | `source_available` | `boolean` | yes | |
544
+ | `status` | `"draft" \| "partial" \| "completed" \| "expired"` | yes | |
545
+ | `total` | `integer` | yes | |
546
+ | `updated_at` | `string (date-time)` | yes | |
547
+ | `sample` | `Array<Array<string>>` | no | First rows of the file while it is still stored |
548
+
549
+ **Example**
550
+
551
+ ```ts
552
+ const result = await g8.api.objects.createObjectCsvImport({
553
+ path: { object_slug: "example" },
554
+ body: { csv: "example", filename: "Example" },
555
+ });
556
+ ```
557
+
558
+ ---
559
+
395
560
  <a id="op-createobjectrecord"></a>
396
561
 
397
562
  ### `g8.api.objects.createObjectRecord(input)`
@@ -518,6 +683,104 @@ const result = await g8.api.objects.createObjectRelationship({
518
683
 
519
684
  ---
520
685
 
686
+ <a id="op-createobjectview"></a>
687
+
688
+ ### `g8.api.objects.createObjectView(input)`
689
+
690
+ **Create Object View**
691
+
692
+ - HTTP: `POST /api/v1/objects/{object_slug}/views`
693
+ - operationId: `create_object_view_objects__object_slug__views_post` (also callable as `g8.api.call("create_object_view_objects__object_slug__views_post", input)`)
694
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
695
+ - API-key scope: `objects:write`
696
+
697
+ Save a private or shared view owned by this credential, without impersonating a human.
698
+
699
+ **Input**
700
+
701
+ | Field | Type | Required | Description |
702
+ |---|---|---|---|
703
+ | `path.object_slug` | `string` | yes | |
704
+ | `body` | `ObjectViewCreate` | yes | Request body; fields below. |
705
+
706
+ Body fields (`ObjectViewCreate`):
707
+
708
+ | Field | Type | Required | Description |
709
+ |---|---|---|---|
710
+ | `body.title` | `string` | yes | min length 1, max length 120 |
711
+ | `body.state` | `ObjectViewState` | no | |
712
+ | `body.visibility` | `Visibility` | no | default `"private"` |
713
+
714
+ **Returns** `ApiResponse_SavedViewResponse_`: the envelope `{ data: SavedViewResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
715
+
716
+ Other envelope fields: `pagination` (PaginationMeta).
717
+
718
+ `SavedViewResponse` fields:
719
+
720
+ | Field | Type | Required | Description |
721
+ |---|---|---|---|
722
+ | `context_key` | `string \| null` | yes | |
723
+ | `created_at` | `string (date-time) \| null` | yes | |
724
+ | `created_by` | `string` | yes | |
725
+ | `description` | `string \| null` | yes | |
726
+ | `entity_type` | `EntityType` | yes | |
727
+ | `id` | `string (uuid)` | yes | |
728
+ | `is_default` | `boolean` | yes | |
729
+ | `is_owner` | `boolean` | yes | |
730
+ | `is_reusable` | `boolean` | yes | |
731
+ | `state` | `Record<string, unknown>` | yes | |
732
+ | `title` | `string` | yes | |
733
+ | `updated_at` | `string (date-time) \| null` | yes | |
734
+ | `visibility` | `Visibility` | yes | |
735
+
736
+ **Example**
737
+
738
+ ```ts
739
+ const result = await g8.api.objects.createObjectView({ path: { object_slug: "example" }, body: { title: "Example" } });
740
+ ```
741
+
742
+ ---
743
+
744
+ <a id="op-deleteobjectcsvimport"></a>
745
+
746
+ ### `g8.api.objects.deleteObjectCsvImport(input)`
747
+
748
+ **Delete Object Csv Import**
749
+
750
+ - HTTP: `DELETE /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}`
751
+ - operationId: `delete_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__delete` (also callable as `g8.api.call("delete_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__delete", input)`)
752
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
753
+ - API-key scope: `objects:write`
754
+
755
+ Delete the stored file and setup. Records already imported, their history and import receipts are kept.
756
+
757
+ **Input**
758
+
759
+ | Field | Type | Required | Description |
760
+ |---|---|---|---|
761
+ | `path.object_slug` | `string` | yes | |
762
+ | `path.draft_id` | `string (uuid)` | yes | |
763
+ | `query.revision` | `integer` | yes | |
764
+
765
+ **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
766
+
767
+ Other envelope fields: `pagination` (PaginationMeta).
768
+
769
+ **Example**
770
+
771
+ ```ts
772
+ // destructive: deletes or archives data; confirm with a human before calling.
773
+ const result = await g8.api.objects.deleteObjectCsvImport({
774
+ path: {
775
+ object_slug: "example",
776
+ draft_id: "00000000-0000-0000-0000-000000000000",
777
+ },
778
+ query: { revision: 1 },
779
+ });
780
+ ```
781
+
782
+ ---
783
+
521
784
  <a id="op-deleteobjectrelationship"></a>
522
785
 
523
786
  ### `g8.api.objects.deleteObjectRelationship(input)`
@@ -589,6 +852,120 @@ const result = await g8.api.objects.deleteObjectRelationship({
589
852
 
590
853
  ---
591
854
 
855
+ <a id="op-deleteobjectview"></a>
856
+
857
+ ### `g8.api.objects.deleteObjectView(input)`
858
+
859
+ **Delete Object View**
860
+
861
+ - HTTP: `DELETE /api/v1/objects/{object_slug}/views/{view_id}`
862
+ - operationId: `delete_object_view_objects__object_slug__views__view_id__delete` (also callable as `g8.api.call("delete_object_view_objects__object_slug__views__view_id__delete", input)`)
863
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
864
+ - API-key scope: `objects:delete`
865
+
866
+ Delete a view owned by this credential. Does not delete records.
867
+
868
+ **Input**
869
+
870
+ | Field | Type | Required | Description |
871
+ |---|---|---|---|
872
+ | `path.object_slug` | `string` | yes | |
873
+ | `path.view_id` | `string (uuid)` | yes | |
874
+
875
+ **Returns** `ApiResponse_NoneType_`: the envelope `{ data: null, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
876
+
877
+ Other envelope fields: `pagination` (PaginationMeta).
878
+
879
+ **Example**
880
+
881
+ ```ts
882
+ // destructive: deletes or archives data; confirm with a human before calling.
883
+ const result = await g8.api.objects.deleteObjectView({
884
+ path: {
885
+ object_slug: "example",
886
+ view_id: "00000000-0000-0000-0000-000000000000",
887
+ },
888
+ });
889
+ ```
890
+
891
+ ---
892
+
893
+ <a id="op-downloadobjectcsvimporterrors"></a>
894
+
895
+ ### `g8.api.objects.downloadObjectCsvImportErrors(input)`
896
+
897
+ **Download Object Csv Import Errors**
898
+
899
+ - HTTP: `GET /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/errors`
900
+ - operationId: `download_object_csv_import_errors_objects__object_slug__imports_csv_drafts__draft_id__errors_get` (also callable as `g8.api.call("download_object_csv_import_errors_objects__object_slug__imports_csv_drafts__draft_id__errors_get", input)`)
901
+ - Tier: `read`: reads data; safe to call and to retry
902
+ - API-key scope: `objects:write`
903
+
904
+ Download skipped and rejected rows as CSV. While the file is stored: the original columns plus row_number, column
905
+ and error, ready to fix and re-upload (cells are spreadsheet-safe). Afterwards: row_number, column and code only,
906
+ never values. Needs the same read grant as an export.
907
+
908
+ **Input**
909
+
910
+ | Field | Type | Required | Description |
911
+ |---|---|---|---|
912
+ | `path.object_slug` | `string` | yes | |
913
+ | `path.draft_id` | `string (uuid)` | yes | |
914
+
915
+ **Returns** `unknown`.
916
+
917
+ **Example**
918
+
919
+ ```ts
920
+ const result = await g8.api.objects.downloadObjectCsvImportErrors({
921
+ path: {
922
+ object_slug: "example",
923
+ draft_id: "00000000-0000-0000-0000-000000000000",
924
+ },
925
+ });
926
+ ```
927
+
928
+ ---
929
+
930
+ <a id="op-exportobjectrecords"></a>
931
+
932
+ ### `g8.api.objects.exportObjectRecords(input)`
933
+
934
+ **Export Object Records**
935
+
936
+ - HTTP: `POST /api/v1/objects/{object_slug}/exports`
937
+ - operationId: `export_object_records_objects__object_slug__exports_post` (also callable as `g8.api.call("export_object_records_objects__object_slug__exports_post", input)`)
938
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
939
+ - API-key scope: `objects:export`
940
+
941
+ Download every matching native custom record of a view (filters, search, sort, columns, archived scope) as CSV or
942
+ typed JSON. Explicit objects:read and objects:export scopes and the key's read grant are required and rechecked before
943
+ delivery. Maximum 256 MB and 120 seconds; no partial files. CSV is spreadsheet-safe. Not a workspace backup.
944
+
945
+ **Input**
946
+
947
+ | Field | Type | Required | Description |
948
+ |---|---|---|---|
949
+ | `path.object_slug` | `string` | yes | |
950
+ | `body` | `ObjectExportRequest` | yes | Request body; fields below. |
951
+
952
+ Body fields (`ObjectExportRequest`):
953
+
954
+ | Field | Type | Required | Description |
955
+ |---|---|---|---|
956
+ | `body.format` | `"csv" \| "json"` | no | default `"csv"` |
957
+ | `body.state` | `ObjectViewState` | no | |
958
+
959
+ **Returns** `string (binary)`.
960
+
961
+ **Example**
962
+
963
+ ```ts
964
+ const result = await g8.api.objects.exportObjectRecords({ path: { object_slug: "example" }, body: {} });
965
+ ```
966
+
967
+ ---
968
+
592
969
  <a id="op-getobject"></a>
593
970
 
594
971
  ### `g8.api.objects.getObject(input)`
@@ -637,6 +1014,64 @@ const result = await g8.api.objects.getObject({ path: { object_slug: "example" }
637
1014
 
638
1015
  ---
639
1016
 
1017
+ <a id="op-getobjectcsvimport"></a>
1018
+
1019
+ ### `g8.api.objects.getObjectCsvImport(input)`
1020
+
1021
+ **Get Object Csv Import**
1022
+
1023
+ - HTTP: `GET /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}`
1024
+ - operationId: `get_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__get` (also callable as `g8.api.call("get_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__get", input)`)
1025
+ - Tier: `read`: reads data; safe to call and to retry
1026
+ - API-key scope: `objects:write`
1027
+
1028
+ Read one of this credential's imports: setup, headers, progress, status and up to five sample rows while the file is stored.
1029
+
1030
+ **Input**
1031
+
1032
+ | Field | Type | Required | Description |
1033
+ |---|---|---|---|
1034
+ | `path.object_slug` | `string` | yes | |
1035
+ | `path.draft_id` | `string (uuid)` | yes | |
1036
+
1037
+ **Returns** `ApiResponse_ObjectImportDetail_`: the envelope `{ data: ObjectImportDetail, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1038
+
1039
+ Other envelope fields: `pagination` (PaginationMeta).
1040
+
1041
+ `ObjectImportDetail` fields:
1042
+
1043
+ | Field | Type | Required | Description |
1044
+ |---|---|---|---|
1045
+ | `completed` | `integer` | yes | |
1046
+ | `created_at` | `string (date-time)` | yes | |
1047
+ | `error_rows` | `integer` | yes | |
1048
+ | `expires_at` | `string (date-time)` | yes | |
1049
+ | `filename` | `string` | yes | |
1050
+ | `headers` | `Array<string>` | yes | |
1051
+ | `id` | `string (uuid)` | yes | |
1052
+ | `owner_id` | `string` | yes | |
1053
+ | `owner_type` | `"user" \| "api"` | yes | |
1054
+ | `revision` | `integer` | yes | |
1055
+ | `setup` | `ObjectImportSetup` | yes | |
1056
+ | `source_available` | `boolean` | yes | |
1057
+ | `status` | `"draft" \| "partial" \| "completed" \| "expired"` | yes | |
1058
+ | `total` | `integer` | yes | |
1059
+ | `updated_at` | `string (date-time)` | yes | |
1060
+ | `sample` | `Array<Array<string>>` | no | First rows of the file while it is still stored |
1061
+
1062
+ **Example**
1063
+
1064
+ ```ts
1065
+ const result = await g8.api.objects.getObjectCsvImport({
1066
+ path: {
1067
+ object_slug: "example",
1068
+ draft_id: "00000000-0000-0000-0000-000000000000",
1069
+ },
1070
+ });
1071
+ ```
1072
+
1073
+ ---
1074
+
640
1075
  <a id="op-getobjectrecord"></a>
641
1076
 
642
1077
  ### `g8.api.objects.getObjectRecord(input)`
@@ -869,16 +1304,62 @@ const result = await g8.api.objects.getObjectRelationships({ path: { object_slug
869
1304
 
870
1305
  ---
871
1306
 
872
- <a id="op-listobjectattributes"></a>
1307
+ <a id="op-inspectobjectcsvimport"></a>
873
1308
 
874
- ### `g8.api.objects.listObjectAttributes(input)`
1309
+ ### `g8.api.objects.inspectObjectCsvImport(input)`
875
1310
 
876
- **List Object Attributes**
1311
+ **Inspect Object Csv Import**
877
1312
 
878
- - HTTP: `GET /api/v1/objects/{object_slug}/attributes`
879
- - operationId: `list_object_attributes_objects__object_slug__attributes_get` (also callable as `g8.api.call("list_object_attributes_objects__object_slug__attributes_get", input)`)
880
- - Tier: `read`: reads data; safe to call and to retry
881
- - API-key scope: `objects:read`
1313
+ - HTTP: `POST /api/v1/objects/{object_slug}/imports/csv/inspect`
1314
+ - operationId: `inspect_object_csv_import_objects__object_slug__imports_csv_inspect_post` (also callable as `g8.api.call("inspect_object_csv_import_objects__object_slug__imports_csv_inspect_post", input)`)
1315
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1316
+ - API-key scope: `objects:write`
1317
+
1318
+ Read a CSV's headers, five sample rows and row count. Nothing is stored or written. Maximum 2 MB, 5000 rows, 200 columns.
1319
+
1320
+ **Input**
1321
+
1322
+ | Field | Type | Required | Description |
1323
+ |---|---|---|---|
1324
+ | `path.object_slug` | `string` | yes | |
1325
+ | `body` | `ObjectCsvInspect` | yes | Request body; fields below. |
1326
+
1327
+ Body fields (`ObjectCsvInspect`):
1328
+
1329
+ | Field | Type | Required | Description |
1330
+ |---|---|---|---|
1331
+ | `body.csv` | `string` | yes | min length 1, max length 2000000 |
1332
+
1333
+ **Returns** `ApiResponse_ObjectCsvInspection_`: the envelope `{ data: ObjectCsvInspection, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1334
+
1335
+ Other envelope fields: `pagination` (PaginationMeta).
1336
+
1337
+ `ObjectCsvInspection` fields:
1338
+
1339
+ | Field | Type | Required | Description |
1340
+ |---|---|---|---|
1341
+ | `headers` | `Array<string>` | yes | |
1342
+ | `sample` | `Array<Array<string>>` | yes | |
1343
+ | `total` | `integer` | yes | |
1344
+
1345
+ **Example**
1346
+
1347
+ ```ts
1348
+ const result = await g8.api.objects.inspectObjectCsvImport({ path: { object_slug: "example" }, body: { csv: "example" } });
1349
+ ```
1350
+
1351
+ ---
1352
+
1353
+ <a id="op-listobjectattributes"></a>
1354
+
1355
+ ### `g8.api.objects.listObjectAttributes(input)`
1356
+
1357
+ **List Object Attributes**
1358
+
1359
+ - HTTP: `GET /api/v1/objects/{object_slug}/attributes`
1360
+ - operationId: `list_object_attributes_objects__object_slug__attributes_get` (also callable as `g8.api.call("list_object_attributes_objects__object_slug__attributes_get", input)`)
1361
+ - Tier: `read`: reads data; safe to call and to retry
1362
+ - API-key scope: `objects:read`
882
1363
  - Lifecycle: `preview` (may not be enabled for every org yet)
883
1364
  - ★ Hand-written: [`g8.objects.listAttributes()`](../sdk-clients.md#g8-objects-listattributes)
884
1365
 
@@ -914,6 +1395,7 @@ Other envelope fields: `pagination` (PaginationMeta).
914
1395
  | `is_system` | `boolean` | no | Whether this field is protected as a system attribute. default `false` |
915
1396
  | `is_unique` | `boolean` | no | No two active records may hold the same value for this attribute. A collision is rejected with `409 duplicate_active_value`. default `false` |
916
1397
  | `sort_order` | `integer` | no | Configured display order; equal values are ordered by API slug. default `0` |
1398
+ | `visible_to_role_ids` | `Array<string> \| null` | no | Role ids that may see this field; null means every role. Owners and admins always see every field. A field hidden from the caller is absent from every response. Set it with PATCH on this attribute. |
917
1399
 
918
1400
  **Example**
919
1401
 
@@ -923,6 +1405,57 @@ const result = await g8.api.objects.listObjectAttributes({ path: { object_slug:
923
1405
 
924
1406
  ---
925
1407
 
1408
+ <a id="op-listobjectcsvimports"></a>
1409
+
1410
+ ### `g8.api.objects.listObjectCsvImports(input)`
1411
+
1412
+ **List Object Csv Imports**
1413
+
1414
+ - HTTP: `GET /api/v1/objects/{object_slug}/imports/csv/drafts`
1415
+ - operationId: `list_object_csv_imports_objects__object_slug__imports_csv_drafts_get` (also callable as `g8.api.call("list_object_csv_imports_objects__object_slug__imports_csv_drafts_get", input)`)
1416
+ - Tier: `read`: reads data; safe to call and to retry
1417
+ - API-key scope: `objects:write`
1418
+
1419
+ List this credential's CSV imports for the object, newest first. History only: no file contents or cell values.
1420
+
1421
+ **Input**
1422
+
1423
+ | Field | Type | Required | Description |
1424
+ |---|---|---|---|
1425
+ | `path.object_slug` | `string` | yes | |
1426
+ | `query.limit` | `integer` | no | default `25` |
1427
+ | `query.offset` | `integer` | no | default `0` |
1428
+
1429
+ **Returns** `ApiResponse_list_ObjectImportSummary__`: the envelope `{ data: Array<ObjectImportSummary>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1430
+
1431
+ Other envelope fields: `pagination` (PaginationMeta).
1432
+
1433
+ `ObjectImportSummary` fields:
1434
+
1435
+ | Field | Type | Required | Description |
1436
+ |---|---|---|---|
1437
+ | `completed` | `integer` | yes | |
1438
+ | `created_at` | `string (date-time)` | yes | |
1439
+ | `error_rows` | `integer` | yes | |
1440
+ | `expires_at` | `string (date-time)` | yes | |
1441
+ | `filename` | `string` | yes | |
1442
+ | `id` | `string (uuid)` | yes | |
1443
+ | `owner_id` | `string` | yes | |
1444
+ | `owner_type` | `"user" \| "api"` | yes | |
1445
+ | `revision` | `integer` | yes | |
1446
+ | `source_available` | `boolean` | yes | |
1447
+ | `status` | `"draft" \| "partial" \| "completed" \| "expired"` | yes | |
1448
+ | `total` | `integer` | yes | |
1449
+ | `updated_at` | `string (date-time)` | yes | |
1450
+
1451
+ **Example**
1452
+
1453
+ ```ts
1454
+ const result = await g8.api.objects.listObjectCsvImports({ path: { object_slug: "example" } });
1455
+ ```
1456
+
1457
+ ---
1458
+
926
1459
  <a id="op-listobjectrecords"></a>
927
1460
 
928
1461
  ### `g8.api.objects.listObjectRecords(input)`
@@ -977,6 +1510,55 @@ const result = await g8.api.objects.listObjectRecords({ path: { object_slug: "ex
977
1510
 
978
1511
  ---
979
1512
 
1513
+ <a id="op-listobjectviews"></a>
1514
+
1515
+ ### `g8.api.objects.listObjectViews(input)`
1516
+
1517
+ **List Object Views**
1518
+
1519
+ - HTTP: `GET /api/v1/objects/{object_slug}/views`
1520
+ - operationId: `list_object_views_objects__object_slug__views_get` (also callable as `g8.api.call("list_object_views_objects__object_slug__views_get", input)`)
1521
+ - Tier: `read`: reads data; safe to call and to retry
1522
+ - API-key scope: `objects:read`
1523
+
1524
+ List this credential's private views and shared workspace views. Views never grant record access.
1525
+
1526
+ **Input**
1527
+
1528
+ | Field | Type | Required | Description |
1529
+ |---|---|---|---|
1530
+ | `path.object_slug` | `string` | yes | |
1531
+
1532
+ **Returns** `ApiResponse_list_SavedViewResponse__`: the envelope `{ data: Array<SavedViewResponse>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1533
+
1534
+ Other envelope fields: `pagination` (PaginationMeta).
1535
+
1536
+ `SavedViewResponse` fields:
1537
+
1538
+ | Field | Type | Required | Description |
1539
+ |---|---|---|---|
1540
+ | `context_key` | `string \| null` | yes | |
1541
+ | `created_at` | `string (date-time) \| null` | yes | |
1542
+ | `created_by` | `string` | yes | |
1543
+ | `description` | `string \| null` | yes | |
1544
+ | `entity_type` | `EntityType` | yes | |
1545
+ | `id` | `string (uuid)` | yes | |
1546
+ | `is_default` | `boolean` | yes | |
1547
+ | `is_owner` | `boolean` | yes | |
1548
+ | `is_reusable` | `boolean` | yes | |
1549
+ | `state` | `Record<string, unknown>` | yes | |
1550
+ | `title` | `string` | yes | |
1551
+ | `updated_at` | `string (date-time) \| null` | yes | |
1552
+ | `visibility` | `Visibility` | yes | |
1553
+
1554
+ **Example**
1555
+
1556
+ ```ts
1557
+ const result = await g8.api.objects.listObjectViews({ path: { object_slug: "example" } });
1558
+ ```
1559
+
1560
+ ---
1561
+
980
1562
  <a id="op-listobjects"></a>
981
1563
 
982
1564
  ### `g8.api.objects.listObjects(input?)`
@@ -1086,6 +1668,166 @@ const result = await g8.api.objects.mergeObjectRecords({
1086
1668
 
1087
1669
  ---
1088
1670
 
1671
+ <a id="op-previewobjectcsvimport"></a>
1672
+
1673
+ ### `g8.api.objects.previewObjectCsvImport(input)`
1674
+
1675
+ **Preview Object Csv Import**
1676
+
1677
+ - HTTP: `POST /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}/preview`
1678
+ - operationId: `preview_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__preview_post` (also callable as `g8.api.call("preview_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__preview_post", input)`)
1679
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1680
+ - API-key scope: `objects:write`
1681
+
1682
+ Preview up to 100 rows of the stored file: normalized values, errors, upsert matches and rows already imported.
1683
+ Writes no records. Empty cells are omitted; \N clears a field.
1684
+
1685
+ **Input**
1686
+
1687
+ | Field | Type | Required | Description |
1688
+ |---|---|---|---|
1689
+ | `path.object_slug` | `string` | yes | |
1690
+ | `path.draft_id` | `string (uuid)` | yes | |
1691
+ | `body` | `ImportPage` | yes | Request body; fields below. |
1692
+
1693
+ Body fields (`ImportPage`):
1694
+
1695
+ | Field | Type | Required | Description |
1696
+ |---|---|---|---|
1697
+ | `body.revision` | `integer` | yes | The draft revision this page was planned against min 1 |
1698
+ | `body.limit` | `integer` | no | default `100`, min 1, max 100 |
1699
+ | `body.offset` | `integer` | no | default `0`, min 0, max 4999 |
1700
+
1701
+ **Returns** `ApiResponse_ObjectCsvPreview_`: the envelope `{ data: ObjectCsvPreview, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1702
+
1703
+ Other envelope fields: `pagination` (PaginationMeta).
1704
+
1705
+ `ObjectCsvPreview` fields:
1706
+
1707
+ | Field | Type | Required | Description |
1708
+ |---|---|---|---|
1709
+ | `completed` | `integer` | yes | |
1710
+ | `next_offset` | `integer \| null` | yes | |
1711
+ | `rows` | `Array<ImportPreviewRow>` | yes | |
1712
+ | `schema_fingerprint` | `string` | yes | |
1713
+ | `total` | `integer` | yes | |
1714
+
1715
+ **Example**
1716
+
1717
+ ```ts
1718
+ const result = await g8.api.objects.previewObjectCsvImport({
1719
+ path: {
1720
+ object_slug: "example",
1721
+ draft_id: "00000000-0000-0000-0000-000000000000",
1722
+ },
1723
+ body: { revision: 1 },
1724
+ });
1725
+ ```
1726
+
1727
+ ---
1728
+
1729
+ <a id="op-queryobjectboardgroups"></a>
1730
+
1731
+ ### `g8.api.objects.queryObjectBoardGroups(input)`
1732
+
1733
+ **Query Object Board Groups**
1734
+
1735
+ - HTTP: `POST /api/v1/objects/{object_slug}/views/board/groups`
1736
+ - operationId: `query_object_board_groups_objects__object_slug__views_board_groups_post` (also callable as `g8.api.call("query_object_board_groups_objects__object_slug__views_board_groups_post", input)`)
1737
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1738
+ - API-key scope: `objects:read`
1739
+
1740
+ Read status groups and full filtered counts. This POST performs no writes.
1741
+
1742
+ **Input**
1743
+
1744
+ | Field | Type | Required | Description |
1745
+ |---|---|---|---|
1746
+ | `path.object_slug` | `string` | yes | |
1747
+ | `body` | `ObjectViewState` | yes | Request body; fields below. |
1748
+
1749
+ Body fields (`ObjectViewState`):
1750
+
1751
+ | Field | Type | Required | Description |
1752
+ |---|---|---|---|
1753
+ | `body.columns` | `Array<string> \| null` | no | max items 200 |
1754
+ | `body.filters` | `Array<RecordFilter>` | no | max items 10 |
1755
+ | `body.groupBy` | `string \| null` | no | |
1756
+ | `body.includeArchived` | `boolean` | no | default `false` |
1757
+ | `body.layout` | `"table" \| "board"` | no | default `"table"` |
1758
+ | `body.search` | `string` | no | default `""`, max length 200 |
1759
+ | `body.sortBy` | `string \| null` | no | |
1760
+ | `body.sortOrder` | `"asc" \| "desc"` | no | default `"desc"` |
1761
+ | `body.version` | `1` | no | default `1` |
1762
+
1763
+ **Returns** `ApiResponse_list_ObjectBoardGroup__`: the envelope `{ data: Array<ObjectBoardGroup>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1764
+
1765
+ Other envelope fields: `pagination` (PaginationMeta).
1766
+
1767
+ `ObjectBoardGroup` fields:
1768
+
1769
+ | Field | Type | Required | Description |
1770
+ |---|---|---|---|
1771
+ | `label` | `string` | yes | |
1772
+ | `total` | `integer` | yes | |
1773
+ | `value` | `string \| null` | yes | |
1774
+
1775
+ **Example**
1776
+
1777
+ ```ts
1778
+ const result = await g8.api.objects.queryObjectBoardGroups({ path: { object_slug: "example" }, body: {} });
1779
+ ```
1780
+
1781
+ ---
1782
+
1783
+ <a id="op-queryobjectboardrecords"></a>
1784
+
1785
+ ### `g8.api.objects.queryObjectBoardRecords(input)`
1786
+
1787
+ **Query Object Board Records**
1788
+
1789
+ - HTTP: `POST /api/v1/objects/{object_slug}/views/board/records`
1790
+ - operationId: `query_object_board_records_objects__object_slug__views_board_records_post` (also callable as `g8.api.call("query_object_board_records_objects__object_slug__views_board_records_post", input)`)
1791
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1792
+ - API-key scope: `objects:read`
1793
+
1794
+ Read a bounded status page with current record revisions. This POST performs no writes.
1795
+
1796
+ **Input**
1797
+
1798
+ | Field | Type | Required | Description |
1799
+ |---|---|---|---|
1800
+ | `path.object_slug` | `string` | yes | |
1801
+ | `body` | `ObjectBoardPage` | yes | Request body; fields below. |
1802
+
1803
+ Body fields (`ObjectBoardPage`):
1804
+
1805
+ | Field | Type | Required | Description |
1806
+ |---|---|---|---|
1807
+ | `body.state` | `ObjectViewState` | yes | |
1808
+ | `body.group_value` | `string \| null` | no | max length 500 |
1809
+ | `body.limit` | `integer` | no | default `20`, min 1, max 50 |
1810
+ | `body.offset` | `integer` | no | default `0`, min 0, max 1000000 |
1811
+
1812
+ **Returns** `ApiResponse_RecordListResponse_`: the envelope `{ data: RecordListResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1813
+
1814
+ Other envelope fields: `pagination` (PaginationMeta).
1815
+
1816
+ `RecordListResponse` fields:
1817
+
1818
+ | Field | Type | Required | Description |
1819
+ |---|---|---|---|
1820
+ | `records` | `Array<RecordResponse>` | yes | |
1821
+ | `total` | `integer` | yes | |
1822
+
1823
+ **Example**
1824
+
1825
+ ```ts
1826
+ const result = await g8.api.objects.queryObjectBoardRecords({ path: { object_slug: "example" }, body: { state: {} } });
1827
+ ```
1828
+
1829
+ ---
1830
+
1089
1831
  <a id="op-restoreobjectrecord"></a>
1090
1832
 
1091
1833
  ### `g8.api.objects.restoreObjectRecord(input)`
@@ -1135,6 +1877,62 @@ const result = await g8.api.objects.restoreObjectRecord({ path: { object_slug: "
1135
1877
 
1136
1878
  ---
1137
1879
 
1880
+ <a id="op-setdefaultobjectview"></a>
1881
+
1882
+ ### `g8.api.objects.setDefaultObjectView(input)`
1883
+
1884
+ **Set Default Object View**
1885
+
1886
+ - HTTP: `PUT /api/v1/objects/{object_slug}/views/default`
1887
+ - operationId: `set_default_object_view_objects__object_slug__views_default_put` (also callable as `g8.api.call("set_default_object_view_objects__object_slug__views_default_put", input)`)
1888
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1889
+ - API-key scope: `objects:write`
1890
+
1891
+ Set or clear this credential's default within this object. Human defaults are unaffected.
1892
+
1893
+ **Input**
1894
+
1895
+ | Field | Type | Required | Description |
1896
+ |---|---|---|---|
1897
+ | `path.object_slug` | `string` | yes | |
1898
+ | `body` | `ObjectViewDefault` | yes | Request body; fields below. |
1899
+
1900
+ Body fields (`ObjectViewDefault`):
1901
+
1902
+ | Field | Type | Required | Description |
1903
+ |---|---|---|---|
1904
+ | `body.view_id` | `string (uuid) \| null` | no | |
1905
+
1906
+ **Returns** `ApiResponse_Union_SavedViewResponse__NoneType__`: the envelope `{ data: SavedViewResponse | null, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1907
+
1908
+ Other envelope fields: `pagination` (PaginationMeta).
1909
+
1910
+ `data` fields:
1911
+
1912
+ | Field | Type | Required | Description |
1913
+ |---|---|---|---|
1914
+ | `context_key` | `string \| null` | yes | |
1915
+ | `created_at` | `string (date-time) \| null` | yes | |
1916
+ | `created_by` | `string` | yes | |
1917
+ | `description` | `string \| null` | yes | |
1918
+ | `entity_type` | `EntityType` | yes | |
1919
+ | `id` | `string (uuid)` | yes | |
1920
+ | `is_default` | `boolean` | yes | |
1921
+ | `is_owner` | `boolean` | yes | |
1922
+ | `is_reusable` | `boolean` | yes | |
1923
+ | `state` | `Record<string, unknown>` | yes | |
1924
+ | `title` | `string` | yes | |
1925
+ | `updated_at` | `string (date-time) \| null` | yes | |
1926
+ | `visibility` | `Visibility` | yes | |
1927
+
1928
+ **Example**
1929
+
1930
+ ```ts
1931
+ const result = await g8.api.objects.setDefaultObjectView({ path: { object_slug: "example" }, body: {} });
1932
+ ```
1933
+
1934
+ ---
1935
+
1138
1936
  <a id="op-updateattribute"></a>
1139
1937
 
1140
1938
  ### `g8.api.objects.updateAttribute(input)`
@@ -1147,7 +1945,8 @@ const result = await g8.api.objects.restoreObjectRecord({ path: { object_slug: "
1147
1945
  - API-key scope: `objects:manage`
1148
1946
  - ★ Hand-written: [`g8.objects.updateAttribute()`](../sdk-clients.md#g8-objects-updateattribute)
1149
1947
 
1150
- Edit or restore a field; omitted values remain unchanged. Type and slug are immutable.
1948
+ Edit or restore a field; omitted values remain unchanged. Type and slug are immutable. A change that would
1949
+ break a computed field is refused (409 `formula_dependency`) with every dependent the credential may see.
1151
1950
 
1152
1951
  **Input**
1153
1952
 
@@ -1171,6 +1970,7 @@ Body fields (`AttributeUpdateRequest`):
1171
1970
  | `body.is_unique` | `boolean \| null` | no | |
1172
1971
  | `body.sort_order` | `integer \| null` | no | |
1173
1972
  | `body.title` | `string \| null` | no | min length 1, max length 200 |
1973
+ | `body.visible_to_role_ids` | `Array<string (uuid)> \| null` | no | max items 100 |
1174
1974
 
1175
1975
  **Returns** `ApiResponse_AttributeDefinitionResponse_`: the envelope `{ data: AttributeDefinitionResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1176
1976
 
@@ -1193,6 +1993,7 @@ Other envelope fields: `pagination` (PaginationMeta).
1193
1993
  | `is_system` | `boolean` | no | Whether this field is protected as a system attribute. default `false` |
1194
1994
  | `is_unique` | `boolean` | no | No two active records may hold the same value for this attribute. A collision is rejected with `409 duplicate_active_value`. default `false` |
1195
1995
  | `sort_order` | `integer` | no | Configured display order; equal values are ordered by API slug. default `0` |
1996
+ | `visible_to_role_ids` | `Array<string> \| null` | no | Role ids that may see this field; null means every role. Owners and admins always see every field. A field hidden from the caller is absent from every response. Set it with PATCH on this attribute. |
1196
1997
 
1197
1998
  **Example**
1198
1999
 
@@ -1217,7 +2018,8 @@ const result = await g8.api.objects.updateAttribute({ path: { object_slug: "exam
1217
2018
 
1218
2019
  PREVIEW. This endpoint is deployed but gated: it returns 404 unless the hosted app platform is enabled for your organization. It is published here so the contract describes the whole surface, not so it can be called today.
1219
2020
 
1220
- Rename, archive or restore a custom object while retaining its slug and data.
2021
+ Rename, archive or restore a custom object while retaining its slug and data. Archiving is refused (409
2022
+ `formula_dependency`) while a computed field elsewhere reads it, naming every dependent the credential may see.
1221
2023
 
1222
2024
  **Input**
1223
2025
 
@@ -1262,6 +2064,77 @@ const result = await g8.api.objects.updateObject({ path: { object_slug: "example
1262
2064
 
1263
2065
  ---
1264
2066
 
2067
+ <a id="op-updateobjectcsvimport"></a>
2068
+
2069
+ ### `g8.api.objects.updateObjectCsvImport(input)`
2070
+
2071
+ **Update Object Csv Import**
2072
+
2073
+ - HTTP: `PUT /api/v1/objects/{object_slug}/imports/csv/drafts/{draft_id}`
2074
+ - operationId: `update_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__put` (also callable as `g8.api.call("update_object_csv_import_objects__object_slug__imports_csv_drafts__draft_id__put", input)`)
2075
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2076
+ - API-key scope: `objects:write`
2077
+
2078
+ Change the filename or setup. revision must be the import's current revision. The stored file never changes.
2079
+
2080
+ **Input**
2081
+
2082
+ | Field | Type | Required | Description |
2083
+ |---|---|---|---|
2084
+ | `path.object_slug` | `string` | yes | |
2085
+ | `path.draft_id` | `string (uuid)` | yes | |
2086
+ | `query.revision` | `integer` | yes | |
2087
+ | `body` | `ObjectImportUpdate` | yes | Request body; fields below. |
2088
+
2089
+ Body fields (`ObjectImportUpdate`):
2090
+
2091
+ | Field | Type | Required | Description |
2092
+ |---|---|---|---|
2093
+ | `body.filename` | `string` | yes | min length 1, max length 255 |
2094
+ | `body.mapping` | `Record<string, string>` | no | |
2095
+ | `body.matching_attribute` | `string \| null` | no | max length 100 |
2096
+ | `body.mode` | `"create" \| "upsert"` | no | default `"create"` |
2097
+
2098
+ **Returns** `ApiResponse_ObjectImportDetail_`: the envelope `{ data: ObjectImportDetail, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2099
+
2100
+ Other envelope fields: `pagination` (PaginationMeta).
2101
+
2102
+ `ObjectImportDetail` fields:
2103
+
2104
+ | Field | Type | Required | Description |
2105
+ |---|---|---|---|
2106
+ | `completed` | `integer` | yes | |
2107
+ | `created_at` | `string (date-time)` | yes | |
2108
+ | `error_rows` | `integer` | yes | |
2109
+ | `expires_at` | `string (date-time)` | yes | |
2110
+ | `filename` | `string` | yes | |
2111
+ | `headers` | `Array<string>` | yes | |
2112
+ | `id` | `string (uuid)` | yes | |
2113
+ | `owner_id` | `string` | yes | |
2114
+ | `owner_type` | `"user" \| "api"` | yes | |
2115
+ | `revision` | `integer` | yes | |
2116
+ | `setup` | `ObjectImportSetup` | yes | |
2117
+ | `source_available` | `boolean` | yes | |
2118
+ | `status` | `"draft" \| "partial" \| "completed" \| "expired"` | yes | |
2119
+ | `total` | `integer` | yes | |
2120
+ | `updated_at` | `string (date-time)` | yes | |
2121
+ | `sample` | `Array<Array<string>>` | no | First rows of the file while it is still stored |
2122
+
2123
+ **Example**
2124
+
2125
+ ```ts
2126
+ const result = await g8.api.objects.updateObjectCsvImport({
2127
+ path: {
2128
+ object_slug: "example",
2129
+ draft_id: "00000000-0000-0000-0000-000000000000",
2130
+ },
2131
+ query: { revision: 1 },
2132
+ body: { filename: "Example" },
2133
+ });
2134
+ ```
2135
+
2136
+ ---
2137
+
1265
2138
  <a id="op-updateobjectrecord"></a>
1266
2139
 
1267
2140
  ### `g8.api.objects.updateObjectRecord(input)`
@@ -1325,6 +2198,70 @@ const result = await g8.api.objects.updateObjectRecord({ path: { object_slug: "e
1325
2198
 
1326
2199
  ---
1327
2200
 
2201
+ <a id="op-updateobjectview"></a>
2202
+
2203
+ ### `g8.api.objects.updateObjectView(input)`
2204
+
2205
+ **Update Object View**
2206
+
2207
+ - HTTP: `PUT /api/v1/objects/{object_slug}/views/{view_id}`
2208
+ - operationId: `update_object_view_objects__object_slug__views__view_id__put` (also callable as `g8.api.call("update_object_view_objects__object_slug__views__view_id__put", input)`)
2209
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2210
+ - API-key scope: `objects:write`
2211
+
2212
+ Rename or replace settings on a view owned by this credential.
2213
+
2214
+ **Input**
2215
+
2216
+ | Field | Type | Required | Description |
2217
+ |---|---|---|---|
2218
+ | `path.object_slug` | `string` | yes | |
2219
+ | `path.view_id` | `string (uuid)` | yes | |
2220
+ | `body` | `ObjectViewUpdate` | yes | Request body; fields below. |
2221
+
2222
+ Body fields (`ObjectViewUpdate`):
2223
+
2224
+ | Field | Type | Required | Description |
2225
+ |---|---|---|---|
2226
+ | `body.state` | `ObjectViewState \| null` | no | |
2227
+ | `body.title` | `string \| null` | no | min length 1, max length 120 |
2228
+
2229
+ **Returns** `ApiResponse_SavedViewResponse_`: the envelope `{ data: SavedViewResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2230
+
2231
+ Other envelope fields: `pagination` (PaginationMeta).
2232
+
2233
+ `SavedViewResponse` fields:
2234
+
2235
+ | Field | Type | Required | Description |
2236
+ |---|---|---|---|
2237
+ | `context_key` | `string \| null` | yes | |
2238
+ | `created_at` | `string (date-time) \| null` | yes | |
2239
+ | `created_by` | `string` | yes | |
2240
+ | `description` | `string \| null` | yes | |
2241
+ | `entity_type` | `EntityType` | yes | |
2242
+ | `id` | `string (uuid)` | yes | |
2243
+ | `is_default` | `boolean` | yes | |
2244
+ | `is_owner` | `boolean` | yes | |
2245
+ | `is_reusable` | `boolean` | yes | |
2246
+ | `state` | `Record<string, unknown>` | yes | |
2247
+ | `title` | `string` | yes | |
2248
+ | `updated_at` | `string (date-time) \| null` | yes | |
2249
+ | `visibility` | `Visibility` | yes | |
2250
+
2251
+ **Example**
2252
+
2253
+ ```ts
2254
+ const result = await g8.api.objects.updateObjectView({
2255
+ path: {
2256
+ object_slug: "example",
2257
+ view_id: "00000000-0000-0000-0000-000000000000",
2258
+ },
2259
+ body: {},
2260
+ });
2261
+ ```
2262
+
2263
+ ---
2264
+
1328
2265
  <a id="op-upsertobjectrecord"></a>
1329
2266
 
1330
2267
  ### `g8.api.objects.upsertObjectRecord(input)`
@@ -1384,6 +2321,64 @@ const result = await g8.api.objects.upsertObjectRecord({
1384
2321
 
1385
2322
  ---
1386
2323
 
2324
+ <a id="op-validateformula"></a>
2325
+
2326
+ ### `g8.api.objects.validateFormula(input)`
2327
+
2328
+ **Validate Formula**
2329
+
2330
+ - HTTP: `POST /api/v1/objects/{object_slug}/attributes/formula/validate`
2331
+ - operationId: `validate_formula_objects__object_slug__attributes_formula_validate_post` (also callable as `g8.api.call("validate_formula_objects__object_slug__attributes_formula_validate_post", input)`)
2332
+ - Tier: `read`: reads data; safe to call and to retry
2333
+ - API-key scope: `objects:read`
2334
+
2335
+ Dry-run type-check and cycle-check of a typed formula expression, optionally evaluated on one record.
2336
+ Nothing is stored. Read-only (`objects:read`) despite the POST verb: the expression travels in the body. The
2337
+ check uses YOUR view of the schema: a field you cannot see or an object you cannot read is unknown, and a preview
2338
+ that names one is `valid: false` with `unknown_field` (200), exactly like a name that does not exist. An admin key
2339
+ is held to the same object grants: API keys never bypass them.
2340
+
2341
+ **Input**
2342
+
2343
+ | Field | Type | Required | Description |
2344
+ |---|---|---|---|
2345
+ | `path.object_slug` | `string` | yes | |
2346
+ | `body` | `FormulaValidateRequest` | yes | Request body; fields below. |
2347
+
2348
+ Body fields (`FormulaValidateRequest`):
2349
+
2350
+ | Field | Type | Required | Description |
2351
+ |---|---|---|---|
2352
+ | `body.expression` | `Record<string, unknown>` | yes | The typed JSON expression (a node tree; a rollup is a `rollup` node). |
2353
+ | `body.attribute_slug` | `string \| null` | no | Slug of the computed field being EDITED (checked against its own place in the dependency graph); omit for a new one. max length 100 |
2354
+ | `body.preview_record_id` | `string \| null` | no | Evaluate the expression against this record's current values. max length 64 |
2355
+
2356
+ **Returns** `ApiResponse_FormulaValidateResponse_`: the envelope `{ data: FormulaValidateResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2357
+
2358
+ Other envelope fields: `pagination` (PaginationMeta).
2359
+
2360
+ `FormulaValidateResponse` fields:
2361
+
2362
+ | Field | Type | Required | Description |
2363
+ |---|---|---|---|
2364
+ | `valid` | `boolean` | yes | |
2365
+ | `currency_code` | `string \| null` | no | |
2366
+ | `depends_on` | `Array<Record<string, unknown>>` | no | |
2367
+ | `errors` | `Array<Record<string, unknown>>` | no | Field-level problems (`reason` is a stable code). |
2368
+ | `preview_error` | `string \| null` | no | Why the preview record could not be evaluated (a code, never a value). |
2369
+ | `preview_rollups` | `Array<PreviewRollup>` | no | With a preview record: one entry per rollup in the expression, counted over the records the caller may read. |
2370
+ | `preview_value` | `unknown` | no | |
2371
+ | `referenced_object_slugs` | `Array<string>` | no | |
2372
+ | `result_type` | `string \| null` | no | number, currency, text, checkbox, date or timestamp. |
2373
+
2374
+ **Example**
2375
+
2376
+ ```ts
2377
+ const result = await g8.api.objects.validateFormula({ path: { object_slug: "example" }, body: { expression: {} } });
2378
+ ```
2379
+
2380
+ ---
2381
+
1387
2382
  ## Referenced types
1388
2383
 
1389
2384
  Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
@@ -1397,6 +2392,7 @@ Configuration for specific attribute types.
1397
2392
  | Field | Type | Required | Description |
1398
2393
  |---|---|---|---|
1399
2394
  | `currency_code` | `string \| null` | no | |
2395
+ | `formula` | `FormulaInput \| null` | no | |
1400
2396
  | `max_value` | `integer \| null` | no | |
1401
2397
  | `options` | `Array<Record<string, unknown>> \| null` | no | |
1402
2398
  | `referenced_object` | `string \| null` | no | |
@@ -1410,14 +2406,95 @@ Valid attribute types for the Custom Objects type system.
1410
2406
 
1411
2407
  Type: `"text" | "number" | "currency" | "date" | "timestamp" | "checkbox" | "select" | "status" | …`.
1412
2408
 
2409
+ <a id="type-entitytype"></a>
2410
+
2411
+ ### `EntityType`
2412
+
2413
+ Which CRM grid the saved view applies to. Free-form string at the DB level (cb_saved_views.entity_type is VARCHAR(50)) to avoid a schema migration when we add deals/tasks/leads — but enforced as an enum at the API boundary so we don't accept typos. NEITHER A SUBSET NOR A SUPERSET OF ``FilterEntityType`` — see the invariant on that class, and the sibling docstring below, which states the same relationship from the other side. The two enums overlap on the four GRID values (``contacts``, ``companies``, ``deals``, ``leads``); ``FilterEntityType`` is a superset of THOSE and adds ``report``, while…
2414
+
2415
+ Type: `"custom_objects" | "contacts" | "companies" | "deals" | "leads" | "lists" | "contacts_view" | "companies_view" | …`.
2416
+
2417
+ <a id="type-importpreviewrow"></a>
2418
+
2419
+ ### `ImportPreviewRow`
2420
+
2421
+ | Field | Type | Required | Description |
2422
+ |---|---|---|---|
2423
+ | `row_number` | `integer` | yes | min 2 |
2424
+ | `already_imported` | `boolean` | no | default `false` |
2425
+ | `errors` | `Array<Record<string, unknown>>` | no | |
2426
+ | `record_id` | `string (uuid) \| null` | no | |
2427
+ | `revision` | `integer \| null` | no | min 1 |
2428
+ | `values` | `Record<string, unknown>` | no | |
2429
+
2430
+ <a id="type-importreceiptrow"></a>
2431
+
2432
+ ### `ImportReceiptRow`
2433
+
2434
+ | Field | Type | Required | Description |
2435
+ |---|---|---|---|
2436
+ | `action` | `"created" \| "updated"` | yes | |
2437
+ | `record_id` | `string (uuid)` | yes | |
2438
+ | `revision` | `integer` | yes | |
2439
+ | `row_number` | `integer` | yes | |
2440
+ | `replayed` | `boolean` | no | default `false` |
2441
+
2442
+ <a id="type-importrowexpectation"></a>
2443
+
2444
+ ### `ImportRowExpectation`
2445
+
2446
+ | Field | Type | Required | Description |
2447
+ |---|---|---|---|
2448
+ | `row_number` | `integer` | yes | min 2 |
2449
+ | `record_id` | `string (uuid) \| null` | no | |
2450
+ | `revision` | `integer \| null` | no | min 1 |
2451
+
2452
+ <a id="type-importskippedrow"></a>
2453
+
2454
+ ### `ImportSkippedRow`
2455
+
2456
+ A row this commit did not import; its errors are kept for the error file.
2457
+
2458
+ | Field | Type | Required | Description |
2459
+ |---|---|---|---|
2460
+ | `errors` | `Array<Record<string, unknown>>` | yes | |
2461
+ | `row_number` | `integer` | yes | |
2462
+
2463
+ <a id="type-objectimportsetup"></a>
2464
+
2465
+ ### `ObjectImportSetup`
2466
+
2467
+ Column mapping (CSV header -> field slug) and match mode. May be incomplete while saved; preview and commit need an executable setup.
2468
+
2469
+ | Field | Type | Required | Description |
2470
+ |---|---|---|---|
2471
+ | `mapping` | `Record<string, string>` | no | |
2472
+ | `matching_attribute` | `string \| null` | no | max length 100 |
2473
+ | `mode` | `"create" \| "upsert"` | no | default `"create"` |
2474
+
2475
+ <a id="type-previewrollup"></a>
2476
+
2477
+ ### `PreviewRollup`
2478
+
2479
+ How many linked records one rollup of a previewed expression counted.
2480
+
2481
+ | Field | Type | Required | Description |
2482
+ |---|---|---|---|
2483
+ | `matched_count` | `integer` | yes | Linked records the rollup counted for the preview record (the ones its filters keep). |
2484
+ | `node_path` | `string` | yes | Where the rollup sits in the expression: `$` is the root, `$.left`, `$.args[1]`, `$.then_branch`. |
2485
+
1413
2486
  <a id="type-recordbulkupdatefailure"></a>
1414
2487
 
1415
2488
  ### `RecordBulkUpdateFailure`
1416
2489
 
2490
+ One record a bulk update did not change. ``error`` is the human message (kept for existing clients); ``code`` is stable for UIs to branch on: locked, archived, not_found, scope_changed, unique_conflict, invalid_value, constraint_violation or rejected; ``attribute_slug`` names the field when one field caused it.
2491
+
1417
2492
  | Field | Type | Required | Description |
1418
2493
  |---|---|---|---|
1419
2494
  | `error` | `string` | yes | |
1420
2495
  | `id` | `string (uuid)` | yes | |
2496
+ | `attribute_slug` | `string \| null` | no | |
2497
+ | `code` | `string` | no | default `"rejected"` |
1421
2498
 
1422
2499
  <a id="type-recordfilter"></a>
1423
2500
 
@@ -1471,7 +2548,7 @@ One generation of one attribute's value. Values are TEMPORAL rather than mutable
1471
2548
 
1472
2549
  | Field | Type | Required | Description |
1473
2550
  |---|---|---|---|
1474
- | `action` | `"created" \| "updated" \| "archived" \| "restored"` | yes | |
2551
+ | `action` | `"created" \| "updated" \| "archived" \| "restored" \| "recalculated"` | yes | |
1475
2552
  | `actor_id` | `string \| null` | yes | |
1476
2553
  | `actor_type` | `"user" \| "api" \| "app" \| "integration" \| "system"` | yes | |
1477
2554
  | `changes` | `Record<string, RecordMutationValueChange>` | yes | |
@@ -1541,3 +2618,11 @@ Response for a record with its current attribute values.
1541
2618
  | `target_label` | `string` | yes | |
1542
2619
  | `target_many` | `boolean` | yes | |
1543
2620
  | `target_object_definition_id` | `string (uuid) \| null` | yes | |
2621
+
2622
+ <a id="type-visibility"></a>
2623
+
2624
+ ### `Visibility`
2625
+
2626
+ Who can apply a view. Only the creator can update or delete it.
2627
+
2628
+ Type: `"private" | "org"`.