@graph8/sdk 0.264.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 (165) hide show
  1. package/README.md +3 -3
  2. package/dist/index.d.mts +140 -24
  3. package/dist/index.d.ts +140 -24
  4. package/dist/index.js +14 -5
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +14 -5
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/react.d.mts +139 -22
  9. package/dist/react.d.ts +139 -22
  10. package/dist/react.js +13 -4
  11. package/dist/react.js.map +1 -1
  12. package/dist/react.mjs +13 -4
  13. package/dist/react.mjs.map +1 -1
  14. package/dist/types/core.d.ts +3 -1
  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 +7 -3
  18. package/dist/types/search.d.ts +25 -1
  19. package/dist/types/version.d.ts +2 -2
  20. package/dist/types/webhooks.d.ts +2 -2
  21. package/docs/agents.md +7 -6
  22. package/docs/api/README.md +2 -2
  23. package/docs/api/accounts.d.ts +6 -0
  24. package/docs/api/adCampaigns.d.ts +6 -0
  25. package/docs/api/adCreatives.d.ts +6 -0
  26. package/docs/api/agency.d.ts +6 -0
  27. package/docs/api/agent.d.ts +6 -0
  28. package/docs/api/agents.d.ts +6 -0
  29. package/docs/api/aiInbox.d.ts +6 -0
  30. package/docs/api/analytics.d.ts +6 -0
  31. package/docs/api/apiKeys.d.ts +6 -0
  32. package/docs/api/appDeployments.d.ts +6 -0
  33. package/docs/api/appDomains.d.ts +6 -0
  34. package/docs/api/appLogs.d.ts +6 -0
  35. package/docs/api/appObjects.d.ts +6 -0
  36. package/docs/api/appPages.d.ts +6 -0
  37. package/docs/api/appPlatformTokens.d.ts +6 -0
  38. package/docs/api/appointments.d.ts +20 -2
  39. package/docs/api/appointments.md +27 -11
  40. package/docs/api/apps.d.ts +6 -0
  41. package/docs/api/apps.md +7 -5
  42. package/docs/api/assertUpsert.d.ts +12 -0
  43. package/docs/api/assertUpsert.md +4 -0
  44. package/docs/api/audienceSyncs.d.ts +6 -0
  45. package/docs/api/brandKit.d.ts +6 -0
  46. package/docs/api/bugReports.d.ts +6 -0
  47. package/docs/api/by-path.md +1 -0
  48. package/docs/api/calendarInvites.d.ts +6 -0
  49. package/docs/api/campaignWorkflows.d.ts +6 -0
  50. package/docs/api/campaigns.d.ts +6 -0
  51. package/docs/api/channels.d.ts +6 -0
  52. package/docs/api/cliCampaigns.d.ts +6 -0
  53. package/docs/api/cliPipelines.d.ts +6 -0
  54. package/docs/api/clickHouse.d.ts +6 -0
  55. package/docs/api/companies.d.ts +10 -2
  56. package/docs/api/companies.md +9 -2
  57. package/docs/api/companyIntelligence.d.ts +6 -0
  58. package/docs/api/contacts.d.ts +19 -4
  59. package/docs/api/contacts.md +13 -5
  60. package/docs/api/content.d.ts +6 -0
  61. package/docs/api/contentGridSkills.d.ts +6 -0
  62. package/docs/api/copilot.d.ts +6 -0
  63. package/docs/api/crmSyncs.d.ts +6 -0
  64. package/docs/api/customerSuccess.d.ts +6 -0
  65. package/docs/api/deals.d.ts +6 -0
  66. package/docs/api/deliverability.d.ts +6 -0
  67. package/docs/api/desk.d.ts +6 -0
  68. package/docs/api/dialer.d.ts +6 -0
  69. package/docs/api/documents.d.ts +6 -0
  70. package/docs/api/duplicates.d.ts +6 -0
  71. package/docs/api/eSignature.d.ts +6 -0
  72. package/docs/api/enrichment.d.ts +6 -0
  73. package/docs/api/events.d.ts +6 -0
  74. package/docs/api/fields.d.ts +6 -0
  75. package/docs/api/forms.d.ts +6 -0
  76. package/docs/api/gtmCampaigns.d.ts +6 -0
  77. package/docs/api/gtmContext.d.ts +6 -0
  78. package/docs/api/gtmDeliverability.d.ts +6 -0
  79. package/docs/api/gtmKnowledgeBase.d.ts +6 -0
  80. package/docs/api/gtmLibrary.d.ts +6 -0
  81. package/docs/api/imageLibrary.d.ts +6 -0
  82. package/docs/api/imports.d.ts +6 -0
  83. package/docs/api/inbox.d.ts +6 -0
  84. package/docs/api/install.d.ts +6 -0
  85. package/docs/api/installedApps.d.ts +6 -0
  86. package/docs/api/integrationStatus.d.ts +6 -0
  87. package/docs/api/integrations.d.ts +6 -0
  88. package/docs/api/intent.d.ts +6 -0
  89. package/docs/api/knowledge.d.ts +6 -0
  90. package/docs/api/knowledgeBase.d.ts +6 -0
  91. package/docs/api/landingPages.d.ts +6 -0
  92. package/docs/api/leads.d.ts +6 -0
  93. package/docs/api/library.d.ts +6 -0
  94. package/docs/api/linkedIn.d.ts +6 -0
  95. package/docs/api/linkedInOutreach.d.ts +6 -0
  96. package/docs/api/lists.d.ts +13 -0
  97. package/docs/api/lists.md +7 -0
  98. package/docs/api/logs.d.ts +6 -0
  99. package/docs/api/mailboxes.d.ts +6 -0
  100. package/docs/api/marketplace.d.ts +6 -0
  101. package/docs/api/mcp.d.ts +6 -0
  102. package/docs/api/me.d.ts +6 -0
  103. package/docs/api/meetings.d.ts +6 -0
  104. package/docs/api/newsletter.d.ts +6 -0
  105. package/docs/api/notes.d.ts +6 -0
  106. package/docs/api/notifications.d.ts +6 -0
  107. package/docs/api/objects.d.ts +6 -0
  108. package/docs/api/openSearch.d.ts +6 -0
  109. package/docs/api/ops.d.ts +6 -0
  110. package/docs/api/orgGovernance.d.ts +6 -0
  111. package/docs/api/orgVideos.d.ts +6 -0
  112. package/docs/api/organizationSettings.d.ts +6 -0
  113. package/docs/api/phoneNumbers.d.ts +6 -0
  114. package/docs/api/profile.d.ts +6 -0
  115. package/docs/api/programmaticPages.d.ts +6 -0
  116. package/docs/api/providerDomains.d.ts +6 -0
  117. package/docs/api/providerUsage.d.ts +6 -0
  118. package/docs/api/public.d.ts +6 -0
  119. package/docs/api/publicCopilot.d.ts +6 -0
  120. package/docs/api/publicSignals.d.ts +6 -0
  121. package/docs/api/publicVisitors.d.ts +6 -0
  122. package/docs/api/quotes.d.ts +6 -0
  123. package/docs/api/radarReports.d.ts +6 -0
  124. package/docs/api/recordRoles.d.ts +6 -0
  125. package/docs/api/repos.d.ts +6 -0
  126. package/docs/api/research.d.ts +6 -0
  127. package/docs/api/revenue.d.ts +6 -0
  128. package/docs/api/revenueAnalytics.d.ts +6 -0
  129. package/docs/api/revenueLifecycle.d.ts +11 -1
  130. package/docs/api/revenueLifecycle.md +11 -2
  131. package/docs/api/revenueRecords.d.ts +6 -0
  132. package/docs/api/roles.d.ts +49 -2
  133. package/docs/api/roles.md +65 -1
  134. package/docs/api/salesCoach.d.ts +6 -0
  135. package/docs/api/scans.d.ts +6 -0
  136. package/docs/api/scheduleBuy.d.ts +6 -0
  137. package/docs/api/scraping.d.ts +6 -0
  138. package/docs/api/search.d.ts +9 -1
  139. package/docs/api/search.md +3 -2
  140. package/docs/api/seo.d.ts +6 -0
  141. package/docs/api/sequenceLifecycle.d.ts +6 -0
  142. package/docs/api/sequences.d.ts +6 -0
  143. package/docs/api/settings.d.ts +6 -0
  144. package/docs/api/signals.d.ts +6 -0
  145. package/docs/api/signatures.d.ts +6 -0
  146. package/docs/api/snippet.d.ts +6 -0
  147. package/docs/api/socialPublishing.d.ts +6 -0
  148. package/docs/api/studioDocuments.d.ts +6 -0
  149. package/docs/api/support.d.ts +6 -0
  150. package/docs/api/suppressions.d.ts +6 -0
  151. package/docs/api/surveys.d.ts +6 -0
  152. package/docs/api/tasks.d.ts +6 -0
  153. package/docs/api/teamMembers.d.ts +6 -0
  154. package/docs/api/teams.d.ts +6 -0
  155. package/docs/api/usage.d.ts +6 -0
  156. package/docs/api/visitors.d.ts +6 -0
  157. package/docs/api/voice.d.ts +6 -0
  158. package/docs/api/webChat.d.ts +6 -0
  159. package/docs/api/webhooks.d.ts +6 -0
  160. package/docs/api/websiteEditor.d.ts +6 -0
  161. package/docs/api/work.d.ts +6 -0
  162. package/docs/api/workbench.d.ts +6 -0
  163. package/docs/api/workflows.d.ts +6 -0
  164. package/docs/sdk-clients.md +5 -5
  165. package/package.json +1 -1
