@graph8/sdk 0.251.0 → 0.260.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +9 -2
  2. package/dist/cli.js +216 -0
  3. package/dist/index.d.mts +104 -7
  4. package/dist/index.d.ts +104 -7
  5. package/dist/index.js +44 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +44 -3
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/react.d.mts +102 -7
  10. package/dist/react.d.ts +102 -7
  11. package/dist/react.js +62 -11
  12. package/dist/react.js.map +1 -1
  13. package/dist/react.mjs +53 -12
  14. package/dist/react.mjs.map +1 -1
  15. package/dist/types/README.md +7 -0
  16. package/dist/types/agency.d.ts +20 -0
  17. package/dist/types/agentSetup.d.ts +57 -0
  18. package/dist/types/api.d.ts +127 -0
  19. package/dist/types/appClient.d.ts +99 -0
  20. package/dist/types/appPlatform.d.ts +269 -0
  21. package/dist/types/appTokens.d.ts +125 -0
  22. package/dist/types/apps.d.ts +130 -0
  23. package/dist/types/audiences.d.ts +88 -0
  24. package/dist/types/calendar.d.ts +55 -0
  25. package/dist/types/campaigns.d.ts +61 -0
  26. package/dist/types/chat.d.ts +35 -0
  27. package/dist/types/cli.d.ts +14 -0
  28. package/dist/types/companies.d.ts +123 -0
  29. package/dist/types/contacts.d.ts +200 -0
  30. package/dist/types/copilot.d.ts +31 -0
  31. package/dist/types/core.d.ts +1052 -0
  32. package/dist/types/deals.d.ts +215 -0
  33. package/dist/types/enrich.d.ts +51 -0
  34. package/dist/types/fields.d.ts +84 -0
  35. package/dist/types/forms.d.ts +16 -0
  36. package/dist/types/http.d.ts +141 -0
  37. package/dist/types/inbox.d.ts +123 -0
  38. package/dist/types/index.d.ts +63 -0
  39. package/dist/types/intent.d.ts +196 -0
  40. package/dist/types/lists.d.ts +44 -0
  41. package/dist/types/mailboxes.d.ts +240 -0
  42. package/dist/types/marketplace.d.ts +62 -0
  43. package/dist/types/meetings.d.ts +70 -0
  44. package/dist/types/newsletter.d.ts +212 -0
  45. package/dist/types/notes.d.ts +57 -0
  46. package/dist/types/objects.d.ts +281 -0
  47. package/dist/types/pipelines.d.ts +135 -0
  48. package/dist/types/quotes.d.ts +143 -0
  49. package/dist/types/react.d.ts +978 -0
  50. package/dist/types/search.d.ts +99 -0
  51. package/dist/types/sequences.d.ts +255 -0
  52. package/dist/types/signals.d.ts +28 -0
  53. package/dist/types/skills.d.ts +176 -0
  54. package/dist/types/snippet.d.ts +24 -0
  55. package/dist/types/studio.d.ts +161 -0
  56. package/dist/types/tasks.d.ts +101 -0
  57. package/dist/types/types.d.ts +45 -0
  58. package/dist/types/utils.d.ts +21 -0
  59. package/dist/types/version.d.ts +10 -0
  60. package/dist/types/visitors.d.ts +29 -0
  61. package/dist/types/voice.d.ts +304 -0
  62. package/dist/types/webhooks.d.ts +71 -0
  63. package/dist/types/workflows.d.ts +229 -0
  64. package/docs/agents.md +748 -0
  65. package/docs/api/README.md +165 -0
  66. package/docs/api/accounts.d.ts +396 -0
  67. package/docs/api/accounts.md +644 -0
  68. package/docs/api/adCampaigns.d.ts +707 -0
  69. package/docs/api/adCampaigns.md +1091 -0
  70. package/docs/api/adCreatives.d.ts +996 -0
  71. package/docs/api/adCreatives.md +1708 -0
  72. package/docs/api/agency.d.ts +556 -0
  73. package/docs/api/agency.md +845 -0
  74. package/docs/api/agent.d.ts +330 -0
  75. package/docs/api/agent.md +514 -0
  76. package/docs/api/agents.d.ts +1622 -0
  77. package/docs/api/agents.md +2860 -0
  78. package/docs/api/aiInbox.d.ts +1984 -0
  79. package/docs/api/aiInbox.md +3490 -0
  80. package/docs/api/analytics.d.ts +1273 -0
  81. package/docs/api/analytics.md +2095 -0
  82. package/docs/api/apiKeys.d.ts +252 -0
  83. package/docs/api/apiKeys.md +318 -0
  84. package/docs/api/appDeployments.d.ts +236 -0
  85. package/docs/api/appDeployments.md +471 -0
  86. package/docs/api/appDomains.d.ts +171 -0
  87. package/docs/api/appDomains.md +281 -0
  88. package/docs/api/appLogs.d.ts +120 -0
  89. package/docs/api/appLogs.md +159 -0
  90. package/docs/api/appObjects.d.ts +415 -0
  91. package/docs/api/appObjects.md +568 -0
  92. package/docs/api/appPages.d.ts +557 -0
  93. package/docs/api/appPages.md +796 -0
  94. package/docs/api/appPlatformTokens.d.ts +123 -0
  95. package/docs/api/appPlatformTokens.md +172 -0
  96. package/docs/api/appointments.d.ts +2361 -0
  97. package/docs/api/appointments.md +3917 -0
  98. package/docs/api/apps.d.ts +822 -0
  99. package/docs/api/apps.md +1342 -0
  100. package/docs/api/assertUpsert.d.ts +286 -0
  101. package/docs/api/assertUpsert.md +370 -0
  102. package/docs/api/audienceSyncs.d.ts +259 -0
  103. package/docs/api/audienceSyncs.md +395 -0
  104. package/docs/api/brandKit.d.ts +686 -0
  105. package/docs/api/brandKit.md +1133 -0
  106. package/docs/api/bugReports.d.ts +181 -0
  107. package/docs/api/bugReports.md +268 -0
  108. package/docs/api/by-path.md +3260 -0
  109. package/docs/api/calendarInvites.d.ts +117 -0
  110. package/docs/api/calendarInvites.md +148 -0
  111. package/docs/api/campaignWorkflows.d.ts +152 -0
  112. package/docs/api/campaignWorkflows.md +200 -0
  113. package/docs/api/campaigns.d.ts +721 -0
  114. package/docs/api/campaigns.md +1236 -0
  115. package/docs/api/channels.d.ts +171 -0
  116. package/docs/api/channels.md +235 -0
  117. package/docs/api/cliCampaigns.d.ts +205 -0
  118. package/docs/api/cliCampaigns.md +256 -0
  119. package/docs/api/cliPipelines.d.ts +324 -0
  120. package/docs/api/cliPipelines.md +562 -0
  121. package/docs/api/clickHouse.d.ts +115 -0
  122. package/docs/api/clickHouse.md +138 -0
  123. package/docs/api/companies.d.ts +1636 -0
  124. package/docs/api/companies.md +2211 -0
  125. package/docs/api/companyIntelligence.d.ts +299 -0
  126. package/docs/api/companyIntelligence.md +488 -0
  127. package/docs/api/contacts.d.ts +2173 -0
  128. package/docs/api/contacts.md +3143 -0
  129. package/docs/api/content.d.ts +968 -0
  130. package/docs/api/content.md +1667 -0
  131. package/docs/api/contentGridSkills.d.ts +177 -0
  132. package/docs/api/contentGridSkills.md +271 -0
  133. package/docs/api/copilot.d.ts +1017 -0
  134. package/docs/api/copilot.md +1765 -0
  135. package/docs/api/crmSyncs.d.ts +215 -0
  136. package/docs/api/crmSyncs.md +301 -0
  137. package/docs/api/customerSuccess.d.ts +491 -0
  138. package/docs/api/customerSuccess.md +776 -0
  139. package/docs/api/deals.d.ts +1696 -0
  140. package/docs/api/deals.md +2432 -0
  141. package/docs/api/deliverability.d.ts +418 -0
  142. package/docs/api/deliverability.md +677 -0
  143. package/docs/api/desk.d.ts +1765 -0
  144. package/docs/api/desk.md +3007 -0
  145. package/docs/api/dialer.d.ts +1185 -0
  146. package/docs/api/dialer.md +2166 -0
  147. package/docs/api/dialerAnalytics.d.ts +187 -0
  148. package/docs/api/dialerAnalytics.md +257 -0
  149. package/docs/api/documents.d.ts +895 -0
  150. package/docs/api/documents.md +1440 -0
  151. package/docs/api/duplicates.d.ts +195 -0
  152. package/docs/api/duplicates.md +315 -0
  153. package/docs/api/eSign.d.ts +38 -0
  154. package/docs/api/eSign.md +54 -0
  155. package/docs/api/eSignature.d.ts +242 -0
  156. package/docs/api/eSignature.md +341 -0
  157. package/docs/api/enrichment.d.ts +3207 -0
  158. package/docs/api/enrichment.md +5225 -0
  159. package/docs/api/events.d.ts +115 -0
  160. package/docs/api/events.md +105 -0
  161. package/docs/api/fields.d.ts +482 -0
  162. package/docs/api/fields.md +566 -0
  163. package/docs/api/forms.d.ts +1012 -0
  164. package/docs/api/forms.md +1542 -0
  165. package/docs/api/gtmCampaigns.d.ts +662 -0
  166. package/docs/api/gtmCampaigns.md +1044 -0
  167. package/docs/api/gtmContext.d.ts +1187 -0
  168. package/docs/api/gtmContext.md +2112 -0
  169. package/docs/api/gtmDeliverability.d.ts +60 -0
  170. package/docs/api/gtmDeliverability.md +63 -0
  171. package/docs/api/gtmKnowledgeBase.d.ts +76 -0
  172. package/docs/api/gtmKnowledgeBase.md +91 -0
  173. package/docs/api/gtmLaunchHelpers.d.ts +123 -0
  174. package/docs/api/gtmLaunchHelpers.md +148 -0
  175. package/docs/api/gtmLibrary.d.ts +448 -0
  176. package/docs/api/gtmLibrary.md +780 -0
  177. package/docs/api/health.d.ts +39 -0
  178. package/docs/api/health.md +58 -0
  179. package/docs/api/imageLibrary.d.ts +341 -0
  180. package/docs/api/imageLibrary.md +569 -0
  181. package/docs/api/imports.d.ts +157 -0
  182. package/docs/api/imports.md +174 -0
  183. package/docs/api/inbox.d.ts +709 -0
  184. package/docs/api/inbox.md +1067 -0
  185. package/docs/api/install.d.ts +213 -0
  186. package/docs/api/install.md +317 -0
  187. package/docs/api/installedApps.d.ts +131 -0
  188. package/docs/api/installedApps.md +241 -0
  189. package/docs/api/integrationStatus.d.ts +142 -0
  190. package/docs/api/integrationStatus.md +205 -0
  191. package/docs/api/integrations.d.ts +2327 -0
  192. package/docs/api/integrations.md +3791 -0
  193. package/docs/api/intent.d.ts +482 -0
  194. package/docs/api/intent.md +858 -0
  195. package/docs/api/knowledge.d.ts +501 -0
  196. package/docs/api/knowledge.md +843 -0
  197. package/docs/api/knowledgeBase.d.ts +84 -0
  198. package/docs/api/knowledgeBase.md +96 -0
  199. package/docs/api/landingPages.d.ts +1411 -0
  200. package/docs/api/landingPages.md +2488 -0
  201. package/docs/api/leads.d.ts +133 -0
  202. package/docs/api/leads.md +180 -0
  203. package/docs/api/library.d.ts +217 -0
  204. package/docs/api/library.md +338 -0
  205. package/docs/api/linkedIn.d.ts +227 -0
  206. package/docs/api/linkedIn.md +289 -0
  207. package/docs/api/linkedInOutreach.d.ts +727 -0
  208. package/docs/api/linkedInOutreach.md +990 -0
  209. package/docs/api/lists.d.ts +1106 -0
  210. package/docs/api/lists.md +1609 -0
  211. package/docs/api/logs.d.ts +71 -0
  212. package/docs/api/logs.md +70 -0
  213. package/docs/api/mailboxes.d.ts +1050 -0
  214. package/docs/api/mailboxes.md +1690 -0
  215. package/docs/api/marketingIntelligence.d.ts +256 -0
  216. package/docs/api/marketingIntelligence.md +454 -0
  217. package/docs/api/marketplace.d.ts +3173 -0
  218. package/docs/api/marketplace.md +5953 -0
  219. package/docs/api/mcp.d.ts +69 -0
  220. package/docs/api/mcp.md +69 -0
  221. package/docs/api/me.d.ts +54 -0
  222. package/docs/api/me.md +56 -0
  223. package/docs/api/meetings.d.ts +539 -0
  224. package/docs/api/meetings.md +747 -0
  225. package/docs/api/newsletter.d.ts +1613 -0
  226. package/docs/api/newsletter.md +2746 -0
  227. package/docs/api/notes.d.ts +517 -0
  228. package/docs/api/notes.md +888 -0
  229. package/docs/api/notifications.d.ts +94 -0
  230. package/docs/api/notifications.md +105 -0
  231. package/docs/api/objects.d.ts +621 -0
  232. package/docs/api/objects.md +1098 -0
  233. package/docs/api/openSearch.d.ts +234 -0
  234. package/docs/api/openSearch.md +297 -0
  235. package/docs/api/ops.d.ts +299 -0
  236. package/docs/api/ops.md +339 -0
  237. package/docs/api/orgGovernance.d.ts +393 -0
  238. package/docs/api/orgGovernance.md +623 -0
  239. package/docs/api/orgVideos.d.ts +184 -0
  240. package/docs/api/orgVideos.md +252 -0
  241. package/docs/api/organizationSettings.d.ts +626 -0
  242. package/docs/api/organizationSettings.md +911 -0
  243. package/docs/api/phoneNumbers.d.ts +484 -0
  244. package/docs/api/phoneNumbers.md +777 -0
  245. package/docs/api/profile.d.ts +329 -0
  246. package/docs/api/profile.md +540 -0
  247. package/docs/api/programmaticPages.d.ts +400 -0
  248. package/docs/api/programmaticPages.md +626 -0
  249. package/docs/api/providerDomains.d.ts +866 -0
  250. package/docs/api/providerDomains.md +1446 -0
  251. package/docs/api/providerUsage.d.ts +129 -0
  252. package/docs/api/providerUsage.md +186 -0
  253. package/docs/api/public.d.ts +69 -0
  254. package/docs/api/public.md +78 -0
  255. package/docs/api/publicCopilot.d.ts +67 -0
  256. package/docs/api/publicCopilot.md +80 -0
  257. package/docs/api/publicSignals.d.ts +66 -0
  258. package/docs/api/publicSignals.md +71 -0
  259. package/docs/api/publicVisitors.d.ts +97 -0
  260. package/docs/api/publicVisitors.md +118 -0
  261. package/docs/api/quotes.d.ts +1564 -0
  262. package/docs/api/quotes.md +2553 -0
  263. package/docs/api/radar.d.ts +808 -0
  264. package/docs/api/radar.md +1431 -0
  265. package/docs/api/radarReports.d.ts +208 -0
  266. package/docs/api/radarReports.md +306 -0
  267. package/docs/api/recordRoles.d.ts +143 -0
  268. package/docs/api/recordRoles.md +175 -0
  269. package/docs/api/repos.d.ts +146 -0
  270. package/docs/api/repos.md +211 -0
  271. package/docs/api/research.d.ts +295 -0
  272. package/docs/api/research.md +534 -0
  273. package/docs/api/revenue.d.ts +402 -0
  274. package/docs/api/revenue.md +608 -0
  275. package/docs/api/revenueAnalytics.d.ts +147 -0
  276. package/docs/api/revenueAnalytics.md +212 -0
  277. package/docs/api/revenueLifecycle.d.ts +207 -0
  278. package/docs/api/revenueLifecycle.md +274 -0
  279. package/docs/api/revenueRecords.d.ts +372 -0
  280. package/docs/api/revenueRecords.md +563 -0
  281. package/docs/api/roles.d.ts +431 -0
  282. package/docs/api/roles.md +812 -0
  283. package/docs/api/salesCoach.d.ts +877 -0
  284. package/docs/api/salesCoach.md +1540 -0
  285. package/docs/api/sandbox.d.ts +210 -0
  286. package/docs/api/sandbox.md +380 -0
  287. package/docs/api/scans.d.ts +104 -0
  288. package/docs/api/scans.md +136 -0
  289. package/docs/api/scheduleBuy.d.ts +293 -0
  290. package/docs/api/scheduleBuy.md +431 -0
  291. package/docs/api/scraping.d.ts +266 -0
  292. package/docs/api/scraping.md +383 -0
  293. package/docs/api/sdrAnalytics.d.ts +138 -0
  294. package/docs/api/sdrAnalytics.md +246 -0
  295. package/docs/api/search.d.ts +598 -0
  296. package/docs/api/search.md +866 -0
  297. package/docs/api/seo.d.ts +447 -0
  298. package/docs/api/seo.md +660 -0
  299. package/docs/api/sequenceLifecycle.d.ts +439 -0
  300. package/docs/api/sequenceLifecycle.md +513 -0
  301. package/docs/api/sequences.d.ts +1936 -0
  302. package/docs/api/sequences.md +3232 -0
  303. package/docs/api/settings.d.ts +448 -0
  304. package/docs/api/settings.md +731 -0
  305. package/docs/api/signals.d.ts +1441 -0
  306. package/docs/api/signals.md +2526 -0
  307. package/docs/api/signatures.d.ts +719 -0
  308. package/docs/api/signatures.md +1247 -0
  309. package/docs/api/skills.d.ts +230 -0
  310. package/docs/api/skills.md +466 -0
  311. package/docs/api/snippet.d.ts +85 -0
  312. package/docs/api/snippet.md +106 -0
  313. package/docs/api/socialPublishing.d.ts +824 -0
  314. package/docs/api/socialPublishing.md +1245 -0
  315. package/docs/api/studioDocuments.d.ts +244 -0
  316. package/docs/api/studioDocuments.md +348 -0
  317. package/docs/api/support.d.ts +90 -0
  318. package/docs/api/support.md +76 -0
  319. package/docs/api/suppressions.d.ts +241 -0
  320. package/docs/api/suppressions.md +343 -0
  321. package/docs/api/surveys.d.ts +847 -0
  322. package/docs/api/surveys.md +1223 -0
  323. package/docs/api/tasks.d.ts +813 -0
  324. package/docs/api/tasks.md +1344 -0
  325. package/docs/api/teamMembers.d.ts +668 -0
  326. package/docs/api/teamMembers.md +1040 -0
  327. package/docs/api/teams.d.ts +784 -0
  328. package/docs/api/teams.md +1395 -0
  329. package/docs/api/usage.d.ts +277 -0
  330. package/docs/api/usage.md +389 -0
  331. package/docs/api/visitors.d.ts +690 -0
  332. package/docs/api/visitors.md +1075 -0
  333. package/docs/api/voice.d.ts +4661 -0
  334. package/docs/api/voice.md +7905 -0
  335. package/docs/api/webAnalytics.d.ts +964 -0
  336. package/docs/api/webAnalytics.md +1452 -0
  337. package/docs/api/webChat.d.ts +1704 -0
  338. package/docs/api/webChat.md +2048 -0
  339. package/docs/api/webhooks.d.ts +251 -0
  340. package/docs/api/webhooks.md +386 -0
  341. package/docs/api/websiteEditor.d.ts +324 -0
  342. package/docs/api/websiteEditor.md +517 -0
  343. package/docs/api/work.d.ts +2298 -0
  344. package/docs/api/work.md +3096 -0
  345. package/docs/api/workbench.d.ts +2962 -0
  346. package/docs/api/workbench.md +4884 -0
  347. package/docs/api/workflows.d.ts +1218 -0
  348. package/docs/api/workflows.md +2302 -0
  349. package/docs/sdk-clients.md +4339 -0
  350. package/package.json +10 -3
