@graph8/sdk 0.265.0 → 0.293.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 (178) hide show
  1. package/README.md +3 -3
  2. package/dist/index.d.mts +734 -28
  3. package/dist/index.d.ts +734 -28
  4. package/dist/index.js +15 -5
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +15 -5
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/react.d.mts +728 -26
  9. package/dist/react.d.ts +728 -26
  10. package/dist/react.js +14 -4
  11. package/dist/react.js.map +1 -1
  12. package/dist/react.mjs +14 -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 +8 -7
  21. package/docs/api/README.md +4 -4
  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 +32 -1
  30. package/docs/api/analytics.md +2 -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 +14 -0
  43. package/docs/api/assertUpsert.md +5 -0
  44. package/docs/api/audienceSyncs.d.ts +14 -0
  45. package/docs/api/audienceSyncs.md +16 -0
  46. package/docs/api/brandKit.d.ts +6 -0
  47. package/docs/api/bugReports.d.ts +6 -0
  48. package/docs/api/by-path.md +3 -0
  49. package/docs/api/calendarInvites.d.ts +6 -0
  50. package/docs/api/campaignWorkflows.d.ts +6 -0
  51. package/docs/api/campaigns.d.ts +6 -0
  52. package/docs/api/channels.d.ts +6 -0
  53. package/docs/api/cliCampaigns.d.ts +6 -0
  54. package/docs/api/cliPipelines.d.ts +6 -0
  55. package/docs/api/clickHouse.d.ts +6 -0
  56. package/docs/api/companies.d.ts +17 -3
  57. package/docs/api/companies.md +13 -3
  58. package/docs/api/companyIntelligence.d.ts +6 -0
  59. package/docs/api/contacts.d.ts +26 -5
  60. package/docs/api/contacts.md +17 -6
  61. package/docs/api/content.d.ts +6 -0
  62. package/docs/api/contentGridSkills.d.ts +6 -0
  63. package/docs/api/copilot.d.ts +6 -0
  64. package/docs/api/crmSyncs.d.ts +6 -0
  65. package/docs/api/customerSuccess.d.ts +6 -0
  66. package/docs/api/deals.d.ts +6 -0
  67. package/docs/api/deliverability.d.ts +6 -0
  68. package/docs/api/desk.d.ts +6 -0
  69. package/docs/api/dialer.d.ts +6 -0
  70. package/docs/api/documents.d.ts +6 -0
  71. package/docs/api/duplicates.d.ts +6 -0
  72. package/docs/api/eSignature.d.ts +6 -0
  73. package/docs/api/enrichment.d.ts +82 -2
  74. package/docs/api/enrichment.md +76 -1
  75. package/docs/api/events.d.ts +6 -0
  76. package/docs/api/fields.d.ts +30 -3
  77. package/docs/api/fields.md +15 -4
  78. package/docs/api/forms.d.ts +6 -0
  79. package/docs/api/gtmCampaigns.d.ts +6 -0
  80. package/docs/api/gtmContext.d.ts +6 -0
  81. package/docs/api/gtmDeliverability.d.ts +6 -0
  82. package/docs/api/gtmKnowledgeBase.d.ts +6 -0
  83. package/docs/api/gtmLibrary.d.ts +6 -0
  84. package/docs/api/imageLibrary.d.ts +6 -0
  85. package/docs/api/imports.d.ts +6 -0
  86. package/docs/api/inbox.d.ts +6 -0
  87. package/docs/api/install.d.ts +32 -0
  88. package/docs/api/install.md +18 -0
  89. package/docs/api/installedApps.d.ts +6 -0
  90. package/docs/api/integrationStatus.d.ts +6 -0
  91. package/docs/api/integrations.d.ts +6 -0
  92. package/docs/api/intent.d.ts +32 -1
  93. package/docs/api/intent.md +23 -0
  94. package/docs/api/knowledge.d.ts +6 -0
  95. package/docs/api/knowledgeBase.d.ts +6 -0
  96. package/docs/api/landingPages.d.ts +6 -0
  97. package/docs/api/leads.d.ts +6 -0
  98. package/docs/api/library.d.ts +6 -0
  99. package/docs/api/linkedIn.d.ts +6 -0
  100. package/docs/api/linkedInOutreach.d.ts +6 -0
  101. package/docs/api/lists.d.ts +22 -0
  102. package/docs/api/lists.md +24 -2
  103. package/docs/api/logs.d.ts +6 -0
  104. package/docs/api/mailboxes.d.ts +6 -0
  105. package/docs/api/marketingIntelligence.d.ts +40 -0
  106. package/docs/api/marketingIntelligence.md +20 -0
  107. package/docs/api/marketplace.d.ts +6 -0
  108. package/docs/api/mcp.d.ts +6 -0
  109. package/docs/api/me.d.ts +6 -0
  110. package/docs/api/meetings.d.ts +6 -0
  111. package/docs/api/newsletter.d.ts +6 -0
  112. package/docs/api/notes.d.ts +6 -0
  113. package/docs/api/notifications.d.ts +6 -0
  114. package/docs/api/objects.d.ts +6 -0
  115. package/docs/api/openSearch.d.ts +6 -0
  116. package/docs/api/ops.d.ts +6 -0
  117. package/docs/api/orgGovernance.d.ts +6 -0
  118. package/docs/api/orgVideos.d.ts +6 -0
  119. package/docs/api/organizationSettings.d.ts +6 -0
  120. package/docs/api/phoneNumbers.d.ts +6 -0
  121. package/docs/api/profile.d.ts +6 -0
  122. package/docs/api/programmaticPages.d.ts +6 -0
  123. package/docs/api/providerDomains.d.ts +6 -0
  124. package/docs/api/providerUsage.d.ts +6 -0
  125. package/docs/api/public.d.ts +6 -0
  126. package/docs/api/publicCopilot.d.ts +6 -0
  127. package/docs/api/publicSignals.d.ts +6 -0
  128. package/docs/api/publicVisitors.d.ts +6 -0
  129. package/docs/api/quotes.d.ts +6 -0
  130. package/docs/api/radarReports.d.ts +6 -0
  131. package/docs/api/recordRoles.d.ts +6 -0
  132. package/docs/api/repos.d.ts +6 -0
  133. package/docs/api/research.d.ts +6 -0
  134. package/docs/api/revenue.d.ts +6 -0
  135. package/docs/api/revenueAnalytics.d.ts +6 -0
  136. package/docs/api/revenueLifecycle.d.ts +11 -1
  137. package/docs/api/revenueLifecycle.md +11 -2
  138. package/docs/api/revenueRecords.d.ts +6 -0
  139. package/docs/api/roles.d.ts +49 -2
  140. package/docs/api/roles.md +65 -1
  141. package/docs/api/salesCoach.d.ts +6 -0
  142. package/docs/api/scans.d.ts +6 -0
  143. package/docs/api/scheduleBuy.d.ts +6 -0
  144. package/docs/api/scraping.d.ts +6 -0
  145. package/docs/api/search.d.ts +9 -1
  146. package/docs/api/search.md +3 -2
  147. package/docs/api/seo.d.ts +6 -0
  148. package/docs/api/sequenceLifecycle.d.ts +6 -0
  149. package/docs/api/sequences.d.ts +6 -0
  150. package/docs/api/settings.d.ts +6 -0
  151. package/docs/api/signals.d.ts +6 -0
  152. package/docs/api/signatures.d.ts +6 -0
  153. package/docs/api/snippet.d.ts +72 -2
  154. package/docs/api/snippet.md +73 -4
  155. package/docs/api/socialPublishing.d.ts +6 -0
  156. package/docs/api/studioDocuments.d.ts +6 -0
  157. package/docs/api/support.d.ts +6 -0
  158. package/docs/api/suppressions.d.ts +10 -0
  159. package/docs/api/suppressions.md +2 -0
  160. package/docs/api/surveys.d.ts +6 -0
  161. package/docs/api/tasks.d.ts +6 -0
  162. package/docs/api/teamMembers.d.ts +6 -0
  163. package/docs/api/teams.d.ts +6 -0
  164. package/docs/api/usage.d.ts +6 -0
  165. package/docs/api/visitors.d.ts +32 -0
  166. package/docs/api/visitors.md +12 -0
  167. package/docs/api/voice.d.ts +6 -0
  168. package/docs/api/webAnalytics.d.ts +288 -0
  169. package/docs/api/webAnalytics.md +144 -0
  170. package/docs/api/webChat.d.ts +6 -0
  171. package/docs/api/webhooks.d.ts +6 -0
  172. package/docs/api/websiteEditor.d.ts +6 -0
  173. package/docs/api/work.d.ts +6 -0
  174. package/docs/api/workbench.d.ts +6 -0
  175. package/docs/api/workflows.d.ts +6 -0
  176. package/docs/api/workflows.md +6 -0
  177. package/docs/sdk-clients.md +5 -5
  178. package/package.json +1 -1
