@opencx/mcp 1.15.30 → 1.15.31

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/schema.d.ts CHANGED
@@ -2433,6 +2433,54 @@ export interface paths {
2433
2433
  patch: operations["updateCustomStatus"];
2434
2434
  trace?: never;
2435
2435
  };
2436
+ "/inbox-views": {
2437
+ parameters: {
2438
+ query?: never;
2439
+ header?: never;
2440
+ path?: never;
2441
+ cookie?: never;
2442
+ };
2443
+ /**
2444
+ * List saved inbox views
2445
+ * @description List the saved inbox views the calling user can see: their own, the ones shared with them or their teams, and the organization-wide ones. A saved view is a named session filter set that agents pick from the inbox sidebar.
2446
+ */
2447
+ get: operations["listInboxViews"];
2448
+ put?: never;
2449
+ /**
2450
+ * Create a saved inbox view
2451
+ * @description Create a named, filtered view of the inbox and share it with the organization, named teams, or named users. The view is evaluated fresh every time it is opened, so `$current_user` assignees and `date.preset` windows stay dynamic. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored.
2452
+ */
2453
+ post: operations["createInboxView"];
2454
+ delete?: never;
2455
+ options?: never;
2456
+ head?: never;
2457
+ patch?: never;
2458
+ trace?: never;
2459
+ };
2460
+ "/inbox-views/{id}": {
2461
+ parameters: {
2462
+ query?: never;
2463
+ header?: never;
2464
+ path?: never;
2465
+ cookie?: never;
2466
+ };
2467
+ get?: never;
2468
+ put?: never;
2469
+ post?: never;
2470
+ /**
2471
+ * Delete a saved inbox view
2472
+ * @description Delete a saved view. It disappears from the sidebar for everyone it was shared with; the sessions it matched are untouched. Requires the same permission as updating it (see `can_delete`).
2473
+ */
2474
+ delete: operations["deleteInboxView"];
2475
+ options?: never;
2476
+ head?: never;
2477
+ /**
2478
+ * Update a saved inbox view
2479
+ * @description Update any subset of a saved view. Omitted fields are left unchanged; sending `filters` replaces the saved query outright. Only the view's creator, or someone with the `sessions-shared-views:write` permission editing a shared view, may update it (see `can_edit`).
2480
+ */
2481
+ patch: operations["updateInboxView"];
2482
+ trace?: never;
2483
+ };
2436
2484
  "/workflows/definitions": {
2437
2485
  parameters: {
2438
2486
  query?: never;
@@ -3534,6 +3582,48 @@ export interface paths {
3534
3582
  patch?: never;
3535
3583
  trace?: never;
3536
3584
  };
3585
+ "/sequences/{sequenceId}/contacts/{contactId}/continue": {
3586
+ parameters: {
3587
+ query?: never;
3588
+ header?: never;
3589
+ path?: never;
3590
+ cookie?: never;
3591
+ };
3592
+ get?: never;
3593
+ put?: never;
3594
+ /**
3595
+ * Continue the sequence for a person a reply took out of it
3596
+ * @description A reply concludes a journey — the person exits as "replied" and receives no further steps. When that reply was not real engagement (an out-of-office, a "who is this?"), this puts them back in: active at the NEXT step, with that step's wait counted from now. The step they answered is never re-sent.
3597
+ *
3598
+ * Never an error for "cannot continue": `nothing_to_continue` when they replied on the last step or the journey already completed; `not_resumable` when the journey is still in play or ended by suppression (consent is not overridden here); `contact_not_found` when there is no live enrollment.
3599
+ */
3600
+ post: operations["continueSequenceContact"];
3601
+ delete?: never;
3602
+ options?: never;
3603
+ head?: never;
3604
+ patch?: never;
3605
+ trace?: never;
3606
+ };
3607
+ "/sequences/contacts/{contactId}/sequences": {
3608
+ parameters: {
3609
+ query?: never;
3610
+ header?: never;
3611
+ path?: never;
3612
+ cookie?: never;
3613
+ };
3614
+ /**
3615
+ * Every sequence a contact is in, across the workspace
3616
+ * @description The cross-sequence read: which sequences hold this contact, their status in each (candidate, active, parked, exited, completed), why they left or parked, and the step they are on. Live enrollments only — a removed person is off the list. Use it before enrolling someone, or when a message arrives and you need to know whether they are mid-sequence.
3617
+ */
3618
+ get: operations["listContactSequences"];
3619
+ put?: never;
3620
+ post?: never;
3621
+ delete?: never;
3622
+ options?: never;
3623
+ head?: never;
3624
+ patch?: never;
3625
+ trace?: never;
3626
+ };
3537
3627
  "/sequences/{sequenceId}/contacts/exit": {
3538
3628
  parameters: {
3539
3629
  query?: never;
@@ -7429,6 +7519,11 @@ export interface components {
7429
7519
  channel: "web" | "email" | "phone" | "whatsapp" | "slack" | "sms" | "instagram" | "messenger" | "api" | "web_voice";
7430
7520
  /** @description Set true to enable autopilot, false to disable */
7431
7521
  autopilot_enabled: boolean;
7522
+ /**
7523
+ * @description AI agent version to use for this channel
7524
+ * @enum {string}
7525
+ */
7526
+ ai_agent_version?: "v1" | "v2";
7432
7527
  };
7433
7528
  UpdateProhibitedTopicsInputDto: {
7434
7529
  /** @description Full replacement list of prohibited topics. Each entry is either a name string or an object with a name and an optional description. A name-only entry keeps whatever description that topic already has. Empty array clears all topics. Duplicates and blank entries are removed. */
@@ -7534,6 +7629,162 @@ export interface components {
7534
7629
  /** @description Inline SVG markup for the badge icon. null restores the default icon; omit to leave unchanged. */
7535
7630
  icon?: string | null;
7536
7631
  };
7632
+ CreateInboxViewDto: {
7633
+ /** @description Name shown in the inbox view picker */
7634
+ name: string;
7635
+ /**
7636
+ * @description Filters the view applies, ANDed together. Omit for a view over every session. Same vocabulary as POST /chat/sessions/filter, plus the saved-view-only `$current_user` assignee token and rolling `date.preset`.
7637
+ * @default {}
7638
+ */
7639
+ filters: {
7640
+ /** @description Date range filter on session creation time */
7641
+ date?: {
7642
+ /**
7643
+ * Format: date-time
7644
+ * @description Start date (ISO 8601)
7645
+ */
7646
+ from?: string;
7647
+ /**
7648
+ * Format: date-time
7649
+ * @description End date (ISO 8601)
7650
+ */
7651
+ to?: string;
7652
+ /**
7653
+ * @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
7654
+ * @enum {string}
7655
+ */
7656
+ preset?: "today" | "last_3_days" | "last_7_days";
7657
+ };
7658
+ /** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
7659
+ channels?: components["schemas"]["SessionChannel"][];
7660
+ /** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
7661
+ status?: number[];
7662
+ /** @description Filter by custom status ids (sessions whose `sub_status_id` is any of these). Ids come from GET /custom-statuses. An empty array applies no filter, like the other array filters here. */
7663
+ sub_status_ids?: string[];
7664
+ /** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
7665
+ ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
7666
+ /** @description Filter by customer sentiment (angry, happy, neutral) */
7667
+ sentiment?: ("angry" | "happy" | "neutral")[];
7668
+ /** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
7669
+ assignees?: (number | "$current_user")[];
7670
+ /** @description Filter by team/group IDs */
7671
+ team_ids?: string[];
7672
+ /** @description Filter by contact IDs */
7673
+ contact_ids?: string[];
7674
+ /** @description Filter by exact ticket number */
7675
+ ticket_number?: number;
7676
+ /** @description Filter by session language codes */
7677
+ language?: string[];
7678
+ /** @description Filter by tag names (sessions must have ALL specified tags) */
7679
+ tags?: string[];
7680
+ /**
7681
+ * @description Filter by who the session is waiting on
7682
+ * @enum {string}
7683
+ */
7684
+ waiting_on?: "customers" | "human_agents";
7685
+ /** @description Filter by session custom data (OR between objects, AND within each object) */
7686
+ custom_data?: {
7687
+ [key: string]: string;
7688
+ }[];
7689
+ };
7690
+ /**
7691
+ * @description Sort field (default: last_message_at)
7692
+ * @enum {string}
7693
+ */
7694
+ sort_by?: "last_message_at" | "created_at" | "sla_urgency";
7695
+ /**
7696
+ * @description Sort direction (default: desc)
7697
+ * @enum {string}
7698
+ */
7699
+ sort_order?: "asc" | "desc";
7700
+ /**
7701
+ * @description Group the session list by this field. Omit for a flat list.
7702
+ * @enum {string}
7703
+ */
7704
+ group_by?: "channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id";
7705
+ /**
7706
+ * @description User ids the view is shared with. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored.
7707
+ * @default []
7708
+ */
7709
+ shared_with_user_ids: number[];
7710
+ /**
7711
+ * @description Team ids (from GET /teams) whose members can see the view.
7712
+ * @default []
7713
+ */
7714
+ shared_with_team_ids: string[];
7715
+ };
7716
+ UpdateInboxViewDto: {
7717
+ /** @description New name for the view */
7718
+ name?: string;
7719
+ /** @description Replaces the entire saved filter set — including the OR/exclude groups of an `advanced` view. Omit to leave the query untouched. */
7720
+ filters?: {
7721
+ /** @description Date range filter on session creation time */
7722
+ date?: {
7723
+ /**
7724
+ * Format: date-time
7725
+ * @description Start date (ISO 8601)
7726
+ */
7727
+ from?: string;
7728
+ /**
7729
+ * Format: date-time
7730
+ * @description End date (ISO 8601)
7731
+ */
7732
+ to?: string;
7733
+ /**
7734
+ * @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
7735
+ * @enum {string}
7736
+ */
7737
+ preset?: "today" | "last_3_days" | "last_7_days";
7738
+ };
7739
+ /** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
7740
+ channels?: components["schemas"]["SessionChannel"][];
7741
+ /** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
7742
+ status?: number[];
7743
+ /** @description Filter by custom status ids (sessions whose `sub_status_id` is any of these). Ids come from GET /custom-statuses. An empty array applies no filter, like the other array filters here. */
7744
+ sub_status_ids?: string[];
7745
+ /** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
7746
+ ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
7747
+ /** @description Filter by customer sentiment (angry, happy, neutral) */
7748
+ sentiment?: ("angry" | "happy" | "neutral")[];
7749
+ /** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
7750
+ assignees?: (number | "$current_user")[];
7751
+ /** @description Filter by team/group IDs */
7752
+ team_ids?: string[];
7753
+ /** @description Filter by contact IDs */
7754
+ contact_ids?: string[];
7755
+ /** @description Filter by exact ticket number */
7756
+ ticket_number?: number;
7757
+ /** @description Filter by session language codes */
7758
+ language?: string[];
7759
+ /** @description Filter by tag names (sessions must have ALL specified tags) */
7760
+ tags?: string[];
7761
+ /**
7762
+ * @description Filter by who the session is waiting on
7763
+ * @enum {string}
7764
+ */
7765
+ waiting_on?: "customers" | "human_agents";
7766
+ /** @description Filter by session custom data (OR between objects, AND within each object) */
7767
+ custom_data?: {
7768
+ [key: string]: string;
7769
+ }[];
7770
+ };
7771
+ /**
7772
+ * @description New sort field
7773
+ * @enum {string}
7774
+ */
7775
+ sort_by?: "last_message_at" | "created_at" | "sla_urgency";
7776
+ /**
7777
+ * @description New sort direction
7778
+ * @enum {string}
7779
+ */
7780
+ sort_order?: "asc" | "desc";
7781
+ /** @description New grouping field; null removes grouping. Omit to leave it unchanged. */
7782
+ group_by?: ("channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id") | null;
7783
+ /** @description User ids the view is shared with. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored. */
7784
+ shared_with_user_ids?: number[];
7785
+ /** @description Team ids (from GET /teams) whose members can see the view. */
7786
+ shared_with_team_ids?: string[];
7787
+ };
7537
7788
  CreateWorkflowPublicInput: {
7538
7789
  /** @description Workflow name */
7539
7790
  name: string;
@@ -7543,7 +7794,7 @@ export interface components {
7543
7794
  * @description What starts the workflow. Use "manual-trigger" for on-demand execution, "ai-trigger" for AI-initiated, "webhook" for external HTTP triggers, "cron-trigger" for scheduled runs, or event-based triggers like "ticket-created", "contact-created", etc.
7544
7795
  * @enum {string}
7545
7796
  */
7546
- trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "sequence-completed" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated";
7797
+ trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
7547
7798
  /** @description Trigger-specific configuration (e.g. cron expression for cron-trigger) */
7548
7799
  trigger_configuration?: unknown | null;
7549
7800
  /** @description Array of workflow steps and control-flow blocks. Each step is an object with { "$kind": "Action", "id": "<unique-step-id>", "type": "<action-type>", "name": "<display-name>", "input": { ... } }. Control-flow blocks use { "$kind": "Block", "type": "if-else", "id": "<unique-id>", "inputs": { "condition": { "operatorName": "equals", "left": "{{step_id.field}}", "right": "value" } }, "branches": { "then": [...steps], "else": [...steps] } }. Use {{step_id.field}} to reference outputs from previous steps (no `.output.` segment — the field sits directly under the step id). */
@@ -7560,7 +7811,7 @@ export interface components {
7560
7811
  * @description New trigger type
7561
7812
  * @enum {string}
7562
7813
  */
7563
- trigger_type?: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "sequence-completed" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated";
7814
+ trigger_type?: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
7564
7815
  /** @description New trigger configuration */
7565
7816
  trigger_configuration?: unknown | null;
7566
7817
  /** @description New workflow step/block definitions (replaces existing blocks) */
@@ -7573,7 +7824,7 @@ export interface components {
7573
7824
  * @description Trigger type to validate against
7574
7825
  * @enum {string}
7575
7826
  */
7576
- trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "sequence-completed" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated";
7827
+ trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
7577
7828
  /** @description Trigger configuration to validate against the trigger's configuration_def. When omitted, the trigger is validated as if unconfigured — triggers with required configuration (e.g. cron-trigger, ai-trigger) will report errors. */
7578
7829
  trigger_configuration?: unknown | null;
7579
7830
  /** @description Workflow blocks to validate */
@@ -7586,7 +7837,7 @@ export interface components {
7586
7837
  * @description Trigger type whose payload shape this synthetic payload should match
7587
7838
  * @enum {string}
7588
7839
  */
7589
- type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "sequence-completed" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated";
7840
+ type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
7590
7841
  payload: unknown;
7591
7842
  };
7592
7843
  };
@@ -8359,7 +8610,7 @@ export interface components {
8359
8610
  /** @constant */
8360
8611
  type: "response_skipped";
8361
8612
  /** @enum {string} */
8362
- reason?: "empty_response" | "potential_answers_dead_end" | "silent_handoff" | "assist_human_handling_recommended" | "superseded_by_newer_run" | "interrupted" | "flagged_as_spam";
8613
+ reason?: "empty_response" | "potential_answers_dead_end" | "silent_handoff" | "assist_human_handling_recommended" | "superseded_by_newer_run" | "interrupted" | "answered_in_narration" | "steered_into_live_turn" | "session_busy" | "flagged_as_spam";
8363
8614
  reasoning?: ({
8364
8615
  /** @constant */
8365
8616
  type: "reasoning";
@@ -8662,7 +8913,7 @@ export interface components {
8662
8913
  }) | null;
8663
8914
  knowledgebase_called?: boolean | null;
8664
8915
  /** @enum {string} */
8665
- type: "agent_assigned_by_integration" | "agent_assigned_by_system" | "agent_assigned_by_user" | "agent_changed" | "agent_comment" | "agent_initiated_session" | "agent_joined" | "agent_message" | "agent_reopened_session" | "agent_took_session_from_ai" | "agent_unassigned_by_integration" | "agent_unassigned_by_system" | "agent_unassigned_by_user" | "ai_assumed_the_session_resolved" | "ai_decided_to_not_reply" | "ai_decided_to_resolve_the_issue" | "ai_reopened_session" | "ai_response_cancelled" | "ai_resumed_by_system" | "ai_suggestion" | "call_history" | "call_transferred" | "closed_resolved_by_agent" | "closed_resolved_by_api" | "closed_resolved_by_contact" | "closed_resolved_by_integration" | "closed_resolved_by_system" | "closed_unresolved_by_agent" | "closed_unresolved_by_api" | "closed_unresolved_by_system" | "contact_data_updated" | "csat_request_cancelled" | "csat_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "pii_attachment_removed" | "prohibited_topic_detected" | "quoted_content_modified" | "salesforce_fields_updated" | "sequence_message" | "session_forwarded" | "session_language_changed_by_agent" | "session_language_changed_by_api" | "session_language_changed_by_integration" | "session_language_changed_by_system" | "skills_added_by_system" | "sla_applied_by_agent" | "sla_applied_by_system" | "sla_first_reply_breached" | "sla_first_reply_completed_after_breach" | "sla_first_reply_fulfilled" | "sla_first_reply_metric_started" | "sla_freezed_office_hours_ended" | "sla_freezed_snoozed" | "sla_next_reply_breached" | "sla_next_reply_completed_after_breach" | "sla_next_reply_fulfilled" | "sla_next_reply_metric_started" | "sla_removed_by_agent" | "sla_removed_by_system" | "sla_resolution_breached" | "sla_resolution_completed_after_breach" | "sla_resolution_fulfilled" | "sla_resolution_metric_started" | "sla_resolution_paused_resolved" | "sla_resolution_paused_waiting_on_customer" | "sla_resolution_resumed_customer_replied" | "sla_resolution_resumed_reopened" | "sla_resumed_office_hours_started" | "sla_resumed_snooze_cancelled" | "sla_resumed_snooze_expired" | "state_checkpoint" | "sub_session_created" | "sub_session_linked_by_agent" | "sub_session_linked_by_api" | "sub_session_linked_by_integration" | "sub_session_linked_by_system" | "sub_session_unlinked_by_agent" | "sub_session_unlinked_by_api" | "sub_session_unlinked_by_integration" | "sub_session_unlinked_by_system" | "sub_status_removed_by_agent" | "sub_status_removed_by_api" | "sub_status_removed_by_integration" | "sub_status_removed_by_system" | "sub_status_set_by_agent" | "sub_status_set_by_api" | "sub_status_set_by_integration" | "sub_status_set_by_system" | "system_reopened_session" | "tag_added_by_agent" | "tag_added_by_api" | "tag_added_by_integration" | "tag_added_by_system" | "tag_removed_by_agent" | "tag_removed_by_api" | "tag_removed_by_integration" | "tag_removed_by_system" | "team_assigned_by_integration" | "team_assigned_by_system" | "team_assigned_by_user" | "team_unassigned_by_integration" | "team_unassigned_by_system" | "team_unassigned_by_user" | "user_confirmed_the_session_resolved" | "workflow_message" | "workflow_note" | "workflow_triggered";
8916
+ type: "agent_assigned_by_integration" | "agent_assigned_by_system" | "agent_assigned_by_user" | "agent_changed" | "agent_comment" | "agent_initiated_session" | "agent_joined" | "agent_message" | "agent_reopened_session" | "agent_took_session_from_ai" | "agent_unassigned_by_integration" | "agent_unassigned_by_system" | "agent_unassigned_by_user" | "ai_assumed_the_session_resolved" | "ai_decided_to_not_reply" | "ai_decided_to_resolve_the_issue" | "ai_follow_up_cancelled" | "ai_follow_up_fired" | "ai_follow_up_scheduled" | "ai_reopened_session" | "ai_response_cancelled" | "ai_resumed_by_system" | "ai_suggestion" | "call_history" | "call_transferred" | "closed_resolved_by_agent" | "closed_resolved_by_api" | "closed_resolved_by_contact" | "closed_resolved_by_integration" | "closed_resolved_by_system" | "closed_unresolved_by_agent" | "closed_unresolved_by_api" | "closed_unresolved_by_system" | "contact_data_updated" | "csat_request_cancelled" | "csat_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_third_party_failed" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "pii_attachment_removed" | "prohibited_topic_detected" | "quoted_content_modified" | "salesforce_fields_updated" | "sequence_message" | "session_forwarded" | "session_language_changed_by_agent" | "session_language_changed_by_api" | "session_language_changed_by_integration" | "session_language_changed_by_system" | "skills_added_by_system" | "sla_applied_by_agent" | "sla_applied_by_system" | "sla_first_reply_breached" | "sla_first_reply_completed_after_breach" | "sla_first_reply_fulfilled" | "sla_first_reply_metric_started" | "sla_freezed_office_hours_ended" | "sla_freezed_snoozed" | "sla_next_reply_breached" | "sla_next_reply_completed_after_breach" | "sla_next_reply_fulfilled" | "sla_next_reply_metric_started" | "sla_removed_by_agent" | "sla_removed_by_system" | "sla_resolution_breached" | "sla_resolution_completed_after_breach" | "sla_resolution_fulfilled" | "sla_resolution_metric_started" | "sla_resolution_paused_resolved" | "sla_resolution_paused_waiting_on_customer" | "sla_resolution_resumed_customer_replied" | "sla_resolution_resumed_reopened" | "sla_resumed_office_hours_started" | "sla_resumed_snooze_cancelled" | "sla_resumed_snooze_expired" | "state_checkpoint" | "sub_session_created" | "sub_session_linked_by_agent" | "sub_session_linked_by_api" | "sub_session_linked_by_integration" | "sub_session_linked_by_system" | "sub_session_unlinked_by_agent" | "sub_session_unlinked_by_api" | "sub_session_unlinked_by_integration" | "sub_session_unlinked_by_system" | "sub_status_removed_by_agent" | "sub_status_removed_by_api" | "sub_status_removed_by_integration" | "sub_status_removed_by_system" | "sub_status_set_by_agent" | "sub_status_set_by_api" | "sub_status_set_by_integration" | "sub_status_set_by_system" | "system_reopened_session" | "tag_added_by_agent" | "tag_added_by_api" | "tag_added_by_integration" | "tag_added_by_system" | "tag_removed_by_agent" | "tag_removed_by_api" | "tag_removed_by_integration" | "tag_removed_by_system" | "team_assigned_by_integration" | "team_assigned_by_system" | "team_assigned_by_user" | "team_unassigned_by_integration" | "team_unassigned_by_system" | "team_unassigned_by_user" | "user_confirmed_the_session_resolved" | "workflow_message" | "workflow_note" | "workflow_triggered";
8666
8917
  extra_params?: {
8667
8918
  [key: string]: unknown;
8668
8919
  } | null;
@@ -9949,6 +10200,28 @@ export interface components {
9949
10200
  fit: null;
9950
10201
  previous_fit: number | null;
9951
10202
  };
10203
+ ContinueSequenceContactOutputDto: {
10204
+ /** @enum {string} */
10205
+ outcome: "resumed" | "nothing_to_continue" | "not_resumable" | "contact_not_found";
10206
+ contact_id: string | null;
10207
+ next_step_index: number | null;
10208
+ };
10209
+ ContactSequencesDto: {
10210
+ sequences: {
10211
+ /** Format: uuid */
10212
+ sequence_id: string;
10213
+ sequence_name: string;
10214
+ /** @enum {string} */
10215
+ sequence_status: "draft" | "active" | "paused";
10216
+ /** @enum {string} */
10217
+ status: "candidate" | "active" | "parked" | "exited" | "completed";
10218
+ exit_reason: ("replied" | "suppressed") | null;
10219
+ park_reason: ("needs_data" | "unsendable_person" | "template_broken") | null;
10220
+ next_step_index: number;
10221
+ /** Format: date-time */
10222
+ enrolled_at: string;
10223
+ }[];
10224
+ };
9952
10225
  MailboxHealthDto: {
9953
10226
  warmupStatus: string | null;
9954
10227
  inboxRate: number | null;
@@ -11626,7 +11899,7 @@ export interface components {
11626
11899
  } | ({
11627
11900
  /** @constant */
11628
11901
  success: true;
11629
- code?: string | "session_assigned_to_human_agent" | "response_cancelled" | "skipping_unuseful_response" | "duplicate_message_ignored" | "ai_response_skipped_by_workflow" | "ai_skipped_spam";
11902
+ code?: string | "session_assigned_to_human_agent" | "response_cancelled" | "skipping_unuseful_response" | "duplicate_message_ignored" | "ai_response_skipped_by_workflow" | "ai_skipped_spam" | "steered_into_live_turn" | "session_busy";
11630
11903
  autopilotResponse?: {
11631
11904
  /** @constant */
11632
11905
  type: "text";
@@ -11779,6 +12052,7 @@ export interface components {
11779
12052
  mightSolveUserIssue: boolean;
11780
12053
  };
11781
12054
  sessionIsHandedOff?: boolean;
12055
+ steeredIntoTurnId?: string;
11782
12056
  resolveArgs?: {
11783
12057
  /** @description Summary of the conversation with the user to be viewed by a human agent. */
11784
12058
  summary: string;
@@ -12083,6 +12357,10 @@ export interface components {
12083
12357
  * @description When the follow-up fires (UTC)
12084
12358
  */
12085
12359
  fire_at: string;
12360
+ repeat: {
12361
+ every_minutes: number;
12362
+ times: number;
12363
+ } | null;
12086
12364
  is_active: boolean;
12087
12365
  /** Format: date-time */
12088
12366
  created_at: string;
@@ -12340,6 +12618,11 @@ export interface components {
12340
12618
  channel: string;
12341
12619
  /** @description Whether the AI autopilot is enabled on this channel */
12342
12620
  autopilot_enabled: boolean;
12621
+ /**
12622
+ * @description AI agent version used on this channel
12623
+ * @enum {string}
12624
+ */
12625
+ ai_agent_version: "v1" | "v2";
12343
12626
  }[];
12344
12627
  };
12345
12628
  ProhibitedTopicsResponseDto: {
@@ -12525,6 +12808,87 @@ export interface components {
12525
12808
  /** Format: date-time */
12526
12809
  updated_at: string;
12527
12810
  };
12811
+ InboxViewDto: {
12812
+ /** Format: uuid */
12813
+ id: string;
12814
+ /** @description Name shown in the inbox view picker */
12815
+ name: string;
12816
+ /** @description The saved filter set. `null` when `advanced` is true — the view uses filters this API cannot express. */
12817
+ filters: {
12818
+ /** @description Date range filter on session creation time */
12819
+ date?: {
12820
+ /**
12821
+ * Format: date-time
12822
+ * @description Start date (ISO 8601)
12823
+ */
12824
+ from?: string;
12825
+ /**
12826
+ * Format: date-time
12827
+ * @description End date (ISO 8601)
12828
+ */
12829
+ to?: string;
12830
+ /**
12831
+ * @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
12832
+ * @enum {string}
12833
+ */
12834
+ preset?: "today" | "last_3_days" | "last_7_days";
12835
+ };
12836
+ /** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
12837
+ channels?: components["schemas"]["SessionChannel"][];
12838
+ /** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
12839
+ status?: number[];
12840
+ /** @description Filter by custom status ids (sessions whose `sub_status_id` is any of these). Ids come from GET /custom-statuses. An empty array applies no filter, like the other array filters here. */
12841
+ sub_status_ids?: string[];
12842
+ /** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
12843
+ ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
12844
+ /** @description Filter by customer sentiment (angry, happy, neutral) */
12845
+ sentiment?: ("angry" | "happy" | "neutral")[];
12846
+ /** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
12847
+ assignees?: (number | "$current_user")[];
12848
+ /** @description Filter by team/group IDs */
12849
+ team_ids?: string[];
12850
+ /** @description Filter by contact IDs */
12851
+ contact_ids?: string[];
12852
+ /** @description Filter by exact ticket number */
12853
+ ticket_number?: number;
12854
+ /** @description Filter by session language codes */
12855
+ language?: string[];
12856
+ /** @description Filter by tag names (sessions must have ALL specified tags) */
12857
+ tags?: string[];
12858
+ /**
12859
+ * @description Filter by who the session is waiting on
12860
+ * @enum {string}
12861
+ */
12862
+ waiting_on?: "customers" | "human_agents";
12863
+ /** @description Filter by session custom data (OR between objects, AND within each object) */
12864
+ custom_data?: {
12865
+ [key: string]: string;
12866
+ }[];
12867
+ } | null;
12868
+ /** @description True when the view was built in the dashboard with OR/exclude groups or filters outside this API's vocabulary. Its `filters` read back as null, and updating `filters` on it REPLACES the whole saved query with the simple set you send. */
12869
+ advanced: boolean;
12870
+ /** @description Sort field the view opens with */
12871
+ sort_by: ("last_message_at" | "created_at" | "sla_urgency") | null;
12872
+ /** @description Sort direction the view opens with */
12873
+ sort_order: ("asc" | "desc") | null;
12874
+ /** @description Field sessions are grouped by in the list, when the view groups them */
12875
+ group_by: ("channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id") | null;
12876
+ /** @description User ids the view is shared with. Empty (with no teams) means the whole org. */
12877
+ shared_with_user_ids: number[];
12878
+ /** @description Team ids the view is shared with. Empty (with no users) means the whole org. */
12879
+ shared_with_team_ids: string[];
12880
+ /** @enum {string} */
12881
+ visibility: "organization" | "personal" | "restricted";
12882
+ created_by_user_id: number;
12883
+ /** @description Whether the calling user may update this view */
12884
+ can_edit: boolean;
12885
+ /** @description Whether the calling user may delete this view */
12886
+ can_delete: boolean;
12887
+ /** Format: date-time */
12888
+ created_at: string;
12889
+ /** Format: date-time */
12890
+ updated_at: string;
12891
+ };
12528
12892
  WorkflowPublicResponseDto: {
12529
12893
  /** @description Version serial ID */
12530
12894
  id: number;
@@ -13395,6 +13759,7 @@ export interface components {
13395
13759
  DeleteCustomStatusOutput: {
13396
13760
  message: string;
13397
13761
  };
13762
+ ListInboxViewsOutput: components["schemas"]["InboxViewDto"][];
13398
13763
  ListWorkflowsOutput: components["schemas"]["WorkflowPublicResponseDto"][];
13399
13764
  DeleteWorkflowOutput: {
13400
13765
  success: boolean;
@@ -18959,6 +19324,136 @@ export interface operations {
18959
19324
  };
18960
19325
  };
18961
19326
  };
19327
+ listInboxViews: {
19328
+ parameters: {
19329
+ query?: never;
19330
+ header?: never;
19331
+ path?: never;
19332
+ cookie?: never;
19333
+ };
19334
+ requestBody?: never;
19335
+ responses: {
19336
+ /** @description Default Response */
19337
+ 200: {
19338
+ headers: {
19339
+ [name: string]: unknown;
19340
+ };
19341
+ content: {
19342
+ "application/json": components["schemas"]["ListInboxViewsOutput"];
19343
+ };
19344
+ };
19345
+ /** @description Internal Server Error */
19346
+ 500: {
19347
+ headers: {
19348
+ [name: string]: unknown;
19349
+ };
19350
+ content: {
19351
+ "application/json": components["schemas"]["ErrorDto"];
19352
+ };
19353
+ };
19354
+ };
19355
+ };
19356
+ createInboxView: {
19357
+ parameters: {
19358
+ query?: never;
19359
+ header?: never;
19360
+ path?: never;
19361
+ cookie?: never;
19362
+ };
19363
+ requestBody: {
19364
+ content: {
19365
+ "application/json": components["schemas"]["CreateInboxViewDto"];
19366
+ };
19367
+ };
19368
+ responses: {
19369
+ /** @description Default Response */
19370
+ 201: {
19371
+ headers: {
19372
+ [name: string]: unknown;
19373
+ };
19374
+ content: {
19375
+ "application/json": components["schemas"]["InboxViewDto"];
19376
+ };
19377
+ };
19378
+ /** @description Internal Server Error */
19379
+ 500: {
19380
+ headers: {
19381
+ [name: string]: unknown;
19382
+ };
19383
+ content: {
19384
+ "application/json": components["schemas"]["ErrorDto"];
19385
+ };
19386
+ };
19387
+ };
19388
+ };
19389
+ deleteInboxView: {
19390
+ parameters: {
19391
+ query?: never;
19392
+ header?: never;
19393
+ path: {
19394
+ /** @description The inbox view id */
19395
+ id: string;
19396
+ };
19397
+ cookie?: never;
19398
+ };
19399
+ requestBody?: never;
19400
+ responses: {
19401
+ /** @description Default Response */
19402
+ 200: {
19403
+ headers: {
19404
+ [name: string]: unknown;
19405
+ };
19406
+ content: {
19407
+ "application/json": components["schemas"]["GenericResponseDto"];
19408
+ };
19409
+ };
19410
+ /** @description Internal Server Error */
19411
+ 500: {
19412
+ headers: {
19413
+ [name: string]: unknown;
19414
+ };
19415
+ content: {
19416
+ "application/json": components["schemas"]["ErrorDto"];
19417
+ };
19418
+ };
19419
+ };
19420
+ };
19421
+ updateInboxView: {
19422
+ parameters: {
19423
+ query?: never;
19424
+ header?: never;
19425
+ path: {
19426
+ /** @description The inbox view id */
19427
+ id: string;
19428
+ };
19429
+ cookie?: never;
19430
+ };
19431
+ requestBody: {
19432
+ content: {
19433
+ "application/json": components["schemas"]["UpdateInboxViewDto"];
19434
+ };
19435
+ };
19436
+ responses: {
19437
+ /** @description Default Response */
19438
+ 200: {
19439
+ headers: {
19440
+ [name: string]: unknown;
19441
+ };
19442
+ content: {
19443
+ "application/json": components["schemas"]["InboxViewDto"];
19444
+ };
19445
+ };
19446
+ /** @description Internal Server Error */
19447
+ 500: {
19448
+ headers: {
19449
+ [name: string]: unknown;
19450
+ };
19451
+ content: {
19452
+ "application/json": components["schemas"]["ErrorDto"];
19453
+ };
19454
+ };
19455
+ };
19456
+ };
18962
19457
  listWorkflowDefinitions: {
18963
19458
  parameters: {
18964
19459
  query?: never;
@@ -21338,6 +21833,72 @@ export interface operations {
21338
21833
  };
21339
21834
  };
21340
21835
  };
21836
+ continueSequenceContact: {
21837
+ parameters: {
21838
+ query?: never;
21839
+ header?: never;
21840
+ path: {
21841
+ /** @description The unique identifier of the sequence */
21842
+ sequenceId: string;
21843
+ /** @description The person's contact id (from enroll results or the people list) */
21844
+ contactId: string;
21845
+ };
21846
+ cookie?: never;
21847
+ };
21848
+ requestBody?: never;
21849
+ responses: {
21850
+ /** @description Default Response */
21851
+ 201: {
21852
+ headers: {
21853
+ [name: string]: unknown;
21854
+ };
21855
+ content: {
21856
+ "application/json": components["schemas"]["ContinueSequenceContactOutputDto"];
21857
+ };
21858
+ };
21859
+ /** @description Internal Server Error */
21860
+ 500: {
21861
+ headers: {
21862
+ [name: string]: unknown;
21863
+ };
21864
+ content: {
21865
+ "application/json": components["schemas"]["ErrorDto"];
21866
+ };
21867
+ };
21868
+ };
21869
+ };
21870
+ listContactSequences: {
21871
+ parameters: {
21872
+ query?: never;
21873
+ header?: never;
21874
+ path: {
21875
+ /** @description The person's contact id */
21876
+ contactId: string;
21877
+ };
21878
+ cookie?: never;
21879
+ };
21880
+ requestBody?: never;
21881
+ responses: {
21882
+ /** @description Default Response */
21883
+ 200: {
21884
+ headers: {
21885
+ [name: string]: unknown;
21886
+ };
21887
+ content: {
21888
+ "application/json": components["schemas"]["ContactSequencesDto"];
21889
+ };
21890
+ };
21891
+ /** @description Internal Server Error */
21892
+ 500: {
21893
+ headers: {
21894
+ [name: string]: unknown;
21895
+ };
21896
+ content: {
21897
+ "application/json": components["schemas"]["ErrorDto"];
21898
+ };
21899
+ };
21900
+ };
21901
+ };
21341
21902
  exitSequenceContact: {
21342
21903
  parameters: {
21343
21904
  query?: never;