@opencx/mcp 1.15.15 → 1.15.16

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
@@ -653,6 +653,26 @@ export interface paths {
653
653
  patch?: never;
654
654
  trace?: never;
655
655
  };
656
+ "/companies/{external_id}/owner": {
657
+ parameters: {
658
+ query?: never;
659
+ header?: never;
660
+ path?: never;
661
+ cookie?: never;
662
+ };
663
+ get?: never;
664
+ /**
665
+ * Set a company's owning teammate
666
+ * @description Assigns the teammate who owns this account, named either by `agent_owner_id` or by `agent_owner_email` — exactly one. The email is matched case-insensitively against this organization's members, so a sync can assign straight from the address it already holds. Send either field as null to clear the owner. A teammate who is not a member of this organization is rejected, as is the AI user.
667
+ */
668
+ put: operations["setCompanyOwner"];
669
+ post?: never;
670
+ delete?: never;
671
+ options?: never;
672
+ head?: never;
673
+ patch?: never;
674
+ trace?: never;
675
+ };
656
676
  "/contacts": {
657
677
  parameters: {
658
678
  query?: never;
@@ -1496,6 +1516,62 @@ export interface paths {
1496
1516
  patch?: never;
1497
1517
  trace?: never;
1498
1518
  };
1519
+ "/outbound/blocklist": {
1520
+ parameters: {
1521
+ query?: never;
1522
+ header?: never;
1523
+ path?: never;
1524
+ cookie?: never;
1525
+ };
1526
+ /**
1527
+ * List blocked addresses
1528
+ * @description Lists the do-not-contact list, newest first. Includes both entries you added and entries recorded when people opted out themselves — check `source` to tell them apart.
1529
+ */
1530
+ get: operations["listOutboundBlocklist"];
1531
+ put?: never;
1532
+ /**
1533
+ * Block an address from outbound contact
1534
+ * @description Adds a phone number, email address, or WhatsApp user id to the do-not-contact list. Sequences will not contact a blocked address on any channel.
1535
+ *
1536
+ * Safe to call repeatedly — blocking an address that is already blocked updates the existing entry instead of failing, so retrying a queued job is harmless.
1537
+ *
1538
+ * Blocking only ever strengthens: re-blocking an address never shortens an existing expiry and never makes a permanent block temporary. Use the unblock endpoint to lift a block.
1539
+ */
1540
+ post: operations["addToOutboundBlocklist"];
1541
+ /**
1542
+ * Unblock an address
1543
+ * @description Removes an address from the do-not-contact list so it can be contacted again.
1544
+ *
1545
+ * By default this only removes entries added through this API. Two kinds are left in place: entries created when someone opted out themselves, and entries that cover a single channel. Both are reported as `skipped` — pass `include_provider_entries=true` to remove them too.
1546
+ */
1547
+ delete: operations["removeFromOutboundBlocklist"];
1548
+ options?: never;
1549
+ head?: never;
1550
+ patch?: never;
1551
+ trace?: never;
1552
+ };
1553
+ "/outbound/blocklist/check": {
1554
+ parameters: {
1555
+ query?: never;
1556
+ header?: never;
1557
+ path?: never;
1558
+ cookie?: never;
1559
+ };
1560
+ /**
1561
+ * Check whether an address is blocked
1562
+ * @description Tells you whether an address is currently on the do-not-contact list. Expired entries do not count as blocked.
1563
+ *
1564
+ * `blocked` means the address is suppressed on at least one channel — check the `channel` on each returned entry to see which. Note this answers for the address you ask about: someone reachable on WhatsApp without a known phone number is a separate identity, so block the WhatsApp user id too if you have it.
1565
+ */
1566
+ get: operations["checkOutboundBlocklist"];
1567
+ put?: never;
1568
+ post?: never;
1569
+ delete?: never;
1570
+ options?: never;
1571
+ head?: never;
1572
+ patch?: never;
1573
+ trace?: never;
1574
+ };
1499
1575
  "/email": {
1500
1576
  parameters: {
1501
1577
  query?: never;
@@ -2803,6 +2879,51 @@ export interface paths {
2803
2879
  patch?: never;
2804
2880
  trace?: never;
2805
2881
  };
2882
+ "/sequences/{sequence_id}/contacts/exit": {
2883
+ parameters: {
2884
+ query?: never;
2885
+ header?: never;
2886
+ path?: never;
2887
+ cookie?: never;
2888
+ };
2889
+ get?: never;
2890
+ put?: never;
2891
+ /**
2892
+ * Remove a contact from a sequence
2893
+ * @description
2894
+ * Stop a sequence for one contact. No further steps are scheduled for them; the rest of the sequence
2895
+ * carries on for everyone else.
2896
+ *
2897
+ * One caveat worth building around: a step whose batch has already been picked up for sending may
2898
+ * still go out, and batches can sit waiting for the sequence's send window to open. So a message sent
2899
+ * within minutes of the removal — or the next morning, if the window closed overnight — is possible.
2900
+ * Everything after that stops.
2901
+ *
2902
+ * Identify the person by `contact_id`, `email`, or `phone_number` — whichever your system holds.
2903
+ * Send exactly one. Phone numbers match regardless of formatting.
2904
+ *
2905
+ * Removal works on the person, not on one record. Whichever identifier you send, any other contact
2906
+ * record sharing that person's phone number is removed too — duplicates are common and leaving one
2907
+ * behind would keep calling them. The flip side: if two people genuinely share a line, such as a
2908
+ * switchboard or a family phone, both are removed. `contact_ids` in the response lists exactly which
2909
+ * records were affected, so check it if that matters to you.
2910
+ *
2911
+ * Removal ends their current enrollment. Adding the same contact to the sequence again later enrolls
2912
+ * them afresh, starting from the first step — it does not resume where they stopped. It applies only
2913
+ * to this sequence, so to stop contacting someone everywhere, add them to the outbound blocklist
2914
+ * instead.
2915
+ *
2916
+ * Safe to retry: a contact who is already out of the sequence comes back as `not_enrolled` rather
2917
+ * than an error.
2918
+ *
2919
+ */
2920
+ post: operations["exitContactFromSequence"];
2921
+ delete?: never;
2922
+ options?: never;
2923
+ head?: never;
2924
+ patch?: never;
2925
+ trace?: never;
2926
+ };
2806
2927
  "/teams": {
2807
2928
  parameters: {
2808
2929
  query?: never;
@@ -4997,7 +5118,7 @@ export type webhooks = Record<string, never>;
4997
5118
  export interface components {
4998
5119
  schemas: {
4999
5120
  /** @enum {string} */
5000
- SessionChannel: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
5121
+ SessionChannel: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
5001
5122
  DefaultOfficeHoursInputDto: {
5002
5123
  /** @description IANA timezone for the default schedule (e.g. "America/New_York", "Europe/London", "Asia/Tokyo") */
5003
5124
  iana_timezone: string;
@@ -5318,12 +5439,23 @@ export interface components {
5318
5439
  }[];
5319
5440
  })[];
5320
5441
  };
5442
+ CompanyOwnerInput: {
5443
+ /** @description OpenCX user id of the owning teammate */
5444
+ id?: number;
5445
+ /**
5446
+ * Format: email
5447
+ * @description Email of the owning teammate, matched case-insensitively against this organization’s members
5448
+ */
5449
+ email?: string;
5450
+ };
5321
5451
  UpsertCompanyDto: {
5322
5452
  external_id: string;
5323
5453
  name?: string;
5324
5454
  custom_data?: {
5325
5455
  [key: string]: string | number | boolean | null;
5326
5456
  };
5457
+ /** @description Set the owning teammate while creating or updating. Omit to leave ownership unchanged; null clears it. */
5458
+ owner?: components["schemas"]["CompanyOwnerInput"] | null;
5327
5459
  };
5328
5460
  BulkLinkContactsDto: {
5329
5461
  links: {
@@ -5346,6 +5478,10 @@ export interface components {
5346
5478
  LinkContactCompanyDto: {
5347
5479
  external_id: string;
5348
5480
  };
5481
+ SetCompanyOwnerDto: {
5482
+ /** @description The teammate who owns this account. Null leaves the company unowned. */
5483
+ owner: components["schemas"]["CompanyOwnerInput"] | null;
5484
+ };
5349
5485
  MakeOutboundCallDto: {
5350
5486
  phoneAgentId: string;
5351
5487
  contact: {
@@ -6269,6 +6405,22 @@ export interface components {
6269
6405
  phone_number: string;
6270
6406
  })[];
6271
6407
  };
6408
+ ExitContactFromSequenceDto: {
6409
+ /**
6410
+ * Format: uuid
6411
+ * @description The contact to remove.
6412
+ */
6413
+ contact_id?: string;
6414
+ /**
6415
+ * Format: email
6416
+ * @description Email address of the contact to remove.
6417
+ */
6418
+ email?: string;
6419
+ /** @description Phone number of the contact to remove. Formatting does not matter. */
6420
+ phone_number?: string;
6421
+ /** @description Why they are being removed. Recorded against the removal for your own records. */
6422
+ reason?: string;
6423
+ };
6272
6424
  CreateTrainingPublicDto: {
6273
6425
  /** @description The scenario title or trigger phrase */
6274
6426
  title: string;
@@ -6366,7 +6518,7 @@ export interface components {
6366
6518
  * @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.
6367
6519
  * @enum {string}
6368
6520
  */
6369
- 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" | "ticket-team-changed" | "session-updated" | "appfigures-review-received";
6521
+ 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" | "ticket-team-changed" | "session-updated";
6370
6522
  /** @description Trigger-specific configuration (e.g. cron expression for cron-trigger) */
6371
6523
  trigger_configuration?: unknown | null;
6372
6524
  /** @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). */
@@ -6383,7 +6535,7 @@ export interface components {
6383
6535
  * @description New trigger type
6384
6536
  * @enum {string}
6385
6537
  */
6386
- 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" | "ticket-team-changed" | "session-updated" | "appfigures-review-received";
6538
+ 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" | "ticket-team-changed" | "session-updated";
6387
6539
  /** @description New trigger configuration */
6388
6540
  trigger_configuration?: unknown | null;
6389
6541
  /** @description New workflow step/block definitions (replaces existing blocks) */
@@ -6396,7 +6548,7 @@ export interface components {
6396
6548
  * @description Trigger type to validate against
6397
6549
  * @enum {string}
6398
6550
  */
6399
- 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" | "ticket-team-changed" | "session-updated" | "appfigures-review-received";
6551
+ 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" | "ticket-team-changed" | "session-updated";
6400
6552
  /** @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. */
6401
6553
  trigger_configuration?: unknown | null;
6402
6554
  /** @description Workflow blocks to validate */
@@ -6409,7 +6561,7 @@ export interface components {
6409
6561
  * @description Trigger type whose payload shape this synthetic payload should match
6410
6562
  * @enum {string}
6411
6563
  */
6412
- 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" | "ticket-team-changed" | "session-updated" | "appfigures-review-received";
6564
+ 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" | "ticket-team-changed" | "session-updated";
6413
6565
  payload: unknown;
6414
6566
  };
6415
6567
  };
@@ -6568,6 +6720,19 @@ export interface components {
6568
6720
  /** @description Lift the block automatically after this many hours (max 8760). Omit for a permanent block. Automated callers should always set this: a shared or carrier-grade NAT address fronts many people, and a permanent block on one bans all of them. */
6569
6721
  expires_in_hours?: number;
6570
6722
  };
6723
+ AddToOutboundBlocklistDto: {
6724
+ /**
6725
+ * @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden.
6726
+ * @enum {string}
6727
+ */
6728
+ identity_type: "phone" | "email" | "whatsapp_user_id";
6729
+ /** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
6730
+ identity_value: string;
6731
+ /** @description Why this address is being blocked. Stored for your own auditing. */
6732
+ reason?: string;
6733
+ /** @description When the block should lift automatically, as an ISO 8601 timestamp. Must be in the future. Omit for a permanent block. */
6734
+ expires_at?: string | null;
6735
+ };
6571
6736
  CreateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
6572
6737
  UpdateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
6573
6738
  CreateMacroInput: {
@@ -7121,6 +7286,7 @@ export interface components {
7121
7286
  custom_data?: {
7122
7287
  [key: string]: unknown;
7123
7288
  } | null;
7289
+ assist_mode?: boolean;
7124
7290
  } | {
7125
7291
  actionCalls?: {
7126
7292
  action: {
@@ -7164,6 +7330,7 @@ export interface components {
7164
7330
  [key: string]: unknown;
7165
7331
  } | null;
7166
7332
  whatsapp_template_request?: unknown | null;
7333
+ assist_mode?: boolean;
7167
7334
  whatsapp_template_snapshot?: unknown | null;
7168
7335
  rule_violation_reflections?: {
7169
7336
  rule_name: string;
@@ -7544,6 +7711,13 @@ export interface components {
7544
7711
  customDataKeys?: string[];
7545
7712
  }[];
7546
7713
  };
7714
+ CompanyAgentOwner: {
7715
+ /** @description The teammate’s OpenCX user id */
7716
+ id: number;
7717
+ name: string;
7718
+ /** Format: email */
7719
+ email: string;
7720
+ };
7547
7721
  Company: {
7548
7722
  /** Format: uuid */
7549
7723
  id: string;
@@ -7553,6 +7727,8 @@ export interface components {
7553
7727
  custom_data: {
7554
7728
  [key: string]: string | number | boolean;
7555
7729
  } | null;
7730
+ /** @description The teammate who owns this account. Null when nobody owns it, which is the ordinary state. */
7731
+ agent_owner: components["schemas"]["CompanyAgentOwner"] | null;
7556
7732
  /** @description ISO 8601 timestamp of when the company was created */
7557
7733
  created_at: string;
7558
7734
  /** @description ISO 8601 timestamp of when the company was last updated */
@@ -8903,6 +9079,23 @@ export interface components {
8903
9079
  description: string | null;
8904
9080
  }[];
8905
9081
  };
9082
+ OutboundBlocklistEntryDto: {
9083
+ id: string;
9084
+ /** @description "phone", "email" or "whatsapp_user_id". */
9085
+ identity_type: string;
9086
+ /** @description The address, as we stored it after normalizing. */
9087
+ identity_value: string;
9088
+ /** @description The channel this entry covers. Null means every channel — that is what entries added through this API always are. A specific channel appears when someone opted out of that channel alone. */
9089
+ channel: string | null;
9090
+ /** @description Why the address was blocked. */
9091
+ reason: string;
9092
+ /** @description Where the entry came from. "api" is one you added. Anything else was recorded when the person opted out themselves, and is not removable by default. */
9093
+ source: string | null;
9094
+ /** Format: date-time */
9095
+ created_at: string;
9096
+ /** @description When the block lifts automatically. Null means it never does. */
9097
+ expires_at: string | null;
9098
+ };
8906
9099
  SaveContactOutput: {
8907
9100
  /** Format: uuid */
8908
9101
  id?: string;
@@ -9208,6 +9401,7 @@ export interface components {
9208
9401
  [key: string]: unknown;
9209
9402
  } | null;
9210
9403
  whatsapp_template_request?: unknown | null;
9404
+ assist_mode?: boolean;
9211
9405
  whatsapp_template_snapshot?: unknown | null;
9212
9406
  rule_violation_reflections?: {
9213
9407
  rule_name: string;
@@ -10060,6 +10254,17 @@ export interface components {
10060
10254
  CreateSequenceOutput: {
10061
10255
  id: string;
10062
10256
  };
10257
+ ExitContactFromSequenceOutputDto: {
10258
+ /**
10259
+ * @description `exited` — the contact was removed and no further steps will be scheduled for them. `not_enrolled` — the contact is not currently in this sequence (already removed, already replied, or finished it), so nothing changed. `contact_not_found` — no contact in your workspace matches that identifier, which usually means the email or phone number does not match the one we hold.
10260
+ * @enum {string}
10261
+ */
10262
+ outcome: "exited" | "not_enrolled" | "contact_not_found";
10263
+ /** @description How many enrollments were stopped. A continuous sequence can hold the same person more than once, and all of them are stopped together. */
10264
+ exited_enrollments: number;
10265
+ /** @description The contact records the identifier matched, for your own reconciliation. */
10266
+ contact_ids: string[];
10267
+ };
10063
10268
  TagPublicResponseDto: {
10064
10269
  /** @description The tag name (unique per org) */
10065
10270
  tag_name: string;
@@ -10688,6 +10893,16 @@ export interface components {
10688
10893
  page: number;
10689
10894
  has_more: boolean;
10690
10895
  };
10896
+ RemoveFromOutboundBlocklistOutputDto: {
10897
+ /** @description How many entries were removed. */
10898
+ removed: number;
10899
+ /** @description How many matching entries were left in place because they were not added through this API. When this is above zero the address is still blocked — retry with include_provider_entries=true if you intend to remove those too. */
10900
+ skipped: number;
10901
+ };
10902
+ CheckOutboundBlocklistOutputDto: {
10903
+ blocked: boolean;
10904
+ entries: components["schemas"]["OutboundBlocklistEntryDto"][];
10905
+ };
10691
10906
  GetCustomDomainsOutput: {
10692
10907
  domainName: string;
10693
10908
  domainNameVerificationStatus: string | null;
@@ -12183,6 +12398,41 @@ export interface operations {
12183
12398
  };
12184
12399
  };
12185
12400
  };
12401
+ setCompanyOwner: {
12402
+ parameters: {
12403
+ query?: never;
12404
+ header?: never;
12405
+ path: {
12406
+ external_id: string;
12407
+ };
12408
+ cookie?: never;
12409
+ };
12410
+ requestBody: {
12411
+ content: {
12412
+ "application/json": components["schemas"]["SetCompanyOwnerDto"];
12413
+ };
12414
+ };
12415
+ responses: {
12416
+ /** @description Default Response */
12417
+ 200: {
12418
+ headers: {
12419
+ [name: string]: unknown;
12420
+ };
12421
+ content: {
12422
+ "application/json": components["schemas"]["Company"];
12423
+ };
12424
+ };
12425
+ /** @description Internal Server Error */
12426
+ 500: {
12427
+ headers: {
12428
+ [name: string]: unknown;
12429
+ };
12430
+ content: {
12431
+ "application/json": components["schemas"]["ErrorDto"];
12432
+ };
12433
+ };
12434
+ };
12435
+ };
12186
12436
  listContacts: {
12187
12437
  parameters: {
12188
12438
  query?: {
@@ -13945,6 +14195,147 @@ export interface operations {
13945
14195
  };
13946
14196
  };
13947
14197
  };
14198
+ listOutboundBlocklist: {
14199
+ parameters: {
14200
+ query?: {
14201
+ /** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
14202
+ identity_type?: "phone" | "email" | "whatsapp_user_id";
14203
+ /** @description Cursor from a previous response. */
14204
+ cursor?: string;
14205
+ limit?: number;
14206
+ };
14207
+ header?: never;
14208
+ path?: never;
14209
+ cookie?: never;
14210
+ };
14211
+ requestBody?: never;
14212
+ responses: {
14213
+ /** @description Default Response */
14214
+ 200: {
14215
+ headers: {
14216
+ [name: string]: unknown;
14217
+ };
14218
+ content: {
14219
+ "application/json": {
14220
+ items: components["schemas"]["OutboundBlocklistEntryDto"][];
14221
+ next: string | null;
14222
+ };
14223
+ };
14224
+ };
14225
+ /** @description Internal Server Error */
14226
+ 500: {
14227
+ headers: {
14228
+ [name: string]: unknown;
14229
+ };
14230
+ content: {
14231
+ "application/json": components["schemas"]["ErrorDto"];
14232
+ };
14233
+ };
14234
+ };
14235
+ };
14236
+ addToOutboundBlocklist: {
14237
+ parameters: {
14238
+ query?: never;
14239
+ header?: never;
14240
+ path?: never;
14241
+ cookie?: never;
14242
+ };
14243
+ requestBody: {
14244
+ content: {
14245
+ "application/json": components["schemas"]["AddToOutboundBlocklistDto"];
14246
+ };
14247
+ };
14248
+ responses: {
14249
+ /** @description Default Response */
14250
+ 201: {
14251
+ headers: {
14252
+ [name: string]: unknown;
14253
+ };
14254
+ content: {
14255
+ "application/json": components["schemas"]["OutboundBlocklistEntryDto"];
14256
+ };
14257
+ };
14258
+ /** @description Internal Server Error */
14259
+ 500: {
14260
+ headers: {
14261
+ [name: string]: unknown;
14262
+ };
14263
+ content: {
14264
+ "application/json": components["schemas"]["ErrorDto"];
14265
+ };
14266
+ };
14267
+ };
14268
+ };
14269
+ removeFromOutboundBlocklist: {
14270
+ parameters: {
14271
+ query: {
14272
+ /** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
14273
+ identity_type: "phone" | "email" | "whatsapp_user_id";
14274
+ /** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
14275
+ identity_value: string;
14276
+ /** @description Send "true" to also remove entries recorded when the person opted out themselves, and entries scoped to a single channel. Accepts "true" or "false"; defaults to "false". */
14277
+ include_provider_entries?: string;
14278
+ };
14279
+ header?: never;
14280
+ path?: never;
14281
+ cookie?: never;
14282
+ };
14283
+ requestBody?: never;
14284
+ responses: {
14285
+ /** @description Default Response */
14286
+ 200: {
14287
+ headers: {
14288
+ [name: string]: unknown;
14289
+ };
14290
+ content: {
14291
+ "application/json": components["schemas"]["RemoveFromOutboundBlocklistOutputDto"];
14292
+ };
14293
+ };
14294
+ /** @description Internal Server Error */
14295
+ 500: {
14296
+ headers: {
14297
+ [name: string]: unknown;
14298
+ };
14299
+ content: {
14300
+ "application/json": components["schemas"]["ErrorDto"];
14301
+ };
14302
+ };
14303
+ };
14304
+ };
14305
+ checkOutboundBlocklist: {
14306
+ parameters: {
14307
+ query: {
14308
+ /** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
14309
+ identity_type: "phone" | "email" | "whatsapp_user_id";
14310
+ /** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
14311
+ identity_value: string;
14312
+ };
14313
+ header?: never;
14314
+ path?: never;
14315
+ cookie?: never;
14316
+ };
14317
+ requestBody?: never;
14318
+ responses: {
14319
+ /** @description Default Response */
14320
+ 200: {
14321
+ headers: {
14322
+ [name: string]: unknown;
14323
+ };
14324
+ content: {
14325
+ "application/json": components["schemas"]["CheckOutboundBlocklistOutputDto"];
14326
+ };
14327
+ };
14328
+ /** @description Internal Server Error */
14329
+ 500: {
14330
+ headers: {
14331
+ [name: string]: unknown;
14332
+ };
14333
+ content: {
14334
+ "application/json": components["schemas"]["ErrorDto"];
14335
+ };
14336
+ };
14337
+ };
14338
+ };
13948
14339
  sendEmail: {
13949
14340
  parameters: {
13950
14341
  query?: never;
@@ -16839,6 +17230,42 @@ export interface operations {
16839
17230
  };
16840
17231
  };
16841
17232
  };
17233
+ exitContactFromSequence: {
17234
+ parameters: {
17235
+ query?: never;
17236
+ header?: never;
17237
+ path: {
17238
+ /** @description The unique identifier of the sequence */
17239
+ sequence_id: string;
17240
+ };
17241
+ cookie?: never;
17242
+ };
17243
+ requestBody: {
17244
+ content: {
17245
+ "application/json": components["schemas"]["ExitContactFromSequenceDto"];
17246
+ };
17247
+ };
17248
+ responses: {
17249
+ /** @description Default Response */
17250
+ 201: {
17251
+ headers: {
17252
+ [name: string]: unknown;
17253
+ };
17254
+ content: {
17255
+ "application/json": components["schemas"]["ExitContactFromSequenceOutputDto"];
17256
+ };
17257
+ };
17258
+ /** @description Internal Server Error */
17259
+ 500: {
17260
+ headers: {
17261
+ [name: string]: unknown;
17262
+ };
17263
+ content: {
17264
+ "application/json": components["schemas"]["ErrorDto"];
17265
+ };
17266
+ };
17267
+ };
17268
+ };
16842
17269
  getTeams: {
16843
17270
  parameters: {
16844
17271
  query?: never;
@@ -19633,7 +20060,7 @@ export interface operations {
19633
20060
  timezone?: string;
19634
20061
  policy_id?: string;
19635
20062
  team_id?: string;
19636
- channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
20063
+ channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
19637
20064
  agent_id?: number;
19638
20065
  };
19639
20066
  header?: never;
@@ -19670,7 +20097,7 @@ export interface operations {
19670
20097
  timezone?: string;
19671
20098
  policy_id?: string;
19672
20099
  team_id?: string;
19673
- channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
20100
+ channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
19674
20101
  agent_id?: number;
19675
20102
  group_by: "policy" | "team" | "agent" | "channel";
19676
20103
  };
@@ -19708,7 +20135,7 @@ export interface operations {
19708
20135
  timezone?: string;
19709
20136
  policy_id?: string;
19710
20137
  team_id?: string;
19711
- channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
20138
+ channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
19712
20139
  agent_id?: number;
19713
20140
  granularity?: "day" | "week";
19714
20141
  };
@@ -19746,7 +20173,7 @@ export interface operations {
19746
20173
  timezone?: string;
19747
20174
  policy_id?: string;
19748
20175
  team_id?: string;
19749
- channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
20176
+ channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
19750
20177
  agent_id?: number;
19751
20178
  };
19752
20179
  header?: never;