@@ -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.snippet` (Snippet): 2 operations.
4
+ * Types for `g8.api.snippet` (Snippet): 3 operations.
5
5
  *
6
6
  * For reading. In code, import from the package instead:
7
7
  * import type { ApiInput, ApiOutput, G8Contract } from "@graph8/sdk";
@@ -15,6 +15,7 @@
15
15
  export interface SnippetMembers {
16
16
  getFormTemplate: "get_form_template_snippet_form_get";
17
17
  getOrgSnippet: "get_org_snippet_snippet_get";
18
+ listOrgStreams: "list_org_streams_streams_get";
18
19
  }
19
20
 
20
21
  /** Input and output of every `g8.api.snippet` operation, keyed by operationId. */
@@ -26,6 +27,10 @@ export interface SnippetOperations {
26
27
  */
27
28
  get_form_template_snippet_form_get: {
28
29
  input: {
30
+ query?: {
31
+ /** Tracking stream whose write key the form uses (from GET /streams). Defaults as in GET /snippet. */
32
+ stream_id?: string | null;
33
+ };
29
34
  headers?: {
30
35
  "X-Target-Org-Id"?: string | null;
31
36
  };
@@ -39,15 +44,38 @@ export interface SnippetOperations {
39
44
  */
40
45
  get_org_snippet_snippet_get: {
41
46
  input: {
47
+ query?: {
48
+ /** Tracking stream to use (from GET /streams). When omitted, the organization's main stream is used: its only stream, or the one matching its website domain. */
49
+ stream_id?: string | null;
50
+ };
42
51
  headers?: {
43
52
  "X-Target-Org-Id"?: string | null;
44
53
  };
45
54
  };
46
55
  output: ApiResponse_SnippetResponse_;
47
56
  };
57
+ /**
58
+ * GET /streams
59
+ * List Org Streams
60
+ * tier: read · scope: integrations:read
61
+ */
62
+ list_org_streams_streams_get: {
63
+ input: {
64
+ query?: {
65
+ /** Page number (1-indexed). Omit page and limit to get every stream. */
66
+ page?: number | null;
67
+ /** Streams per page (max 200). Omit page and limit to get every stream. */
68
+ limit?: number | null;
69
+ };
70
+ headers?: {
71
+ "X-Target-Org-Id"?: string | null;
72
+ };
73
+ };
74
+ output: ApiResponse_list_StreamInfoResponse__;
75
+ };
48
76
  }
49
77
 
50
- // 4 schemas referenced above (the same as G8Contract.<Name>).
78
+ // 6 schemas referenced above (the same as G8Contract.<Name>).
51
79
 
52
80
  export interface ApiResponse_SnippetResponse_ {
53
81
  data: SnippetResponse;
@@ -59,6 +87,11 @@ export interface ApiResponse_dict_ {
59
87
  pagination?: PaginationMeta | null;
60
88
  }
61
89
 
90
+ export interface ApiResponse_list_StreamInfoResponse__ {
91
+ data: Array<StreamInfoResponse>;
92
+ pagination?: PaginationMeta | null;
93
+ }
94
+
62
95
  export interface PaginationMeta {
63
96
  /** Whether there are more pages */
64
97
  has_next: boolean;
@@ -66,13 +99,23 @@ export interface PaginationMeta {
66
99
  limit: number;
67
100
  /** 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
101
  next_cursor?: string | null;
102
+ /** 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. */
103
+ notes?: Array<string> | null;
69
104
  /** Current page number (1-indexed) */
70
105
  page: number;
71
106
  /** Total number of items */
72
107
  total: number;
108
+ /** 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. */
109
+ total_available?: number | null;
110
+ /** 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. */
111
+ total_is_lower_bound?: boolean | null;
73
112
  }
74
113
 
75
114
  export interface SnippetResponse {
115
+ /** True when the organization has several streams and none could be identified as its main website. The write key is the first stream's (unchanged legacy default); pick the right one from available_streams and call again with stream_id. */
116
+ action_required?: boolean;
117
+ /** The organization's streams to choose from. Filled only when action_required is true. */
118
+ available_streams?: Array<StreamInfoResponse>;
76
119
  /** Full configuration object for gtm/config.json */
77
120
  config?: Record<string, unknown>;
78
121
  domains?: Array<string>;
@@ -80,6 +123,33 @@ export interface SnippetResponse {
80
123
  react_snippet: string;
81
124
  /** Vanilla JS script tag for non-React apps */
82
125
  script_tag: string;
126
+ /** ID of the tracking stream the write key belongs to, when known. */
127
+ stream_id?: string | null;
128
+ /** User-friendly name of that stream, when known. */
129
+ stream_name?: string | null;
130
+ /** How the stream was chosen: 'explicit' (stream_id given), 'repo_write_key' (the repository's stored key), 'only_stream', 'domain_match' (matches the organization's website), or 'first_stream_fallback' (ambiguous; see action_required). */
131
+ stream_selection?: string | null;
83
132
  tracking_host?: string;
133
+ /** Human-readable explanation when action_required is true, or a stream setup advisory. */
134
+ warning?: string | null;
84
135
  write_key: string;
85
136
  }
137
+
138
+ export interface StreamInfoResponse {
139
+ /** Domains associated with this stream */
140
+ domains?: Array<string>;
141
+ /** Whether the stream lists allowed domains. False means its public write key is accepted from any website (see warning). */
142
+ domains_restricted?: boolean;
143
+ /** Stream ID used to select this stream */
144
+ id: string;
145
+ /** True for the stream GET /snippet uses when no stream_id is given: the only stream, or the one whose domain matches the organization's website. False on every stream when that choice is ambiguous; pass stream_id explicitly then. */
146
+ is_default?: boolean;
147
+ /** User-friendly stream name (e.g. 'graph8.com', 'heyreach-graph8') */
148
+ name: string;
149
+ /** Connected repository whose stored write key belongs to this stream. Null when no connected repository uses it: streams are organization-level, not owned by a repo. */
150
+ repo_id?: string | null;
151
+ /** Read-only advisory about this stream's setup, e.g. no allowed domains. Nothing is enforced. */
152
+ warning?: string | null;
153
+ /** Public write key for this stream */
154
+ write_key?: string | null;
155
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  # `g8.api.snippet`: Snippet
4
4
 
5
- 2 operations (2 read).
5
+ 3 operations (3 read).
6
6
 
7
7
  1 of these also have a hand-written method (`g8.snippet`), marked **★** below. Prefer the hand-written method when one exists: it unwraps the `data` envelope and takes friendlier arguments. See [../sdk-clients.md](../sdk-clients.md).
8
8
 
@@ -24,6 +24,7 @@ Exact TypeScript types for every operation on this page, and every schema they u
24
24
  |---|---|---|---|---|
25
25
  | [`getFormTemplate`](#op-getformtemplate) | `GET /api/v1/snippet/form` | read | `integrations:read` | Get Form Template |
26
26
  | [`getOrgSnippet`](#op-getorgsnippet) ★ | `GET /api/v1/snippet` | read | `integrations:read` | Get Org Snippet |
27
+ | [`listOrgStreams`](#op-listorgstreams) | `GET /api/v1/streams` | read | `integrations:read` | List Org Streams |
27
28
 
28
29
  ---
29
30
 
@@ -51,7 +52,11 @@ snippet (see ``GET /snippet``). The form POSTs to your tracking host by
51
52
  default, but you can override ``action`` to route submissions to your own
52
53
  backend.
53
54
 
54
- **Input**: none.
55
+ **Input**
56
+
57
+ | Field | Type | Required | Description |
58
+ |---|---|---|---|
59
+ | `query.stream_id` | `string \| null` | no | Tracking stream whose write key the form uses (from GET /streams). Defaults as in GET /snippet. |
55
60
 
56
61
  **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
57
62
 
@@ -80,9 +85,16 @@ const result = await g8.api.snippet.getFormTemplate();
80
85
  Get the tracking snippet for the authenticated organization.
81
86
 
82
87
  Returns the write key and pre-built snippets without requiring a
83
- connected repository. Uses the org's first available tracking stream.
88
+ connected repository. Pass `stream_id` to choose the stream; otherwise the
89
+ org's main stream is used (its only stream, or the one whose domain matches
90
+ the org's website). If that is ambiguous the first stream is used as before
91
+ and the response sets `action_required` with `available_streams` to pick from.
92
+
93
+ **Input**
84
94
 
85
- **Input**: none.
95
+ | Field | Type | Required | Description |
96
+ |---|---|---|---|
97
+ | `query.stream_id` | `string \| null` | no | Tracking stream to use (from GET /streams). When omitted, the organization's main stream is used: its only stream, or the one matching its website domain. |
86
98
 
87
99
  **Returns** `ApiResponse_SnippetResponse_`: the envelope `{ data: SnippetResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
88
100
 
@@ -95,12 +107,69 @@ Other envelope fields: `pagination` (PaginationMeta).
95
107
  | `react_snippet` | `string` | yes | Ready-to-use React component import for @graph8/nextjs |
96
108
  | `script_tag` | `string` | yes | Vanilla JS script tag for non-React apps |
97
109
  | `write_key` | `string` | yes | |
110
+ | `action_required` | `boolean` | no | True when the organization has several streams and none could be identified as its main website. The write key is the first stream's (unchanged legacy default); pick the right one from available_streams and call again with stream_id. default `false` |
111
+ | `available_streams` | `Array<StreamInfoResponse>` | no | The organization's streams to choose from. Filled only when action_required is true. |
98
112
  | `config` | `Record<string, unknown>` | no | Full configuration object for gtm/config.json |
99
113
  | `domains` | `Array<string>` | no | |
114
+ | `stream_id` | `string \| null` | no | ID of the tracking stream the write key belongs to, when known. |
115
+ | `stream_name` | `string \| null` | no | User-friendly name of that stream, when known. |
116
+ | `stream_selection` | `string \| null` | no | How the stream was chosen: 'explicit' (stream_id given), 'repo_write_key' (the repository's stored key), 'only_stream', 'domain_match' (matches the organization's website), or 'first_stream_fallback' (ambiguous; see action_required). |
100
117
  | `tracking_host` | `string` | no | default `"https://t.graph8.com"` |
118
+ | `warning` | `string \| null` | no | Human-readable explanation when action_required is true, or a stream setup advisory. |
101
119
 
102
120
  **Example**
103
121
 
104
122
  ```ts
105
123
  const result = await g8.api.snippet.getOrgSnippet();
106
124
  ```
125
+
126
+ ---
127
+
128
+ <a id="op-listorgstreams"></a>
129
+
130
+ ### `g8.api.snippet.listOrgStreams(input?)`
131
+
132
+ **List Org Streams**
133
+
134
+ - HTTP: `GET /api/v1/streams`
135
+ - operationId: `list_org_streams_streams_get` (also callable as `g8.api.call("list_org_streams_streams_get", input)`)
136
+ - Tier: `read`: reads data; safe to call and to retry
137
+ - API-key scope: `integrations:read`
138
+
139
+ List the organization's tracking streams (websites) without a repository.
140
+
141
+ Streams belong to the organization, not to a connected repository, so this
142
+ works even when the org has connected no repository. Each stream carries its
143
+ write key, its domains, `is_default` (the stream `GET /snippet` uses when no
144
+ `stream_id` is given), `repo_id` (the connected repository already using it,
145
+ or null), and a read-only `warning` when it has no allowed domains.
146
+
147
+ **Input**
148
+
149
+ | Field | Type | Required | Description |
150
+ |---|---|---|---|
151
+ | `query.page` | `integer \| null` | no | Page number (1-indexed). Omit page and limit to get every stream. |
152
+ | `query.limit` | `integer \| null` | no | Streams per page (max 200). Omit page and limit to get every stream. |
153
+
154
+ **Returns** `ApiResponse_list_StreamInfoResponse__`: the envelope `{ data: Array<StreamInfoResponse>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
155
+
156
+ Other envelope fields: `pagination` (PaginationMeta).
157
+
158
+ `StreamInfoResponse` fields:
159
+
160
+ | Field | Type | Required | Description |
161
+ |---|---|---|---|
162
+ | `id` | `string` | yes | Stream ID used to select this stream |
163
+ | `name` | `string` | yes | User-friendly stream name (e.g. 'graph8.com', 'heyreach-graph8') |
164
+ | `domains` | `Array<string>` | no | Domains associated with this stream |
165
+ | `domains_restricted` | `boolean` | no | Whether the stream lists allowed domains. False means its public write key is accepted from any website (see warning). default `false` |
166
+ | `is_default` | `boolean` | no | True for the stream GET /snippet uses when no stream_id is given: the only stream, or the one whose domain matches the organization's website. False on every stream when that choice is ambiguous; pass stream_id explicitly then. default `false` |
167
+ | `repo_id` | `string \| null` | no | Connected repository whose stored write key belongs to this stream. Null when no connected repository uses it: streams are organization-level, not owned by a repo. |
168
+ | `warning` | `string \| null` | no | Read-only advisory about this stream's setup, e.g. no allowed domains. Nothing is enforced. |
169
+ | `write_key` | `string \| null` | no | Public write key for this stream |
170
+
171
+ **Example**
172
+
173
+ ```ts
174
+ const result = await g8.api.snippet.listOrgStreams();
175
+ ```
@@ -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. */
@@ -215,10 +215,16 @@ export interface PaginationMeta {
215
215
  limit: number;
216
216
  /** 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. */
217
217
  next_cursor?: string | null;
218
+ /** 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. */
219
+ notes?: Array<string> | null;
218
220
  /** Current page number (1-indexed) */
219
221
  page: number;
220
222
  /** Total number of items */
221
223
  total: number;
224
+ /** 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. */
225
+ total_available?: number | null;
226
+ /** 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. */
227
+ total_is_lower_bound?: boolean | null;
222
228
  }
223
229
 
224
230
  /**
@@ -83,8 +83,14 @@ export interface PaginationMeta {
83
83
  limit: number;
84
84
  /** 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. */
85
85
  next_cursor?: string | null;
86
+ /** 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. */
87
+ notes?: Array<string> | null;
86
88
  /** Current page number (1-indexed) */
87
89
  page: number;
88
90
  /** Total number of items */
89
91
  total: number;
92
+ /** 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. */
93
+ total_available?: number | null;
94
+ /** 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. */
95
+ total_is_lower_bound?: boolean | null;
90
96
  }
@@ -160,6 +160,8 @@ export interface ApiResponse_list_SuppressionRecord__ {
160
160
  }
161
161
 
162
162
  export interface BulkReinstateResponse {
163
+ /** Requested contact ids that match no contact (for example a mistyped id). They also appear in `skipped`. */
164
+ not_found?: Array<number>;
163
165
  reinstated?: Array<number>;
164
166
  skipped?: Array<ReinstateSkip>;
165
167
  total_requested: number;
@@ -167,6 +169,8 @@ export interface BulkReinstateResponse {
167
169
 
168
170
  export interface BulkSuppressResponse {
169
171
  channel: string;
172
+ /** Requested contact ids that match no contact; nothing was written for them. */
173
+ not_found?: Array<number>;
170
174
  suppressed: number;
171
175
  total_requested: number;
172
176
  }
@@ -178,10 +182,16 @@ export interface PaginationMeta {
178
182
  limit: number;
179
183
  /** 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. */
180
184
  next_cursor?: string | null;
185
+ /** 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. */
186
+ notes?: Array<string> | null;
181
187
  /** Current page number (1-indexed) */
182
188
  page: number;
183
189
  /** Total number of items */
184
190
  total: number;
191
+ /** 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. */
192
+ total_available?: number | null;
193
+ /** 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. */
194
+ total_is_lower_bound?: boolean | null;
185
195
  }
186
196
 
187
197
  export interface ReinstateSkip {
@@ -73,6 +73,7 @@ Other envelope fields: `pagination` (PaginationMeta).
73
73
  | `channel` | `string` | yes | |
74
74
  | `suppressed` | `integer` | yes | |
75
75
  | `total_requested` | `integer` | yes | |
76
+ | `not_found` | `Array<integer>` | no | Requested contact ids that match no contact; nothing was written for them. |
76
77
 
77
78
  **Example**
78
79
 
@@ -219,6 +220,7 @@ Other envelope fields: `pagination` (PaginationMeta).
219
220
  | Field | Type | Required | Description |
220
221
  |---|---|---|---|
221
222
  | `total_requested` | `integer` | yes | |
223
+ | `not_found` | `Array<integer>` | no | Requested contact ids that match no contact (for example a mistyped id). They also appear in `skipped`. |
222
224
  | `reinstated` | `Array<integer>` | no | |
223
225
  | `skipped` | `Array<ReinstateSkip>` | no | |
224
226
 
@@ -621,10 +621,16 @@ export interface PaginationMeta {
621
621
  limit: number;
622
622
  /** 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. */
623
623
  next_cursor?: string | null;
624
+ /** 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. */
625
+ notes?: Array<string> | null;
624
626
  /** Current page number (1-indexed) */
625
627
  page: number;
626
628
  /** Total number of items */
627
629
  total: number;
630
+ /** 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. */
631
+ total_available?: number | null;
632
+ /** 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. */
633
+ total_is_lower_bound?: boolean | null;
628
634
  }
629
635
 
630
636
  export interface PerSurveyDTO {
@@ -561,10 +561,16 @@ export interface PaginationMeta {
561
561
  limit: number;
562
562
  /** 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. */
563
563
  next_cursor?: string | null;
564
+ /** 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. */
565
+ notes?: Array<string> | null;
564
566
  /** Current page number (1-indexed) */
565
567
  page: number;
566
568
  /** Total number of items */
567
569
  total: number;
570
+ /** 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. */
571
+ total_available?: number | null;
572
+ /** 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. */
573
+ total_is_lower_bound?: boolean | null;
568
574
  }
569
575
 
570
576
  /**
@@ -661,8 +661,14 @@ export interface PaginationMeta {
661
661
  limit: number;
662
662
  /** 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. */
663
663
  next_cursor?: string | null;
664
+ /** 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. */
665
+ notes?: Array<string> | null;
664
666
  /** Current page number (1-indexed) */
665
667
  page: number;
666
668
  /** Total number of items */
667
669
  total: number;
670
+ /** 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. */
671
+ total_available?: number | null;
672
+ /** 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. */
673
+ total_is_lower_bound?: boolean | null;
668
674
  }
@@ -709,10 +709,16 @@ export interface PaginationMeta {
709
709
  limit: number;
710
710
  /** 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. */
711
711
  next_cursor?: string | null;
712
+ /** 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. */
713
+ notes?: Array<string> | null;
712
714
  /** Current page number (1-indexed) */
713
715
  page: number;
714
716
  /** Total number of items */
715
717
  total: number;
718
+ /** 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. */
719
+ total_available?: number | null;
720
+ /** 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. */
721
+ total_is_lower_bound?: boolean | null;
716
722
  }
717
723
 
718
724
  /**
@@ -209,10 +209,16 @@ export interface PaginationMeta {
209
209
  limit: number;
210
210
  /** 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. */
211
211
  next_cursor?: string | null;
212
+ /** 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. */
213
+ notes?: Array<string> | null;
212
214
  /** Current page number (1-indexed) */
213
215
  page: number;
214
216
  /** Total number of items */
215
217
  total: number;
218
+ /** 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. */
219
+ total_available?: number | null;
220
+ /** 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. */
221
+ total_is_lower_bound?: boolean | null;
216
222
  }
217
223
 
218
224
  /**
@@ -122,6 +122,10 @@ export interface VisitorsOperations {
122
122
  /** Comma-separated public keys, or "all". Omit for every stream. */
123
123
  stream_id?: string | null;
124
124
  limit?: number;
125
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
126
+ include_bots?: boolean;
127
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
128
+ include_internal?: boolean;
125
129
  };
126
130
  headers?: {
127
131
  "X-Target-Org-Id"?: string | null;
@@ -189,6 +193,10 @@ export interface VisitorsOperations {
189
193
  /** Comma-separated public keys, or "all". Omit for every stream. */
190
194
  stream_id?: string | null;
191
195
  limit?: number;
196
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
197
+ include_bots?: boolean;
198
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
199
+ include_internal?: boolean;
192
200
  };
193
201
  headers?: {
194
202
  "X-Target-Org-Id"?: string | null;
@@ -247,6 +255,12 @@ export interface VisitorsOperations {
247
255
  /** What to count. */
248
256
  resource: "contacts" | "companies";
249
257
  };
258
+ query?: {
259
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
260
+ include_bots?: boolean;
261
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
262
+ include_internal?: boolean;
263
+ };
250
264
  headers?: {
251
265
  "X-Target-Org-Id"?: string | null;
252
266
  };
@@ -303,6 +317,10 @@ export interface VisitorsOperations {
303
317
  page?: number;
304
318
  /** Items per page. */
305
319
  limit?: number;
320
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
321
+ include_bots?: boolean;
322
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
323
+ include_internal?: boolean;
306
324
  };
307
325
  headers?: {
308
326
  "X-Target-Org-Id"?: string | null;
@@ -348,6 +366,10 @@ export interface VisitorsOperations {
348
366
  page?: number;
349
367
  /** Items per page. */
350
368
  limit?: number;
369
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
370
+ include_bots?: boolean;
371
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
372
+ include_internal?: boolean;
351
373
  };
352
374
  headers?: {
353
375
  "X-Target-Org-Id"?: string | null;
@@ -370,6 +392,10 @@ export interface VisitorsOperations {
370
392
  page?: number;
371
393
  /** Items per page. */
372
394
  limit?: number;
395
+ /** Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. */
396
+ include_bots?: boolean;
397
+ /** Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. */
398
+ include_internal?: boolean;
373
399
  };
374
400
  headers?: {
375
401
  "X-Target-Org-Id"?: string | null;
@@ -576,10 +602,16 @@ export interface PaginationMeta {
576
602
  limit: number;
577
603
  /** 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. */
578
604
  next_cursor?: string | null;
605
+ /** 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. */
606
+ notes?: Array<string> | null;
579
607
  /** Current page number (1-indexed) */
580
608
  page: number;
581
609
  /** Total number of items */
582
610
  total: number;
611
+ /** 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. */
612
+ total_available?: number | null;
613
+ /** 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. */
614
+ total_is_lower_bound?: boolean | null;
583
615
  }
584
616
 
585
617
  /** One handler response. Open-shaped - these payloads come from the tracking pipeline. */
@@ -227,6 +227,8 @@ Live sessions rolled up per visitor. Same PII rule as `/live`.
227
227
  | `query.time_window` | `"5min" \| "30min" \| "1hr"` | no | Live window. default `"30min"` |
228
228
  | `query.stream_id` | `string \| null` | no | Comma-separated public keys, or "all". Omit for every stream. |
229
229
  | `query.limit` | `integer` | no | default `1000` |
230
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
231
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
230
232
 
231
233
  **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
232
234
 
@@ -372,6 +374,8 @@ same principal.
372
374
  | `query.time_window` | `"5min" \| "30min" \| "1hr"` | no | Live window. default `"30min"` |
373
375
  | `query.stream_id` | `string \| null` | no | Comma-separated public keys, or "all". Omit for every stream. |
374
376
  | `query.limit` | `integer` | no | default `10000` |
377
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
378
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
375
379
 
376
380
  **Returns** `ApiResponse_dict_`: the envelope `{ data: Record<string, unknown>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
377
381
 
@@ -478,6 +482,8 @@ not comparable row for row and should not be charted as if they were.
478
482
  | Field | Type | Required | Description |
479
483
  |---|---|---|---|
480
484
  | `path.resource` | `"contacts" \| "companies"` | yes | What to count. |
485
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
486
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
481
487
  | `body` | `Array<Record<string, unknown>>` | no | Request body; fields below. |
482
488
 
483
489
  **Returns** `ApiResponse_VisitorStatisticsResponse_`: the envelope `{ data: VisitorStatisticsResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
@@ -599,6 +605,8 @@ The B2BC variant of the contact feed.
599
605
  | `query.filter` | `string \| null` | no | Serialised filter expression, passed through to the events query unchanged. Its grammar is the app's, not this contract's - a typed model here would freeze a filter language that still moves. |
600
606
  | `query.page` | `integer` | no | Page number (1-indexed). default `1` |
601
607
  | `query.limit` | `integer` | no | Items per page. default `50` |
608
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
609
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
602
610
 
603
611
  **Returns** `ApiResponse_VisitorEventPage_`: the envelope `{ data: VisitorEventPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
604
612
 
@@ -685,6 +693,8 @@ Visits resolved to a company rather than a person.
685
693
  | `query.filter` | `string \| null` | no | Serialised filter expression, passed through to the events query unchanged. Its grammar is the app's, not this contract's - a typed model here would freeze a filter language that still moves. |
686
694
  | `query.page` | `integer` | no | Page number (1-indexed). default `1` |
687
695
  | `query.limit` | `integer` | no | Items per page. default `50` |
696
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
697
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
688
698
 
689
699
  **Returns** `ApiResponse_VisitorEventPage_`: the envelope `{ data: VisitorEventPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
690
700
 
@@ -733,6 +743,8 @@ it looks.
733
743
  | `query.filter` | `string \| null` | no | Serialised filter expression, passed through to the events query unchanged. Its grammar is the app's, not this contract's - a typed model here would freeze a filter language that still moves. |
734
744
  | `query.page` | `integer` | no | Page number (1-indexed). default `1` |
735
745
  | `query.limit` | `integer` | no | Items per page. default `50` |
746
+ | `query.include_bots` | `boolean` | no | Also count bot and crawler traffic. Off by default: events from self-identified crawlers, headless browsers, HTTP libraries and datacenter/cloud networks are excluded. default `false` |
747
+ | `query.include_internal` | `boolean` | no | Also count internal traffic. Off by default: the graph8 app (app.graph8.com), local development hosts and your own team members (member emails and company email domains) are excluded. default `false` |
736
748
 
737
749
  **Returns** `ApiResponse_VisitorEventPage_`: the envelope `{ data: VisitorEventPage, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
738
750
 
@@ -4308,10 +4308,16 @@ export interface PaginationMeta {
4308
4308
  limit: number;
4309
4309
  /** 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. */
4310
4310
  next_cursor?: string | null;
4311
+ /** 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. */
4312
+ notes?: Array<string> | null;
4311
4313
  /** Current page number (1-indexed) */
4312
4314
  page: number;
4313
4315
  /** Total number of items */
4314
4316
  total: number;
4317
+ /** 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. */
4318
+ total_available?: number | null;
4319
+ /** 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. */
4320
+ total_is_lower_bound?: boolean | null;
4315
4321
  }
4316
4322
 
4317
4323
  /**