@graph8/sdk 0.2.1 → 0.4.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.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,453 @@
1
1
  import { AnalyticsInterface } from '@jitsu/js';
2
2
 
3
+ /**
4
+ * Inbox channel — `email`, `sms`, or `linkedin` (HeyReach internally).
5
+ * Defaults to `email` on routes that accept this as a query param.
6
+ */
7
+ type InboxChannel = "email" | "sms" | "linkedin";
8
+ interface InboxContact {
9
+ name?: string | null;
10
+ email?: string | null;
11
+ company?: string | null;
12
+ [key: string]: unknown;
13
+ }
14
+ interface InboxTag {
15
+ id: string;
16
+ name: string;
17
+ }
18
+ interface InboxAssignee {
19
+ email: string;
20
+ name?: string | null;
21
+ [key: string]: unknown;
22
+ }
23
+ interface InboxMessage {
24
+ message_id: string | null;
25
+ from_address: string | null;
26
+ to_addresses: string[];
27
+ content: string | null;
28
+ /** "USER", "AI", or "OTHER". */
29
+ responder: string | null;
30
+ date: string | null;
31
+ is_draft: boolean;
32
+ }
33
+ interface InboxThread {
34
+ id: string;
35
+ /** "email", "sms", or "linkedin". */
36
+ channel: string;
37
+ subject: string | null;
38
+ contact: InboxContact | null;
39
+ messages: InboxMessage[];
40
+ /** "open", "responded", "ai_responded", etc. */
41
+ status: string | null;
42
+ tags: InboxTag[];
43
+ assignees: InboxAssignee[];
44
+ created_at: string | null;
45
+ updated_at: string | null;
46
+ }
47
+ interface InboxListParams {
48
+ channel?: InboxChannel;
49
+ sequence_id?: string;
50
+ /** Filter by thread status (e.g. "open", "responded", "ai_responded"). */
51
+ status?: string;
52
+ /** Filter by assignee email. */
53
+ assignee?: string;
54
+ /** Filter by tag ID. */
55
+ tag?: string;
56
+ page?: number;
57
+ /** Default 50, max 100. */
58
+ page_size?: number;
59
+ }
60
+ interface InboxAssignResult {
61
+ assigned: boolean;
62
+ assignee: string;
63
+ count: number;
64
+ [key: string]: unknown;
65
+ }
66
+ interface InboxTagResult {
67
+ tagged: boolean;
68
+ tag_count: number;
69
+ [key: string]: unknown;
70
+ }
71
+ interface InboxDraft {
72
+ /** HTML body. */
73
+ content: string;
74
+ /** Plain-text alternative, if available. */
75
+ plain_content: string | null;
76
+ /** Credits charged for AI generation. */
77
+ credits_charged: number;
78
+ }
79
+ interface InboxSendParams {
80
+ body: string;
81
+ channel: InboxChannel;
82
+ subject?: string;
83
+ /** Recipient override — email, phone, or LinkedIn ID. */
84
+ to?: string;
85
+ /** Sender override — mailbox email, Twilio number, or LinkedIn account ID. */
86
+ from_address?: string;
87
+ }
88
+ interface InboxSendResult {
89
+ message_id: string | null;
90
+ status: string;
91
+ channel: string;
92
+ }
93
+ /**
94
+ * Inbox API — read + reply to multi-channel inbox threads (email, SMS, LinkedIn/HeyReach).
95
+ * Requires API key (server-side).
96
+ *
97
+ * Backed by:
98
+ * GET /api/v1/inbox
99
+ * GET /api/v1/inbox/{reply_id}
100
+ * POST /api/v1/inbox/{reply_id}/assign
101
+ * POST /api/v1/inbox/{reply_id}/tag
102
+ * GET /api/v1/inbox/{reply_id}/draft (charges credits, 402 on insufficient balance)
103
+ * POST /api/v1/inbox/{reply_id}/send
104
+ */
105
+ declare const createInboxClient: (apiKey: string, apiUrl?: string) => {
106
+ /** List inbox threads across email, SMS, and LinkedIn. */
107
+ list(params?: InboxListParams): Promise<{
108
+ data: InboxThread[];
109
+ }>;
110
+ /** Get a single inbox thread. Defaults to email channel. */
111
+ get(replyId: string, channel?: InboxChannel): Promise<InboxThread>;
112
+ /** Assign a user to an inbox thread. */
113
+ assign(replyId: string, assigneeEmail: string, channel?: InboxChannel): Promise<InboxAssignResult>;
114
+ /** Attach tag IDs to an inbox thread. */
115
+ tag(replyId: string, tagIds: string[], channel?: InboxChannel): Promise<InboxTagResult>;
116
+ /**
117
+ * Generate an AI draft reply for a thread.
118
+ * Charges credits — server returns 402 if balance is insufficient.
119
+ */
120
+ draft(replyId: string, channel?: InboxChannel): Promise<InboxDraft>;
121
+ /** Send a reply through email, SMS, or LinkedIn. */
122
+ send(replyId: string, payload: InboxSendParams): Promise<InboxSendResult>;
123
+ };
124
+
125
+ interface Deal {
126
+ id: string | null;
127
+ name: string | null;
128
+ description: string | null;
129
+ amount: number | null;
130
+ currency: string | null;
131
+ stage_id: string | null;
132
+ stage_name: string | null;
133
+ pipeline_id: string | null;
134
+ /** Linked company ID (mashup_company_id), if any. */
135
+ company_id: number | string | null;
136
+ owner_id: string | null;
137
+ /** ISO 8601 date. */
138
+ close_date: string | null;
139
+ created_at: string | null;
140
+ updated_at: string | null;
141
+ }
142
+ interface DealCreateParams {
143
+ name: string;
144
+ /** Linked company ID. */
145
+ company_id?: number;
146
+ description?: string;
147
+ amount?: number;
148
+ /** Default: "USD". */
149
+ currency?: string;
150
+ /** Stage ID from the org's pipelines. Defaults to first stage of default pipeline if omitted. */
151
+ stage_id?: string;
152
+ /** Pipeline ID. Defaults to org's default pipeline if omitted. */
153
+ pipeline_id?: string;
154
+ /** ISO 8601 close date. */
155
+ close_date?: string;
156
+ }
157
+ interface DealUpdateParams {
158
+ name?: string;
159
+ description?: string;
160
+ amount?: number;
161
+ currency?: string;
162
+ stage_id?: string;
163
+ /** ISO 8601 close date. */
164
+ close_date?: string;
165
+ }
166
+ interface DealListParams {
167
+ page?: number;
168
+ limit?: number;
169
+ stage_id?: string;
170
+ pipeline_id?: string;
171
+ /** Substring search on deal name. */
172
+ search?: string;
173
+ }
174
+ interface PipelineStage {
175
+ id: string;
176
+ name: string;
177
+ probability: number | null;
178
+ position: number | null;
179
+ stage_type: string | null;
180
+ color: string | null;
181
+ required_elements: string[];
182
+ recommended_elements: string[];
183
+ channel_scripts: Record<string, string>;
184
+ }
185
+ interface Pipeline {
186
+ id: string;
187
+ name: string;
188
+ is_default: boolean;
189
+ stages: PipelineStage[];
190
+ }
191
+ /** Trimmed deal shape returned by /contacts/{id}/deals and /companies/{id}/deals. */
192
+ interface ContactDeal {
193
+ deal_id: string | null;
194
+ name: string | null;
195
+ stage: string | null;
196
+ value: number | null;
197
+ currency: string | null;
198
+ role: string | null;
199
+ pipeline_id: string | null;
200
+ close_date: string | null;
201
+ owner_id: string | null;
202
+ created_at: string | null;
203
+ }
204
+ interface PaginationMeta$1 {
205
+ page: number;
206
+ limit: number;
207
+ total: number;
208
+ has_next: boolean;
209
+ }
210
+ /**
211
+ * Deals API - CRUD for deals + pipelines. Requires API key (server-side).
212
+ *
213
+ * Backed by:
214
+ * GET /api/v1/deals/pipelines
215
+ * GET /api/v1/deals
216
+ * POST /api/v1/deals
217
+ * GET /api/v1/deals/{deal_id}
218
+ * PATCH /api/v1/deals/{deal_id}
219
+ * DELETE /api/v1/deals/{deal_id}
220
+ * GET /api/v1/contacts/{contact_id}/deals
221
+ * GET /api/v1/companies/{company_id}/deals
222
+ */
223
+ declare const createDealsClient: (apiKey: string, apiUrl?: string) => {
224
+ /** List all deal pipelines and their stages. */
225
+ pipelines(): Promise<{
226
+ data: Pipeline[];
227
+ }>;
228
+ /** List deals org-wide with optional filters and pagination. */
229
+ list(params?: DealListParams): Promise<{
230
+ data: Deal[];
231
+ pagination?: PaginationMeta$1;
232
+ }>;
233
+ /** Create a new deal. */
234
+ create(deal: DealCreateParams): Promise<Deal>;
235
+ /** Get a single deal by ID. */
236
+ get(dealId: string): Promise<Deal>;
237
+ /** Update a deal (partial). */
238
+ update(dealId: string, fields: DealUpdateParams): Promise<Deal>;
239
+ /** Delete a deal. */
240
+ delete(dealId: string): Promise<{
241
+ data: {
242
+ deleted: boolean;
243
+ };
244
+ }>;
245
+ /** Get all deals associated with a contact. */
246
+ forContact(contactId: number): Promise<{
247
+ data: ContactDeal[];
248
+ }>;
249
+ /** Get all deals associated with a company. */
250
+ forCompany(companyId: number): Promise<{
251
+ data: ContactDeal[];
252
+ }>;
253
+ };
254
+
255
+ /** A field (column) definition on contacts or companies — base or custom. */
256
+ interface Field {
257
+ id: number | null;
258
+ title: string;
259
+ /** Internal column name (slug). */
260
+ name: string | null;
261
+ /** Currently only "text" is supported; other types may be added later. */
262
+ data_type: string;
263
+ /** True if available org-wide, false if list-specific. */
264
+ is_global: boolean;
265
+ }
266
+ /** Created custom field (column). */
267
+ interface CreatedField {
268
+ id: number;
269
+ title: string;
270
+ data_type: string;
271
+ name: string;
272
+ list_id: number | null;
273
+ is_global: boolean;
274
+ }
275
+ interface FieldCreateParams {
276
+ title: string;
277
+ /** "contacts" or "companies". Defaults to "contacts" on the backend. */
278
+ entity?: "contacts" | "companies";
279
+ /** "text" (default) — additional types may be added later. */
280
+ data_type?: string;
281
+ /** If set, the field is list-specific. Omit for org-wide global field. */
282
+ list_id?: number;
283
+ }
284
+ interface FieldDeleteParams {
285
+ entity?: "contacts" | "companies";
286
+ /**
287
+ * Optional list scope guard. If provided, the column must belong to this
288
+ * list or the request returns 404. Use this to prevent accidentally
289
+ * deleting a column on a different list in the same org.
290
+ */
291
+ list_id?: number;
292
+ }
293
+ interface SetFieldValueParams {
294
+ /** Contact ID (entity='contacts') or company ID (entity='companies'). */
295
+ record_id: number;
296
+ /** Value to write. Pass null/undefined to clear the field. */
297
+ value?: string | null;
298
+ entity?: "contacts" | "companies";
299
+ }
300
+ /**
301
+ * Fields API - manage custom fields (columns) on contacts and companies.
302
+ * Requires API key (server-side).
303
+ *
304
+ * Backed by:
305
+ * GET /api/v1/fields — list contact fields
306
+ * GET /api/v1/fields/companies — list company fields
307
+ * POST /api/v1/fields — create a custom field
308
+ * DELETE /api/v1/fields/{column_id} — delete a custom field
309
+ * PATCH /api/v1/fields/{column_id}/values — set value on a single record
310
+ */
311
+ declare const createFieldsClient: (apiKey: string, apiUrl?: string) => {
312
+ /** List contact fields (base + custom). Pass listId to include list-specific custom fields. */
313
+ listContactFields(listId?: number): Promise<{
314
+ data: Field[];
315
+ }>;
316
+ /** List company fields (base + custom). Pass listId to include list-specific custom fields. */
317
+ listCompanyFields(listId?: number): Promise<{
318
+ data: Field[];
319
+ }>;
320
+ /** Create a custom field on contacts (default) or companies. */
321
+ create(params: FieldCreateParams): Promise<CreatedField>;
322
+ /** Delete a custom field (soft-delete). Pass list_id to scope-guard against cross-list deletion. */
323
+ delete(columnId: number, params?: FieldDeleteParams): Promise<{
324
+ data: {
325
+ column_id: number;
326
+ deleted: boolean;
327
+ };
328
+ }>;
329
+ /** Set a custom field value on a single contact or company row. Pass value=null to clear. */
330
+ setValue(columnId: number, params: SetFieldValueParams): Promise<{
331
+ data: {
332
+ column_id: number;
333
+ record_id: number;
334
+ updated: boolean;
335
+ };
336
+ }>;
337
+ };
338
+
339
+ interface Task {
340
+ id: string;
341
+ entity_type: string | null;
342
+ entity_id: string | null;
343
+ title: string;
344
+ description: string | null;
345
+ due_date: string | null;
346
+ assignee_id: string | null;
347
+ assignee_name: string | null;
348
+ /** "open" | "completed" (other values may appear if the backend adds states later) */
349
+ status: string | null;
350
+ /** 0=none, 1=urgent, 2=high, 3=normal, 4=low */
351
+ priority: number | null;
352
+ task_type: string | null;
353
+ created_by: string | null;
354
+ created_at: string | null;
355
+ updated_at: string | null;
356
+ }
357
+ interface TaskCreateParams {
358
+ title: string;
359
+ description?: string;
360
+ /** ISO 8601 date string. */
361
+ due_date?: string;
362
+ assignee_id?: string;
363
+ /** 0=none, 1=urgent, 2=high, 3=normal, 4=low */
364
+ priority?: number;
365
+ }
366
+ interface TaskUpdateParams {
367
+ title?: string;
368
+ description?: string;
369
+ due_date?: string;
370
+ assignee_id?: string;
371
+ /** "open" | "completed" */
372
+ status?: string;
373
+ priority?: number;
374
+ }
375
+ interface TaskListParams {
376
+ /** "open" | "completed" */
377
+ status?: string;
378
+ /** 0-4 */
379
+ priority?: number;
380
+ assignee_id?: string;
381
+ /** Substring search on title. */
382
+ search?: string;
383
+ }
384
+ /**
385
+ * Tasks API - CRUD for tasks attached to contacts. Requires API key (server-side).
386
+ *
387
+ * Backed by:
388
+ * GET /api/v1/contacts/{contact_id}/tasks
389
+ * GET /api/v1/tasks
390
+ * POST /api/v1/contacts/{contact_id}/tasks
391
+ * PATCH /api/v1/tasks/{task_id}
392
+ * DELETE /api/v1/tasks/{task_id}
393
+ */
394
+ declare const createTasksClient: (apiKey: string, apiUrl?: string) => {
395
+ /** List tasks on a single contact. Optional status filter ("open" | "completed"). */
396
+ listForContact(contactId: number, status?: string): Promise<{
397
+ data: Task[];
398
+ }>;
399
+ /** List all tasks org-wide with optional filters. */
400
+ list(params?: TaskListParams): Promise<{
401
+ data: Task[];
402
+ }>;
403
+ /** Create a task on a contact. */
404
+ create(contactId: number, task: TaskCreateParams): Promise<Task>;
405
+ /** Update a task (partial). */
406
+ update(taskId: string, fields: TaskUpdateParams): Promise<Task>;
407
+ /** Delete a task. */
408
+ delete(taskId: string): Promise<{
409
+ data: {
410
+ deleted: boolean;
411
+ };
412
+ }>;
413
+ };
414
+
415
+ interface Note {
416
+ id: string;
417
+ entity_type: string;
418
+ entity_id: string;
419
+ content: string;
420
+ created_by: string | null;
421
+ created_by_name: string | null;
422
+ created_at: string | null;
423
+ updated_at: string | null;
424
+ }
425
+ /**
426
+ * Notes API - CRUD for notes attached to contacts. Requires API key (server-side).
427
+ *
428
+ * Backed by:
429
+ * GET /api/v1/contacts/{contact_id}/notes
430
+ * POST /api/v1/contacts/{contact_id}/notes
431
+ * PATCH /api/v1/notes/{note_id}
432
+ * DELETE /api/v1/notes/{note_id}
433
+ */
434
+ declare const createNotesClient: (apiKey: string, apiUrl?: string) => {
435
+ /** List all notes on a contact. */
436
+ list(contactId: number): Promise<{
437
+ data: Note[];
438
+ }>;
439
+ /** Create a note on a contact. */
440
+ create(contactId: number, content: string): Promise<Note>;
441
+ /** Update a note's content. */
442
+ update(noteId: string, content: string): Promise<Note>;
443
+ /** Delete a note. */
444
+ delete(noteId: string): Promise<{
445
+ data: {
446
+ deleted: boolean;
447
+ };
448
+ }>;
449
+ };
450
+
3
451
  interface ContactList {
4
452
  id: number;
5
453
  title: string;
@@ -84,6 +532,25 @@ interface CompanyContact {
84
532
  work_email: string | null;
85
533
  job_title: string | null;
86
534
  }
535
+ /** A column definition on companies (base or custom). */
536
+ interface CompanyColumn {
537
+ id: number | null;
538
+ title: string;
539
+ data_type: string;
540
+ name: string | null;
541
+ /** Stringified list_id when list-scoped, otherwise null/empty for global. */
542
+ object_id: string | null;
543
+ is_global: boolean;
544
+ }
545
+ interface CompanyColumnCreateParams {
546
+ title: string;
547
+ /** Email of the user creating the column. Required by the backend (audit). */
548
+ created_by: string;
549
+ /** "text" (default) — additional types may be added later. */
550
+ data_type?: string;
551
+ /** If set, the column is list-specific. Omit for org-wide global column. */
552
+ list_id?: number;
553
+ }
87
554
  /**
88
555
  * Companies API - search and manage CRM companies. Requires API key (server-side).
89
556
  */
@@ -108,6 +575,12 @@ declare const createCompaniesClient: (apiKey: string, apiUrl?: string) => {
108
575
  delete(companyId: number): Promise<{
109
576
  deleted: boolean;
110
577
  }>;
578
+ /** List custom company columns. Pass listId to include list-specific columns. */
579
+ listColumns(listId?: number): Promise<{
580
+ data: CompanyColumn[];
581
+ }>;
582
+ /** Create a custom company column. Global if list_id is omitted, list-scoped otherwise. */
583
+ createColumn(params: CompanyColumnCreateParams): Promise<CompanyColumn>;
111
584
  };
112
585
 
113
586
  interface Contact {
@@ -164,6 +637,25 @@ interface ContactUpdateParams {
164
637
  state?: string;
165
638
  country?: string;
166
639
  }
640
+ /** A column definition on contacts (base or custom). */
641
+ interface ContactColumn {
642
+ id: number | null;
643
+ title: string;
644
+ data_type: string;
645
+ name: string | null;
646
+ /** Stringified list_id when list-scoped, otherwise null/empty for global. */
647
+ object_id: string | null;
648
+ is_global: boolean;
649
+ }
650
+ interface ContactColumnCreateParams {
651
+ title: string;
652
+ /** Email of the user creating the column. Required by the backend (audit). */
653
+ created_by: string;
654
+ /** "text" (default) — additional types may be added later. */
655
+ data_type?: string;
656
+ /** If set, the column is list-specific. Omit for org-wide global column. */
657
+ list_id?: number;
658
+ }
167
659
  /**
168
660
  * Contacts API - full CRUD for CRM contacts. Requires API key (server-side).
169
661
  */
@@ -185,6 +677,12 @@ declare const createContactsClient: (apiKey: string, apiUrl?: string) => {
185
677
  delete(contactId: number): Promise<{
186
678
  deleted: boolean;
187
679
  }>;
680
+ /** List custom contact columns. Pass listId to include list-specific columns. */
681
+ listColumns(listId?: number): Promise<{
682
+ data: ContactColumn[];
683
+ }>;
684
+ /** Create a custom contact column. Global if list_id is omitted, list-scoped otherwise. */
685
+ createColumn(params: ContactColumnCreateParams): Promise<ContactColumn>;
188
686
  };
189
687
 
190
688
  type WebhookEvent = "reply_received" | "meeting_booked" | "contact_enriched" | "contact_created" | "sequence_completed" | "sequence_replied" | "campaign_launched" | "form_submitted" | "visitor_identified";
@@ -246,20 +744,276 @@ interface CallAnalysis {
246
744
  }
247
745
  type VoiceEvent = "connected" | "transcription" | "ended" | "error";
248
746
  type VoiceCallback = (data: Record<string, unknown>) => void;
747
+ interface VoicePagination {
748
+ total_items: number;
749
+ total_pages: number;
750
+ current_page: number;
751
+ page_size: number;
752
+ }
753
+ interface DialerSessionSummary {
754
+ session_id: string;
755
+ status: string | null;
756
+ user_id: string | null;
757
+ user_email: string | null;
758
+ org_id: string | null;
759
+ from_phone: string | null;
760
+ campaign_id: string | null;
761
+ campaign_builder_campaign_id: string | null;
762
+ name: string | null;
763
+ session_metadata: Record<string, unknown> | null;
764
+ total_calls: number | null;
765
+ created_at: string | null;
766
+ updated_at: string | null;
767
+ contact_ids: unknown[];
768
+ }
769
+ interface DialerSessionsListResult {
770
+ sessions: DialerSessionSummary[];
771
+ pagination: VoicePagination;
772
+ }
773
+ interface DialerSessionsListParams {
774
+ page?: number;
775
+ /** Default 50, max 200. */
776
+ page_size?: number;
777
+ /** Comma-separated status list (e.g. "ACTIVE,PAUSED"). */
778
+ status?: string;
779
+ user_email?: string;
780
+ /** Substring search on session name. */
781
+ name?: string;
782
+ campaign_id?: string;
783
+ list_id?: string;
784
+ list_name?: string;
785
+ /** ISO 8601 timestamp. */
786
+ date_from?: string;
787
+ /** ISO 8601 timestamp. */
788
+ date_to?: string;
789
+ sort_by?: string;
790
+ /** Default "desc". */
791
+ sort_order?: "asc" | "desc";
792
+ }
793
+ interface DialerStatsParams {
794
+ session_id?: string;
795
+ user_email?: string;
796
+ /** YYYY-MM-DD. */
797
+ date_from?: string;
798
+ /** YYYY-MM-DD. */
799
+ date_to?: string;
800
+ /** Default "DAILY". */
801
+ aggregation?: "DAILY" | "TOTAL";
802
+ }
803
+ interface DialerReportFilters {
804
+ session_id: string | null;
805
+ user_email: string | null;
806
+ org_id: string | null;
807
+ date_from: string | null;
808
+ date_to: string | null;
809
+ aggregation: string | null;
810
+ }
811
+ interface DialerReportMetric {
812
+ date: string | null;
813
+ sdr_name: string | null;
814
+ org_id: string | null;
815
+ list_title: string | null;
816
+ total_dials: number;
817
+ total_connections: number;
818
+ connection_rate: number;
819
+ total_voicemails: number;
820
+ voicemail_rate: number;
821
+ talk_time_minutes: number;
822
+ avg_call_duration_minutes: number;
823
+ dispositions: Record<string, unknown> | null;
824
+ success_rate: number;
825
+ unique_sessions: number;
826
+ avg_calls_per_session: number;
827
+ redial_count: number;
828
+ redial_success_rate: number | null;
829
+ peak_calling_hour: number | null;
830
+ total_callbacks: number;
831
+ }
832
+ interface DialerStatsResult {
833
+ filters: DialerReportFilters;
834
+ metrics: DialerReportMetric[];
835
+ summary: DialerReportMetric | null;
836
+ }
837
+ interface DialerNumberInfo {
838
+ number: string;
839
+ /** Default "ai". */
840
+ inbound_type: string;
841
+ /** Default "twilio". */
842
+ telephony_provider: string;
843
+ calls_today: number;
844
+ calls_7d: number;
845
+ connect_rate_7d: number;
846
+ is_valid: boolean;
847
+ daily_limit: number;
848
+ assigned_to: string | null;
849
+ created_at: string | null;
850
+ }
851
+ interface DialerNumbersListResult {
852
+ numbers: DialerNumberInfo[];
853
+ }
854
+ interface MissedCallback {
855
+ id: string | number | null;
856
+ caller_phone: string | null;
857
+ inbound_number: string | null;
858
+ first_name: string | null;
859
+ last_name: string | null;
860
+ email: string | null;
861
+ contact_id: string | number | null;
862
+ parallel_session_id: string | null;
863
+ created_at: string | null;
864
+ call_duration: number | null;
865
+ is_callback: boolean;
866
+ }
867
+ interface MissedCallbacksResult {
868
+ missed_callbacks: MissedCallback[];
869
+ count: number;
870
+ }
871
+ interface CallGradingResult {
872
+ room_name: string;
873
+ /** "ready" or "pending". */
874
+ status: string;
875
+ grading: Record<string, unknown> | null;
876
+ reviewed: boolean;
877
+ reviewed_at: string | null;
878
+ }
879
+ interface DialerAgentSummary {
880
+ agent_id: string;
881
+ agent_name: string | null;
882
+ /** "SDR", etc. */
883
+ role: string | null;
884
+ agent_status: string | null;
885
+ /** "agent" or "twin". */
886
+ entity_type: string | null;
887
+ description: string | null;
888
+ phone: string | null;
889
+ is_template: boolean;
890
+ }
891
+ interface DialerAgentsListResult {
892
+ agents: DialerAgentSummary[];
893
+ total_count: number;
894
+ }
895
+ interface DialerAgentsListParams {
896
+ /** e.g. "SDR". */
897
+ role?: string;
898
+ agent_status?: string;
899
+ /** "agent" or "twin". */
900
+ entity_type?: "agent" | "twin";
901
+ /** Substring filter on name/description. */
902
+ search?: string;
903
+ }
904
+ interface DialerSessionCreateParams {
905
+ /** 1-200 chars. */
906
+ name: string;
907
+ /** Org's dialer phone (E.164, 9-16 chars). */
908
+ from_phone: string;
909
+ /** Contact list ID (stored in session metadata). */
910
+ list_id?: string;
911
+ /** Display title for the source list. */
912
+ list_title?: string;
913
+ /** V2 agent UUID. */
914
+ agent_id?: string;
915
+ /** V1 fallback name. Defaults to "default_agent". */
916
+ agent_name?: string;
917
+ /** "agent" or "twin". */
918
+ entity_type?: "agent" | "twin";
919
+ /** Campaign Builder UUID. */
920
+ studio_campaign_id?: string;
921
+ /** IANA timezone (e.g. "America/New_York"). */
922
+ user_timezone?: string;
923
+ /** Per-session voicemail-skip override. null/omit = use SDR default. */
924
+ skip_voicemails?: boolean;
925
+ }
926
+ interface DialerSessionCreateResult {
927
+ session_id: string;
928
+ status: string;
929
+ name: string | null;
930
+ org_id: string | null;
931
+ user_id: string | null;
932
+ user_email: string | null;
933
+ from_phone: string | null;
934
+ session_metadata: Record<string, unknown> | null;
935
+ total_calls: number;
936
+ created_at: string | null;
937
+ message: string | null;
938
+ }
939
+ /** "ACTIVE" resumes, "PAUSED" pauses, "COMPLETED" stops. "FAILED" is rejected. */
940
+ type DialerSessionStatus = "ACTIVE" | "PAUSED" | "COMPLETED";
941
+ interface DialerSessionStatusUpdateResult {
942
+ session_id: string;
943
+ status: string;
944
+ message: string | null;
945
+ name: string | null;
946
+ org_id: string | null;
947
+ user_id: string | null;
948
+ user_email: string | null;
949
+ from_phone: string | null;
950
+ session_metadata: Record<string, unknown> | null;
951
+ total_calls: number;
952
+ created_at: string | null;
953
+ updated_at: string | null;
954
+ }
955
+ interface DialerSessionResumeResult extends DialerSessionStatusUpdateResult {
956
+ /** Contacts actually placed in this batch (voice caps at 4). */
957
+ dialed_count: number;
958
+ }
249
959
  /**
250
- * Voice AI - start AI voice calls, get transcriptions and analysis. Requires API key.
960
+ * Voice AI start AI voice calls, get transcriptions and analysis.
961
+ * Plus full parallel-dialer session control via the `dialer` namespace.
962
+ * Requires API key (server-side).
963
+ *
964
+ * Backed by:
965
+ * GET /api/v1/voice/dialer/sessions
966
+ * POST /api/v1/voice/dialer/sessions
967
+ * PATCH /api/v1/voice/dialer/sessions/{session_id}/status
968
+ * POST /api/v1/voice/dialer/sessions/{session_id}/resume
969
+ * GET /api/v1/voice/dialer/stats
970
+ * GET /api/v1/voice/dialer/numbers
971
+ * GET /api/v1/voice/dialer/missed-callbacks
972
+ * GET /api/v1/voice/dialer/calls/{room_name}/grading
973
+ * GET /api/v1/voice/dialer/agents
251
974
  */
252
975
  declare const createVoiceClient: (apiKey: string, apiUrl?: string) => {
253
- /** Start an AI voice session. */
976
+ /**
977
+ * Start an AI voice session.
978
+ * @deprecated Preview surface — for parallel-dialer flows use `voice.dialer.createSession()`.
979
+ */
254
980
  start(config: {
255
981
  agent?: string;
256
982
  contactId?: number;
257
983
  context?: Record<string, unknown>;
258
984
  }): Promise<VoiceSession>;
259
- /** Get call analysis for a completed session. */
985
+ /**
986
+ * Get call analysis for a completed session.
987
+ * @deprecated Preview surface — for dialer-call grading use `voice.dialer.callGrading(roomName)`.
988
+ */
260
989
  analysis(sessionId: string): Promise<CallAnalysis>;
261
990
  /** Listen for voice events. */
262
991
  on(event: VoiceEvent, callback: VoiceCallback): void;
992
+ /** Parallel-dialer session control + analytics. */
993
+ dialer: {
994
+ /** List parallel-dialer sessions with filters + pagination. */
995
+ listSessions(params?: DialerSessionsListParams): Promise<DialerSessionsListResult>;
996
+ /** Create a parallel-dialer session in PAUSED state. SDR opens UI to start dialing. */
997
+ createSession(payload: DialerSessionCreateParams): Promise<DialerSessionCreateResult>;
998
+ /** Pause / resume / stop a dialer session via status flip. */
999
+ updateSessionStatus(sessionId: string, status: DialerSessionStatus): Promise<DialerSessionStatusUpdateResult>;
1000
+ /**
1001
+ * Resume a PAUSED dialer session. Auto-fetches the next batch from the source list,
1002
+ * filters already-called + phoneless rows, and forwards to voice's start-session.
1003
+ * @param maxContacts 1-4 (voice caps parallel dialing at 4). Default 4.
1004
+ */
1005
+ resumeSession(sessionId: string, maxContacts?: number): Promise<DialerSessionResumeResult>;
1006
+ /** Aggregated dialer analytics (daily breakdown or total). */
1007
+ stats(params?: DialerStatsParams): Promise<DialerStatsResult>;
1008
+ /** List dialer-eligible phone numbers with 7-day stats + daily limits. */
1009
+ numbers(userEmail?: string): Promise<DialerNumbersListResult>;
1010
+ /** List missed inbound callbacks with caller / contact info. */
1011
+ missedCallbacks(limit?: number): Promise<MissedCallbacksResult>;
1012
+ /** AI grading for a single dialer call (returns "pending" while in progress). */
1013
+ callGrading(roomName: string): Promise<CallGradingResult>;
1014
+ /** List voice agents available for dialer sessions (capped at 100; no pagination). */
1015
+ agents(params?: DialerAgentsListParams): Promise<DialerAgentsListResult>;
1016
+ };
263
1017
  };
264
1018
 
265
1019
  interface AnalyticsOverview {
@@ -362,12 +1116,205 @@ interface AddToSequenceConfig {
362
1116
  contactIds: number[];
363
1117
  listId: number;
364
1118
  }
1119
+ interface SequenceListItem {
1120
+ id: string;
1121
+ name: string | null;
1122
+ status: string | null;
1123
+ user_email: string | null;
1124
+ step_count: number | null;
1125
+ contact_count: number | null;
1126
+ sequence_kind: string | null;
1127
+ associated_list_id: number | null;
1128
+ created_at: string | null;
1129
+ updated_at: string | null;
1130
+ }
1131
+ interface SequenceListParams {
1132
+ page?: number;
1133
+ limit?: number;
1134
+ /** Filter by sequence status (e.g. "live", "draft", "paused"). */
1135
+ status?: string;
1136
+ }
1137
+ interface SequenceDetail {
1138
+ id: string;
1139
+ name: string | null;
1140
+ description: string | null;
1141
+ status: string | null;
1142
+ user_email: string | null;
1143
+ associated_list_id: number | null;
1144
+ finish_on_reply: boolean;
1145
+ send_in_same_thread: boolean;
1146
+ wait_for_new_contacts: boolean;
1147
+ paused_at: string | null;
1148
+ resumed_at: string | null;
1149
+ created_at: string | null;
1150
+ updated_at: string | null;
1151
+ }
1152
+ interface SequenceContactItem {
1153
+ id: string | null;
1154
+ contact_id: number | null;
1155
+ state: string | null;
1156
+ current_step_order: number | null;
1157
+ created_at: string | null;
1158
+ updated_at: string | null;
1159
+ }
1160
+ interface SequenceContactsParams {
1161
+ page?: number;
1162
+ limit?: number;
1163
+ /** Filter by contact state (e.g. "active", "completed", "replied"). */
1164
+ state?: string;
1165
+ }
1166
+ interface SequenceActionResult {
1167
+ sequence_id: string;
1168
+ status: string;
1169
+ contacts_affected: number;
1170
+ }
365
1171
  /**
366
- * Sequences - manage outbound sequences. Requires API key (server-side).
1172
+ * Step type. Note: LinkedIn flows use "HEYREACH" there is no "LINKEDIN" step type.
1173
+ * Server is case-insensitive on input but stores uppercase.
1174
+ */
1175
+ type SequenceStepType = "EMAIL" | "PHONE" | "SMS" | "WHATSAPP" | "HEYREACH" | "MANUAL_DIALER";
1176
+ type SequenceStepInputType = "ON_DEMAND" | "MANUAL_TEMPLATE" | "AI_GENERATED_TEMPLATE";
1177
+ interface SequenceStepConfig {
1178
+ step_order: number;
1179
+ step_type: SequenceStepType | string;
1180
+ /** Defaults to "ON_DEMAND". */
1181
+ input_type?: SequenceStepInputType | string;
1182
+ /** Wait time before this step in seconds. Defaults to 0. */
1183
+ time_interval?: number;
1184
+ /** Template body, AI prompt, or other step-type-specific config. */
1185
+ step_data?: Record<string, unknown>;
1186
+ }
1187
+ interface SequenceChannelConfig {
1188
+ channel_id: number;
1189
+ channel_value: string;
1190
+ channel_type: string;
1191
+ channel_data?: Record<string, unknown>;
1192
+ }
1193
+ interface SequenceCreateParams {
1194
+ name: string;
1195
+ user_email: string;
1196
+ description?: string;
1197
+ finish_on_reply?: boolean;
1198
+ send_in_same_thread?: boolean;
1199
+ wait_for_new_contacts?: boolean;
1200
+ associated_list_id?: number;
1201
+ steps?: SequenceStepConfig[];
1202
+ channels?: SequenceChannelConfig[];
1203
+ campaign_id?: string;
1204
+ }
1205
+ interface SequenceCreateResult {
1206
+ id: string;
1207
+ name: string;
1208
+ status: string;
1209
+ created_at: string | null;
1210
+ }
1211
+ interface SequenceUpdateParams {
1212
+ name?: string;
1213
+ description?: string;
1214
+ is_shared?: boolean;
1215
+ finish_on_reply?: boolean;
1216
+ send_in_same_thread?: boolean;
1217
+ wait_for_new_contacts?: boolean;
1218
+ schedule_id?: string;
1219
+ appointment_id?: number;
1220
+ }
1221
+ interface SequenceStepUpdateParams {
1222
+ step_data?: Record<string, unknown>;
1223
+ time_interval?: number;
1224
+ step_type?: SequenceStepType | string;
1225
+ input_type?: SequenceStepInputType | string;
1226
+ }
1227
+ interface SequencePreviewStep {
1228
+ id: string;
1229
+ step_order: number;
1230
+ step_type: string;
1231
+ input_type: string;
1232
+ time_interval: number | null;
1233
+ step_data: Record<string, unknown> | null;
1234
+ }
1235
+ interface SequencePreviewChannel {
1236
+ id: string;
1237
+ channel_id: number | null;
1238
+ channel_value: string | null;
1239
+ channel_type: string | null;
1240
+ }
1241
+ interface SequencePreview {
1242
+ id: string;
1243
+ name: string | null;
1244
+ status: string | null;
1245
+ description: string | null;
1246
+ steps: SequencePreviewStep[];
1247
+ channels: SequencePreviewChannel[];
1248
+ }
1249
+ interface SequenceAnalytics {
1250
+ overview: Record<string, unknown>;
1251
+ performance: Record<string, unknown>;
1252
+ engagement: Record<string, unknown>;
1253
+ timeline: Record<string, unknown>[];
1254
+ contact_distribution: Record<string, unknown>;
1255
+ step_breakdown: Record<string, unknown>[];
1256
+ step_creation_methods: Record<string, unknown>[];
1257
+ sender_distribution: Record<string, unknown>[];
1258
+ }
1259
+ interface PaginationMeta {
1260
+ page: number;
1261
+ limit: number;
1262
+ total: number;
1263
+ has_next: boolean;
1264
+ }
1265
+ /**
1266
+ * Sequences API — list, create, run, pause, update, analyze multi-channel sequences.
1267
+ * Requires API key (server-side).
1268
+ *
1269
+ * Backed by:
1270
+ * GET /api/v1/sequences
1271
+ * POST /api/v1/sequences
1272
+ * GET /api/v1/sequences/{sequence_id}
1273
+ * PATCH /api/v1/sequences/{sequence_id}
1274
+ * DELETE /api/v1/sequences/{sequence_id}
1275
+ * GET /api/v1/sequences/{sequence_id}/contacts
1276
+ * POST /api/v1/sequences/{sequence_id}/contacts
1277
+ * POST /api/v1/sequences/{sequence_id}/run
1278
+ * POST /api/v1/sequences/{sequence_id}/pause
1279
+ * POST /api/v1/sequences/{sequence_id}/resume
1280
+ * PATCH /api/v1/sequences/{sequence_id}/steps/{step_id}
1281
+ * GET /api/v1/sequences/{sequence_id}/preview
1282
+ * GET /api/v1/sequences/{sequence_id}/analytics
367
1283
  */
368
1284
  declare const createSequencesClient: (apiKey: string, apiUrl?: string) => {
369
- list(page?: number, limit?: number): Promise<Sequence[]>;
370
- add(config: AddToSequenceConfig): Promise<void>;
1285
+ /** List sequences with pagination + optional status filter. */
1286
+ list: {
1287
+ (): Promise<SequenceListItem[]>;
1288
+ (page: number, limit?: number): Promise<SequenceListItem[]>;
1289
+ (params: SequenceListParams): Promise<SequenceListItem[]>;
1290
+ };
1291
+ /** Get full sequence details by ID. */
1292
+ get(sequenceId: string): Promise<SequenceDetail>;
1293
+ /** List contacts enrolled in a sequence. Filter by state (e.g. "active", "replied"). */
1294
+ contacts(sequenceId: string, params?: SequenceContactsParams): Promise<{
1295
+ data: SequenceContactItem[];
1296
+ pagination?: PaginationMeta;
1297
+ }>;
1298
+ /** Add contacts to a sequence (V2 queuing). Live or drafted sequences only. */
1299
+ add(config: AddToSequenceConfig): Promise<SequenceActionResult>;
1300
+ /** Create a new sequence with optional steps + channels. */
1301
+ create(payload: SequenceCreateParams): Promise<SequenceCreateResult>;
1302
+ /** Update sequence metadata. Rejected (409) if sequence is in a transitional status. */
1303
+ update(sequenceId: string, fields: SequenceUpdateParams): Promise<SequenceActionResult>;
1304
+ /** Update a single step within a sequence. */
1305
+ updateStep(sequenceId: string, stepId: string, fields: SequenceStepUpdateParams): Promise<SequenceActionResult>;
1306
+ /** Soft-delete (archive) a sequence. */
1307
+ delete(sequenceId: string): Promise<SequenceActionResult>;
1308
+ /** Run/start a DRAFTED sequence (V2 orchestration). */
1309
+ run(sequenceId: string): Promise<SequenceActionResult>;
1310
+ /** Pause a live sequence. */
1311
+ pause(sequenceId: string): Promise<SequenceActionResult>;
1312
+ /** Resume a paused sequence. */
1313
+ resume(sequenceId: string): Promise<SequenceActionResult>;
1314
+ /** Read-only sequence preview with all steps + channels (no enrollment). */
1315
+ preview(sequenceId: string): Promise<SequencePreview>;
1316
+ /** Comprehensive analytics for a sequence. */
1317
+ analytics(sequenceId: string): Promise<SequenceAnalytics>;
371
1318
  };
372
1319
 
373
1320
  interface PersonEnrichment {
@@ -664,6 +1611,11 @@ declare class G8 {
664
1611
  /** @internal */ _contacts: ReturnType<typeof createContactsClient> | null;
665
1612
  /** @internal */ _companies: ReturnType<typeof createCompaniesClient> | null;
666
1613
  /** @internal */ _lists: ReturnType<typeof createListsClient> | null;
1614
+ /** @internal */ _notes: ReturnType<typeof createNotesClient> | null;
1615
+ /** @internal */ _tasks: ReturnType<typeof createTasksClient> | null;
1616
+ /** @internal */ _fields: ReturnType<typeof createFieldsClient> | null;
1617
+ /** @internal */ _deals: ReturnType<typeof createDealsClient> | null;
1618
+ /** @internal */ _inbox: ReturnType<typeof createInboxClient> | null;
667
1619
  /**
668
1620
  * Initialize the graph8 SDK. Must be called before any other method.
669
1621
  * Safe to call on the server (SSR) - becomes a no-op for tracking.
@@ -732,8 +1684,26 @@ declare class G8 {
732
1684
  };
733
1685
  /** Sequences (requires API key). */
734
1686
  get sequences(): {
735
- list(page?: number, limit?: number): Promise<Sequence[]>;
736
- add(config: AddToSequenceConfig): Promise<void>;
1687
+ list: {
1688
+ (): Promise<SequenceListItem[]>;
1689
+ (page: number, limit?: number): Promise<SequenceListItem[]>;
1690
+ (params: SequenceListParams): Promise<SequenceListItem[]>;
1691
+ };
1692
+ get(sequenceId: string): Promise<SequenceDetail>;
1693
+ contacts(sequenceId: string, params?: SequenceContactsParams): Promise<{
1694
+ data: SequenceContactItem[];
1695
+ pagination?: PaginationMeta;
1696
+ }>;
1697
+ add(config: AddToSequenceConfig): Promise<SequenceActionResult>;
1698
+ create(payload: SequenceCreateParams): Promise<SequenceCreateResult>;
1699
+ update(sequenceId: string, fields: SequenceUpdateParams): Promise<SequenceActionResult>;
1700
+ updateStep(sequenceId: string, stepId: string, fields: SequenceStepUpdateParams): Promise<SequenceActionResult>;
1701
+ delete(sequenceId: string): Promise<SequenceActionResult>;
1702
+ run(sequenceId: string): Promise<SequenceActionResult>;
1703
+ pause(sequenceId: string): Promise<SequenceActionResult>;
1704
+ resume(sequenceId: string): Promise<SequenceActionResult>;
1705
+ preview(sequenceId: string): Promise<SequencePreview>;
1706
+ analytics(sequenceId: string): Promise<SequenceAnalytics>;
737
1707
  };
738
1708
  /** Campaigns (requires API key). */
739
1709
  get campaigns(): {
@@ -772,6 +1742,17 @@ declare class G8 {
772
1742
  }): Promise<VoiceSession>;
773
1743
  analysis(sessionId: string): Promise<CallAnalysis>;
774
1744
  on(event: "error" | "ended" | "connected" | "transcription", callback: (data: Record<string, unknown>) => void): void;
1745
+ dialer: {
1746
+ listSessions(params?: DialerSessionsListParams): Promise<DialerSessionsListResult>;
1747
+ createSession(payload: DialerSessionCreateParams): Promise<DialerSessionCreateResult>;
1748
+ updateSessionStatus(sessionId: string, status: DialerSessionStatus): Promise<DialerSessionStatusUpdateResult>;
1749
+ resumeSession(sessionId: string, maxContacts?: number): Promise<DialerSessionResumeResult>;
1750
+ stats(params?: DialerStatsParams): Promise<DialerStatsResult>;
1751
+ numbers(userEmail?: string): Promise<DialerNumbersListResult>;
1752
+ missedCallbacks(limit?: number): Promise<MissedCallbacksResult>;
1753
+ callGrading(roomName: string): Promise<CallGradingResult>;
1754
+ agents(params?: DialerAgentsListParams): Promise<DialerAgentsListResult>;
1755
+ };
775
1756
  };
776
1757
  /** Landing pages (requires API key). */
777
1758
  get pages(): {
@@ -804,6 +1785,10 @@ declare class G8 {
804
1785
  delete(contactId: number): Promise<{
805
1786
  deleted: boolean;
806
1787
  }>;
1788
+ listColumns(listId?: number): Promise<{
1789
+ data: ContactColumn[];
1790
+ }>;
1791
+ createColumn(params: ContactColumnCreateParams): Promise<ContactColumn>;
807
1792
  };
808
1793
  /** Companies CRUD (requires API key). */
809
1794
  get companies(): {
@@ -822,6 +1807,10 @@ declare class G8 {
822
1807
  delete(companyId: number): Promise<{
823
1808
  deleted: boolean;
824
1809
  }>;
1810
+ listColumns(listId?: number): Promise<{
1811
+ data: CompanyColumn[];
1812
+ }>;
1813
+ createColumn(params: CompanyColumnCreateParams): Promise<CompanyColumn>;
825
1814
  };
826
1815
  /** Lists management (requires API key). */
827
1816
  get lists(): {
@@ -844,6 +1833,93 @@ declare class G8 {
844
1833
  removed: number;
845
1834
  }>;
846
1835
  };
1836
+ /** Notes on contacts (requires API key). */
1837
+ get notes(): {
1838
+ list(contactId: number): Promise<{
1839
+ data: Note[];
1840
+ }>;
1841
+ create(contactId: number, content: string): Promise<Note>;
1842
+ update(noteId: string, content: string): Promise<Note>;
1843
+ delete(noteId: string): Promise<{
1844
+ data: {
1845
+ deleted: boolean;
1846
+ };
1847
+ }>;
1848
+ };
1849
+ /** Tasks on contacts (requires API key). */
1850
+ get tasks(): {
1851
+ listForContact(contactId: number, status?: string): Promise<{
1852
+ data: Task[];
1853
+ }>;
1854
+ list(params?: TaskListParams): Promise<{
1855
+ data: Task[];
1856
+ }>;
1857
+ create(contactId: number, task: TaskCreateParams): Promise<Task>;
1858
+ update(taskId: string, fields: TaskUpdateParams): Promise<Task>;
1859
+ delete(taskId: string): Promise<{
1860
+ data: {
1861
+ deleted: boolean;
1862
+ };
1863
+ }>;
1864
+ };
1865
+ /** Custom fields management (requires API key). */
1866
+ get fields(): {
1867
+ listContactFields(listId?: number): Promise<{
1868
+ data: Field[];
1869
+ }>;
1870
+ listCompanyFields(listId?: number): Promise<{
1871
+ data: Field[];
1872
+ }>;
1873
+ create(params: FieldCreateParams): Promise<CreatedField>;
1874
+ delete(columnId: number, params?: FieldDeleteParams): Promise<{
1875
+ data: {
1876
+ column_id: number;
1877
+ deleted: boolean;
1878
+ };
1879
+ }>;
1880
+ setValue(columnId: number, params: SetFieldValueParams): Promise<{
1881
+ data: {
1882
+ column_id: number;
1883
+ record_id: number;
1884
+ updated: boolean;
1885
+ };
1886
+ }>;
1887
+ };
1888
+ /** Deals and pipelines (requires API key). */
1889
+ get deals(): {
1890
+ pipelines(): Promise<{
1891
+ data: Pipeline[];
1892
+ }>;
1893
+ list(params?: DealListParams): Promise<{
1894
+ data: Deal[];
1895
+ pagination?: PaginationMeta$1;
1896
+ }>;
1897
+ create(deal: DealCreateParams): Promise<Deal>;
1898
+ get(dealId: string): Promise<Deal>;
1899
+ update(dealId: string, fields: DealUpdateParams): Promise<Deal>;
1900
+ delete(dealId: string): Promise<{
1901
+ data: {
1902
+ deleted: boolean;
1903
+ };
1904
+ }>;
1905
+ forContact(contactId: number): Promise<{
1906
+ data: ContactDeal[];
1907
+ }>;
1908
+ forCompany(companyId: number): Promise<{
1909
+ data: ContactDeal[];
1910
+ }>;
1911
+ };
1912
+ /** Multi-channel inbox — read + reply across email, SMS, LinkedIn (requires API key). */
1913
+ get inbox(): {
1914
+ list(params?: InboxListParams): Promise<{
1915
+ data: InboxThread[];
1916
+ }>;
1917
+ get(replyId: string, channel?: InboxChannel): Promise<InboxThread>;
1918
+ assign(replyId: string, assigneeEmail: string, channel?: InboxChannel): Promise<InboxAssignResult>;
1919
+ tag(replyId: string, tagIds: string[], channel?: InboxChannel): Promise<InboxTagResult>;
1920
+ draft(replyId: string, channel?: InboxChannel): Promise<InboxDraft>;
1921
+ send(replyId: string, payload: InboxSendParams): Promise<InboxSendResult>;
1922
+ };
847
1923
  /** Whether the SDK has been initialized. */
848
1924
  get initialized(): boolean;
849
1925
  /** @internal */
@@ -854,4 +1930,4 @@ declare class G8 {
854
1930
  /** Singleton g8 client instance. */
855
1931
  declare const g8: G8;
856
1932
 
857
- export { type AddToSequenceConfig, type AnalyticsOverview, type Booking, type BookingRequest, type CalendarConfig, type CallAnalysis, type Campaign, type CampaignCreateConfig, type CampaignStats, type ChatConfig, type Company, type CompanyContact, type CompanyEnrichment, type CompanyListParams, type CompanyUpdateParams, type Contact, type ContactCreateParams, type ContactList, type ContactListParams, type ContactUpdateParams, type CopilotConfig, type EmailVerification, type EnrichLookupResult, type G8Config, type G8PrivacyConfig, type IdentifyProperties, type Integration, type IntentSignals, type LandingPage, type ListContact, type PersonEnrichment, type SearchFilter, type SearchResults, type Sequence, type TimeSlot, type TrackProperties, type VisitorCompany, type VisitorScore, type VoiceSession, type WebhookEvent, g8 };
1933
+ export { type AddToSequenceConfig, type AnalyticsOverview, type Booking, type BookingRequest, type CalendarConfig, type CallAnalysis, type CallGradingResult, type Campaign, type CampaignCreateConfig, type CampaignStats, type ChatConfig, type Company, type CompanyColumn, type CompanyColumnCreateParams, type CompanyContact, type CompanyEnrichment, type CompanyListParams, type CompanyUpdateParams, type Contact, type ContactColumn, type ContactColumnCreateParams, type ContactCreateParams, type ContactDeal, type ContactList, type ContactListParams, type ContactUpdateParams, type CopilotConfig, type CreatedField, type Deal, type DealCreateParams, type DealListParams, type DealUpdateParams, type DialerAgentSummary, type DialerAgentsListParams, type DialerAgentsListResult, type DialerNumberInfo, type DialerNumbersListResult, type DialerReportFilters, type DialerReportMetric, type DialerSessionCreateParams, type DialerSessionCreateResult, type DialerSessionResumeResult, type DialerSessionStatus, type DialerSessionStatusUpdateResult, type DialerSessionSummary, type DialerSessionsListParams, type DialerSessionsListResult, type DialerStatsParams, type DialerStatsResult, type EmailVerification, type EnrichLookupResult, type Field, type FieldCreateParams, type FieldDeleteParams, type G8Config, type G8PrivacyConfig, type IdentifyProperties, type InboxAssignResult, type InboxAssignee, type InboxChannel, type InboxContact, type InboxDraft, type InboxListParams, type InboxMessage, type InboxSendParams, type InboxSendResult, type InboxTag, type InboxTagResult, type InboxThread, type Integration, type IntentSignals, type LandingPage, type ListContact, type MissedCallback, type MissedCallbacksResult, type Note, type PaginationMeta$1 as PaginationMeta, type PersonEnrichment, type Pipeline, type PipelineStage, type SearchFilter, type SearchResults, type Sequence, type SequenceActionResult, type SequenceAnalytics, type SequenceChannelConfig, type SequenceContactItem, type SequenceContactsParams, type SequenceCreateParams, type SequenceCreateResult, type SequenceDetail, type SequenceListItem, type SequenceListParams, type SequencePreview, type SequencePreviewChannel, type SequencePreviewStep, type SequenceStepConfig, type SequenceStepInputType, type SequenceStepType, type SequenceStepUpdateParams, type SequenceUpdateParams, type SetFieldValueParams, type Task, type TaskCreateParams, type TaskListParams, type TaskUpdateParams, type TimeSlot, type TrackProperties, type VisitorCompany, type VisitorScore, type VoicePagination, type VoiceSession, type WebhookEvent, g8 };