@graph8/sdk 0.265.0 → 0.277.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 (164) hide show
  1. package/README.md +3 -3
  2. package/dist/index.d.mts +137 -21
  3. package/dist/index.d.ts +137 -21
  4. package/dist/index.js +13 -5
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +13 -5
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/react.d.mts +136 -19
  9. package/dist/react.d.ts +136 -19
  10. package/dist/react.js +12 -4
  11. package/dist/react.js.map +1 -1
  12. package/dist/react.mjs +12 -4
  13. package/dist/react.mjs.map +1 -1
  14. package/dist/types/core.d.ts +2 -0
  15. package/dist/types/enrich.d.ts +11 -4
  16. package/dist/types/index.d.ts +1 -1
  17. package/dist/types/react.d.ts +6 -2
  18. package/dist/types/search.d.ts +25 -1
  19. package/dist/types/version.d.ts +2 -2
  20. package/docs/agents.md +7 -6
  21. package/docs/api/README.md +2 -2
  22. package/docs/api/accounts.d.ts +6 -0
  23. package/docs/api/adCampaigns.d.ts +6 -0
  24. package/docs/api/adCreatives.d.ts +6 -0
  25. package/docs/api/agency.d.ts +6 -0
  26. package/docs/api/agent.d.ts +6 -0
  27. package/docs/api/agents.d.ts +6 -0
  28. package/docs/api/aiInbox.d.ts +6 -0
  29. package/docs/api/analytics.d.ts +6 -0
  30. package/docs/api/apiKeys.d.ts +6 -0
  31. package/docs/api/appDeployments.d.ts +6 -0
  32. package/docs/api/appDomains.d.ts +6 -0
  33. package/docs/api/appLogs.d.ts +6 -0
  34. package/docs/api/appObjects.d.ts +6 -0
  35. package/docs/api/appPages.d.ts +6 -0
  36. package/docs/api/appPlatformTokens.d.ts +6 -0
  37. package/docs/api/appointments.d.ts +20 -2
  38. package/docs/api/appointments.md +27 -11
  39. package/docs/api/apps.d.ts +6 -0
  40. package/docs/api/apps.md +7 -5
  41. package/docs/api/assertUpsert.d.ts +12 -0
  42. package/docs/api/assertUpsert.md +4 -0
  43. package/docs/api/audienceSyncs.d.ts +6 -0
  44. package/docs/api/brandKit.d.ts +6 -0
  45. package/docs/api/bugReports.d.ts +6 -0
  46. package/docs/api/by-path.md +1 -0
  47. package/docs/api/calendarInvites.d.ts +6 -0
  48. package/docs/api/campaignWorkflows.d.ts +6 -0
  49. package/docs/api/campaigns.d.ts +6 -0
  50. package/docs/api/channels.d.ts +6 -0
  51. package/docs/api/cliCampaigns.d.ts +6 -0
  52. package/docs/api/cliPipelines.d.ts +6 -0
  53. package/docs/api/clickHouse.d.ts +6 -0
  54. package/docs/api/companies.d.ts +10 -2
  55. package/docs/api/companies.md +9 -2
  56. package/docs/api/companyIntelligence.d.ts +6 -0
  57. package/docs/api/contacts.d.ts +19 -4
  58. package/docs/api/contacts.md +13 -5
  59. package/docs/api/content.d.ts +6 -0
  60. package/docs/api/contentGridSkills.d.ts +6 -0
  61. package/docs/api/copilot.d.ts +6 -0
  62. package/docs/api/crmSyncs.d.ts +6 -0
  63. package/docs/api/customerSuccess.d.ts +6 -0
  64. package/docs/api/deals.d.ts +6 -0
  65. package/docs/api/deliverability.d.ts +6 -0
  66. package/docs/api/desk.d.ts +6 -0
  67. package/docs/api/dialer.d.ts +6 -0
  68. package/docs/api/documents.d.ts +6 -0
  69. package/docs/api/duplicates.d.ts +6 -0
  70. package/docs/api/eSignature.d.ts +6 -0
  71. package/docs/api/enrichment.d.ts +6 -0
  72. package/docs/api/events.d.ts +6 -0
  73. package/docs/api/fields.d.ts +6 -0
  74. package/docs/api/forms.d.ts +6 -0
  75. package/docs/api/gtmCampaigns.d.ts +6 -0
  76. package/docs/api/gtmContext.d.ts +6 -0
  77. package/docs/api/gtmDeliverability.d.ts +6 -0
  78. package/docs/api/gtmKnowledgeBase.d.ts +6 -0
  79. package/docs/api/gtmLibrary.d.ts +6 -0
  80. package/docs/api/imageLibrary.d.ts +6 -0
  81. package/docs/api/imports.d.ts +6 -0
  82. package/docs/api/inbox.d.ts +6 -0
  83. package/docs/api/install.d.ts +6 -0
  84. package/docs/api/installedApps.d.ts +6 -0
  85. package/docs/api/integrationStatus.d.ts +6 -0
  86. package/docs/api/integrations.d.ts +6 -0
  87. package/docs/api/intent.d.ts +6 -0
  88. package/docs/api/knowledge.d.ts +6 -0
  89. package/docs/api/knowledgeBase.d.ts +6 -0
  90. package/docs/api/landingPages.d.ts +6 -0
  91. package/docs/api/leads.d.ts +6 -0
  92. package/docs/api/library.d.ts +6 -0
  93. package/docs/api/linkedIn.d.ts +6 -0
  94. package/docs/api/linkedInOutreach.d.ts +6 -0
  95. package/docs/api/lists.d.ts +13 -0
  96. package/docs/api/lists.md +7 -0
  97. package/docs/api/logs.d.ts +6 -0
  98. package/docs/api/mailboxes.d.ts +6 -0
  99. package/docs/api/marketplace.d.ts +6 -0
  100. package/docs/api/mcp.d.ts +6 -0
  101. package/docs/api/me.d.ts +6 -0
  102. package/docs/api/meetings.d.ts +6 -0
  103. package/docs/api/newsletter.d.ts +6 -0
  104. package/docs/api/notes.d.ts +6 -0
  105. package/docs/api/notifications.d.ts +6 -0
  106. package/docs/api/objects.d.ts +6 -0
  107. package/docs/api/openSearch.d.ts +6 -0
  108. package/docs/api/ops.d.ts +6 -0
  109. package/docs/api/orgGovernance.d.ts +6 -0
  110. package/docs/api/orgVideos.d.ts +6 -0
  111. package/docs/api/organizationSettings.d.ts +6 -0
  112. package/docs/api/phoneNumbers.d.ts +6 -0
  113. package/docs/api/profile.d.ts +6 -0
  114. package/docs/api/programmaticPages.d.ts +6 -0
  115. package/docs/api/providerDomains.d.ts +6 -0
  116. package/docs/api/providerUsage.d.ts +6 -0
  117. package/docs/api/public.d.ts +6 -0
  118. package/docs/api/publicCopilot.d.ts +6 -0
  119. package/docs/api/publicSignals.d.ts +6 -0
  120. package/docs/api/publicVisitors.d.ts +6 -0
  121. package/docs/api/quotes.d.ts +6 -0
  122. package/docs/api/radarReports.d.ts +6 -0
  123. package/docs/api/recordRoles.d.ts +6 -0
  124. package/docs/api/repos.d.ts +6 -0
  125. package/docs/api/research.d.ts +6 -0
  126. package/docs/api/revenue.d.ts +6 -0
  127. package/docs/api/revenueAnalytics.d.ts +6 -0
  128. package/docs/api/revenueLifecycle.d.ts +11 -1
  129. package/docs/api/revenueLifecycle.md +11 -2
  130. package/docs/api/revenueRecords.d.ts +6 -0
  131. package/docs/api/roles.d.ts +49 -2
  132. package/docs/api/roles.md +65 -1
  133. package/docs/api/salesCoach.d.ts +6 -0
  134. package/docs/api/scans.d.ts +6 -0
  135. package/docs/api/scheduleBuy.d.ts +6 -0
  136. package/docs/api/scraping.d.ts +6 -0
  137. package/docs/api/search.d.ts +9 -1
  138. package/docs/api/search.md +3 -2
  139. package/docs/api/seo.d.ts +6 -0
  140. package/docs/api/sequenceLifecycle.d.ts +6 -0
  141. package/docs/api/sequences.d.ts +6 -0
  142. package/docs/api/settings.d.ts +6 -0
  143. package/docs/api/signals.d.ts +6 -0
  144. package/docs/api/signatures.d.ts +6 -0
  145. package/docs/api/snippet.d.ts +6 -0
  146. package/docs/api/socialPublishing.d.ts +6 -0
  147. package/docs/api/studioDocuments.d.ts +6 -0
  148. package/docs/api/support.d.ts +6 -0
  149. package/docs/api/suppressions.d.ts +6 -0
  150. package/docs/api/surveys.d.ts +6 -0
  151. package/docs/api/tasks.d.ts +6 -0
  152. package/docs/api/teamMembers.d.ts +6 -0
  153. package/docs/api/teams.d.ts +6 -0
  154. package/docs/api/usage.d.ts +6 -0
  155. package/docs/api/visitors.d.ts +6 -0
  156. package/docs/api/voice.d.ts +6 -0
  157. package/docs/api/webChat.d.ts +6 -0
  158. package/docs/api/webhooks.d.ts +6 -0
  159. package/docs/api/websiteEditor.d.ts +6 -0
  160. package/docs/api/work.d.ts +6 -0
  161. package/docs/api/workbench.d.ts +6 -0
  162. package/docs/api/workflows.d.ts +6 -0
  163. package/docs/sdk-clients.md +5 -5
  164. package/package.json +1 -1