@@ -0,0 +1,2488 @@
1
+ <!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
2
+
3
+ # `g8.api.landingPages`: Landing Pages
4
+
5
+ 59 operations (20 read, 21 write, 3 destructive, 13 billable, 2 external).
6
+
7
+ No hand-written client covers this area. Call it through `g8.api.landingPages.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
8
+
9
+ Every example below assumes this setup (server-side, API key):
10
+
11
+ ```ts
12
+ import { g8 } from "@graph8/sdk";
13
+
14
+ g8.init({ apiKey: process.env.G8_API_KEY! });
15
+ ```
16
+
17
+ Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
18
+
19
+ Exact TypeScript types for every operation on this page, and every schema they use: [landingPages.d.ts](landingPages.d.ts).
20
+
21
+ ## Operations
22
+
23
+ | Call | HTTP | Tier | Scope | Summary |
24
+ |---|---|---|---|---|
25
+ | [`applyLandingPageReviewFindings`](#op-applylandingpagereviewfindings) | `POST /api/v1/landing-pages/{landing_page_id}/ai-review/apply` | write | `campaigns:write` | Apply Landing Page Review Findings |
26
+ | [`approveLandingPageTemplate`](#op-approvelandingpagetemplate) | `PATCH /api/v1/landing-pages/{landing_page_id}/approve-template` | write | `campaigns:write` | Approve Landing Page Template |
27
+ | [`clearLandingPageConsentOverride`](#op-clearlandingpageconsentoverride) | `DELETE /api/v1/landing-pages/{landing_page_id}/tracking/consent` | destructive | `campaigns:delete` | Clear Landing Page Consent Override |
28
+ | [`cloneHomepageToLandingPage`](#op-clonehomepagetolandingpage) | `POST /api/v1/landing-pages/clone-homepage` | billable | `campaigns:run` | Clone Homepage To Landing Page |
29
+ | [`cloneHtmlToLandingPage`](#op-clonehtmltolandingpage) | `POST /api/v1/landing-pages/clone-html` | billable | `campaigns:run` | Clone Html To Landing Page |
30
+ | [`cloneUrlToLandingPage`](#op-cloneurltolandingpage) | `POST /api/v1/landing-pages/clone-url` | billable | `campaigns:run` | Clone Url To Landing Page |
31
+ | [`convertLandingPageToFreeform`](#op-convertlandingpagetofreeform) | `POST /api/v1/landing-pages/{landing_page_id}/convert-to-freeform` | write | `campaigns:write` | Convert Landing Page To Freeform |
32
+ | [`createLandingPage`](#op-createlandingpage) | `POST /api/v1/landing-pages` | billable | `campaigns:run` | Create Landing Page |
33
+ | [`createLandingPageAgentSession`](#op-createlandingpageagentsession) | `POST /api/v1/landing-pages/{page_id}/agent-sessions` | write | `integrations:write` | Create Landing Page Agent Session |
34
+ | [`createLandingPagePreviewLink`](#op-createlandingpagepreviewlink) | `GET /api/v1/landing-pages/{landing_page_id}/preview` | read | `campaigns:read` | Create Landing Page Preview Link |
35
+ | [`deleteLandingPage`](#op-deletelandingpage) | `DELETE /api/v1/landing-pages/{landing_page_id}` | destructive | `campaigns:delete` | Delete Landing Page |
36
+ | [`demoteLandingPageToTemplate`](#op-demotelandingpagetotemplate) | `POST /api/v1/landing-pages/{landing_page_id}/demote-to-template` | write | `campaigns:write` | Demote Landing Page To Template |
37
+ | [`duplicateLandingPageTemplate`](#op-duplicatelandingpagetemplate) | `POST /api/v1/landing-pages/{landing_page_id}/duplicate` | write | `campaigns:write` | Duplicate Landing Page Template |
38
+ | [`editLandingPageElement`](#op-editlandingpageelement) | `POST /api/v1/landing-pages/{landing_page_id}/edit-element` | billable | `campaigns:run` | Edit Landing Page Element |
39
+ | [`editLandingPageWhole`](#op-editlandingpagewhole) | `POST /api/v1/landing-pages/{landing_page_id}/edit-page` | billable | `campaigns:run` | Edit Landing Page Whole |
40
+ | [`editLandingPageWithChat`](#op-editlandingpagewithchat) | `POST /api/v1/landing-pages/{landing_page_id}/edit` | billable | `campaigns:run` | Edit Landing Page With Chat |
41
+ | [`ensureLandingPageBaseTemplate`](#op-ensurelandingpagebasetemplate) | `POST /api/v1/landing-pages/ensure-base-template` | billable | `campaigns:run` | Ensure Landing Page Base Template |
42
+ | [`exportLandingPage`](#op-exportlandingpage) | `GET /api/v1/landing-pages/{landing_page_id}/export` | read | `campaigns:read` | Export Landing Page |
43
+ | [`extractLandingPageComponents`](#op-extractlandingpagecomponents) | `POST /api/v1/landing-pages/components/extract` | billable | `campaigns:run` | Extract Landing Page Components |
44
+ | [`fixLandingPageFindingWithAi`](#op-fixlandingpagefindingwithai) | `POST /api/v1/landing-pages/{landing_page_id}/ai-review/fix-with-ai` | billable | `campaigns:run` | Fix Landing Page Finding With Ai |
45
+ | [`generateLandingPageSeoMetadata`](#op-generatelandingpageseometadata) | `POST /api/v1/landing-pages/{landing_page_id}/generate-seo-metadata` | billable | `campaigns:run` | Generate Landing Page Seo Metadata |
46
+ | [`getLandingPage`](#op-getlandingpage) | `GET /api/v1/landing-pages/{landing_page_id}` | read | `campaigns:read` | Get Landing Page |
47
+ | [`getLandingPageConsentDefault`](#op-getlandingpageconsentdefault) | `GET /api/v1/landing-page-consent/default` | read | `campaigns:read` | Get Landing Page Consent Default |
48
+ | [`getLandingPageConversation`](#op-getlandingpageconversation) | `GET /api/v1/landing-pages/{landing_page_id}/conversation` | read | `campaigns:read` | Get Landing Page Conversation |
49
+ | [`getLandingPageDesignSystem`](#op-getlandingpagedesignsystem) | `GET /api/v1/landing-pages/design-system` | read | `campaigns:read` | Get Landing Page Design System |
50
+ | [`getLandingPageManifest`](#op-getlandingpagemanifest) | `GET /api/v1/landing-pages/{landing_page_id}/manifest` | read | `campaigns:read` | Get Landing Page Manifest |
51
+ | [`getLandingPageReportingOverview`](#op-getlandingpagereportingoverview) | `GET /api/v1/landing-pages/reporting/overview` | read | `campaigns:read` | Get Landing Page Reporting Overview |
52
+ | [`getLandingPageSource`](#op-getlandingpagesource) | `GET /api/v1/landing-pages/agent-sessions/{session_id}` | read | `landing-pages:read` | Get Landing Page Source |
53
+ | [`getLandingPageStatus`](#op-getlandingpagestatus) | `GET /api/v1/landing-pages/{landing_page_id}/status` | read | `campaigns:read` | Get Landing Page Status |
54
+ | [`getLandingPageTracking`](#op-getlandingpagetracking) | `GET /api/v1/landing-pages/{landing_page_id}/tracking` | read | `campaigns:read` | Get Landing Page Tracking |
55
+ | [`importLandingPageHtml`](#op-importlandingpagehtml) | `POST /api/v1/landing-pages/{landing_page_id}/import-html` | write | `campaigns:write` | Import Landing Page Html |
56
+ | [`listLandingPageAnchors`](#op-listlandingpageanchors) | `GET /api/v1/landing-pages/{landing_page_id}/anchors` | read | `campaigns:read` | List Landing Page Anchors |
57
+ | [`listLandingPageBindings`](#op-listlandingpagebindings) | `GET /api/v1/landing-pages/{landing_page_id}/bindings` | read | `campaigns:read` | List Landing Page Bindings |
58
+ | [`listLandingPageComponents`](#op-listlandingpagecomponents) | `GET /api/v1/landing-pages/components` | read | `campaigns:read` | List Landing Page Components |
59
+ | [`listLandingPageConsentStatus`](#op-listlandingpageconsentstatus) | `GET /api/v1/landing-page-consent/pages` | read | `campaigns:read` | List Landing Page Consent Status |
60
+ | [`listLandingPageDomains`](#op-listlandingpagedomains) | `GET /api/v1/landing-pages/domains` | read | `campaigns:read` | List Landing Page Domains |
61
+ | [`listLandingPageReportingCompanies`](#op-listlandingpagereportingcompanies) | `GET /api/v1/landing-pages/reporting/companies` | read | `campaigns:read` | List Landing Page Reporting Companies |
62
+ | [`listLandingPageReportingPeople`](#op-listlandingpagereportingpeople) | `GET /api/v1/landing-pages/reporting/people` | read | `campaigns:read` | List Landing Page Reporting People |
63
+ | [`listLandingPageVersions`](#op-listlandingpageversions) | `GET /api/v1/landing-pages/{landing_page_id}/versions` | read | `campaigns:read` | List Landing Page Versions |
64
+ | [`listLandingPages`](#op-listlandingpages) | `GET /api/v1/landing-pages` | read | `campaigns:read` | List Landing Pages |
65
+ | [`patchLandingPage`](#op-patchlandingpage) | `POST /api/v1/landing-pages/agent-sessions/{session_id}/patch` | write | `landing-pages:write` | Patch Landing Page |
66
+ | [`promoteLandingPageTemplate`](#op-promotelandingpagetemplate) | `POST /api/v1/landing-pages/{landing_page_id}/promote-to-page` | write | `campaigns:write` | Promote Landing Page Template |
67
+ | [`provisionLandingPageTracking`](#op-provisionlandingpagetracking) | `POST /api/v1/landing-pages/{landing_page_id}/tracking/provision` | write | `campaigns:write` | Provision Landing Page Tracking |
68
+ | [`publishLandingPage`](#op-publishlandingpage) | `POST /api/v1/landing-pages/{landing_page_id}/publish` | external | `campaigns:run` | Publish Landing Page |
69
+ | [`removeLandingPageBinding`](#op-removelandingpagebinding) | `DELETE /api/v1/landing-pages/{landing_page_id}/bindings` | destructive | `campaigns:delete` | Remove Landing Page Binding |
70
+ | [`replaceLandingPageHtml`](#op-replacelandingpagehtml) | `POST /api/v1/landing-pages/{landing_page_id}/replace-html` | write | `campaigns:write` | Replace Landing Page Html |
71
+ | [`restoreLandingPageVersion`](#op-restorelandingpageversion) | `POST /api/v1/landing-pages/{landing_page_id}/versions/{version_num}/restore` | write | `campaigns:write` | Restore Landing Page Version |
72
+ | [`reviewLandingPage`](#op-reviewlandingpage) | `POST /api/v1/landing-pages/{landing_page_id}/ai-review` | billable | `campaigns:run` | Review Landing Page |
73
+ | [`rewriteLandingPageText`](#op-rewritelandingpagetext) | `POST /api/v1/landing-pages/{landing_page_id}/rewrite-text` | billable | `campaigns:run` | Rewrite Landing Page Text |
74
+ | [`saveLandingPageTemplateAsPage`](#op-savelandingpagetemplateaspage) | `POST /api/v1/landing-pages/{landing_page_id}/save-as-page` | write | `campaigns:write` | Save Landing Page Template As Page |
75
+ | [`setLandingPageConsentDefault`](#op-setlandingpageconsentdefault) | `PUT /api/v1/landing-page-consent/default` | write | `campaigns:write` | Set Landing Page Consent Default |
76
+ | [`setLandingPageMedia`](#op-setlandingpagemedia) | `POST /api/v1/landing-pages/{landing_page_id}/set-media-edit` | write | `campaigns:write` | Set Landing Page Media |
77
+ | [`setLandingPageText`](#op-setlandingpagetext) | `POST /api/v1/landing-pages/{landing_page_id}/set-text` | write | `campaigns:write` | Set Landing Page Text |
78
+ | [`unpublishLandingPage`](#op-unpublishlandingpage) | `POST /api/v1/landing-pages/{landing_page_id}/unpublish` | external | `campaigns:run` | Unpublish Landing Page |
79
+ | [`updateLandingPage`](#op-updatelandingpage) | `PATCH /api/v1/landing-pages/{landing_page_id}` | write | `campaigns:write` | Update Landing Page |
80
+ | [`updateLandingPageHtml`](#op-updatelandingpagehtml) | `POST /api/v1/landing-pages/{landing_page_id}/update-html` | write | `campaigns:write` | Update Landing Page Html |
81
+ | [`updateLandingPageSection`](#op-updatelandingpagesection) | `PATCH /api/v1/landing-pages/{landing_page_id}/sections/{section_idx}` | write | `campaigns:write` | Update Landing Page Section |
82
+ | [`updateLandingPageText`](#op-updatelandingpagetext) | `POST /api/v1/landing-pages/{landing_page_id}/update-text` | write | `campaigns:write` | Update Landing Page Text |
83
+ | [`updateLandingPageTracking`](#op-updatelandingpagetracking) | `PATCH /api/v1/landing-pages/{landing_page_id}/tracking` | write | `campaigns:write` | Update Landing Page Tracking |
84
+
85
+ ---
86
+
87
+ <a id="op-applylandingpagereviewfindings"></a>
88
+
89
+ ### `g8.api.landingPages.applyLandingPageReviewFindings(input)`
90
+
91
+ **Apply Landing Page Review Findings**
92
+
93
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/ai-review/apply`
94
+ - operationId: `apply_landing_page_review_findings_landing_pages__landing_page_id__ai_review_apply_post` (also callable as `g8.api.call("apply_landing_page_review_findings_landing_pages__landing_page_id__ai_review_apply_post", input)`)
95
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
96
+ - API-key scope: `campaigns:write`
97
+
98
+ Apply findings DETERMINISTICALLY. FREE - no model runs.
99
+
100
+ Prefer this to `/fix-with-ai` for anything the review already gave an
101
+ exact replacement for; it costs nothing and cannot invent a change.
102
+
103
+ **Input**
104
+
105
+ | Field | Type | Required | Description |
106
+ |---|---|---|---|
107
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
108
+ | `body` | `AIReviewApplyRequest` | yes | Request body; fields below. |
109
+
110
+ Body fields (`AIReviewApplyRequest`):
111
+
112
+ | Field | Type | Required | Description |
113
+ |---|---|---|---|
114
+ | `body.finding_ids` | `Array<string>` | yes | |
115
+
116
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
117
+
118
+ Other envelope fields: `pagination` (PaginationMeta).
119
+
120
+ **Example**
121
+
122
+ ```ts
123
+ const result = await g8.api.landingPages.applyLandingPageReviewFindings({ path: { landing_page_id: "id" }, body: { finding_ids: ["id"] } });
124
+ ```
125
+
126
+ ---
127
+
128
+ <a id="op-approvelandingpagetemplate"></a>
129
+
130
+ ### `g8.api.landingPages.approveLandingPageTemplate(input)`
131
+
132
+ **Approve Landing Page Template**
133
+
134
+ - HTTP: `PATCH /api/v1/landing-pages/{landing_page_id}/approve-template`
135
+ - operationId: `approve_landing_page_template_landing_pages__landing_page_id__approve_template_patch` (also callable as `g8.api.call("approve_landing_page_template_landing_pages__landing_page_id__approve_template_patch", input)`)
136
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
137
+ - API-key scope: `campaigns:write`
138
+
139
+ Move a generated template from pending-approval to completed. FREE.
140
+
141
+ **Input**
142
+
143
+ | Field | Type | Required | Description |
144
+ |---|---|---|---|
145
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
146
+
147
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
148
+
149
+ Other envelope fields: `pagination` (PaginationMeta).
150
+
151
+ **Example**
152
+
153
+ ```ts
154
+ const result = await g8.api.landingPages.approveLandingPageTemplate({ path: { landing_page_id: "id" } });
155
+ ```
156
+
157
+ ---
158
+
159
+ <a id="op-clearlandingpageconsentoverride"></a>
160
+
161
+ ### `g8.api.landingPages.clearLandingPageConsentOverride(input)`
162
+
163
+ **Clear Landing Page Consent Override**
164
+
165
+ - HTTP: `DELETE /api/v1/landing-pages/{landing_page_id}/tracking/consent`
166
+ - operationId: `clear_landing_page_consent_override_landing_pages__landing_page_id__tracking_consent_delete` (also callable as `g8.api.call("clear_landing_page_consent_override_landing_pages__landing_page_id__tracking_consent_delete", input)`)
167
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
168
+ - API-key scope: `campaigns:delete`
169
+
170
+ Drop the page's own consent settings so it inherits the workspace default.
171
+
172
+ Spends nothing.
173
+
174
+ **Input**
175
+
176
+ | Field | Type | Required | Description |
177
+ |---|---|---|---|
178
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
179
+
180
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
181
+
182
+ Other envelope fields: `pagination` (PaginationMeta).
183
+
184
+ **Example**
185
+
186
+ ```ts
187
+ // destructive: deletes or archives data; confirm with a human before calling.
188
+ const result = await g8.api.landingPages.clearLandingPageConsentOverride({ path: { landing_page_id: "id" } });
189
+ ```
190
+
191
+ ---
192
+
193
+ <a id="op-clonehomepagetolandingpage"></a>
194
+
195
+ ### `g8.api.landingPages.cloneHomepageToLandingPage(input)`
196
+
197
+ **Clone Homepage To Landing Page**
198
+
199
+ - HTTP: `POST /api/v1/landing-pages/clone-homepage`
200
+ - operationId: `clone_homepage_to_landing_page_landing_pages_clone_homepage_post` (also callable as `g8.api.call("clone_homepage_to_landing_page_landing_pages_clone_homepage_post", input)`)
201
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
202
+ - API-key scope: `campaigns:run`
203
+
204
+ Clone the org's homepage into an editable page. SPENDS CREDIT.
205
+
206
+ `use_vision` is on by default and is the expensive half: it runs a
207
+ multimodal pass over a screenshot so the clone looks like the original
208
+ rather than like its HTML.
209
+
210
+ **Input**
211
+
212
+ | Field | Type | Required | Description |
213
+ |---|---|---|---|
214
+ | `body` | `CloneHomepageRequest` | yes | Request body; fields below. |
215
+
216
+ Body fields (`CloneHomepageRequest`):
217
+
218
+ | Field | Type | Required | Description |
219
+ |---|---|---|---|
220
+ | `body.description` | `string \| null` | no | |
221
+ | `body.goal` | `string \| null` | no | |
222
+ | `body.name` | `string \| null` | no | |
223
+ | `body.use_vision` | `boolean` | no | default `true` |
224
+
225
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
226
+
227
+ Other envelope fields: `pagination` (PaginationMeta).
228
+
229
+ **Example**
230
+
231
+ ```ts
232
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
233
+ const result = await g8.api.landingPages.cloneHomepageToLandingPage({ body: {} });
234
+ ```
235
+
236
+ ---
237
+
238
+ <a id="op-clonehtmltolandingpage"></a>
239
+
240
+ ### `g8.api.landingPages.cloneHtmlToLandingPage(input)`
241
+
242
+ **Clone Html To Landing Page**
243
+
244
+ - HTTP: `POST /api/v1/landing-pages/clone-html`
245
+ - operationId: `clone_html_to_landing_page_landing_pages_clone_html_post` (also callable as `g8.api.call("clone_html_to_landing_page_landing_pages_clone_html_post", input)`)
246
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
247
+ - API-key scope: `campaigns:run`
248
+
249
+ Clone from raw source the caller already holds. SPENDS CREDIT.
250
+
251
+ `use_vision` defaults OFF here and ON for `/clone-url`, which is the app's
252
+ asymmetry and a real one: there is no live page to screenshot.
253
+
254
+ **Input**
255
+
256
+ | Field | Type | Required | Description |
257
+ |---|---|---|---|
258
+ | `body` | `CloneHtmlRequest` | yes | Request body; fields below. |
259
+
260
+ Body fields (`CloneHtmlRequest`):
261
+
262
+ | Field | Type | Required | Description |
263
+ |---|---|---|---|
264
+ | `body.html` | `string` | yes | min length 16, max length 2000000 |
265
+ | `body.filename` | `string \| null` | no | Original filename - drives format detection (e.g. dialer.astro). max length 300 |
266
+ | `body.name` | `string \| null` | no | max length 200 |
267
+ | `body.source_url` | `string \| null` | no | max length 2048 |
268
+ | `body.use_vision` | `boolean` | no | default `false` |
269
+
270
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
271
+
272
+ Other envelope fields: `pagination` (PaginationMeta).
273
+
274
+ **Example**
275
+
276
+ ```ts
277
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
278
+ const result = await g8.api.landingPages.cloneHtmlToLandingPage({ body: { html: "xxxxxxxxxxxxxxxx" } });
279
+ ```
280
+
281
+ ---
282
+
283
+ <a id="op-cloneurltolandingpage"></a>
284
+
285
+ ### `g8.api.landingPages.cloneUrlToLandingPage(input)`
286
+
287
+ **Clone Url To Landing Page**
288
+
289
+ - HTTP: `POST /api/v1/landing-pages/clone-url`
290
+ - operationId: `clone_url_to_landing_page_landing_pages_clone_url_post` (also callable as `g8.api.call("clone_url_to_landing_page_landing_pages_clone_url_post", input)`)
291
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
292
+ - API-key scope: `campaigns:run`
293
+
294
+ Clone ANY public URL into an editable page. SPENDS CREDIT.
295
+
296
+ It fetches the URL server-side, so the page has to be publicly reachable -
297
+ this is not a way to read something behind the caller's own login.
298
+
299
+ **Input**
300
+
301
+ | Field | Type | Required | Description |
302
+ |---|---|---|---|
303
+ | `body` | `CloneUrlRequest` | yes | Request body; fields below. |
304
+
305
+ Body fields (`CloneUrlRequest`):
306
+
307
+ | Field | Type | Required | Description |
308
+ |---|---|---|---|
309
+ | `body.url` | `string` | yes | min length 1, max length 2048 |
310
+ | `body.name` | `string \| null` | no | max length 200 |
311
+ | `body.use_vision` | `boolean` | no | Multimodal pass. Costs more. Default on. default `true` |
312
+
313
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
314
+
315
+ Other envelope fields: `pagination` (PaginationMeta).
316
+
317
+ **Example**
318
+
319
+ ```ts
320
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
321
+ const result = await g8.api.landingPages.cloneUrlToLandingPage({ body: { url: "https://example.com" } });
322
+ ```
323
+
324
+ ---
325
+
326
+ <a id="op-convertlandingpagetofreeform"></a>
327
+
328
+ ### `g8.api.landingPages.convertLandingPageToFreeform(input)`
329
+
330
+ **Convert Landing Page To Freeform**
331
+
332
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/convert-to-freeform`
333
+ - operationId: `convert_landing_page_to_freeform_landing_pages__landing_page_id__convert_to_freeform_post` (also callable as `g8.api.call("convert_landing_page_to_freeform_landing_pages__landing_page_id__convert_to_freeform_post", input)`)
334
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
335
+ - API-key scope: `campaigns:write`
336
+
337
+ Flatten a sections-mode page into freeform HTML. FREE.
338
+
339
+ ONE-WAY: there is no convert-back, and `PATCH /sections/{idx}` stops
340
+ applying to the page afterwards.
341
+
342
+ **Input**
343
+
344
+ | Field | Type | Required | Description |
345
+ |---|---|---|---|
346
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
347
+
348
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
349
+
350
+ Other envelope fields: `pagination` (PaginationMeta).
351
+
352
+ **Example**
353
+
354
+ ```ts
355
+ const result = await g8.api.landingPages.convertLandingPageToFreeform({ path: { landing_page_id: "id" } });
356
+ ```
357
+
358
+ ---
359
+
360
+ <a id="op-createlandingpage"></a>
361
+
362
+ ### `g8.api.landingPages.createLandingPage(input)`
363
+
364
+ **Create Landing Page**
365
+
366
+ - HTTP: `POST /api/v1/landing-pages`
367
+ - operationId: `create_landing_page_landing_pages_post` (also callable as `g8.api.call("create_landing_page_landing_pages_post", input)`)
368
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
369
+ - API-key scope: `campaigns:run`
370
+
371
+ Create a landing page. SPENDS CREDIT unless `generate` is false.
372
+
373
+ `generate` defaults TRUE, matching Studio, and that default is the whole
374
+ cost of this call: it runs the full copy-and-layout pass. Send
375
+ `generate: false` for an empty page you will fill with `/clone-url`,
376
+ `/import-html` or the deterministic edit routes.
377
+
378
+ `created_by` is the API key's own principal. An organisation key records
379
+ the key's identity rather than a person's, which is the honest answer -
380
+ there is no human behind it.
381
+
382
+ **Input**
383
+
384
+ | Field | Type | Required | Description |
385
+ |---|---|---|---|
386
+ | `body` | `CreateLandingPageRequest` | yes | Request body; fields below. |
387
+
388
+ Body fields (`CreateLandingPageRequest`):
389
+
390
+ | Field | Type | Required | Description |
391
+ |---|---|---|---|
392
+ | `body.campaign_id` | `string \| null` | no | |
393
+ | `body.generate` | `boolean` | no | Run the AI generation pass. TRUE BY DEFAULT and it spends credit. default `true` |
394
+ | `body.generation_mode` | `string \| null` | no | default `"freeform"` |
395
+ | `body.goal` | `string \| null` | no | |
396
+ | `body.name` | `string \| null` | no | |
397
+
398
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
399
+
400
+ Other envelope fields: `pagination` (PaginationMeta).
401
+
402
+ **Example**
403
+
404
+ ```ts
405
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
406
+ const result = await g8.api.landingPages.createLandingPage({ body: {} });
407
+ ```
408
+
409
+ ---
410
+
411
+ <a id="op-createlandingpageagentsession"></a>
412
+
413
+ ### `g8.api.landingPages.createLandingPageAgentSession(input)`
414
+
415
+ **Create Landing Page Agent Session**
416
+
417
+ - HTTP: `POST /api/v1/landing-pages/{page_id}/agent-sessions`
418
+ - operationId: `create_landing_page_agent_session_landing_pages__page_id__agent_sessions_post` (also callable as `g8.api.call("create_landing_page_agent_session_landing_pages__page_id__agent_sessions_post", input)`)
419
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
420
+ - API-key scope: `integrations:write`
421
+
422
+ Open a short-lived edit session against one landing page.
423
+
424
+ Returns an `edit_session` id to pass to the two routes above. The session is
425
+ a LOCATOR, not a credential: it selects which draft the following calls act
426
+ on, and `get_api_user` still authenticates every one of them. It carries a
427
+ TTL and is bound at creation to this org and this actor.
428
+
429
+ `actor_email` is `str(user.id)`, byte-identical to what the read and patch
430
+ routes pass to `require_edit_session`. That is what closes the loop: a
431
+ session minted here resolves for the same key that minted it, and a mismatch
432
+ would make every subsequent call 404 against a session that plainly exists.
433
+
434
+ NO OWNABILITY GUARD, unlike the agent routes. `agent_router` refuses a write
435
+ from a key whose `actor_identities()` is empty, because an org key
436
+ authenticates as the shared constant `api-key@graph8.com`. The same constant
437
+ lands in `actor_email` here, so two org keys in ONE org can read and patch
438
+ each other's sessions. That is deliberate parity rather than an oversight:
439
+ the two sibling routes already bind on `str(user.id)` and already accept org
440
+ keys, so guarding only the create half would break the loop for exactly the
441
+ keys the other half still serves. The boundary that matters is unchanged --
442
+ `require_edit_session` rejects a session from another ORG. Tightening all
443
+ three together belongs with the per-key identity work recorded in
444
+ `.claude/agent-context/agent-runtime-api-key-door.md`.
445
+
446
+ NOT SCOPE-GATED LOCALLY, unlike its two siblings, and that is deliberate
447
+ rather than an oversight. They call `require_scope("landing-pages:...")`,
448
+ which makes `build_scope_policy` record them as `exempt`; an exempt route
449
+ publishes no `x-graph8-scope`, so their requirement is real but invisible in
450
+ the contract -- and `landing-pages` is not a resource in
451
+ `scope_vocabulary.json` at all, so the scope they name cannot be granted to
452
+ a key. It is inert today only because `require_scope` runs in soak mode by
453
+ default. Leaving this route ungated puts it in the GOVERNED set, where
454
+ `apply_scope_policy` attaches the gate and the bundle publishes
455
+ `integrations:write` -- the resource this file is actually mapped to. The
456
+ siblings are left alone here: correcting them moves two published operations
457
+ and belongs in its own change.
458
+
459
+ **Input**
460
+
461
+ | Field | Type | Required | Description |
462
+ |---|---|---|---|
463
+ | `path.page_id` | `string` | yes | |
464
+ | `body` | `CreateAgentSessionRequest \| null` | no | Request body; fields below. |
465
+
466
+ Body fields:
467
+
468
+ | Field | Type | Required | Description |
469
+ |---|---|---|---|
470
+ | `body.approval_mode` | `string` | no | 'review' (default) stages each patch for a human to approve in Studio. 'auto_apply' writes straight to the draft. Bound to the session at creation, so a later patch cannot escalate itself. default `"review"`, pattern `^(review\|auto_apply)$` |
471
+
472
+ **Returns** `ApiResponse_dict_str__Any__`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
473
+
474
+ Other envelope fields: `pagination` (PaginationMeta).
475
+
476
+ **Example**
477
+
478
+ ```ts
479
+ const result = await g8.api.landingPages.createLandingPageAgentSession({ path: { page_id: "id" } });
480
+ ```
481
+
482
+ ---
483
+
484
+ <a id="op-createlandingpagepreviewlink"></a>
485
+
486
+ ### `g8.api.landingPages.createLandingPagePreviewLink(input)`
487
+
488
+ **Create Landing Page Preview Link**
489
+
490
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/preview`
491
+ - operationId: `create_landing_page_preview_link_landing_pages__landing_page_id__preview_get` (also callable as `g8.api.call("create_landing_page_preview_link_landing_pages__landing_page_id__preview_get", input)`)
492
+ - Tier: `read`: reads data; safe to call and to retry
493
+ - API-key scope: `campaigns:read`
494
+
495
+ Mint a time-limited preview link for an UNPUBLISHED page. FREE.
496
+
497
+ Anyone holding the link can view the draft until it expires - share it
498
+ for review, not publicly. Nothing is published.
499
+
500
+ **Input**
501
+
502
+ | Field | Type | Required | Description |
503
+ |---|---|---|---|
504
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
505
+
506
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
507
+
508
+ Other envelope fields: `pagination` (PaginationMeta).
509
+
510
+ **Example**
511
+
512
+ ```ts
513
+ const result = await g8.api.landingPages.createLandingPagePreviewLink({ path: { landing_page_id: "id" } });
514
+ ```
515
+
516
+ ---
517
+
518
+ <a id="op-deletelandingpage"></a>
519
+
520
+ ### `g8.api.landingPages.deleteLandingPage(input)`
521
+
522
+ **Delete Landing Page**
523
+
524
+ - HTTP: `DELETE /api/v1/landing-pages/{landing_page_id}`
525
+ - operationId: `delete_landing_page_landing_pages__landing_page_id__delete` (also callable as `g8.api.call("delete_landing_page_landing_pages__landing_page_id__delete", input)`)
526
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
527
+ - API-key scope: `campaigns:delete`
528
+
529
+ Delete a landing page. Unpublish it first if it is live.
530
+
531
+ Spends nothing.
532
+
533
+ **Input**
534
+
535
+ | Field | Type | Required | Description |
536
+ |---|---|---|---|
537
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
538
+
539
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
540
+
541
+ Other envelope fields: `pagination` (PaginationMeta).
542
+
543
+ **Example**
544
+
545
+ ```ts
546
+ // destructive: deletes or archives data; confirm with a human before calling.
547
+ const result = await g8.api.landingPages.deleteLandingPage({ path: { landing_page_id: "id" } });
548
+ ```
549
+
550
+ ---
551
+
552
+ <a id="op-demotelandingpagetotemplate"></a>
553
+
554
+ ### `g8.api.landingPages.demoteLandingPageToTemplate(input)`
555
+
556
+ **Demote Landing Page To Template**
557
+
558
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/demote-to-template`
559
+ - operationId: `demote_landing_page_to_template_landing_pages__landing_page_id__demote_to_template_post` (also callable as `g8.api.call("demote_landing_page_to_template_landing_pages__landing_page_id__demote_to_template_post", input)`)
560
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
561
+ - API-key scope: `campaigns:write`
562
+
563
+ Move a saved page back into the template list. FREE. Inverse of promote.
564
+
565
+ **Input**
566
+
567
+ | Field | Type | Required | Description |
568
+ |---|---|---|---|
569
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
570
+
571
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
572
+
573
+ Other envelope fields: `pagination` (PaginationMeta).
574
+
575
+ **Example**
576
+
577
+ ```ts
578
+ const result = await g8.api.landingPages.demoteLandingPageToTemplate({ path: { landing_page_id: "id" } });
579
+ ```
580
+
581
+ ---
582
+
583
+ <a id="op-duplicatelandingpagetemplate"></a>
584
+
585
+ ### `g8.api.landingPages.duplicateLandingPageTemplate(input)`
586
+
587
+ **Duplicate Landing Page Template**
588
+
589
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/duplicate`
590
+ - operationId: `duplicate_landing_page_template_landing_pages__landing_page_id__duplicate_post` (also callable as `g8.api.call("duplicate_landing_page_template_landing_pages__landing_page_id__duplicate_post", input)`)
591
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
592
+ - API-key scope: `campaigns:write`
593
+
594
+ Copy a Brand Kit TEMPLATE as another template. FREE - no model runs.
595
+
596
+ Only an org template can be duplicated (400 otherwise); to turn a
597
+ template into an editable page use `/save-as-page`. `created_by` is the
598
+ API key's own principal.
599
+
600
+ **Input**
601
+
602
+ | Field | Type | Required | Description |
603
+ |---|---|---|---|
604
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
605
+ | `body` | `DuplicateTemplateRequest` | yes | Request body; fields below. |
606
+
607
+ Body fields (`DuplicateTemplateRequest`):
608
+
609
+ | Field | Type | Required | Description |
610
+ |---|---|---|---|
611
+ | `body.name` | `string \| null` | no | max length 200 |
612
+
613
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
614
+
615
+ Other envelope fields: `pagination` (PaginationMeta).
616
+
617
+ **Example**
618
+
619
+ ```ts
620
+ const result = await g8.api.landingPages.duplicateLandingPageTemplate({ path: { landing_page_id: "id" }, body: {} });
621
+ ```
622
+
623
+ ---
624
+
625
+ <a id="op-editlandingpageelement"></a>
626
+
627
+ ### `g8.api.landingPages.editLandingPageElement(input)`
628
+
629
+ **Edit Landing Page Element**
630
+
631
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/edit-element`
632
+ - operationId: `edit_landing_page_element_landing_pages__landing_page_id__edit_element_post` (also callable as `g8.api.call("edit_landing_page_element_landing_pages__landing_page_id__edit_element_post", input)`)
633
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
634
+ - API-key scope: `campaigns:run`
635
+
636
+ Edit ONE element by CSS selector with AI. SPENDS CREDIT.
637
+
638
+ Freeform pages. Narrower and cheaper than `/edit-page`, which rewrites the
639
+ whole document.
640
+
641
+ **Input**
642
+
643
+ | Field | Type | Required | Description |
644
+ |---|---|---|---|
645
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
646
+ | `body` | `EditElementRequest` | yes | Request body; fields below. |
647
+
648
+ Body fields (`EditElementRequest`):
649
+
650
+ | Field | Type | Required | Description |
651
+ |---|---|---|---|
652
+ | `body.instruction` | `string` | yes | |
653
+ | `body.selector` | `string` | yes | |
654
+
655
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
656
+
657
+ Other envelope fields: `pagination` (PaginationMeta).
658
+
659
+ **Example**
660
+
661
+ ```ts
662
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
663
+ const result = await g8.api.landingPages.editLandingPageElement({
664
+ path: { landing_page_id: "id" },
665
+ body: { instruction: "example", selector: "example" },
666
+ });
667
+ ```
668
+
669
+ ---
670
+
671
+ <a id="op-editlandingpagewhole"></a>
672
+
673
+ ### `g8.api.landingPages.editLandingPageWhole(input)`
674
+
675
+ **Edit Landing Page Whole**
676
+
677
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/edit-page`
678
+ - operationId: `edit_landing_page_whole_landing_pages__landing_page_id__edit_page_post` (also callable as `g8.api.call("edit_landing_page_whole_landing_pages__landing_page_id__edit_page_post", input)`)
679
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
680
+ - API-key scope: `campaigns:run`
681
+
682
+ Rewrite the WHOLE page from one instruction. SPENDS CREDIT.
683
+
684
+ The most expensive edit on this router - it puts the entire document
685
+ through the model. Reach for `/edit-element` or `/rewrite-text` first.
686
+
687
+ **Input**
688
+
689
+ | Field | Type | Required | Description |
690
+ |---|---|---|---|
691
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
692
+ | `body` | `EditWithChatRequest` | yes | Request body; fields below. |
693
+
694
+ Body fields (`EditWithChatRequest`):
695
+
696
+ | Field | Type | Required | Description |
697
+ |---|---|---|---|
698
+ | `body.instruction` | `string` | yes | |
699
+ | `body.section_idx` | `integer \| null` | no | |
700
+ | `body.selected_text` | `string \| null` | no | |
701
+
702
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
703
+
704
+ Other envelope fields: `pagination` (PaginationMeta).
705
+
706
+ **Example**
707
+
708
+ ```ts
709
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
710
+ const result = await g8.api.landingPages.editLandingPageWhole({ path: { landing_page_id: "id" }, body: { instruction: "example" } });
711
+ ```
712
+
713
+ ---
714
+
715
+ <a id="op-editlandingpagewithchat"></a>
716
+
717
+ ### `g8.api.landingPages.editLandingPageWithChat(input)`
718
+
719
+ **Edit Landing Page With Chat**
720
+
721
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/edit`
722
+ - operationId: `edit_landing_page_with_chat_landing_pages__landing_page_id__edit_post` (also callable as `g8.api.call("edit_landing_page_with_chat_landing_pages__landing_page_id__edit_post", input)`)
723
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
724
+ - API-key scope: `campaigns:run`
725
+
726
+ Edit the page from a natural-language instruction. SPENDS CREDIT.
727
+
728
+ The buffered form of the Studio chat edit. The streaming one is
729
+ deliberately not published - see the module docstring.
730
+
731
+ **Input**
732
+
733
+ | Field | Type | Required | Description |
734
+ |---|---|---|---|
735
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
736
+ | `body` | `EditWithChatRequest` | yes | Request body; fields below. |
737
+
738
+ Body fields (`EditWithChatRequest`):
739
+
740
+ | Field | Type | Required | Description |
741
+ |---|---|---|---|
742
+ | `body.instruction` | `string` | yes | |
743
+ | `body.section_idx` | `integer \| null` | no | |
744
+ | `body.selected_text` | `string \| null` | no | |
745
+
746
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
747
+
748
+ Other envelope fields: `pagination` (PaginationMeta).
749
+
750
+ **Example**
751
+
752
+ ```ts
753
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
754
+ const result = await g8.api.landingPages.editLandingPageWithChat({ path: { landing_page_id: "id" }, body: { instruction: "example" } });
755
+ ```
756
+
757
+ ---
758
+
759
+ <a id="op-ensurelandingpagebasetemplate"></a>
760
+
761
+ ### `g8.api.landingPages.ensureLandingPageBaseTemplate(input?)`
762
+
763
+ **Ensure Landing Page Base Template**
764
+
765
+ - HTTP: `POST /api/v1/landing-pages/ensure-base-template`
766
+ - operationId: `ensure_landing_page_base_template_landing_pages_ensure_base_template_post` (also callable as `g8.api.call("ensure_landing_page_base_template_landing_pages_ensure_base_template_post", input)`)
767
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
768
+ - API-key scope: `campaigns:run`
769
+
770
+ Return the org's base template, creating it if there is none.
771
+
772
+ IDEMPOTENT: it returns the existing template when one exists and spends
773
+ nothing. It SPENDS CREDIT only on the first call for an org, where it
774
+ clones the homepage to make one.
775
+
776
+ **Input**: none.
777
+
778
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
779
+
780
+ Other envelope fields: `pagination` (PaginationMeta).
781
+
782
+ **Example**
783
+
784
+ ```ts
785
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
786
+ const result = await g8.api.landingPages.ensureLandingPageBaseTemplate();
787
+ ```
788
+
789
+ ---
790
+
791
+ <a id="op-exportlandingpage"></a>
792
+
793
+ ### `g8.api.landingPages.exportLandingPage(input)`
794
+
795
+ **Export Landing Page**
796
+
797
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/export`
798
+ - operationId: `export_landing_page_landing_pages__landing_page_id__export_get` (also callable as `g8.api.call("export_landing_page_landing_pages__landing_page_id__export_get", input)`)
799
+ - Tier: `read`: reads data; safe to call and to retry
800
+ - API-key scope: `campaigns:read`
801
+
802
+ The page as one self-contained HTML document. FREE.
803
+
804
+ For hosting the page yourself: styles and assets are inlined, so the
805
+ document renders without graph8.
806
+
807
+ **Input**
808
+
809
+ | Field | Type | Required | Description |
810
+ |---|---|---|---|
811
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
812
+
813
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
814
+
815
+ Other envelope fields: `pagination` (PaginationMeta).
816
+
817
+ **Example**
818
+
819
+ ```ts
820
+ const result = await g8.api.landingPages.exportLandingPage({ path: { landing_page_id: "id" } });
821
+ ```
822
+
823
+ ---
824
+
825
+ <a id="op-extractlandingpagecomponents"></a>
826
+
827
+ ### `g8.api.landingPages.extractLandingPageComponents(input?)`
828
+
829
+ **Extract Landing Page Components**
830
+
831
+ - HTTP: `POST /api/v1/landing-pages/components/extract`
832
+ - operationId: `extract_landing_page_components_landing_pages_components_extract_post` (also callable as `g8.api.call("extract_landing_page_components_landing_pages_components_extract_post", input)`)
833
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
834
+ - API-key scope: `campaigns:run`
835
+
836
+ Re-extract components from the cloned homepage. SPENDS CREDIT.
837
+
838
+ The same work `GET /components` returns the cached result of, run again on
839
+ purpose - use the GET unless the homepage clone has changed.
840
+
841
+ **Input**: none.
842
+
843
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
844
+
845
+ Other envelope fields: `pagination` (PaginationMeta).
846
+
847
+ `StudioContentListPayload` fields:
848
+
849
+ | Field | Type | Required | Description |
850
+ |---|---|---|---|
851
+ | `items` | `Array<unknown>` | no | |
852
+
853
+ **Example**
854
+
855
+ ```ts
856
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
857
+ const result = await g8.api.landingPages.extractLandingPageComponents();
858
+ ```
859
+
860
+ ---
861
+
862
+ <a id="op-fixlandingpagefindingwithai"></a>
863
+
864
+ ### `g8.api.landingPages.fixLandingPageFindingWithAi(input)`
865
+
866
+ **Fix Landing Page Finding With Ai**
867
+
868
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/ai-review/fix-with-ai`
869
+ - operationId: `fix_landing_page_finding_with_ai_landing_pages__landing_page_id__ai_review_fix_with_ai_post` (also callable as `g8.api.call("fix_landing_page_finding_with_ai_landing_pages__landing_page_id__ai_review_fix_with_ai_post", input)`)
870
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
871
+ - API-key scope: `campaigns:run`
872
+
873
+ Send ONE finding to the edit engine. SPENDS CREDIT, per finding.
874
+
875
+ One call per finding: fixing ten findings is ten passes, not one.
876
+
877
+ **Input**
878
+
879
+ | Field | Type | Required | Description |
880
+ |---|---|---|---|
881
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
882
+ | `body` | `AIReviewFixWithAIRequest` | yes | Request body; fields below. |
883
+
884
+ Body fields (`AIReviewFixWithAIRequest`):
885
+
886
+ | Field | Type | Required | Description |
887
+ |---|---|---|---|
888
+ | `body.finding` | `Record<string, unknown>` | yes | |
889
+ | `body.brand_mode` | `string \| null` | no | |
890
+
891
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
892
+
893
+ Other envelope fields: `pagination` (PaginationMeta).
894
+
895
+ **Example**
896
+
897
+ ```ts
898
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
899
+ const result = await g8.api.landingPages.fixLandingPageFindingWithAi({ path: { landing_page_id: "id" }, body: { finding: {} } });
900
+ ```
901
+
902
+ ---
903
+
904
+ <a id="op-generatelandingpageseometadata"></a>
905
+
906
+ ### `g8.api.landingPages.generateLandingPageSeoMetadata(input)`
907
+
908
+ **Generate Landing Page Seo Metadata**
909
+
910
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/generate-seo-metadata`
911
+ - operationId: `generate_landing_page_seo_metadata_landing_pages__landing_page_id__generate_seo_metadata_post` (also callable as `g8.api.call("generate_landing_page_seo_metadata_landing_pages__landing_page_id__generate_seo_metadata_post", input)`)
912
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
913
+ - API-key scope: `campaigns:run`
914
+
915
+ Derive title, description and keywords from the page. SPENDS CREDIT.
916
+
917
+ **Input**
918
+
919
+ | Field | Type | Required | Description |
920
+ |---|---|---|---|
921
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
922
+
923
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
924
+
925
+ Other envelope fields: `pagination` (PaginationMeta).
926
+
927
+ **Example**
928
+
929
+ ```ts
930
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
931
+ const result = await g8.api.landingPages.generateLandingPageSeoMetadata({ path: { landing_page_id: "id" } });
932
+ ```
933
+
934
+ ---
935
+
936
+ <a id="op-getlandingpage"></a>
937
+
938
+ ### `g8.api.landingPages.getLandingPage(input)`
939
+
940
+ **Get Landing Page**
941
+
942
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}`
943
+ - operationId: `get_landing_page_landing_pages__landing_page_id__get` (also callable as `g8.api.call("get_landing_page_landing_pages__landing_page_id__get", input)`)
944
+ - Tier: `read`: reads data; safe to call and to retry
945
+ - API-key scope: `campaigns:read`
946
+
947
+ One page with its full detail, including its HTML. FREE.
948
+
949
+ **Input**
950
+
951
+ | Field | Type | Required | Description |
952
+ |---|---|---|---|
953
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
954
+
955
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
956
+
957
+ Other envelope fields: `pagination` (PaginationMeta).
958
+
959
+ **Example**
960
+
961
+ ```ts
962
+ const result = await g8.api.landingPages.getLandingPage({ path: { landing_page_id: "id" } });
963
+ ```
964
+
965
+ ---
966
+
967
+ <a id="op-getlandingpageconsentdefault"></a>
968
+
969
+ ### `g8.api.landingPages.getLandingPageConsentDefault(input?)`
970
+
971
+ **Get Landing Page Consent Default**
972
+
973
+ - HTTP: `GET /api/v1/landing-page-consent/default`
974
+ - operationId: `get_landing_page_consent_default_landing_page_consent_default_get` (also callable as `g8.api.call("get_landing_page_consent_default_landing_page_consent_default_get", input)`)
975
+ - Tier: `read`: reads data; safe to call and to retry
976
+ - API-key scope: `campaigns:read`
977
+
978
+ The workspace-wide consent gate default. FREE. `consent: null` means none is set.
979
+
980
+ **Input**: none.
981
+
982
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
983
+
984
+ Other envelope fields: `pagination` (PaginationMeta).
985
+
986
+ **Example**
987
+
988
+ ```ts
989
+ const result = await g8.api.landingPages.getLandingPageConsentDefault();
990
+ ```
991
+
992
+ ---
993
+
994
+ <a id="op-getlandingpageconversation"></a>
995
+
996
+ ### `g8.api.landingPages.getLandingPageConversation(input)`
997
+
998
+ **Get Landing Page Conversation**
999
+
1000
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/conversation`
1001
+ - operationId: `get_landing_page_conversation_landing_pages__landing_page_id__conversation_get` (also callable as `g8.api.call("get_landing_page_conversation_landing_pages__landing_page_id__conversation_get", input)`)
1002
+ - Tier: `read`: reads data; safe to call and to retry
1003
+ - API-key scope: `campaigns:read`
1004
+
1005
+ The AI edit conversation recorded against this page. FREE.
1006
+
1007
+ Every `/edit`, `/edit-element` and `/edit-page` instruction and the
1008
+ assistant's reply, in order.
1009
+
1010
+ **Input**
1011
+
1012
+ | Field | Type | Required | Description |
1013
+ |---|---|---|---|
1014
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1015
+
1016
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1017
+
1018
+ Other envelope fields: `pagination` (PaginationMeta).
1019
+
1020
+ **Example**
1021
+
1022
+ ```ts
1023
+ const result = await g8.api.landingPages.getLandingPageConversation({ path: { landing_page_id: "id" } });
1024
+ ```
1025
+
1026
+ ---
1027
+
1028
+ <a id="op-getlandingpagedesignsystem"></a>
1029
+
1030
+ ### `g8.api.landingPages.getLandingPageDesignSystem(input?)`
1031
+
1032
+ **Get Landing Page Design System**
1033
+
1034
+ - HTTP: `GET /api/v1/landing-pages/design-system`
1035
+ - operationId: `get_landing_page_design_system_landing_pages_design_system_get` (also callable as `g8.api.call("get_landing_page_design_system_landing_pages_design_system_get", input)`)
1036
+ - Tier: `read`: reads data; safe to call and to retry
1037
+ - API-key scope: `campaigns:read`
1038
+
1039
+ The org's colours, type and spacing, as generation uses them. FREE.
1040
+
1041
+ **Input**: none.
1042
+
1043
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1044
+
1045
+ Other envelope fields: `pagination` (PaginationMeta).
1046
+
1047
+ **Example**
1048
+
1049
+ ```ts
1050
+ const result = await g8.api.landingPages.getLandingPageDesignSystem();
1051
+ ```
1052
+
1053
+ ---
1054
+
1055
+ <a id="op-getlandingpagemanifest"></a>
1056
+
1057
+ ### `g8.api.landingPages.getLandingPageManifest(input)`
1058
+
1059
+ **Get Landing Page Manifest**
1060
+
1061
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/manifest`
1062
+ - operationId: `get_landing_page_manifest_landing_pages__landing_page_id__manifest_get` (also callable as `g8.api.call("get_landing_page_manifest_landing_pages__landing_page_id__manifest_get", input)`)
1063
+ - Tier: `read`: reads data; safe to call and to retry
1064
+ - API-key scope: `campaigns:read`
1065
+
1066
+ The element manifest. FREE.
1067
+
1068
+ The SOURCE of the `element_id` values `/set-text`, `/update-text` and
1069
+ `/set-media-edit` accept. Read it first - an id invented by hand addresses
1070
+ nothing, and `/import-html` with `reassign_g8_ids` invalidates every id you
1071
+ are holding.
1072
+
1073
+ **Input**
1074
+
1075
+ | Field | Type | Required | Description |
1076
+ |---|---|---|---|
1077
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1078
+
1079
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1080
+
1081
+ Other envelope fields: `pagination` (PaginationMeta).
1082
+
1083
+ **Example**
1084
+
1085
+ ```ts
1086
+ const result = await g8.api.landingPages.getLandingPageManifest({ path: { landing_page_id: "id" } });
1087
+ ```
1088
+
1089
+ ---
1090
+
1091
+ <a id="op-getlandingpagereportingoverview"></a>
1092
+
1093
+ ### `g8.api.landingPages.getLandingPageReportingOverview(input?)`
1094
+
1095
+ **Get Landing Page Reporting Overview**
1096
+
1097
+ - HTTP: `GET /api/v1/landing-pages/reporting/overview`
1098
+ - operationId: `get_landing_page_reporting_overview_landing_pages_reporting_overview_get` (also callable as `g8.api.call("get_landing_page_reporting_overview_landing_pages_reporting_overview_get", input)`)
1099
+ - Tier: `read`: reads data; safe to call and to retry
1100
+ - API-key scope: `campaigns:read`
1101
+
1102
+ Landing-page performance: visits, identified people and companies, conversions. FREE.
1103
+
1104
+ **Input**
1105
+
1106
+ | Field | Type | Required | Description |
1107
+ |---|---|---|---|
1108
+ | `query.days` | `integer` | no | Look-back window in days. default `30` |
1109
+ | `query.page_id` | `Array<string> \| null` | no | Only these pages. Repeat the parameter. |
1110
+ | `query.source` | `"all" \| "paid" \| "email" \| "organic" \| "referral" \| "direct"` | no | Traffic source. default `"all"` |
1111
+ | `query.observed_campaign` | `string \| null` | no | Only this UTM campaign. |
1112
+
1113
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1114
+
1115
+ Other envelope fields: `pagination` (PaginationMeta).
1116
+
1117
+ **Example**
1118
+
1119
+ ```ts
1120
+ const result = await g8.api.landingPages.getLandingPageReportingOverview();
1121
+ ```
1122
+
1123
+ ---
1124
+
1125
+ <a id="op-getlandingpagesource"></a>
1126
+
1127
+ ### `g8.api.landingPages.getLandingPageSource(input)`
1128
+
1129
+ **Get Landing Page Source**
1130
+
1131
+ - HTTP: `GET /api/v1/landing-pages/agent-sessions/{session_id}`
1132
+ - operationId: `get_landing_page_source_landing_pages_agent_sessions__session_id__get` (also callable as `g8.api.call("get_landing_page_source_landing_pages_agent_sessions__session_id__get", input)`)
1133
+ - Tier: `read`: reads data; safe to call and to retry
1134
+ - API-key scope: `landing-pages:read`
1135
+
1136
+ Return exact source for the draft bound to an edit session.
1137
+
1138
+ **Input**
1139
+
1140
+ | Field | Type | Required | Description |
1141
+ |---|---|---|---|
1142
+ | `path.session_id` | `string` | yes | |
1143
+
1144
+ **Returns** `ApiResponse_dict_str__Any__`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1145
+
1146
+ Other envelope fields: `pagination` (PaginationMeta).
1147
+
1148
+ **Example**
1149
+
1150
+ ```ts
1151
+ const result = await g8.api.landingPages.getLandingPageSource({ path: { session_id: "id" } });
1152
+ ```
1153
+
1154
+ ---
1155
+
1156
+ <a id="op-getlandingpagestatus"></a>
1157
+
1158
+ ### `g8.api.landingPages.getLandingPageStatus(input)`
1159
+
1160
+ **Get Landing Page Status**
1161
+
1162
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/status`
1163
+ - operationId: `get_landing_page_status_landing_pages__landing_page_id__status_get` (also callable as `g8.api.call("get_landing_page_status_landing_pages__landing_page_id__status_get", input)`)
1164
+ - Tier: `read`: reads data; safe to call and to retry
1165
+ - API-key scope: `campaigns:read`
1166
+
1167
+ Generation progress for one page. FREE.
1168
+
1169
+ The poll target after `POST /landing-pages` or a clone: generation runs in
1170
+ the background and this says whether the page is still being written.
1171
+
1172
+ **Input**
1173
+
1174
+ | Field | Type | Required | Description |
1175
+ |---|---|---|---|
1176
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1177
+
1178
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1179
+
1180
+ Other envelope fields: `pagination` (PaginationMeta).
1181
+
1182
+ **Example**
1183
+
1184
+ ```ts
1185
+ const result = await g8.api.landingPages.getLandingPageStatus({ path: { landing_page_id: "id" } });
1186
+ ```
1187
+
1188
+ ---
1189
+
1190
+ <a id="op-getlandingpagetracking"></a>
1191
+
1192
+ ### `g8.api.landingPages.getLandingPageTracking(input)`
1193
+
1194
+ **Get Landing Page Tracking**
1195
+
1196
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/tracking`
1197
+ - operationId: `get_landing_page_tracking_landing_pages__landing_page_id__tracking_get` (also callable as `g8.api.call("get_landing_page_tracking_landing_pages__landing_page_id__tracking_get", input)`)
1198
+ - Tier: `read`: reads data; safe to call and to retry
1199
+ - API-key scope: `campaigns:read`
1200
+
1201
+ The page's tracking mode, form id, chat widget, consent and conversion goal. FREE.
1202
+
1203
+ **Input**
1204
+
1205
+ | Field | Type | Required | Description |
1206
+ |---|---|---|---|
1207
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1208
+
1209
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1210
+
1211
+ Other envelope fields: `pagination` (PaginationMeta).
1212
+
1213
+ **Example**
1214
+
1215
+ ```ts
1216
+ const result = await g8.api.landingPages.getLandingPageTracking({ path: { landing_page_id: "id" } });
1217
+ ```
1218
+
1219
+ ---
1220
+
1221
+ <a id="op-importlandingpagehtml"></a>
1222
+
1223
+ ### `g8.api.landingPages.importLandingPageHtml(input)`
1224
+
1225
+ **Import Landing Page Html**
1226
+
1227
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/import-html`
1228
+ - operationId: `import_landing_page_html_landing_pages__landing_page_id__import_html_post` (also callable as `g8.api.call("import_landing_page_html_landing_pages__landing_page_id__import_html_post", input)`)
1229
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1230
+ - API-key scope: `campaigns:write`
1231
+
1232
+ Import externally edited HTML into the draft. FREE.
1233
+
1234
+ `commit` defaults FALSE, which makes the default call a DRY RUN reporting
1235
+ what would change. Send `commit: true` to write it.
1236
+
1237
+ **Input**
1238
+
1239
+ | Field | Type | Required | Description |
1240
+ |---|---|---|---|
1241
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1242
+ | `body` | `ImportHtmlRequest` | yes | Request body; fields below. |
1243
+
1244
+ Body fields (`ImportHtmlRequest`):
1245
+
1246
+ | Field | Type | Required | Description |
1247
+ |---|---|---|---|
1248
+ | `body.html` | `string` | yes | min length 16, max length 2000000 |
1249
+ | `body.commit` | `boolean` | no | False previews; true writes the draft. default `false` |
1250
+ | `body.confirm_action_rebuild` | `boolean` | no | default `false` |
1251
+ | `body.reassign_g8_ids` | `boolean` | no | default `false` |
1252
+ | `body.reinfer_button_actions` | `boolean` | no | default `false` |
1253
+ | `body.strip_vendor_css` | `boolean` | no | default `false` |
1254
+
1255
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1256
+
1257
+ Other envelope fields: `pagination` (PaginationMeta).
1258
+
1259
+ **Example**
1260
+
1261
+ ```ts
1262
+ const result = await g8.api.landingPages.importLandingPageHtml({
1263
+ path: { landing_page_id: "id" },
1264
+ body: { html: "xxxxxxxxxxxxxxxx" },
1265
+ });
1266
+ ```
1267
+
1268
+ ---
1269
+
1270
+ <a id="op-listlandingpageanchors"></a>
1271
+
1272
+ ### `g8.api.landingPages.listLandingPageAnchors(input)`
1273
+
1274
+ **List Landing Page Anchors**
1275
+
1276
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/anchors`
1277
+ - operationId: `list_landing_page_anchors_landing_pages__landing_page_id__anchors_get` (also callable as `g8.api.call("list_landing_page_anchors_landing_pages__landing_page_id__anchors_get", input)`)
1278
+ - Tier: `read`: reads data; safe to call and to retry
1279
+ - API-key scope: `campaigns:read`
1280
+
1281
+ The page's named anchors. FREE - the valid targets for an in-page link.
1282
+
1283
+ **Input**
1284
+
1285
+ | Field | Type | Required | Description |
1286
+ |---|---|---|---|
1287
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1288
+
1289
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1290
+
1291
+ Other envelope fields: `pagination` (PaginationMeta).
1292
+
1293
+ `StudioContentListPayload` fields:
1294
+
1295
+ | Field | Type | Required | Description |
1296
+ |---|---|---|---|
1297
+ | `items` | `Array<unknown>` | no | |
1298
+
1299
+ **Example**
1300
+
1301
+ ```ts
1302
+ const result = await g8.api.landingPages.listLandingPageAnchors({ path: { landing_page_id: "id" } });
1303
+ ```
1304
+
1305
+ ---
1306
+
1307
+ <a id="op-listlandingpagebindings"></a>
1308
+
1309
+ ### `g8.api.landingPages.listLandingPageBindings(input)`
1310
+
1311
+ **List Landing Page Bindings**
1312
+
1313
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/bindings`
1314
+ - operationId: `list_landing_page_bindings_landing_pages__landing_page_id__bindings_get` (also callable as `g8.api.call("list_landing_page_bindings_landing_pages__landing_page_id__bindings_get", input)`)
1315
+ - Tier: `read`: reads data; safe to call and to retry
1316
+ - API-key scope: `campaigns:read`
1317
+
1318
+ Every URL this page is currently served at. FREE.
1319
+
1320
+ One page can be bound to several. Read this before unpublishing, because
1321
+ unpublishing drops all of them at once.
1322
+
1323
+ **Input**
1324
+
1325
+ | Field | Type | Required | Description |
1326
+ |---|---|---|---|
1327
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1328
+
1329
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1330
+
1331
+ Other envelope fields: `pagination` (PaginationMeta).
1332
+
1333
+ `StudioContentListPayload` fields:
1334
+
1335
+ | Field | Type | Required | Description |
1336
+ |---|---|---|---|
1337
+ | `items` | `Array<unknown>` | no | |
1338
+
1339
+ **Example**
1340
+
1341
+ ```ts
1342
+ const result = await g8.api.landingPages.listLandingPageBindings({ path: { landing_page_id: "id" } });
1343
+ ```
1344
+
1345
+ ---
1346
+
1347
+ <a id="op-listlandingpagecomponents"></a>
1348
+
1349
+ ### `g8.api.landingPages.listLandingPageComponents(input?)`
1350
+
1351
+ **List Landing Page Components**
1352
+
1353
+ - HTTP: `GET /api/v1/landing-pages/components`
1354
+ - operationId: `list_landing_page_components_landing_pages_components_get` (also callable as `g8.api.call("list_landing_page_components_landing_pages_components_get", input)`)
1355
+ - Tier: `read`: reads data; safe to call and to retry
1356
+ - API-key scope: `campaigns:read`
1357
+
1358
+ UI components extracted from the org's cloned homepage. FREE.
1359
+
1360
+ Reads what a previous extraction stored. `POST /components/extract` is the
1361
+ one that re-derives them.
1362
+
1363
+ **Input**: none.
1364
+
1365
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1366
+
1367
+ Other envelope fields: `pagination` (PaginationMeta).
1368
+
1369
+ `StudioContentListPayload` fields:
1370
+
1371
+ | Field | Type | Required | Description |
1372
+ |---|---|---|---|
1373
+ | `items` | `Array<unknown>` | no | |
1374
+
1375
+ **Example**
1376
+
1377
+ ```ts
1378
+ const result = await g8.api.landingPages.listLandingPageComponents();
1379
+ ```
1380
+
1381
+ ---
1382
+
1383
+ <a id="op-listlandingpageconsentstatus"></a>
1384
+
1385
+ ### `g8.api.landingPages.listLandingPageConsentStatus(input?)`
1386
+
1387
+ **List Landing Page Consent Status**
1388
+
1389
+ - HTTP: `GET /api/v1/landing-page-consent/pages`
1390
+ - operationId: `list_landing_page_consent_status_landing_page_consent_pages_get` (also callable as `g8.api.call("list_landing_page_consent_status_landing_page_consent_pages_get", input)`)
1391
+ - Tier: `read`: reads data; safe to call and to retry
1392
+ - API-key scope: `campaigns:read`
1393
+
1394
+ Per published page: is the consent gate ACTUALLY live on it. FREE.
1395
+
1396
+ Read from the published HTML, not the settings - `stale_count` is how
1397
+ many pages need a re-publish to pick up the current configuration.
1398
+
1399
+ **Input**: none.
1400
+
1401
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1402
+
1403
+ Other envelope fields: `pagination` (PaginationMeta).
1404
+
1405
+ `StudioContentListPayload` fields:
1406
+
1407
+ | Field | Type | Required | Description |
1408
+ |---|---|---|---|
1409
+ | `items` | `Array<unknown>` | no | |
1410
+
1411
+ **Example**
1412
+
1413
+ ```ts
1414
+ const result = await g8.api.landingPages.listLandingPageConsentStatus();
1415
+ ```
1416
+
1417
+ ---
1418
+
1419
+ <a id="op-listlandingpagedomains"></a>
1420
+
1421
+ ### `g8.api.landingPages.listLandingPageDomains(input?)`
1422
+
1423
+ **List Landing Page Domains**
1424
+
1425
+ - HTTP: `GET /api/v1/landing-pages/domains`
1426
+ - operationId: `list_landing_page_domains_landing_pages_domains_get` (also callable as `g8.api.call("list_landing_page_domains_landing_pages_domains_get", input)`)
1427
+ - Tier: `read`: reads data; safe to call and to retry
1428
+ - API-key scope: `campaigns:read`
1429
+
1430
+ The domains a page can be published on. FREE.
1431
+
1432
+ The org's verified custom domains plus the default hosted domain - the
1433
+ valid values for `domain` on `POST /landing-pages/{id}/publish`.
1434
+
1435
+ **Input**: none.
1436
+
1437
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1438
+
1439
+ Other envelope fields: `pagination` (PaginationMeta).
1440
+
1441
+ `StudioContentListPayload` fields:
1442
+
1443
+ | Field | Type | Required | Description |
1444
+ |---|---|---|---|
1445
+ | `items` | `Array<unknown>` | no | |
1446
+
1447
+ **Example**
1448
+
1449
+ ```ts
1450
+ const result = await g8.api.landingPages.listLandingPageDomains();
1451
+ ```
1452
+
1453
+ ---
1454
+
1455
+ <a id="op-listlandingpagereportingcompanies"></a>
1456
+
1457
+ ### `g8.api.landingPages.listLandingPageReportingCompanies(input?)`
1458
+
1459
+ **List Landing Page Reporting Companies**
1460
+
1461
+ - HTTP: `GET /api/v1/landing-pages/reporting/companies`
1462
+ - operationId: `list_landing_page_reporting_companies_landing_pages_reporting_companies_get` (also callable as `g8.api.call("list_landing_page_reporting_companies_landing_pages_reporting_companies_get", input)`)
1463
+ - Tier: `read`: reads data; safe to call and to retry
1464
+ - API-key scope: `campaigns:read`
1465
+
1466
+ The COMPANIES whose people visited. FREE. Page with `cursor`.
1467
+
1468
+ **Input**
1469
+
1470
+ | Field | Type | Required | Description |
1471
+ |---|---|---|---|
1472
+ | `query.cursor` | `integer` | no | default `0` |
1473
+ | `query.limit` | `integer` | no | default `50` |
1474
+ | `query.days` | `integer` | no | Look-back window in days. default `30` |
1475
+ | `query.page_id` | `Array<string> \| null` | no | Only these pages. Repeat the parameter. |
1476
+ | `query.source` | `"all" \| "paid" \| "email" \| "organic" \| "referral" \| "direct"` | no | Traffic source. default `"all"` |
1477
+ | `query.observed_campaign` | `string \| null` | no | Only this UTM campaign. |
1478
+
1479
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1480
+
1481
+ Other envelope fields: `pagination` (PaginationMeta).
1482
+
1483
+ `StudioContentListPayload` fields:
1484
+
1485
+ | Field | Type | Required | Description |
1486
+ |---|---|---|---|
1487
+ | `items` | `Array<unknown>` | no | |
1488
+
1489
+ **Example**
1490
+
1491
+ ```ts
1492
+ const result = await g8.api.landingPages.listLandingPageReportingCompanies();
1493
+ ```
1494
+
1495
+ ---
1496
+
1497
+ <a id="op-listlandingpagereportingpeople"></a>
1498
+
1499
+ ### `g8.api.landingPages.listLandingPageReportingPeople(input?)`
1500
+
1501
+ **List Landing Page Reporting People**
1502
+
1503
+ - HTTP: `GET /api/v1/landing-pages/reporting/people`
1504
+ - operationId: `list_landing_page_reporting_people_landing_pages_reporting_people_get` (also callable as `g8.api.call("list_landing_page_reporting_people_landing_pages_reporting_people_get", input)`)
1505
+ - Tier: `read`: reads data; safe to call and to retry
1506
+ - API-key scope: `campaigns:read`
1507
+
1508
+ The identified PEOPLE who visited, with what they viewed. FREE. Page with `cursor`.
1509
+
1510
+ **Input**
1511
+
1512
+ | Field | Type | Required | Description |
1513
+ |---|---|---|---|
1514
+ | `query.cursor` | `integer` | no | default `0` |
1515
+ | `query.limit` | `integer` | no | default `50` |
1516
+ | `query.days` | `integer` | no | Look-back window in days. default `30` |
1517
+ | `query.page_id` | `Array<string> \| null` | no | Only these pages. Repeat the parameter. |
1518
+ | `query.source` | `"all" \| "paid" \| "email" \| "organic" \| "referral" \| "direct"` | no | Traffic source. default `"all"` |
1519
+ | `query.observed_campaign` | `string \| null` | no | Only this UTM campaign. |
1520
+
1521
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1522
+
1523
+ Other envelope fields: `pagination` (PaginationMeta).
1524
+
1525
+ `StudioContentListPayload` fields:
1526
+
1527
+ | Field | Type | Required | Description |
1528
+ |---|---|---|---|
1529
+ | `items` | `Array<unknown>` | no | |
1530
+
1531
+ **Example**
1532
+
1533
+ ```ts
1534
+ const result = await g8.api.landingPages.listLandingPageReportingPeople();
1535
+ ```
1536
+
1537
+ ---
1538
+
1539
+ <a id="op-listlandingpageversions"></a>
1540
+
1541
+ ### `g8.api.landingPages.listLandingPageVersions(input)`
1542
+
1543
+ **List Landing Page Versions**
1544
+
1545
+ - HTTP: `GET /api/v1/landing-pages/{landing_page_id}/versions`
1546
+ - operationId: `list_landing_page_versions_landing_pages__landing_page_id__versions_get` (also callable as `g8.api.call("list_landing_page_versions_landing_pages__landing_page_id__versions_get", input)`)
1547
+ - Tier: `read`: reads data; safe to call and to retry
1548
+ - API-key scope: `campaigns:read`
1549
+
1550
+ The page's saved versions, newest first. FREE.
1551
+
1552
+ Every edit route snapshots the page before it changes it; these are the
1553
+ snapshots `POST .../versions/{version_num}/restore` can roll back to.
1554
+
1555
+ **Input**
1556
+
1557
+ | Field | Type | Required | Description |
1558
+ |---|---|---|---|
1559
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1560
+
1561
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1562
+
1563
+ Other envelope fields: `pagination` (PaginationMeta).
1564
+
1565
+ `StudioContentListPayload` fields:
1566
+
1567
+ | Field | Type | Required | Description |
1568
+ |---|---|---|---|
1569
+ | `items` | `Array<unknown>` | no | |
1570
+
1571
+ **Example**
1572
+
1573
+ ```ts
1574
+ const result = await g8.api.landingPages.listLandingPageVersions({ path: { landing_page_id: "id" } });
1575
+ ```
1576
+
1577
+ ---
1578
+
1579
+ <a id="op-listlandingpages"></a>
1580
+
1581
+ ### `g8.api.landingPages.listLandingPages(input?)`
1582
+
1583
+ **List Landing Pages**
1584
+
1585
+ - HTTP: `GET /api/v1/landing-pages`
1586
+ - operationId: `list_landing_pages_landing_pages_get` (also callable as `g8.api.call("list_landing_pages_landing_pages_get", input)`)
1587
+ - Tier: `read`: reads data; safe to call and to retry
1588
+ - API-key scope: `campaigns:read`
1589
+
1590
+ Every landing page in the org. FREE.
1591
+
1592
+ **Input**
1593
+
1594
+ | Field | Type | Required | Description |
1595
+ |---|---|---|---|
1596
+ | `query.status` | `string \| null` | no | Filter by page status (draft, published, ...). |
1597
+ | `query.limit` | `integer` | no | default `50` |
1598
+ | `query.offset` | `integer` | no | default `0` |
1599
+
1600
+ **Returns** `ApiResponse_StudioContentListPayload_`: the envelope `{ data: StudioContentListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1601
+
1602
+ Other envelope fields: `pagination` (PaginationMeta).
1603
+
1604
+ `StudioContentListPayload` fields:
1605
+
1606
+ | Field | Type | Required | Description |
1607
+ |---|---|---|---|
1608
+ | `items` | `Array<unknown>` | no | |
1609
+
1610
+ **Example**
1611
+
1612
+ ```ts
1613
+ const result = await g8.api.landingPages.listLandingPages();
1614
+ ```
1615
+
1616
+ ---
1617
+
1618
+ <a id="op-patchlandingpage"></a>
1619
+
1620
+ ### `g8.api.landingPages.patchLandingPage(input)`
1621
+
1622
+ **Patch Landing Page**
1623
+
1624
+ - HTTP: `POST /api/v1/landing-pages/agent-sessions/{session_id}/patch`
1625
+ - operationId: `patch_landing_page_landing_pages_agent_sessions__session_id__patch_post` (also callable as `g8.api.call("patch_landing_page_landing_pages_agent_sessions__session_id__patch_post", input)`)
1626
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1627
+ - API-key scope: `landing-pages:write`
1628
+
1629
+ Submit an exact patch using the handoff's selected approval mode.
1630
+
1631
+ **Input**
1632
+
1633
+ | Field | Type | Required | Description |
1634
+ |---|---|---|---|
1635
+ | `path.session_id` | `string` | yes | |
1636
+ | `body` | `LandingPagePatchRequest` | yes | Request body; fields below. |
1637
+
1638
+ Body fields (`LandingPagePatchRequest`):
1639
+
1640
+ | Field | Type | Required | Description |
1641
+ |---|---|---|---|
1642
+ | `body.base_sha256` | `string` | yes | pattern `^[a-f0-9]{64}$` |
1643
+ | `body.idempotency_key` | `string` | yes | min length 8, max length 128, pattern `^[A-Za-z0-9._:-]+$` |
1644
+ | `body.replacements` | `Array<ExactReplacementRequest>` | yes | min items 1, max items 20 |
1645
+ | `body.summary` | `string` | no | default `"External AI edit"`, max length 500 |
1646
+
1647
+ **Returns** `ApiResponse_dict_str__Any__`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1648
+
1649
+ Other envelope fields: `pagination` (PaginationMeta).
1650
+
1651
+ **Example**
1652
+
1653
+ ```ts
1654
+ const result = await g8.api.landingPages.patchLandingPage({
1655
+ path: { session_id: "id" },
1656
+ body: {
1657
+ base_sha256: "example",
1658
+ idempotency_key: "xxxxxxxx",
1659
+ replacements: [{ new: "example", old: "example" }],
1660
+ },
1661
+ });
1662
+ ```
1663
+
1664
+ ---
1665
+
1666
+ <a id="op-promotelandingpagetemplate"></a>
1667
+
1668
+ ### `g8.api.landingPages.promoteLandingPageTemplate(input)`
1669
+
1670
+ **Promote Landing Page Template**
1671
+
1672
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/promote-to-page`
1673
+ - operationId: `promote_landing_page_template_landing_pages__landing_page_id__promote_to_page_post` (also callable as `g8.api.call("promote_landing_page_template_landing_pages__landing_page_id__promote_to_page_post", input)`)
1674
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1675
+ - API-key scope: `campaigns:write`
1676
+
1677
+ Turn a template INTO a page. FREE.
1678
+
1679
+ It MOVES the row rather than copying it - the template stops being a
1680
+ template. `/save-as-page` is the copying version, and `/demote-to-template`
1681
+ is the inverse of this one.
1682
+
1683
+ **Input**
1684
+
1685
+ | Field | Type | Required | Description |
1686
+ |---|---|---|---|
1687
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1688
+
1689
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1690
+
1691
+ Other envelope fields: `pagination` (PaginationMeta).
1692
+
1693
+ **Example**
1694
+
1695
+ ```ts
1696
+ const result = await g8.api.landingPages.promoteLandingPageTemplate({ path: { landing_page_id: "id" } });
1697
+ ```
1698
+
1699
+ ---
1700
+
1701
+ <a id="op-provisionlandingpagetracking"></a>
1702
+
1703
+ ### `g8.api.landingPages.provisionLandingPageTracking(input)`
1704
+
1705
+ **Provision Landing Page Tracking**
1706
+
1707
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/tracking/provision`
1708
+ - operationId: `provision_landing_page_tracking_landing_pages__landing_page_id__tracking_provision_post` (also callable as `g8.api.call("provision_landing_page_tracking_landing_pages__landing_page_id__tracking_provision_post", input)`)
1709
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1710
+ - API-key scope: `campaigns:write`
1711
+
1712
+ Give the page its OWN tracking stream and browser key. FREE.
1713
+
1714
+ Switches the page to `dedicated` tracking; takes effect on its next
1715
+ publish. The form id label and chat setting are preserved.
1716
+
1717
+ **Input**
1718
+
1719
+ | Field | Type | Required | Description |
1720
+ |---|---|---|---|
1721
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1722
+
1723
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1724
+
1725
+ Other envelope fields: `pagination` (PaginationMeta).
1726
+
1727
+ **Example**
1728
+
1729
+ ```ts
1730
+ const result = await g8.api.landingPages.provisionLandingPageTracking({ path: { landing_page_id: "id" } });
1731
+ ```
1732
+
1733
+ ---
1734
+
1735
+ <a id="op-publishlandingpage"></a>
1736
+
1737
+ ### `g8.api.landingPages.publishLandingPage(input)`
1738
+
1739
+ **Publish Landing Page**
1740
+
1741
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/publish`
1742
+ - operationId: `publish_landing_page_landing_pages__landing_page_id__publish_post` (also callable as `g8.api.call("publish_landing_page_landing_pages__landing_page_id__publish_post", input)`)
1743
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
1744
+ - API-key scope: `campaigns:run`
1745
+
1746
+ Deploy the page to a PUBLIC URL. Real people can reach it immediately.
1747
+
1748
+ Spends no credit, but it is the outward-facing operation on this router
1749
+ and is tiered and gated accordingly - `CAMPAIGNS_LAUNCH`, the same
1750
+ permission the app requires, re-declared on this route because the app's
1751
+ own `Depends` gate does not run on a direct call.
1752
+
1753
+ Omit the body to publish at the page's own slug on the org's default
1754
+ domain. `override: true` takes a URL that is already bound to a DIFFERENT
1755
+ page, and that page stops serving at it.
1756
+
1757
+ Spends nothing.
1758
+
1759
+ **Input**
1760
+
1761
+ | Field | Type | Required | Description |
1762
+ |---|---|---|---|
1763
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1764
+ | `body` | `PublishLandingPageRequest \| null` | no | Request body; fields below. |
1765
+
1766
+ Body fields:
1767
+
1768
+ | Field | Type | Required | Description |
1769
+ |---|---|---|---|
1770
+ | `body.domain` | `string \| null` | no | |
1771
+ | `body.domain_id` | `integer \| null` | no | |
1772
+ | `body.override` | `boolean` | no | Steal a URL already bound to another page. Default false. default `false` |
1773
+ | `body.path` | `string \| null` | no | |
1774
+ | `body.slug` | `string \| null` | no | |
1775
+ | `body.subdomain` | `string \| null` | no | |
1776
+
1777
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1778
+
1779
+ Other envelope fields: `pagination` (PaginationMeta).
1780
+
1781
+ **Example**
1782
+
1783
+ ```ts
1784
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
1785
+ const result = await g8.api.landingPages.publishLandingPage({ path: { landing_page_id: "id" } });
1786
+ ```
1787
+
1788
+ ---
1789
+
1790
+ <a id="op-removelandingpagebinding"></a>
1791
+
1792
+ ### `g8.api.landingPages.removeLandingPageBinding(input)`
1793
+
1794
+ **Remove Landing Page Binding**
1795
+
1796
+ - HTTP: `DELETE /api/v1/landing-pages/{landing_page_id}/bindings`
1797
+ - operationId: `remove_landing_page_binding_landing_pages__landing_page_id__bindings_delete` (also callable as `g8.api.call("remove_landing_page_binding_landing_pages__landing_page_id__bindings_delete", input)`)
1798
+ - Tier: `destructive`: deletes or archives data; confirm with a human before calling
1799
+ - API-key scope: `campaigns:delete`
1800
+
1801
+ Stop serving the page at ONE URL. The others keep working.
1802
+
1803
+ The surgical version of `/unpublish`, and outward-facing for the same
1804
+ reason: that URL 404s from this moment. Launch-gated.
1805
+
1806
+ Spends nothing.
1807
+
1808
+ **Input**
1809
+
1810
+ | Field | Type | Required | Description |
1811
+ |---|---|---|---|
1812
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1813
+ | `query.hostname` | `string` | yes | The host to stop serving this page at. |
1814
+ | `query.path` | `string` | no | The path under that host. Defaults to the root. default `"/"` |
1815
+
1816
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1817
+
1818
+ Other envelope fields: `pagination` (PaginationMeta).
1819
+
1820
+ **Example**
1821
+
1822
+ ```ts
1823
+ // destructive: deletes or archives data; confirm with a human before calling.
1824
+ const result = await g8.api.landingPages.removeLandingPageBinding({ path: { landing_page_id: "id" }, query: { hostname: "Example" } });
1825
+ ```
1826
+
1827
+ ---
1828
+
1829
+ <a id="op-replacelandingpagehtml"></a>
1830
+
1831
+ ### `g8.api.landingPages.replaceLandingPageHtml(input)`
1832
+
1833
+ **Replace Landing Page Html**
1834
+
1835
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/replace-html`
1836
+ - operationId: `replace_landing_page_html_landing_pages__landing_page_id__replace_html_post` (also callable as `g8.api.call("replace_landing_page_html_landing_pages__landing_page_id__replace_html_post", input)`)
1837
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1838
+ - API-key scope: `campaigns:write`
1839
+
1840
+ Persist a whole-page snapshot. FREE.
1841
+
1842
+ Wholesale: whatever is not in `html` is gone. It creates a restorable
1843
+ version first, which is the only thing standing between a bad snapshot and
1844
+ a lost page.
1845
+
1846
+ **Input**
1847
+
1848
+ | Field | Type | Required | Description |
1849
+ |---|---|---|---|
1850
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1851
+ | `body` | `ReplaceHtmlRequest` | yes | Request body; fields below. |
1852
+
1853
+ Body fields (`ReplaceHtmlRequest`):
1854
+
1855
+ | Field | Type | Required | Description |
1856
+ |---|---|---|---|
1857
+ | `body.html` | `string` | yes | max length 2000000 |
1858
+ | `body.edit_instruction` | `string \| null` | no | max length 240 |
1859
+
1860
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1861
+
1862
+ Other envelope fields: `pagination` (PaginationMeta).
1863
+
1864
+ **Example**
1865
+
1866
+ ```ts
1867
+ const result = await g8.api.landingPages.replaceLandingPageHtml({ path: { landing_page_id: "id" }, body: { html: "example" } });
1868
+ ```
1869
+
1870
+ ---
1871
+
1872
+ <a id="op-restorelandingpageversion"></a>
1873
+
1874
+ ### `g8.api.landingPages.restoreLandingPageVersion(input)`
1875
+
1876
+ **Restore Landing Page Version**
1877
+
1878
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/versions/{version_num}/restore`
1879
+ - operationId: `restore_landing_page_version_landing_pages__landing_page_id__versions__version_num__restore_post` (also callable as `g8.api.call("restore_landing_page_version_landing_pages__landing_page_id__versions__version_num__restore_post", input)`)
1880
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
1881
+ - API-key scope: `campaigns:write`
1882
+
1883
+ Roll the page back to a saved version. FREE - no model runs.
1884
+
1885
+ The current state is snapshotted first, so a restore is itself undoable.
1886
+ A PUBLISHED page keeps serving its published HTML until it is published
1887
+ again.
1888
+
1889
+ **Input**
1890
+
1891
+ | Field | Type | Required | Description |
1892
+ |---|---|---|---|
1893
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1894
+ | `path.version_num` | `integer` | yes | Version number, from `GET .../versions`. |
1895
+
1896
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1897
+
1898
+ Other envelope fields: `pagination` (PaginationMeta).
1899
+
1900
+ **Example**
1901
+
1902
+ ```ts
1903
+ const result = await g8.api.landingPages.restoreLandingPageVersion({ path: { landing_page_id: "id", version_num: 1 } });
1904
+ ```
1905
+
1906
+ ---
1907
+
1908
+ <a id="op-reviewlandingpage"></a>
1909
+
1910
+ ### `g8.api.landingPages.reviewLandingPage(input)`
1911
+
1912
+ **Review Landing Page**
1913
+
1914
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/ai-review`
1915
+ - operationId: `review_landing_page_landing_pages__landing_page_id__ai_review_post` (also callable as `g8.api.call("review_landing_page_landing_pages__landing_page_id__ai_review_post", input)`)
1916
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1917
+ - API-key scope: `campaigns:run`
1918
+
1919
+ Run a review pass and return findings. SPENDS CREDIT.
1920
+
1921
+ It CHANGES NOTHING - the findings are applied by
1922
+ `/ai-review/apply` (free, deterministic) or `/ai-review/fix-with-ai`
1923
+ (another model pass). Reviewing is still a spend even though it is
1924
+ read-only against the page, which is why it is not tiered as a read.
1925
+
1926
+ **Input**
1927
+
1928
+ | Field | Type | Required | Description |
1929
+ |---|---|---|---|
1930
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1931
+ | `body` | `AIReviewRequest \| null` | no | Request body; fields below. |
1932
+
1933
+ Body fields:
1934
+
1935
+ | Field | Type | Required | Description |
1936
+ |---|---|---|---|
1937
+ | `body.deep` | `boolean` | no | default `true` |
1938
+
1939
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1940
+
1941
+ Other envelope fields: `pagination` (PaginationMeta).
1942
+
1943
+ **Example**
1944
+
1945
+ ```ts
1946
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1947
+ const result = await g8.api.landingPages.reviewLandingPage({ path: { landing_page_id: "id" } });
1948
+ ```
1949
+
1950
+ ---
1951
+
1952
+ <a id="op-rewritelandingpagetext"></a>
1953
+
1954
+ ### `g8.api.landingPages.rewriteLandingPageText(input)`
1955
+
1956
+ **Rewrite Landing Page Text**
1957
+
1958
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/rewrite-text`
1959
+ - operationId: `rewrite_landing_page_text_landing_pages__landing_page_id__rewrite_text_post` (also callable as `g8.api.call("rewrite_landing_page_text_landing_pages__landing_page_id__rewrite_text_post", input)`)
1960
+ - Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
1961
+ - API-key scope: `campaigns:run`
1962
+
1963
+ Rewrite one element's text with AI. SPENDS CREDIT.
1964
+
1965
+ Text only - no HTML is generated - which makes it the cheapest AI edit
1966
+ here and the right one for a copy change.
1967
+
1968
+ **Input**
1969
+
1970
+ | Field | Type | Required | Description |
1971
+ |---|---|---|---|
1972
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
1973
+ | `body` | `LandingPageRewriteTextRequest` | yes | Request body; fields below. |
1974
+
1975
+ Body fields (`LandingPageRewriteTextRequest`):
1976
+
1977
+ | Field | Type | Required | Description |
1978
+ |---|---|---|---|
1979
+ | `body.instruction` | `string` | yes | |
1980
+ | `body.selected_element` | `SelectedElementPayload` | yes | |
1981
+
1982
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
1983
+
1984
+ Other envelope fields: `pagination` (PaginationMeta).
1985
+
1986
+ **Example**
1987
+
1988
+ ```ts
1989
+ // billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
1990
+ const result = await g8.api.landingPages.rewriteLandingPageText({
1991
+ path: { landing_page_id: "id" },
1992
+ body: {
1993
+ instruction: "example",
1994
+ selected_element: { element_id: "id", tag: "example" },
1995
+ },
1996
+ });
1997
+ ```
1998
+
1999
+ ---
2000
+
2001
+ <a id="op-savelandingpagetemplateaspage"></a>
2002
+
2003
+ ### `g8.api.landingPages.saveLandingPageTemplateAsPage(input)`
2004
+
2005
+ **Save Landing Page Template As Page**
2006
+
2007
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/save-as-page`
2008
+ - operationId: `save_landing_page_template_as_page_landing_pages__landing_page_id__save_as_page_post` (also callable as `g8.api.call("save_landing_page_template_as_page_landing_pages__landing_page_id__save_as_page_post", input)`)
2009
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2010
+ - API-key scope: `campaigns:write`
2011
+
2012
+ Copy an org TEMPLATE into a new editable page. FREE.
2013
+
2014
+ The template is untouched, which is the difference from
2015
+ `/promote-to-page`: that one MOVES the template out of the template list.
2016
+
2017
+ **Input**
2018
+
2019
+ | Field | Type | Required | Description |
2020
+ |---|---|---|---|
2021
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2022
+
2023
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2024
+
2025
+ Other envelope fields: `pagination` (PaginationMeta).
2026
+
2027
+ **Example**
2028
+
2029
+ ```ts
2030
+ const result = await g8.api.landingPages.saveLandingPageTemplateAsPage({ path: { landing_page_id: "id" } });
2031
+ ```
2032
+
2033
+ ---
2034
+
2035
+ <a id="op-setlandingpageconsentdefault"></a>
2036
+
2037
+ ### `g8.api.landingPages.setLandingPageConsentDefault(input)`
2038
+
2039
+ **Set Landing Page Consent Default**
2040
+
2041
+ - HTTP: `PUT /api/v1/landing-page-consent/default`
2042
+ - operationId: `set_landing_page_consent_default_landing_page_consent_default_put` (also callable as `g8.api.call("set_landing_page_consent_default_landing_page_consent_default_put", input)`)
2043
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2044
+ - API-key scope: `campaigns:write`
2045
+
2046
+ Set the workspace-wide consent gate default. ADMIN ONLY.
2047
+
2048
+ A compliance control for every page that does not override it. Takes
2049
+ effect on each page's NEXT publish - already-published HTML is not
2050
+ rewritten; `GET /landing-page-consent/pages` shows which pages are stale.
2051
+
2052
+ Spends nothing.
2053
+
2054
+ **Input**
2055
+
2056
+ | Field | Type | Required | Description |
2057
+ |---|---|---|---|
2058
+ | `body` | `LandingPageConsentConfig` | yes | Request body; fields below. |
2059
+
2060
+ Body fields (`LandingPageConsentConfig`):
2061
+
2062
+ | Field | Type | Required | Description |
2063
+ |---|---|---|---|
2064
+ | `body.accent` | `string` | no | Hex colour. default `"#111827"`, max length 7 |
2065
+ | `body.accept_label` | `string` | no | default `"Accept"`, max length 40 |
2066
+ | `body.banner` | `boolean` | no | False when your own consent manager drives the gate. default `true` |
2067
+ | `body.message` | `string` | no | default `"We use cookies and similar technologies to measure traffic and improve this site. You can accept or reject them."`, max length 600 |
2068
+ | `body.mode` | `"off" \| "explicit" \| "region"` | no | default `"off"` |
2069
+ | `body.policy_label` | `string` | no | default `"Privacy policy"`, max length 60 |
2070
+ | `body.policy_url` | `string \| null` | no | max length 500 |
2071
+ | `body.regions` | `Array<"EEA">` | no | Only used when mode is `region`. min items 1 |
2072
+ | `body.reject_label` | `string` | no | default `"Reject"`, max length 40 |
2073
+ | `body.reopener` | `boolean` | no | default `true` |
2074
+ | `body.reopener_label` | `string` | no | default `"Cookie settings"`, max length 40 |
2075
+ | `body.title` | `string` | no | default `"We use cookies"`, max length 120 |
2076
+ | `body.version` | `integer` | no | Bump to re-prompt every visitor. default `1`, min 1, max 1000000 |
2077
+
2078
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2079
+
2080
+ Other envelope fields: `pagination` (PaginationMeta).
2081
+
2082
+ **Example**
2083
+
2084
+ ```ts
2085
+ const result = await g8.api.landingPages.setLandingPageConsentDefault({ body: {} });
2086
+ ```
2087
+
2088
+ ---
2089
+
2090
+ <a id="op-setlandingpagemedia"></a>
2091
+
2092
+ ### `g8.api.landingPages.setLandingPageMedia(input)`
2093
+
2094
+ **Set Landing Page Media**
2095
+
2096
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/set-media-edit`
2097
+ - operationId: `set_landing_page_media_landing_pages__landing_page_id__set_media_edit_post` (also callable as `g8.api.call("set_landing_page_media_landing_pages__landing_page_id__set_media_edit_post", input)`)
2098
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2099
+ - API-key scope: `campaigns:write`
2100
+
2101
+ Point an `<img>` / `<video>` at a URL, or remove it. FREE.
2102
+
2103
+ `remove: true` DELETES the element. It is the one destructive field in the
2104
+ body and it is not implied by any other field.
2105
+
2106
+ This is the API-shaped alternative to the multipart upload route, which is
2107
+ deliberately not published: host the asset (the image library will do it),
2108
+ then send its URL here.
2109
+
2110
+ **Input**
2111
+
2112
+ | Field | Type | Required | Description |
2113
+ |---|---|---|---|
2114
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2115
+ | `body` | `LandingPageSetMediaEditRequest` | yes | Request body; fields below. |
2116
+
2117
+ Body fields (`LandingPageSetMediaEditRequest`):
2118
+
2119
+ | Field | Type | Required | Description |
2120
+ |---|---|---|---|
2121
+ | `body.g8_action_id` | `string` | yes | min length 1, max length 120 |
2122
+ | `body.kind` | `"img" \| "video"` | yes | |
2123
+ | `body.alt` | `string \| null` | no | max length 500 |
2124
+ | `body.autoplay` | `boolean \| null` | no | |
2125
+ | `body.controls` | `boolean \| null` | no | |
2126
+ | `body.loop` | `boolean \| null` | no | |
2127
+ | `body.muted` | `boolean \| null` | no | |
2128
+ | `body.object_fit` | `"cover" \| "contain" \| "fill" \| "none" \| "scale-down" \| null` | no | |
2129
+ | `body.object_position` | `string \| null` | no | max length 80 |
2130
+ | `body.position` | `MediaPosition \| null` | no | |
2131
+ | `body.poster` | `string \| null` | no | max length 2048 |
2132
+ | `body.remove` | `boolean` | no | default `false` |
2133
+ | `body.src` | `string \| null` | no | max length 2048 |
2134
+
2135
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2136
+
2137
+ Other envelope fields: `pagination` (PaginationMeta).
2138
+
2139
+ **Example**
2140
+
2141
+ ```ts
2142
+ const result = await g8.api.landingPages.setLandingPageMedia({
2143
+ path: { landing_page_id: "id" },
2144
+ body: { g8_action_id: "id", kind: "img" },
2145
+ });
2146
+ ```
2147
+
2148
+ ---
2149
+
2150
+ <a id="op-setlandingpagetext"></a>
2151
+
2152
+ ### `g8.api.landingPages.setLandingPageText(input)`
2153
+
2154
+ **Set Landing Page Text**
2155
+
2156
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/set-text`
2157
+ - operationId: `set_landing_page_text_landing_pages__landing_page_id__set_text_post` (also callable as `g8.api.call("set_landing_page_text_landing_pages__landing_page_id__set_text_post", input)`)
2158
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2159
+ - API-key scope: `campaigns:write`
2160
+
2161
+ Set the VISIBLE TEXT of one element. FREE - markup is preserved.
2162
+
2163
+ **Input**
2164
+
2165
+ | Field | Type | Required | Description |
2166
+ |---|---|---|---|
2167
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2168
+ | `body` | `LandingPageSetTextRequest` | yes | Request body; fields below. |
2169
+
2170
+ Body fields (`LandingPageSetTextRequest`):
2171
+
2172
+ | Field | Type | Required | Description |
2173
+ |---|---|---|---|
2174
+ | `body.element_id` | `string` | yes | |
2175
+ | `body.new_text` | `string` | yes | |
2176
+ | `body.selected_element` | `SelectedElementPayload \| null` | no | |
2177
+
2178
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2179
+
2180
+ Other envelope fields: `pagination` (PaginationMeta).
2181
+
2182
+ **Example**
2183
+
2184
+ ```ts
2185
+ const result = await g8.api.landingPages.setLandingPageText({
2186
+ path: { landing_page_id: "id" },
2187
+ body: { element_id: "id", new_text: "example" },
2188
+ });
2189
+ ```
2190
+
2191
+ ---
2192
+
2193
+ <a id="op-unpublishlandingpage"></a>
2194
+
2195
+ ### `g8.api.landingPages.unpublishLandingPage(input)`
2196
+
2197
+ **Unpublish Landing Page**
2198
+
2199
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/unpublish`
2200
+ - operationId: `unpublish_landing_page_landing_pages__landing_page_id__unpublish_post` (also callable as `g8.api.call("unpublish_landing_page_landing_pages__landing_page_id__unpublish_post", input)`)
2201
+ - Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
2202
+ - API-key scope: `campaigns:run`
2203
+
2204
+ Take the page OFF the internet. Every URL it served stops resolving.
2205
+
2206
+ Visitors and any ad or email pointing at it get a 404 from this moment.
2207
+ Launch-gated for the same reason publishing is.
2208
+
2209
+ Spends nothing.
2210
+
2211
+ **Input**
2212
+
2213
+ | Field | Type | Required | Description |
2214
+ |---|---|---|---|
2215
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2216
+
2217
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2218
+
2219
+ Other envelope fields: `pagination` (PaginationMeta).
2220
+
2221
+ **Example**
2222
+
2223
+ ```ts
2224
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
2225
+ const result = await g8.api.landingPages.unpublishLandingPage({ path: { landing_page_id: "id" } });
2226
+ ```
2227
+
2228
+ ---
2229
+
2230
+ <a id="op-updatelandingpage"></a>
2231
+
2232
+ ### `g8.api.landingPages.updateLandingPage(input)`
2233
+
2234
+ **Update Landing Page**
2235
+
2236
+ - HTTP: `PATCH /api/v1/landing-pages/{landing_page_id}`
2237
+ - operationId: `update_landing_page_landing_pages__landing_page_id__patch` (also callable as `g8.api.call("update_landing_page_landing_pages__landing_page_id__patch", input)`)
2238
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2239
+ - API-key scope: `campaigns:write`
2240
+
2241
+ Metadata only - name, slug, description, settings. FREE.
2242
+
2243
+ Nothing here touches the page's HTML. The edit routes do that.
2244
+
2245
+ **Input**
2246
+
2247
+ | Field | Type | Required | Description |
2248
+ |---|---|---|---|
2249
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2250
+ | `body` | `UpdateLandingPageRequest` | yes | Request body; fields below. |
2251
+
2252
+ Body fields (`UpdateLandingPageRequest`):
2253
+
2254
+ | Field | Type | Required | Description |
2255
+ |---|---|---|---|
2256
+ | `body.description` | `string \| null` | no | |
2257
+ | `body.name` | `string \| null` | no | |
2258
+ | `body.settings` | `Record<string, unknown> \| null` | no | |
2259
+ | `body.slug` | `string \| null` | no | |
2260
+
2261
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2262
+
2263
+ Other envelope fields: `pagination` (PaginationMeta).
2264
+
2265
+ **Example**
2266
+
2267
+ ```ts
2268
+ const result = await g8.api.landingPages.updateLandingPage({ path: { landing_page_id: "id" }, body: {} });
2269
+ ```
2270
+
2271
+ ---
2272
+
2273
+ <a id="op-updatelandingpagehtml"></a>
2274
+
2275
+ ### `g8.api.landingPages.updateLandingPageHtml(input)`
2276
+
2277
+ **Update Landing Page Html**
2278
+
2279
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/update-html`
2280
+ - operationId: `update_landing_page_html_landing_pages__landing_page_id__update_html_post` (also callable as `g8.api.call("update_landing_page_html_landing_pages__landing_page_id__update_html_post", input)`)
2281
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2282
+ - API-key scope: `campaigns:write`
2283
+
2284
+ Save raw HTML for a freeform page. FREE - the code-editor save.
2285
+
2286
+ **Input**
2287
+
2288
+ | Field | Type | Required | Description |
2289
+ |---|---|---|---|
2290
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2291
+ | `body` | `UpdateHtmlRequest` | yes | Request body; fields below. |
2292
+
2293
+ Body fields (`UpdateHtmlRequest`):
2294
+
2295
+ | Field | Type | Required | Description |
2296
+ |---|---|---|---|
2297
+ | `body.html` | `string` | yes | |
2298
+
2299
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2300
+
2301
+ Other envelope fields: `pagination` (PaginationMeta).
2302
+
2303
+ **Example**
2304
+
2305
+ ```ts
2306
+ const result = await g8.api.landingPages.updateLandingPageHtml({ path: { landing_page_id: "id" }, body: { html: "example" } });
2307
+ ```
2308
+
2309
+ ---
2310
+
2311
+ <a id="op-updatelandingpagesection"></a>
2312
+
2313
+ ### `g8.api.landingPages.updateLandingPageSection(input)`
2314
+
2315
+ **Update Landing Page Section**
2316
+
2317
+ - HTTP: `PATCH /api/v1/landing-pages/{landing_page_id}/sections/{section_idx}`
2318
+ - operationId: `update_landing_page_section_landing_pages__landing_page_id__sections__section_idx__patch` (also callable as `g8.api.call("update_landing_page_section_landing_pages__landing_page_id__sections__section_idx__patch", input)`)
2319
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2320
+ - API-key scope: `campaigns:write`
2321
+
2322
+ Replace one section's content block. FREE - no model runs.
2323
+
2324
+ Sections-mode pages only. A freeform page has no section array; use
2325
+ `/replace-html` or `/set-text` on those.
2326
+
2327
+ **Input**
2328
+
2329
+ | Field | Type | Required | Description |
2330
+ |---|---|---|---|
2331
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2332
+ | `path.section_idx` | `integer` | yes | Zero-based section index. |
2333
+ | `body` | `UpdateSectionRequest` | yes | Request body; fields below. |
2334
+
2335
+ Body fields (`UpdateSectionRequest`):
2336
+
2337
+ | Field | Type | Required | Description |
2338
+ |---|---|---|---|
2339
+ | `body.content` | `Record<string, unknown>` | yes | |
2340
+
2341
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2342
+
2343
+ Other envelope fields: `pagination` (PaginationMeta).
2344
+
2345
+ **Example**
2346
+
2347
+ ```ts
2348
+ const result = await g8.api.landingPages.updateLandingPageSection({
2349
+ path: { landing_page_id: "id", section_idx: 0 },
2350
+ body: { content: {} },
2351
+ });
2352
+ ```
2353
+
2354
+ ---
2355
+
2356
+ <a id="op-updatelandingpagetext"></a>
2357
+
2358
+ ### `g8.api.landingPages.updateLandingPageText(input)`
2359
+
2360
+ **Update Landing Page Text**
2361
+
2362
+ - HTTP: `POST /api/v1/landing-pages/{landing_page_id}/update-text`
2363
+ - operationId: `update_landing_page_text_landing_pages__landing_page_id__update_text_post` (also callable as `g8.api.call("update_landing_page_text_landing_pages__landing_page_id__update_text_post", input)`)
2364
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2365
+ - API-key scope: `campaigns:write`
2366
+
2367
+ Set one element's inner HTML directly. FREE.
2368
+
2369
+ `new_html`, not `new_text`: this one accepts markup. `/set-text` is the
2370
+ text-only sibling and is the safer of the two.
2371
+
2372
+ **Input**
2373
+
2374
+ | Field | Type | Required | Description |
2375
+ |---|---|---|---|
2376
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2377
+ | `body` | `UpdateTextRequest` | yes | Request body; fields below. |
2378
+
2379
+ Body fields (`UpdateTextRequest`):
2380
+
2381
+ | Field | Type | Required | Description |
2382
+ |---|---|---|---|
2383
+ | `body.element_id` | `string` | yes | |
2384
+ | `body.new_html` | `string` | yes | |
2385
+
2386
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2387
+
2388
+ Other envelope fields: `pagination` (PaginationMeta).
2389
+
2390
+ **Example**
2391
+
2392
+ ```ts
2393
+ const result = await g8.api.landingPages.updateLandingPageText({
2394
+ path: { landing_page_id: "id" },
2395
+ body: { element_id: "id", new_html: "example" },
2396
+ });
2397
+ ```
2398
+
2399
+ ---
2400
+
2401
+ <a id="op-updatelandingpagetracking"></a>
2402
+
2403
+ ### `g8.api.landingPages.updateLandingPageTracking(input)`
2404
+
2405
+ **Update Landing Page Tracking**
2406
+
2407
+ - HTTP: `PATCH /api/v1/landing-pages/{landing_page_id}/tracking`
2408
+ - operationId: `update_landing_page_tracking_landing_pages__landing_page_id__tracking_patch` (also callable as `g8.api.call("update_landing_page_tracking_landing_pages__landing_page_id__tracking_patch", input)`)
2409
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
2410
+ - API-key scope: `campaigns:write`
2411
+
2412
+ Change the page's tracking settings. FREE. Only the fields you send change.
2413
+
2414
+ Moving TO `dedicated` goes through `/tracking/provision`; a PATCH to it is
2415
+ rejected. Takes effect on the page's next publish.
2416
+
2417
+ **Input**
2418
+
2419
+ | Field | Type | Required | Description |
2420
+ |---|---|---|---|
2421
+ | `path.landing_page_id` | `string` | yes | Landing page id. |
2422
+ | `body` | `LandingPageTrackingPatchRequest` | yes | Request body; fields below. |
2423
+
2424
+ Body fields (`LandingPageTrackingPatchRequest`):
2425
+
2426
+ | Field | Type | Required | Description |
2427
+ |---|---|---|---|
2428
+ | `body.chat_enabled` | `boolean \| null` | no | |
2429
+ | `body.consent` | `LandingPageConsentConfig \| null` | no | |
2430
+ | `body.conversion_goal` | `"form_submission" \| "workspace_signup" \| "paid_account" \| "traffic_only" \| null` | no | |
2431
+ | `body.form_id` | `string \| null` | no | max length 80 |
2432
+ | `body.mode` | `"org_default" \| "dedicated" \| "disabled" \| null` | no | `dedicated` is reached through `/tracking/provision`, not here. |
2433
+
2434
+ **Returns** `ApiResponse_StudioContentPayload_`: the envelope `{ data: StudioContentPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
2435
+
2436
+ Other envelope fields: `pagination` (PaginationMeta).
2437
+
2438
+ **Example**
2439
+
2440
+ ```ts
2441
+ const result = await g8.api.landingPages.updateLandingPageTracking({ path: { landing_page_id: "id" }, body: {} });
2442
+ ```
2443
+
2444
+ ---
2445
+
2446
+ ## Referenced types
2447
+
2448
+ Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
2449
+
2450
+ <a id="type-exactreplacementrequest"></a>
2451
+
2452
+ ### `ExactReplacementRequest`
2453
+
2454
+ One exact replacement applied against the evolving HTML document.
2455
+
2456
+ | Field | Type | Required | Description |
2457
+ |---|---|---|---|
2458
+ | `new` | `string` | yes | max length 500000 |
2459
+ | `old` | `string` | yes | min length 1, max length 200000 |
2460
+ | `expected_matches` | `integer` | no | default `1`, min 1, max 100 |
2461
+
2462
+ <a id="type-mediaposition"></a>
2463
+
2464
+ ### `MediaPosition`
2465
+
2466
+ Per-breakpoint drag offsets. `desktop` is required; the rest inherit.
2467
+
2468
+ | Field | Type | Required | Description |
2469
+ |---|---|---|---|
2470
+ | `desktop` | `MediaPositionOffset` | yes | |
2471
+ | `mobile` | `MediaPositionOffset \| null` | no | |
2472
+ | `tablet` | `MediaPositionOffset \| null` | no | |
2473
+
2474
+ <a id="type-selectedelementpayload"></a>
2475
+
2476
+ ### `SelectedElementPayload`
2477
+
2478
+ What the visual picker selected, as the rewrite pass needs to see it.
2479
+
2480
+ | Field | Type | Required | Description |
2481
+ |---|---|---|---|
2482
+ | `element_id` | `string` | yes | |
2483
+ | `tag` | `string` | yes | |
2484
+ | `outer_html` | `string \| null` | no | |
2485
+ | `role` | `string \| null` | no | |
2486
+ | `scope` | `string` | no | default `"element"` |
2487
+ | `section_id` | `string \| null` | no | |
2488
+ | `text` | `string \| null` | no | |