@@ -125,10 +125,16 @@ export interface PaginationMeta {
125
125
  limit: number;
126
126
  /** 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. */
127
127
  next_cursor?: string | null;
128
+ /** 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. */
129
+ notes?: Array<string> | null;
128
130
  /** Current page number (1-indexed) */
129
131
  page: number;
130
132
  /** Total number of items */
131
133
  total: number;
134
+ /** 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. */
135
+ total_available?: number | null;
136
+ /** 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. */
137
+ total_is_lower_bound?: boolean | null;
132
138
  }
133
139
 
134
140
  export interface RepoResponse {
@@ -265,10 +265,16 @@ export interface PaginationMeta {
265
265
  limit: number;
266
266
  /** 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. */
267
267
  next_cursor?: string | null;
268
+ /** 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. */
269
+ notes?: Array<string> | null;
268
270
  /** Current page number (1-indexed) */
269
271
  page: number;
270
272
  /** Total number of items */
271
273
  total: number;
274
+ /** 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. */
275
+ total_available?: number | null;
276
+ /** 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. */
277
+ total_is_lower_bound?: boolean | null;
272
278
  }
273
279
 
274
280
  /** Re-run one failed report. SPENDS CREDIT. */
@@ -318,10 +318,16 @@ export interface PaginationMeta {
318
318
  limit: number;
319
319
  /** 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. */
320
320
  next_cursor?: string | null;
321
+ /** 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. */
322
+ notes?: Array<string> | null;
321
323
  /** Current page number (1-indexed) */
322
324
  page: number;
323
325
  /** Total number of items */
324
326
  total: number;
327
+ /** 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. */
328
+ total_available?: number | null;
329
+ /** 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. */
330
+ total_is_lower_bound?: boolean | null;
325
331
  }
326
332
 
327
333
  /**
@@ -137,10 +137,16 @@ export interface PaginationMeta {
137
137
  limit: number;
138
138
  /** 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. */
139
139
  next_cursor?: string | null;
140
+ /** 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. */
141
+ notes?: Array<string> | null;
140
142
  /** Current page number (1-indexed) */
141
143
  page: number;
142
144
  /** Total number of items */
143
145
  total: number;
146
+ /** 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. */
147
+ total_available?: number | null;
148
+ /** 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. */
149
+ total_is_lower_bound?: boolean | null;
144
150
  }