@@ -1009,9 +1009,11 @@ declare class G8 {
1009
1009
  get search(): {
1010
1010
  contacts(params?: import("./search").SearchParams): Promise<{
1011
1011
  data: import("./search").SearchContactItem[];
1012
+ pagination?: import("./search").SearchPagination;
1012
1013
  }>;
1013
1014
  companies(params?: import("./search").SearchParams): Promise<{
1014
1015
  data: import("./search").SearchCompanyItem[];
1016
+ pagination?: import("./search").SearchPagination;
1015
1017
  }>;
1016
1018
  saveContacts(params: import("./search").SearchSaveParams): Promise<import("./search").SearchSaveResult>;
1017
1019
  saveCompanies(params: import("./search").SearchSaveParams): Promise<import("./search").SearchSaveResult>;
@@ -27,11 +27,15 @@ export interface SearchResults {
27
27
  /**
28
28
  * Enrichment API - person/company lookup, email verification, prospecting search.
29
29
  *
30
- * Requires API key (server-side only). Credits charged per call. On the hardened
30
+ * Requires API key (server-side only). Lookups and email verification charge
31
+ * credits per call; search is free. On the hardened
31
32
  * HTTP core: throws a typed `G8Error` on failure and retries transient errors.
32
33
  */
33
34
  export declare const createEnrichClient: (apiKey: string, apiUrl?: string) => {
34
- /** Look up a person by email, LinkedIn, or name + company. Costs 1 credit. */
35
+ /**
36
+ * Look up a person by email, LinkedIn, or name + company. Costs 2 credits per
37
+ * lookup, charged even when no match is found (`found: false`).
38
+ */
35
39
  person(params: {
36
40
  email?: string;
37
41
  linkedin_url?: string;
@@ -39,13 +43,16 @@ export declare const createEnrichClient: (apiKey: string, apiUrl?: string) => {
39
43
  last_name?: string;
40
44
  company_domain?: string;
41
45
  }): Promise<PersonEnrichment>;
42
- /** Look up a company by domain or name. Costs 1 credit. */
46
+ /**
47
+ * Look up a company by domain or name. Costs 2 credits per lookup, charged
48
+ * even when no match is found (`found: false`).
49
+ */
43
50
  company(params: {
44
51
  domain?: string;
45
52
  name?: string;
46
53
  }): Promise<CompanyEnrichment>;
47
54
  /** Verify an email address. Costs 1 credit. */
48
55
  verifyEmail(email: string): Promise<EmailVerification>;
49
- /** Search 700M+ contacts with filters. Credits charged per result. */
56
+ /** Search 700M+ contacts with filters. Does not consume credits. */
50
57
  search(filters: SearchFilter[], page?: number, limit?: number): Promise<SearchResults>;
51
58
  };
@@ -35,7 +35,7 @@ export type { IntentKeyword, IntentPage, IntentVisitor, IntentCompany, IntentCon
35
35
  export type { GlobalContextDocument, Persona, ICP, IntelligenceData, ResearchReport, } from "./studio";
36
36
  export type { MeetingSummary, MeetingDetail, MeetingAttendee, MeetingTranscriptLine, MeetingAnalysis, MeetingListParams, } from "./meetings";
37
37
  export type { AudienceSync, AudienceSyncPlatform, AudienceSyncMode, AudienceSyncCreateParams, AudienceSyncUpdateParams, AudienceSyncRun, AudienceSyncError, } from "./audiences";
38
- export type { SearchOperator, SearchCondition, SearchParams, SearchSaveParams, SearchContactItem, SearchCompanyItem, SearchSaveResult, } from "./search";
38
+ export type { SearchOperator, SearchCondition, SearchParams, SearchSaveParams, SearchContactItem, SearchCompanyItem, SearchSaveResult, SearchPagination, } from "./search";
39
39
  export type { AgencyInfo, AgencyClient } from "./agency";
40
40
  export type { MarketplaceProfile, MarketplaceOffer, MarketplaceHiring } from "./marketplace";
41
41
  export type { Snippet } from "./snippet";
@@ -128,8 +128,10 @@ export declare const useG8: () => {
128
128
  company_domain?: string;
129
129
  }): Promise<import("./enrich").PersonEnrichment>;
130
130
  company(params: {
131
- domain?: string;
132
- name? /** Identify a user */: string;
131
+ domain
132
+ /** Progressive form helpers (read lazily, so useG8() never throws on its own) */
133
+ ? /** Progressive form helpers (read lazily, so useG8() never throws on its own) */: string;
134
+ name?: string;
133
135
  }): Promise<import("./enrich").CompanyEnrichment>;
134
136
  verifyEmail(email: string): Promise<import("./enrich").EmailVerification>;
135
137
  search(filters: import("./enrich").SearchFilter[], page?: number, limit?: number): Promise<import("./enrich").SearchResults>;
@@ -941,9 +943,11 @@ export declare const useG8: () => {
941
943
  get search(): {
942
944
  contacts(params?: import("./search").SearchParams): Promise<{
943
945
  data: import("./search").SearchContactItem[];
946
+ pagination?: import("./search").SearchPagination;
944
947
  }>;
945
948
  companies(params?: import("./search").SearchParams): Promise<{
946
949
  data: import("./search").SearchCompanyItem[];
950
+ pagination?: import("./search").SearchPagination;
947
951
  }>;
948
952
  saveContacts(params: import("./search").SearchSaveParams): Promise<import("./search").SearchSaveResult>;
949
953
  saveCompanies(params: import("./search").SearchSaveParams): Promise<import("./search").SearchSaveResult>;
@@ -11,7 +11,10 @@ export interface SearchCondition {
11
11
  export interface SearchParams {
12
12
  /** Filter conditions, combined with AND. */
13
13
  filters?: SearchCondition[];
14
- /** Page number, 1-indexed (1-100). */
14
+ /**
15
+ * Page number, 1-indexed. page * limit may not exceed 10,000 (the paging
16
+ * window); narrow the filters to reach records beyond it.
17
+ */
15
18
  page?: number;
16
19
  /** Results per page (1-100, default 25). */
17
20
  limit?: number;
@@ -45,6 +48,25 @@ export interface SearchContactItem {
45
48
  company_employee_count?: string | null;
46
49
  company_country?: string | null;
47
50
  confidence_score?: number | null;
51
+ /**
52
+ * Fields whose value exists but is locked (shown as "***") until the contact
53
+ * is added to a list. A null field has no value.
54
+ */
55
+ locked_fields?: string[];
56
+ }
57
+ /** Pagination block of a search response. */
58
+ export interface SearchPagination {
59
+ page: number;
60
+ limit: number;
61
+ /** Results that can be paged (at most 10,000). */
62
+ total: number;
63
+ has_next: boolean;
64
+ /** How many records really match, when known (can exceed `total`). */
65
+ total_available?: number | null;
66
+ /** True when more records match than `total` shows. */
67
+ total_is_lower_bound?: boolean | null;
68
+ /** Plain-language notes, e.g. a reversed `between` range was put in order. */
69
+ notes?: string[] | null;
48
70
  }
49
71
  export interface SearchCompanyItem {
50
72
  name?: string | null;
@@ -87,10 +109,12 @@ export declare const createSearchClient: (apiKey: string, apiUrl?: string) => {
87
109
  /** Search open-data contacts by filter. */
88
110
  contacts(params?: SearchParams): Promise<{
89
111
  data: SearchContactItem[];
112
+ pagination?: SearchPagination;
90
113
  }>;
91
114
  /** Search open-data companies by filter. */
92
115
  companies(params?: SearchParams): Promise<{
93
116
  data: SearchCompanyItem[];
117
+ pagination?: SearchPagination;
94
118
  }>;
95
119
  /** Search contacts and save the matches into a new list. */
96
120
  saveContacts(params: SearchSaveParams): Promise<SearchSaveResult>;
@@ -5,6 +5,6 @@
5
5
  * both together (the version-parity gate already pins package.json, the
6
6
  * lockfile and the CHANGELOG to each other).
7
7
  */
8
- export declare const SDK_VERSION = "0.265.0";
8
+ export declare const SDK_VERSION = "0.277.0";
9
9
  /** Value of the `X-G8-Client` header every SDK request carries (I-13). */
10
- export declare const SDK_CLIENT_ID = "js-sdk/0.265.0";
10
+ export declare const SDK_CLIENT_ID = "js-sdk/0.277.0";
package/docs/agents.md CHANGED
@@ -9,7 +9,7 @@ grows every week and your training data is older than this file.
9
9
 
10
10
  graph8 is a B2B go-to-market platform: CRM (contacts, companies, deals, custom objects), a 700M-person
11
11
  data index with enrichment, intent signals, sequences and campaigns across email/SMS/LinkedIn/voice, a unified
12
- inbox, meetings, workflows and more. This SDK reaches all of it: **3252 Developer API
12
+ inbox, meetings, workflows and more. This SDK reaches all of it: **3253 Developer API
13
13
  operations** in 141 areas.
14
14
 
15
15
  ## 1. The short version
@@ -92,7 +92,7 @@ g8.init({ apiKey: process.env.G8_API_KEY! });
92
92
  | | Hand-written clients | `g8.api` (generated) |
93
93
  |---|---|---|
94
94
  | Example | `g8.contacts.upsert({ list_id, work_email })` | `g8.api.assertUpsert.assertContact({ body: { list_id, work_email } })` |
95
- | Coverage | 289 methods, reaching 258 operations | all 3252 operations |
95
+ | Coverage | 289 methods, reaching 258 operations | all 3253 operations |
96
96
  | Returns | the unwrapped value (usually `data`) | the full envelope; read `result.data` |
97
97
  | Arguments | positional / friendly names | `{ path?, query?, headers?, body? }`, exactly as the contract names them |
98
98
  | Reference | [sdk-clients.md](sdk-clients.md) | [api/README.md](api/README.md) |
@@ -141,7 +141,7 @@ Hand-written modules:
141
141
  | [`g8.webhooks`](sdk-clients.md#g8-webhooks) | 1 | API key |
142
142
  | [`g8.workflows`](sdk-clients.md#g8-workflows) | 21 | API key |
143
143
 
144
- `g8.api` namespaces (operation counts): `accounts` (16), `adCampaigns` (19), `adCreatives` (40), `agency` (24), `agent` (8), `agents` (65), `aiInbox` (79), `analytics` (51), `apiKeys` (6), `appDeployments` (7), `appDomains` (5), `appLogs` (2), `appObjects` (10), `appPages` (16), `appPlatformTokens` (3), `appointments` (92), `apps` (22), `assertUpsert` (6), `audienceSyncs` (8), `brandKit` (30), `bugReports` (7), `calendarInvites` (3), `campaignWorkflows` (5), `campaigns` (29), `channels` (5), `cliCampaigns` (6), `cliPipelines` (12), `clickHouse` (2), `companies` (50), `companyIntelligence` (14), `contacts` (70), `content` (41), `contentGridSkills` (6), `copilot` (39), `crmSyncs` (6), `customerSuccess` (19), `deals` (48), `deliverability` (17), `desk` (71), `dialer` (46), `dialerAnalytics` (6), `documents` (35), `duplicates` (7), `eSign` (1), `eSignature` (7), `enrichment` (114), `events` (1), `fields` (8), `forms` (35), `gtmCampaigns` (22), `gtmContext` (51), `gtmDeliverability` (1), `gtmKnowledgeBase` (2), `gtmLaunchHelpers` (2), `gtmLibrary` (20), `health` (1), `imageLibrary` (14), `imports` (3), `inbox` (22), `install` (6), `installedApps` (4), `integrationStatus` (6), `integrations` (83), `intent` (16), `knowledge` (21), `knowledgeBase` (2), `landingPages` (59), `leads` (4), `library` (9), `linkedIn` (5), `linkedInOutreach` (20), `lists` (36), `logs` (1), `mailboxes` (38), `marketingIntelligence` (10), `marketplace` (142), `mcp` (1), `me` (1), `meetings` (17), `newsletter` (61), `notes` (19), `notifications` (2), `objects` (18), `openSearch` (4), `ops` (5), `orgGovernance` (17), `orgVideos` (6), `organizationSettings` (22), `phoneNumbers` (16), `profile` (14), `programmaticPages` (15), `providerDomains` (34), `providerUsage` (5), `public` (1), `publicCopilot` (1), `publicSignals` (1), `publicVisitors` (2), `quotes` (56), `radar` (42), `radarReports` (8), `recordRoles` (4), `repos` (4), `research` (13), `revenue` (14), `revenueAnalytics` (6), `revenueLifecycle` (5), `revenueRecords` (15), `roles` (20), `salesCoach` (37), `sandbox` (9), `scans` (2), `scheduleBuy` (9), `scraping` (10), `sdrAnalytics` (5), `search` (19), `seo` (11), `sequenceLifecycle` (8), `sequences` (71), `settings` (18), `signals` (56), `signatures` (24), `skills` (12), `snippet` (2), `socialPublishing` (22), `studioDocuments` (9), `support` (1), `suppressions` (6), `surveys` (21), `tasks` (25), `teamMembers` (21), `teams` (35), `usage` (9), `visitors` (26), `voice` (187), `webAnalytics` (38), `webChat` (46), `webhooks` (8), `websiteEditor` (12), `work` (59), `workbench` (107), `workflows` (59).
144
+ `g8.api` namespaces (operation counts): `accounts` (16), `adCampaigns` (19), `adCreatives` (40), `agency` (24), `agent` (8), `agents` (65), `aiInbox` (79), `analytics` (51), `apiKeys` (6), `appDeployments` (7), `appDomains` (5), `appLogs` (2), `appObjects` (10), `appPages` (16), `appPlatformTokens` (3), `appointments` (92), `apps` (22), `assertUpsert` (6), `audienceSyncs` (8), `brandKit` (30), `bugReports` (7), `calendarInvites` (3), `campaignWorkflows` (5), `campaigns` (29), `channels` (5), `cliCampaigns` (6), `cliPipelines` (12), `clickHouse` (2), `companies` (50), `companyIntelligence` (14), `contacts` (70), `content` (41), `contentGridSkills` (6), `copilot` (39), `crmSyncs` (6), `customerSuccess` (19), `deals` (48), `deliverability` (17), `desk` (71), `dialer` (46), `dialerAnalytics` (6), `documents` (35), `duplicates` (7), `eSign` (1), `eSignature` (7), `enrichment` (114), `events` (1), `fields` (8), `forms` (35), `gtmCampaigns` (22), `gtmContext` (51), `gtmDeliverability` (1), `gtmKnowledgeBase` (2), `gtmLaunchHelpers` (2), `gtmLibrary` (20), `health` (1), `imageLibrary` (14), `imports` (3), `inbox` (22), `install` (6), `installedApps` (4), `integrationStatus` (6), `integrations` (83), `intent` (16), `knowledge` (21), `knowledgeBase` (2), `landingPages` (59), `leads` (4), `library` (9), `linkedIn` (5), `linkedInOutreach` (20), `lists` (36), `logs` (1), `mailboxes` (38), `marketingIntelligence` (10), `marketplace` (142), `mcp` (1), `me` (1), `meetings` (17), `newsletter` (61), `notes` (19), `notifications` (2), `objects` (18), `openSearch` (4), `ops` (5), `orgGovernance` (17), `orgVideos` (6), `organizationSettings` (22), `phoneNumbers` (16), `profile` (14), `programmaticPages` (15), `providerDomains` (34), `providerUsage` (5), `public` (1), `publicCopilot` (1), `publicSignals` (1), `publicVisitors` (2), `quotes` (56), `radar` (42), `radarReports` (8), `recordRoles` (4), `repos` (4), `research` (13), `revenue` (14), `revenueAnalytics` (6), `revenueLifecycle` (5), `revenueRecords` (15), `roles` (21), `salesCoach` (37), `sandbox` (9), `scans` (2), `scheduleBuy` (9), `scraping` (10), `sdrAnalytics` (5), `search` (19), `seo` (11), `sequenceLifecycle` (8), `sequences` (71), `settings` (18), `signals` (56), `signatures` (24), `skills` (12), `snippet` (2), `socialPublishing` (22), `studioDocuments` (9), `support` (1), `suppressions` (6), `surveys` (21), `tasks` (25), `teamMembers` (21), `teams` (35), `usage` (9), `visitors` (26), `voice` (187), `webAnalytics` (38), `webChat` (46), `webhooks` (8), `websiteEditor` (12), `work` (59), `workbench` (107), `workflows` (59).
145
145
 
146
146
  ## 5. How to find the right call
147
147
 
@@ -200,7 +200,7 @@ Every operation carries a tier:
200
200
  | `write` | creates or changes records; the SDK sends an Idempotency-Key and retries transient failures | 811 |
201
201
  | `destructive` | deletes or archives data; confirm with a human before calling | 300 |
202
202
  | `billable` | spends credits; the SDK never blindly retries it; confirm cost before bulk use | 383 |
203
- | `external` | reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first | 250 |
203
+ | `external` | reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first | 251 |
204
204
 
205
205
  What the SDK does for you:
206
206
 
@@ -219,7 +219,8 @@ What you must do:
219
219
 
220
220
  - Get a human's confirmation before calling an `external`, `billable` or `destructive` operation, and say
221
221
  what it will do ("this sends the email to 240 contacts").
222
- - Keep bulk billable jobs small until the user confirms the cost (enrichment is 1 credit per lookup).
222
+ - Keep bulk billable jobs small until the user confirms the cost (a person or company lookup is 2 credits,
223
+ charged even when no match is found).
223
224
 
224
225
  ## 8. Errors
225
226
 
@@ -375,7 +376,7 @@ for (const person of results.contacts) {
375
376
 
376
377
  ### Enrich one person or company
377
378
 
378
- You have an email, LinkedIn URL, name + company, or a domain and need the full profile. Each call costs 1 credit (tier `billable`), so the SDK will not blindly retry it on a 5xx.
379
+ You have an email, LinkedIn URL, name + company, or a domain and need the full profile. Each lookup costs 2 credits, charged even when no match is found, and an email verify costs 1 (tier `billable`), so the SDK will not blindly retry them on a 5xx.
379
380
 
380
381
  ```ts
381
382
  import { g8 } from "@graph8/sdk";
@@ -2,7 +2,7 @@
2
2
 
3
3
  # `g8.api`: every Developer API operation
4
4
 
5
- `g8.api` is generated from the published OpenAPI contract, so it covers all 3252 operations across 141 namespaces (1508 read, 811 write, 300 destructive, 383 billable, 250 external).
5
+ `g8.api` is generated from the published OpenAPI contract, so it covers all 3253 operations across 141 namespaces (1508 read, 811 write, 300 destructive, 383 billable, 251 external).
6
6
 
7
7
  - Found a REST path in a curl example or the web docs? Look it up in [by-path.md](by-path.md).
8
8
  - Prefer a hand-written method where one exists: [../sdk-clients.md](../sdk-clients.md).
@@ -129,7 +129,7 @@
129
129
  | `g8.api.revenueAnalytics` | Revenue Analytics | 6 | none | [revenueAnalytics.md](revenueAnalytics.md) | [revenueAnalytics.d.ts](revenueAnalytics.d.ts) |
130
130
  | `g8.api.revenueLifecycle` | Revenue Lifecycle | 5 | none | [revenueLifecycle.md](revenueLifecycle.md) | [revenueLifecycle.d.ts](revenueLifecycle.d.ts) |
131
131
  | `g8.api.revenueRecords` | Revenue Records | 15 | none | [revenueRecords.md](revenueRecords.md) | [revenueRecords.d.ts](revenueRecords.d.ts) |
132
- | `g8.api.roles` | Roles | 20 | none | [roles.md](roles.md) | [roles.d.ts](roles.d.ts) |
132
+ | `g8.api.roles` | Roles | 21 | none | [roles.md](roles.md) | [roles.d.ts](roles.d.ts) |
133
133
  | `g8.api.salesCoach` | Sales Coach | 37 | none | [salesCoach.md](salesCoach.md) | [salesCoach.d.ts](salesCoach.d.ts) |
134
134
  | `g8.api.sandbox` | sandbox | 9 | none | [sandbox.md](sandbox.md) | [sandbox.d.ts](sandbox.d.ts) |
135
135
  | `g8.api.scans` | Scans | 2 | none | [scans.md](scans.md) | [scans.d.ts](scans.d.ts) |
@@ -389,8 +389,14 @@ export interface PaginationMeta {
389
389
  limit: number;
390
390
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
391
391
  next_cursor?: string | null;
392
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
393
+ notes?: Array<string> | null;
392
394
  /** Current page number (1-indexed) */
393
395
  page: number;
394
396
  /** Total number of items */
395
397
  total: number;
398
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
399
+ total_available?: number | null;
400
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
401
+ total_is_lower_bound?: boolean | null;
396
402
  }
@@ -640,10 +640,16 @@ export interface PaginationMeta {
640
640
  limit: number;
641
641
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
642
642
  next_cursor?: string | null;
643
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
644
+ notes?: Array<string> | null;
643
645
  /** Current page number (1-indexed) */
644
646
  page: number;
645
647
  /** Total number of items */
646
648
  total: number;
649
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
650
+ total_available?: number | null;
651
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
652
+ total_is_lower_bound?: boolean | null;
647
653
  }
648
654
 
649
655
  /**
@@ -886,10 +886,16 @@ export interface PaginationMeta {
886
886
  limit: number;
887
887
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
888
888
  next_cursor?: string | null;
889
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
890
+ notes?: Array<string> | null;
889
891
  /** Current page number (1-indexed) */
890
892
  page: number;
891
893
  /** Total number of items */
892
894
  total: number;
895
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
896
+ total_available?: number | null;
897
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
898
+ total_is_lower_bound?: boolean | null;
893
899
  }
894
900
 
895
901
  /**
@@ -533,10 +533,16 @@ export interface PaginationMeta {
533
533
  limit: number;
534
534
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
535
535
  next_cursor?: string | null;
536
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
537
+ notes?: Array<string> | null;
536
538
  /** Current page number (1-indexed) */
537
539
  page: number;
538
540
  /** Total number of items */
539
541
  total: number;
542
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
543
+ total_available?: number | null;
544
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
545
+ total_is_lower_bound?: boolean | null;
540
546
  }
541
547
 
542
548
  /**
@@ -323,8 +323,14 @@ export interface PaginationMeta {
323
323
  limit: number;
324
324
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
325
325
  next_cursor?: string | null;
326
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
327
+ notes?: Array<string> | null;
326
328
  /** Current page number (1-indexed) */
327
329
  page: number;
328
330
  /** Total number of items */
329
331
  total: number;
332
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
333
+ total_available?: number | null;
334
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
335
+ total_is_lower_bound?: boolean | null;
330
336
  }
@@ -1559,10 +1559,16 @@ export interface PaginationMeta {
1559
1559
  limit: number;
1560
1560
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
1561
1561
  next_cursor?: string | null;
1562
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
1563
+ notes?: Array<string> | null;
1562
1564
  /** Current page number (1-indexed) */
1563
1565
  page: number;
1564
1566
  /** Total number of items */
1565
1567
  total: number;
1568
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
1569
+ total_available?: number | null;
1570
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
1571
+ total_is_lower_bound?: boolean | null;
1566
1572
  }
1567
1573
 
1568
1574
  /** Mirror of `SessionReadRequest`. */
@@ -1917,10 +1917,16 @@ export interface PaginationMeta {
1917
1917
  limit: number;
1918
1918
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
1919
1919
  next_cursor?: string | null;
1920
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
1921
+ notes?: Array<string> | null;
1920
1922
  /** Current page number (1-indexed) */
1921
1923
  page: number;
1922
1924
  /** Total number of items */
1923
1925
  total: number;
1926
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
1927
+ total_available?: number | null;
1928
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
1929
+ total_is_lower_bound?: boolean | null;
1924
1930
  }
1925
1931
 
1926
1932
  /**
@@ -1241,10 +1241,16 @@ export interface PaginationMeta {
1241
1241
  limit: number;
1242
1242
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
1243
1243
  next_cursor?: string | null;
1244
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
1245
+ notes?: Array<string> | null;
1244
1246
  /** Current page number (1-indexed) */
1245
1247
  page: number;
1246
1248
  /** Total number of items */
1247
1249
  total: number;
1250
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
1251
+ total_available?: number | null;
1252
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
1253
+ total_is_lower_bound?: boolean | null;
1248
1254
  }
1249
1255
 
1250
1256
  /**
@@ -223,10 +223,16 @@ export interface PaginationMeta {
223
223
  limit: number;
224
224
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
225
225
  next_cursor?: string | null;
226
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
227
+ notes?: Array<string> | null;
226
228
  /** Current page number (1-indexed) */
227
229
  page: number;
228
230
  /** Total number of items */
229
231
  total: number;
232
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
233
+ total_available?: number | null;
234
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
235
+ total_is_lower_bound?: boolean | null;
230
236
  }
231
237
 
232
238
  export interface ScopeCatalogEntry {
@@ -224,10 +224,16 @@ export interface PaginationMeta {
224
224
  limit: number;
225
225
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
226
226
  next_cursor?: string | null;
227
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
228
+ notes?: Array<string> | null;
227
229
  /** Current page number (1-indexed) */
228
230
  page: number;
229
231
  /** Total number of items */
230
232
  total: number;
233
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
234
+ total_available?: number | null;
235
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
236
+ total_is_lower_bound?: boolean | null;
231
237
  }
232
238
 
233
239
  export interface PromoteDeploymentRequest {
@@ -164,8 +164,14 @@ export interface PaginationMeta {
164
164
  limit: number;
165
165
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
166
166
  next_cursor?: string | null;
167
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
168
+ notes?: Array<string> | null;
167
169
  /** Current page number (1-indexed) */
168
170
  page: number;
169
171
  /** Total number of items */
170
172
  total: number;
173
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
174
+ total_available?: number | null;
175
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
176
+ total_is_lower_bound?: boolean | null;
171
177
  }
@@ -113,8 +113,14 @@ export interface PaginationMeta {
113
113
  limit: number;
114
114
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
115
115
  next_cursor?: string | null;
116
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
117
+ notes?: Array<string> | null;
116
118
  /** Current page number (1-indexed) */
117
119
  page: number;
118
120
  /** Total number of items */
119
121
  total: number;
122
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
123
+ total_available?: number | null;
124
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
125
+ total_is_lower_bound?: boolean | null;
120
126
  }
@@ -329,10 +329,16 @@ export interface PaginationMeta {
329
329
  limit: number;
330
330
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
331
331
  next_cursor?: string | null;
332
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
333
+ notes?: Array<string> | null;
332
334
  /** Current page number (1-indexed) */
333
335
  page: number;
334
336
  /** Total number of items */
335
337
  total: number;
338
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
339
+ total_available?: number | null;
340
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
341
+ total_is_lower_bound?: boolean | null;
336
342
  }
337
343
 
338
344
  /**
@@ -550,8 +550,14 @@ export interface PaginationMeta {
550
550
  limit: number;
551
551
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
552
552
  next_cursor?: string | null;
553
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
554
+ notes?: Array<string> | null;
553
555
  /** Current page number (1-indexed) */
554
556
  page: number;
555
557
  /** Total number of items */
556
558
  total: number;
559
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
560
+ total_available?: number | null;
561
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
562
+ total_is_lower_bound?: boolean | null;
557
563
  }
@@ -88,10 +88,16 @@ export interface PaginationMeta {
88
88
  limit: number;
89
89
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
90
90
  next_cursor?: string | null;
91
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
92
+ notes?: Array<string> | null;
91
93
  /** Current page number (1-indexed) */
92
94
  page: number;
93
95
  /** Total number of items */
94
96
  total: number;
97
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
98
+ total_available?: number | null;
99
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
100
+ total_is_lower_bound?: boolean | null;
95
101
  }
96
102
 
97
103
  /** Client-credentials exchange for a service (server-to-server) app token. */
@@ -1427,7 +1427,7 @@ export interface AppointmentsOperations {
1427
1427
  };
1428
1428
  /**
1429
1429
  * PATCH /appointments/bookings/{booking_uid}/location
1430
- * Update the meeting location and notify both parties
1430
+ * Change a booking's location and/or conferencing
1431
1431
  * tier: external · scope: meetings:run
1432
1432
  */
1433
1433
  update_booking_location_appointments_bookings__booking_uid__location_patch: {
@@ -2028,10 +2028,16 @@ export interface PaginationMeta {
2028
2028
  limit: number;
2029
2029
  /** Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers. */
2030
2030
  next_cursor?: string | null;
2031
+ /** Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order. */
2032
+ notes?: Array<string> | null;
2031
2033
  /** Current page number (1-indexed) */
2032
2034
  page: number;
2033
2035
  /** Total number of items */
2034
2036
  total: number;
2037
+ /** Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search. */
2038
+ total_available?: number | null;
2039
+ /** Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search. */
2040
+ total_is_lower_bound?: boolean | null;
2035
2041
  }
2036
2042
 
2037
2043
  export interface RequestRescheduleRequest {
@@ -2235,8 +2241,20 @@ export interface UpdateEventTypeRequest {
2235
2241
  use_common_schedule?: boolean | null;
2236
2242
  }
2237
2243
 
2244
+ /**
2245
+ * Change a booking's location and/or conferencing.
2246
+ *
2247
+ * Send only the field you change: an omitted field is left as is, and ``null``
2248
+ * clears it. ``selected_location`` is a physical, phone or custom location;
2249
+ * ``selected_conferencing`` is a meeting link or a conferencing app (a new
2250
+ * meeting room is created for zoom, roam_auto, ms_teams and google_meet).
2251
+ * ``location`` is deprecated: a plain address, kept for older clients.
2252
+ */
2238
2253
  export interface UpdateLocationRequest {
2239
- location: string;
2254
+ location?: string | null;
2255
+ notify_attendees?: boolean;
2256
+ selected_conferencing?: LocationItem | null;
2257
+ selected_location?: LocationItem | null;
2240
2258
  }
2241
2259
 
2242
2260
  /** A member's SCHEDULING role - not their graph8 organisation role. */
@@ -100,7 +100,7 @@ Exact TypeScript types for every operation on this page, and every schema they u
100
100
  | [`toggleWorkflow`](#op-toggleworkflow) | `POST /api/v1/appointments/workflows/{workflow_id}/toggle` | external | `meetings:run` | Activate or deactivate a workflow |
101
101
  | [`unassignManagedMember`](#op-unassignmanagedmember) | `DELETE /api/v1/appointments/event-types/{event_type_id}/members/{user_id}` | destructive | `meetings:delete` | Unassign Managed Member |
102
102
  | [`updateAvailability`](#op-updateavailability) | `PATCH /api/v1/appointments/schedules/{schedule_id}/availability` | write | `meetings:write` | Replace availability rules and/or date overrides for a schedule |
103
- | [`updateBookingLocation`](#op-updatebookinglocation) | `PATCH /api/v1/appointments/bookings/{booking_uid}/location` | external | `meetings:run` | Update the meeting location and notify both parties |
103
+ | [`updateBookingLocation`](#op-updatebookinglocation) | `PATCH /api/v1/appointments/bookings/{booking_uid}/location` | external | `meetings:run` | Change a booking's location and/or conferencing |
104
104
  | [`updateBookingSequence`](#op-updatebookingsequence) | `PATCH /api/v1/appointments/bookings/{booking_uid}/sequence` | external | `meetings:run` | Associate a booking with a sequence (or detach) |
105
105
  | [`updateEmbedConfig`](#op-updateembedconfig) | `PATCH /api/v1/appointments/event-types/{event_type_id}/embed` | write | `meetings:write` | Update Embed Config |
106
106
  | [`updateEventType`](#op-updateeventtype) | `PATCH /api/v1/appointments/event-types/{event_type_id}` | write | `meetings:write` | Update an event type (partial) |
@@ -145,7 +145,7 @@ Body fields (`AddGuestsRequest`):
145
145
 
146
146
  | Field | Type | Required | Description |
147
147
  |---|---|---|---|
148
- | `body.guests` | `Array<string>` | yes | |
148
+ | `body.guests` | `Array<string>` | yes | min items 1, max items 50 |
149
149
 
150
150
  **Returns** `Record<string, unknown>`.
151
151
 
@@ -3148,20 +3148,33 @@ const result = await g8.api.appointments.updateAvailability({ path: { schedule_i
3148
3148
 
3149
3149
  ### `g8.api.appointments.updateBookingLocation(input)`
3150
3150
 
3151
- **Update the meeting location and notify both parties**
3151
+ **Change a booking's location and/or conferencing**
3152
3152
 
3153
3153
  - HTTP: `PATCH /api/v1/appointments/bookings/{booking_uid}/location`
3154
3154
  - operationId: `update_booking_location_appointments_bookings__booking_uid__location_patch` (also callable as `g8.api.call("update_booking_location_appointments_bookings__booking_uid__location_patch", input)`)
3155
3155
  - 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
3156
3156
  - API-key scope: `meetings:run`
3157
3157
 
3158
- Change the meeting location for a booking and re-notify both parties.
3158
+ Change a booking's physical location and/or its conferencing.
3159
3159
 
3160
- ``location`` is a location key such as ``"zoom"``, ``"google_meet"``,
3161
- ``"in_person"``, or a custom URL. Backed by
3162
- ``BookingsHandler.handle_update_location`` (updates the booking row,
3163
- sends location-updated emails, emits an EDA event). Raises 404 when
3164
- the booking uid is not visible to the caller.
3160
+ Two independent fields; send only the one you change. An omitted field is
3161
+ left as is, and ``null`` clears it:
3162
+
3163
+ * ``selected_location``: a location object, e.g.
3164
+ ``{"kind": "in_person_host", "address": "1 Market St"}``,
3165
+ ``{"kind": "phone_host", "phone": "+14155550100"}`` or
3166
+ ``{"kind": "custom", "display_label": "Lobby"}``.
3167
+ * ``selected_conferencing``: ``{"kind": "link", "link": "https://..."}`` for a
3168
+ meeting URL, or ``{"kind": "conferencing", "provider": "zoom"}`` (also
3169
+ ``roam_auto``, ``ms_teams``, ``google_meet``), which creates a NEW meeting room.
3170
+ * ``notify_attendees`` (default true): the host is always emailed.
3171
+
3172
+ The host's calendar event is updated too; ``calendar_synced`` in the response
3173
+ is false when that update failed (the change is saved either way). Errors:
3174
+ 404 when the booking is not visible to the caller, 409 when it is cancelled,
3175
+ past, imported or changed meanwhile, 422 for an invalid value or a provider
3176
+ the host has not connected, 429 past the per-booking edit limit, 502 when a
3177
+ new meeting room could not be created (nothing is changed then).
3165
3178
 
3166
3179
  **Input**
3167
3180
 
@@ -3174,7 +3187,10 @@ Body fields (`UpdateLocationRequest`):
3174
3187
 
3175
3188
  | Field | Type | Required | Description |
3176
3189
  |---|---|---|---|
3177
- | `body.location` | `string` | yes | |
3190
+ | `body.location` | `string \| null` | no | |
3191
+ | `body.notify_attendees` | `boolean` | no | default `true` |
3192
+ | `body.selected_conferencing` | `LocationItem \| null` | no | |
3193
+ | `body.selected_location` | `LocationItem \| null` | no | |
3178
3194
 
3179
3195
  **Returns** `Record<string, unknown>`.
3180
3196
 
@@ -3182,7 +3198,7 @@ Body fields (`UpdateLocationRequest`):
3182
3198
 
3183
3199
  ```ts
3184
3200
  // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
3185
- const result = await g8.api.appointments.updateBookingLocation({ path: { booking_uid: "example" }, body: { location: "example" } });
3201
+ const result = await g8.api.appointments.updateBookingLocation({ path: { booking_uid: "example" }, body: {} });
3186
3202
  ```
3187
3203
 
3188
3204
  ---