145
151
 
146
152
  /** A dashboard or rollup, as the app computes it. */
@@ -153,7 +153,9 @@ export interface LifecycleRecordItem {
153
153
  }
154
154
 
155
155
  export interface LifecycleStageMoveRequest {
156
- /** Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. */
156
+ /** Company moves only: run every check the move runs (company exists, stage known, Customers/Churned guards) and return the would-be transition without writing anything. Ignored for contact moves. */
157
+ dry_run?: boolean;
158
+ /** Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. Case and surrounding whitespace are ignored, and a stage's display name is accepted too. */
157
159
  target_slug: string;
158
160
  }
159
161
 
@@ -164,6 +166,8 @@ export interface LifecycleStageMoveRequest {
164
166
  * ``previous_status``/``new_status`` are null on that path.
165
167
  */
166
168
  export interface LifecycleStageMoveResponse {
169
+ /** True when this was a dry run: nothing was written. */
170
+ dry_run?: boolean;
167
171
  new_custom_status?: string | null;
168
172
  new_status?: string | null;
169
173
  previous_custom_status?: string | null;
@@ -200,8 +204,14 @@ export interface PaginationMeta {
200
204
  limit: number;
201
205
  /** 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. */
202
206
  next_cursor?: string | null;
207
+ /** 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. */
208
+ notes?: Array<string> | null;
203
209
  /** Current page number (1-indexed) */
204
210
  page: number;
205
211
  /** Total number of items */
206
212
  total: number;
213
+ /** 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. */
214
+ total_available?: number | null;
215
+ /** 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. */
216
+ total_is_lower_bound?: boolean | null;
207
217
  }
@@ -186,6 +186,11 @@ records a `cb_lead_stage_history`-style audit row. `org_id` is always the
186
186
  authenticated key's own organisation; there is no way to target another
187
187
  org's company through this endpoint.
188
188
 
189
+ A move to `churned` (or any stage that writes status 'churned') is refused
190
+ with a 400 unless the company is or was a customer. `target_slug` ignores
191
+ case and surrounding whitespace. `dry_run: true` runs every check and
192
+ returns the would-be transition without writing anything.
193
+
189
194
  **Input**
190
195
 
191
196
  | Field | Type | Required | Description |
@@ -197,7 +202,8 @@ Body fields (`LifecycleStageMoveRequest`):
197
202
 
198
203
  | Field | Type | Required | Description |
199
204
  |---|---|---|---|
200
- | `body.target_slug` | `string` | yes | Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. |
205
+ | `body.target_slug` | `string` | yes | Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. Case and surrounding whitespace are ignored, and a stage's display name is accepted too. |
206
+ | `body.dry_run` | `boolean` | no | Company moves only: run every check the move runs (company exists, stage known, Customers/Churned guards) and return the would-be transition without writing anything. Ignored for contact moves. default `false` |
201
207
 
202
208
  **Returns** `ApiResponse_LifecycleStageMoveResponse_`: the envelope `{ data: LifecycleStageMoveResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
203
209
 
@@ -208,6 +214,7 @@ Other envelope fields: `pagination` (PaginationMeta).
208
214
  | Field | Type | Required | Description |
209
215
  |---|---|---|---|
210
216
  | `target_slug` | `string` | yes | |
217
+ | `dry_run` | `boolean` | no | True when this was a dry run: nothing was written. default `false` |
211
218
  | `new_custom_status` | `string \| null` | no | |
212
219
  | `new_status` | `string \| null` | no | |
213
220
  | `previous_custom_status` | `string \| null` | no | |
@@ -251,7 +258,8 @@ Body fields (`LifecycleStageMoveRequest`):
251
258
 
252
259
  | Field | Type | Required | Description |
253
260
  |---|---|---|---|
254
- | `body.target_slug` | `string` | yes | Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. |
261
+ | `body.target_slug` | `string` | yes | Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. Case and surrounding whitespace are ignored, and a stage's display name is accepted too. |
262
+ | `body.dry_run` | `boolean` | no | Company moves only: run every check the move runs (company exists, stage known, Customers/Churned guards) and return the would-be transition without writing anything. Ignored for contact moves. default `false` |
255
263
 
256
264
  **Returns** `ApiResponse_LifecycleStageMoveResponse_`: the envelope `{ data: LifecycleStageMoveResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
257
265
 
@@ -262,6 +270,7 @@ Other envelope fields: `pagination` (PaginationMeta).
262
270
  | Field | Type | Required | Description |
263
271
  |---|---|---|---|
264
272
  | `target_slug` | `string` | yes | |
273
+ | `dry_run` | `boolean` | no | True when this was a dry run: nothing was written. default `false` |
265
274
  | `new_custom_status` | `string \| null` | no | |
266
275
  | `new_status` | `string \| null` | no | |
267
276
  | `previous_custom_status` | `string \| null` | no | |
@@ -340,10 +340,16 @@ export interface PaginationMeta {
340
340
  limit: number;
341
341
  /** 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. */
342
342
  next_cursor?: string | null;
343
+ /** 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. */
344
+ notes?: Array<string> | null;
343
345
  /** Current page number (1-indexed) */
344
346
  page: number;
345
347
  /** Total number of items */
346
348
  total: number;
349
+ /** 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. */
350
+ total_available?: number | null;
351
+ /** 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. */
352
+ total_is_lower_bound?: boolean | null;
347
353
  }
348
354
 
349
355
  export interface RevenuePlanCreateRequest {
@@ -1,7 +1,7 @@
1
1
  /* Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. */
2
2
 
3
3
  /**
4
- * Types for `g8.api.roles` (Roles): 20 operations.
4
+ * Types for `g8.api.roles` (Roles): 21 operations.
5
5
  *
6
6
  * For reading. In code, import from the package instead:
7
7
  * import type { ApiInput, ApiOutput, G8Contract } from "@graph8/sdk";
@@ -21,6 +21,7 @@ export interface RolesMembers {
21
21
  getMyPermissions: "get_my_permissions_roles_me_permissions_get";
22
22
  getRole: "get_role_roles__role_id__get";
23
23
  getUserRole: "get_user_role_roles_users__user_id__get";
24
+ inviteMember: "invite_member_roles_invite_post";
24
25
  listJoinRequests: "list_join_requests_roles_join_requests_get";
25
26
  listOrgUsers: "list_org_users_roles_org_users_get";
26
27
  listPendingInvites: "list_pending_invites_roles_pending_invites_get";
@@ -158,6 +159,20 @@ export interface RolesOperations {
158
159
  };
159
160
  output: ApiResponse_OrgPayload_;
160
161
  };
162
+ /**
163
+ * POST /roles/invite
164
+ * Invite Member
165
+ * tier: external · scope: account:run
166
+ */
167
+ invite_member_roles_invite_post: {
168
+ input: {
169
+ headers?: {
170
+ "X-Target-Org-Id"?: string | null;
171
+ };
172
+ body: InviteMemberRequest;
173
+ };
174
+ output: ApiResponse_OrgPayload_;
175
+ };
161
176
  /**
162
177
  * GET /roles/join-requests
163
178
  * List Join Requests
@@ -333,7 +348,7 @@ export interface RolesOperations {
333
348
  };
334
349
  }
335
350
 
336
- // 8 schemas referenced above (the same as G8Contract.<Name>).
351
+ // 9 schemas referenced above (the same as G8Contract.<Name>).
337
352
 
338
353
  export interface ApiResponse_OrgListPayload_ {
339
354
  data: OrgListPayload;
@@ -345,6 +360,32 @@ export interface ApiResponse_OrgPayload_ {
345
360
  pagination?: PaginationMeta | null;
346
361
  }
347
362
 
363
+ /**
364
+ * Invite one person into the organisation. Mirrors `roles.InviteUserRequest`
365
+ * with ONE addition: the role may be named instead of identified by UUID.
366
+ *
367
+ * The app model takes `role_id: UUID` only, because its caller is a role
368
+ * picker that already holds the id. An API caller holds a NAME - "Engineer",
369
+ * "Member" - and making it fetch `GET /roles` first to translate is a round
370
+ * trip this contract can absorb. So exactly one of `role_id` or `role` is
371
+ * required; `role` is resolved against this organisation's own roles by slug
372
+ * first, then by case-insensitive display name.
373
+ *
374
+ * `role` is deliberately NOT defaulted to "Member". An absent role on an
375
+ * invitation is a caller mistake, and silently picking the fallback is how
376
+ * someone ends up in an organisation at a permission level nobody chose.
377
+ */
378
+ export interface InviteMemberRequest {
379
+ /** Email address to invite. Matched case-insensitively against existing members and invitations. */
380
+ email: string;
381
+ /** List ids to assign. Honoured for the `service_provider` role only, as in the app. */
382
+ list_ids?: Array<number> | null;
383
+ /** Role slug or display name to grant, resolved within this organisation (slug first, then case-insensitive name). Mutually exclusive with `role_id`. */
384
+ role?: string | null;
385
+ /** Id of the role to grant, from `GET /roles`. Mutually exclusive with `role`. */
386
+ role_id?: string | null;
387
+ }
388
+
348
389
  /**
349
390
  * An open envelope for a LIST result, so a bare list keeps its shape.
350
391
  *
@@ -377,10 +418,16 @@ export interface PaginationMeta {
377
418
  limit: number;
378
419
  /** 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. */
379
420
  next_cursor?: string | null;
421
+ /** 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. */
422
+ notes?: Array<string> | null;
380
423
  /** Current page number (1-indexed) */
381
424
  page: number;
382
425
  /** Total number of items */
383
426
  total: number;
427
+ /** 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. */
428
+ total_available?: number | null;
429
+ /** 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. */
430
+ total_is_lower_bound?: boolean | null;
384
431
  }
385
432
 
386
433
  /**
package/docs/api/roles.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # `g8.api.roles`: Roles
4
4
 
5
- 20 operations (14 read, 2 write, 4 destructive).
5
+ 21 operations (14 read, 2 write, 4 destructive, 1 external).
6
6
 
7
7
  No hand-written client covers this area. Call it through `g8.api.roles.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
8
8
 
@@ -30,6 +30,7 @@ Exact TypeScript types for every operation on this page, and every schema they u
30
30
  | [`getMyPermissions`](#op-getmypermissions) | `GET /api/v1/roles/me/permissions` | read | `account:read` | Get My Permissions |
31
31
  | [`getRole`](#op-getrole) | `GET /api/v1/roles/{role_id}` | read | `account:read` | Get Role |
32
32
  | [`getUserRole`](#op-getuserrole) | `GET /api/v1/roles/users/{user_id}` | read | `account:read` | Get User Role |
33
+ | [`inviteMember`](#op-invitemember) | `POST /api/v1/roles/invite` | external | `account:run` | Invite Member |
33
34
  | [`listJoinRequests`](#op-listjoinrequests) | `GET /api/v1/roles/join-requests` | read | `account:read` | List Join Requests |
34
35
  | [`listOrgUsers`](#op-listorgusers) | `GET /api/v1/roles/org-users` | read | `account:read` | List Org Users |
35
36
  | [`listPendingInvites`](#op-listpendinginvites) | `GET /api/v1/roles/pending-invites` | read | `account:read` | List Pending Invites |
@@ -333,6 +334,69 @@ const result = await g8.api.roles.getUserRole({ path: { user_id: "id" } });
333
334
 
334
335
  ---
335
336
 
337
+ <a id="op-invitemember"></a>
338
+
339
+ ### `g8.api.roles.inviteMember(input)`
340
+
341
+ **Invite Member**
342
+
343
+ - HTTP: `POST /api/v1/roles/invite`
344
+ - operationId: `invite_member_roles_invite_post` (also callable as `g8.api.call("invite_member_roles_invite_post", input)`)
345
+ - 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
346
+ - API-key scope: `account:run`
347
+
348
+ Invite one person into the organisation, at a role below administrator.
349
+
350
+ `status` in the response is the app's own: `invited` when an invitation
351
+ email went out to someone with no graph8 account, `added` when the person
352
+ already had one and now holds the role immediately. Re-inviting the same
353
+ address is safe - the pending invitation is UPDATED to the new role rather
354
+ than duplicated - so a reconciliation loop may call this once per row.
355
+
356
+ ADMINISTRATOR ROLES ARE REFUSED HERE, AND THAT IS WHY THIS ROUTE CAN EXIST
357
+ AT ALL. The module docstring withholds every route that can end with a
358
+ person holding PropelAuth `Owner` or `Admin`. The reason is specific:
359
+ `build_api_principal` can answer AS an org administrator, and the app's
360
+ `_assert_can_grant_permissions` bypasses its non-escalation check for a
361
+ privileged org role - so a bare proxy of the app handler would let a
362
+ credential mint an administrator. Capping the role here removes exactly
363
+ that, and leaves the capability that was actually asked for: admitting
364
+ members and project roles in bulk from a script, a workflow or an agent.
365
+ Granting administration stays a decision for a person, in the product.
366
+
367
+ 422 when neither or both of `role_id`/`role` are given; 404 when the role is
368
+ not this organisation's; 403 when the role is administrator-equivalent, or
369
+ when the app refuses the grant because the key's own permissions do not
370
+ cover the role's.
371
+
372
+ **Input**
373
+
374
+ | Field | Type | Required | Description |
375
+ |---|---|---|---|
376
+ | `body` | `InviteMemberRequest` | yes | Request body; fields below. |
377
+
378
+ Body fields (`InviteMemberRequest`):
379
+
380
+ | Field | Type | Required | Description |
381
+ |---|---|---|---|
382
+ | `body.email` | `string` | yes | Email address to invite. Matched case-insensitively against existing members and invitations. min length 3, max length 255 |
383
+ | `body.list_ids` | `Array<integer> \| null` | no | List ids to assign. Honoured for the `service_provider` role only, as in the app. |
384
+ | `body.role` | `string \| null` | no | Role slug or display name to grant, resolved within this organisation (slug first, then case-insensitive name). Mutually exclusive with `role_id`. min length 1, max length 100 |
385
+ | `body.role_id` | `string (uuid) \| null` | no | Id of the role to grant, from `GET /roles`. Mutually exclusive with `role`. |
386
+
387
+ **Returns** `ApiResponse_OrgPayload_`: the envelope `{ data: OrgPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
388
+
389
+ Other envelope fields: `pagination` (PaginationMeta).
390
+
391
+ **Example**
392
+
393
+ ```ts
394
+ // external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
395
+ const result = await g8.api.roles.inviteMember({ body: { email: "jane@acme.com" } });
396
+ ```
397
+
398
+ ---
399
+
336
400
  <a id="op-listjoinrequests"></a>
337
401
 
338
402
  ### `g8.api.roles.listJoinRequests(input?)`
@@ -808,10 +808,16 @@ export interface PaginationMeta {
808
808
  limit: number;
809
809
  /** 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. */
810
810
  next_cursor?: string | null;
811
+ /** 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. */
812
+ notes?: Array<string> | null;
811
813
  /** Current page number (1-indexed) */
812
814
  page: number;
813
815
  /** Total number of items */
814
816
  total: number;
817
+ /** 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. */
818
+ total_available?: number | null;
819
+ /** 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. */
820
+ total_is_lower_bound?: boolean | null;
815
821
  }
816
822
 
817
823
  /** A ROTATION of leaderboards - what a wall display cycles through. */
@@ -70,10 +70,16 @@ export interface PaginationMeta {
70
70
  limit: number;
71
71
  /** 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. */
72
72
  next_cursor?: string | null;
73
+ /** 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. */
74
+ notes?: Array<string> | null;
73
75
  /** Current page number (1-indexed) */
74
76
  page: number;
75
77
  /** Total number of items */
76
78
  total: number;
79
+ /** 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. */
80
+ total_available?: number | null;
81
+ /** 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. */
82
+ total_is_lower_bound?: boolean | null;
77
83
  }
78
84
 
79
85
  export interface ScanResponse {
@@ -206,10 +206,16 @@ export interface PaginationMeta {
206
206
  limit: number;
207
207
  /** 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. */
208
208
  next_cursor?: string | null;
209
+ /** 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. */
210
+ notes?: Array<string> | null;
209
211
  /** Current page number (1-indexed) */
210
212
  page: number;
211
213
  /** Total number of items */
212
214
  total: number;
215
+ /** 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. */
216
+ total_available?: number | null;
217
+ /** 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. */
218
+ total_is_lower_bound?: boolean | null;
213
219
  }
214
220
 
215
221
  /** Validate edited candidate names: owned-by-you, and available. SPENDS NOTHING. */
@@ -201,10 +201,16 @@ export interface PaginationMeta {
201
201
  limit: number;
202
202
  /** 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. */
203
203
  next_cursor?: string | null;
204
+ /** 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. */
205
+ notes?: Array<string> | null;
204
206
  /** Current page number (1-indexed) */
205
207
  page: number;
206
208
  /** Total number of items */
207
209
  total: number;
210
+ /** 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. */
211
+ total_available?: number | null;
212
+ /** 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. */
213
+ total_is_lower_bound?: boolean | null;
208
214
  }
209
215
 
210
216
  /** Change how the org crawls. Only what you send is written. */
@@ -428,10 +428,16 @@ export interface PaginationMeta {
428
428
  limit: number;
429
429
  /** 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. */
430
430
  next_cursor?: string | null;
431
+ /** 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. */
432
+ notes?: Array<string> | null;
431
433
  /** Current page number (1-indexed) */
432
434
  page: number;
433
435
  /** Total number of items */
434
436
  total: number;
437
+ /** 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. */
438
+ total_available?: number | null;
439
+ /** 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. */
440
+ total_is_lower_bound?: boolean | null;
435
441
  }
436
442
 
437
443
  /**
@@ -497,6 +503,8 @@ export interface SearchContactItem {
497
503
  last_name?: string | null;
498
504
  linkedin_headline?: string | null;
499
505
  linkedin_url?: string | null;
506
+ /** Fields whose value exists but is locked (shown as "***") until the contact is added to a list. A null field has no value. */
507
+ locked_fields?: Array<string>;
500
508
  middle_name?: string | null;
501
509
  mobile_phone?: string | null;
502
510
  personal_emails?: string | null;
@@ -528,7 +536,7 @@ export interface SearchRequest {
528
536
  filters?: Array<SearchFilter>;
529
537
  /** Results per page (max 100) */
530
538
  limit?: number;
531
- /** Page number (1-indexed) */
539
+ /** Page number (1-indexed). page * limit may not exceed 10,000 (the paging window); narrow the filters to reach records beyond it. */
532
540
  page?: number;
533
541
  }
534
542
 
@@ -566,7 +566,7 @@ Body fields (`SearchRequest`):
566
566
  |---|---|---|---|
567
567
  | `body.filters` | `Array<SearchFilter>` | no | Filter conditions (AND logic) |
568
568
  | `body.limit` | `integer` | no | Results per page (max 100) default `25`, min 1, max 100 |
569
- | `body.page` | `integer` | no | Page number (1-indexed) default `1`, min 1, max 100 |
569
+ | `body.page` | `integer` | no | Page number (1-indexed). page * limit may not exceed 10,000 (the paging window); narrow the filters to reach records beyond it. default `1`, min 1 |
570
570
 
571
571
  **Returns** `ApiResponse_list_SearchCompanyItem__`: the envelope `{ data: Array<SearchCompanyItem>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
572
572
 
@@ -633,7 +633,7 @@ Body fields (`SearchRequest`):
633
633
  |---|---|---|---|
634
634
  | `body.filters` | `Array<SearchFilter>` | no | Filter conditions (AND logic) |
635
635
  | `body.limit` | `integer` | no | Results per page (max 100) default `25`, min 1, max 100 |
636
- | `body.page` | `integer` | no | Page number (1-indexed) default `1`, min 1, max 100 |
636
+ | `body.page` | `integer` | no | Page number (1-indexed). page * limit may not exceed 10,000 (the paging window); narrow the filters to reach records beyond it. default `1`, min 1 |
637
637
 
638
638
  **Returns** `ApiResponse_list_SearchContactItem__`: the envelope `{ data: Array<SearchContactItem>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
639
639
 
@@ -658,6 +658,7 @@ Other envelope fields: `pagination` (PaginationMeta).
658
658
  | `last_name` | `string \| null` | no | |
659
659
  | `linkedin_headline` | `string \| null` | no | |
660
660
  | `linkedin_url` | `string \| null` | no | |
661
+ | `locked_fields` | `Array<string>` | no | Fields whose value exists but is locked (shown as "***") until the contact is added to a list. A null field has no value. |
661
662
  | `middle_name` | `string \| null` | no | |
662
663
  | `mobile_phone` | `string \| null` | no | |
663
664
  | `personal_emails` | `string \| null` | no | |
package/docs/api/seo.d.ts CHANGED
@@ -260,10 +260,16 @@ export interface PaginationMeta {
260
260
  limit: number;
261
261
  /** 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. */
262
262
  next_cursor?: string | null;
263
+ /** 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. */
264
+ notes?: Array<string> | null;
263
265
  /** Current page number (1-indexed) */
264
266
  page: number;
265
267
  /** Total number of items */
266
268
  total: number;
269
+ /** 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. */
270
+ total_available?: number | null;
271
+ /** 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. */
272
+ total_is_lower_bound?: boolean | null;
267
273
  }
268
274
 
269
275
  /** Mirrors `AuditDTO`. */
@@ -259,10 +259,16 @@ export interface PaginationMeta {
259
259
  limit: number;
260
260
  /** 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. */
261
261
  next_cursor?: string | null;
262
+ /** 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. */
263
+ notes?: Array<string> | null;
262
264
  /** Current page number (1-indexed) */
263
265
  page: number;
264
266
  /** Total number of items */
265
267
  total: number;
268
+ /** 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. */
269
+ total_available?: number | null;
270
+ /** 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. */
271
+ total_is_lower_bound?: boolean | null;
266
272
  }
267
273
 
268
274
  export interface PreviewChannelItem {
@@ -1672,10 +1672,16 @@ export interface PaginationMeta {
1672
1672
  limit: number;
1673
1673
  /** 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. */
1674
1674
  next_cursor?: string | null;
1675
+ /** 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. */
1676
+ notes?: Array<string> | null;
1675
1677
  /** Current page number (1-indexed) */
1676
1678
  page: number;
1677
1679
  /** Total number of items */
1678
1680
  total: number;
1681
+ /** 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. */
1682
+ total_available?: number | null;
1683
+ /** 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. */
1684
+ total_is_lower_bound?: boolean | null;
1679
1685
  }
1680
1686
 
1681
1687
  /** Detach senders from a sequence. Mirrors `BulkArchiveChannelParams`. */
@@ -393,10 +393,16 @@ export interface PaginationMeta {
393
393
  limit: number;
394
394
  /** 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. */
395
395
  next_cursor?: string | null;
396
+ /** 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. */
397
+ notes?: Array<string> | null;
396
398
  /** Current page number (1-indexed) */
397
399
  page: number;
398
400
  /** Total number of items */
399
401
  total: number;
402
+ /** 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. */
403
+ total_available?: number | null;
404
+ /** 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. */
405
+ total_is_lower_bound?: boolean | null;
400
406
  }
401
407
 
402
408
  /**
@@ -1276,10 +1276,16 @@ export interface PaginationMeta {
1276
1276
  limit: number;
1277
1277
  /** 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. */
1278
1278
  next_cursor?: string | null;
1279
+ /** 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. */
1280
+ notes?: Array<string> | null;
1279
1281
  /** Current page number (1-indexed) */
1280
1282
  page: number;
1281
1283
  /** Total number of items */
1282
1284
  total: number;
1285
+ /** 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. */
1286
+ total_available?: number | null;
1287
+ /** 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. */
1288
+ total_is_lower_bound?: boolean | null;
1283
1289
  }
1284
1290
 
1285
1291
  /**
@@ -504,10 +504,16 @@ export interface PaginationMeta {
504
504
  limit: number;
505
505
  /** 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. */
506
506
  next_cursor?: string | null;
507
+ /** 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. */
508
+ notes?: Array<string> | null;
507
509
  /** Current page number (1-indexed) */
508
510
  page: number;
509
511
  /** Total number of items */
510
512
  total: number;
513
+ /** 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. */
514
+ total_available?: number | null;
515
+ /** 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. */
516
+ total_is_lower_bound?: boolean | null;
511
517
  }
512
518
 
513
519
  export interface SignatureArchiveResponse {
@@ -66,10 +66,16 @@ export interface PaginationMeta {
66
66
  limit: number;
67
67
  /** 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. */
68
68
  next_cursor?: string | null;
69
+ /** 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. */
70
+ notes?: Array<string> | null;
69
71
  /** Current page number (1-indexed) */
70
72
  page: number;
71
73
  /** Total number of items */
72
74
  total: number;
75
+ /** 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. */
76
+ total_available?: number | null;
77
+ /** 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. */
78
+ total_is_lower_bound?: boolean | null;
73
79
  }
74
80
 
75
81
  export interface SnippetResponse {
@@ -494,10 +494,16 @@ export interface PaginationMeta {
494
494
  limit: number;
495
495
  /** 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. */
496
496
  next_cursor?: string | null;
497
+ /** 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. */
498
+ notes?: Array<string> | null;
497
499
  /** Current page number (1-indexed) */
498
500
  page: number;
499
501
  /** Total number of items */
500
502
  total: number;
503
+ /** 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. */
504
+ total_available?: number | null;
505
+ /** 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. */
506
+ total_is_lower_bound?: boolean | null;
501
507
  }
502
508
 
503
509
  /** A connected social account. `id` is what `account_ref` takes everywhere else. */