@opencx/mcp 1.15.14 → 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
@@ -184,7 +184,7 @@ export interface paths {
184
184
  };
185
185
  /**
186
186
  * List availability statuses
187
- * @description List the organization's defined availability statuses (excluding deleted ones), ordered as shown in the dashboard. The hardcoded 'online' and 'offline' shortcuts are not listed — they are always applicable via the special field of applyUserAvailabilityStatus.
187
+ * @description List the organization's defined availability statuses (excluding deleted ones), ordered as shown in the dashboard. Each status carries its availability_type (whether applying it sets the user online or offline) and its display color. The hardcoded 'online' and 'offline' shortcuts are not listed — they are always applicable via the special field of applyUserAvailabilityStatus.
188
188
  */
189
189
  get: operations["listAvailabilityStatuses"];
190
190
  put?: never;
@@ -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;
@@ -4676,6 +4797,74 @@ export interface paths {
4676
4797
  patch?: never;
4677
4798
  trace?: never;
4678
4799
  };
4800
+ "/salesforce/ai-reply-templates": {
4801
+ parameters: {
4802
+ query?: never;
4803
+ header?: never;
4804
+ path?: never;
4805
+ cookie?: never;
4806
+ };
4807
+ /**
4808
+ * List AI reply templates
4809
+ * @description List the AI agent's reply templates for the organization (Salesforce v2 integration only): greeting/signature HTML rendered around or below the AI's autopilot Case emails, with one default and optional per-session auto-selection rules.
4810
+ */
4811
+ get: operations["listSalesforceAiReplyTemplates"];
4812
+ put?: never;
4813
+ /**
4814
+ * Create an AI reply template
4815
+ * @description Create a reply template (Salesforce v2 integration only). The organization's first template becomes the default automatically; `is_default: true` on a later one moves the default atomically. Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once. Optional `rules` (ANDed attribute/tag conditions) make the template pick itself for matching sessions; the first matching rule-bearing template in creation order wins, otherwise the default.
4816
+ */
4817
+ post: operations["createSalesforceAiReplyTemplate"];
4818
+ delete?: never;
4819
+ options?: never;
4820
+ head?: never;
4821
+ patch?: never;
4822
+ trace?: never;
4823
+ };
4824
+ "/salesforce/ai-reply-templates/{id}": {
4825
+ parameters: {
4826
+ query?: never;
4827
+ header?: never;
4828
+ path?: never;
4829
+ cookie?: never;
4830
+ };
4831
+ get?: never;
4832
+ put?: never;
4833
+ post?: never;
4834
+ /**
4835
+ * Delete an AI reply template
4836
+ * @description Permanently delete a reply template. Deleting the default leaves the organization without one (the AI replies plain) until another template is made default.
4837
+ */
4838
+ delete: operations["deleteSalesforceAiReplyTemplate"];
4839
+ options?: never;
4840
+ head?: never;
4841
+ /**
4842
+ * Update an AI reply template
4843
+ * @description Partially update a reply template: name, template_html, is_default (true moves the default onto it), rules (null clears them). Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once.
4844
+ */
4845
+ patch: operations["updateSalesforceAiReplyTemplate"];
4846
+ trace?: never;
4847
+ };
4848
+ "/salesforce/ai-reply-templates/preview": {
4849
+ parameters: {
4850
+ query?: never;
4851
+ header?: never;
4852
+ path?: never;
4853
+ cookie?: never;
4854
+ };
4855
+ get?: never;
4856
+ put?: never;
4857
+ /**
4858
+ * Preview an AI reply template
4859
+ * @description Render a template (saved or not) exactly as the AI agent would send it, against a real session of the organization: the session with `session_number`, else the most recent Salesforce-linked session, else an empty context. Returns the rendered HTML and text, the session used, and the variables that came out empty. Requires the write scope because it resolves real contact data.
4860
+ */
4861
+ post: operations["previewSalesforceAiReplyTemplate"];
4862
+ delete?: never;
4863
+ options?: never;
4864
+ head?: never;
4865
+ patch?: never;
4866
+ trace?: never;
4867
+ };
4679
4868
  "/companion/notify-team": {
4680
4869
  parameters: {
4681
4870
  query?: never;
@@ -4929,7 +5118,7 @@ export type webhooks = Record<string, never>;
4929
5118
  export interface components {
4930
5119
  schemas: {
4931
5120
  /** @enum {string} */
4932
- 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";
4933
5122
  DefaultOfficeHoursInputDto: {
4934
5123
  /** @description IANA timezone for the default schedule (e.g. "America/New_York", "Europe/London", "Asia/Tokyo") */
4935
5124
  iana_timezone: string;
@@ -5060,6 +5249,38 @@ export interface components {
5060
5249
  /** @enum {string} */
5061
5250
  support_assignment_strategy?: "least-busy" | "round-robin" | "unassigned";
5062
5251
  };
5252
+ SalesforceReplyTemplateRules: {
5253
+ conditions: ({
5254
+ /** @constant */
5255
+ type: "attribute";
5256
+ key: string;
5257
+ /** @enum {string} */
5258
+ op: "exists" | "not_exists" | "eq" | "neq" | "contains";
5259
+ value?: string;
5260
+ } | {
5261
+ /** @constant */
5262
+ type: "tag";
5263
+ /** @enum {string} */
5264
+ op: "has" | "not_has";
5265
+ value: string;
5266
+ })[];
5267
+ };
5268
+ CreateSalesforceAiReplyTemplateDto: {
5269
+ name: string;
5270
+ template_html: string;
5271
+ is_default?: boolean;
5272
+ rules?: components["schemas"]["SalesforceReplyTemplateRules"] | null;
5273
+ };
5274
+ UpdateSalesforceAiReplyTemplateDto: {
5275
+ name?: string;
5276
+ template_html?: string;
5277
+ is_default?: boolean;
5278
+ rules?: components["schemas"]["SalesforceReplyTemplateRules"] | null;
5279
+ };
5280
+ PreviewSalesforceAiReplyTemplateDto: {
5281
+ template_html: string;
5282
+ session_number?: number;
5283
+ };
5063
5284
  CreateVocCategoryDto: {
5064
5285
  name: string;
5065
5286
  description?: string | null;
@@ -5218,12 +5439,23 @@ export interface components {
5218
5439
  }[];
5219
5440
  })[];
5220
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
+ };
5221
5451
  UpsertCompanyDto: {
5222
5452
  external_id: string;
5223
5453
  name?: string;
5224
5454
  custom_data?: {
5225
5455
  [key: string]: string | number | boolean | null;
5226
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;
5227
5459
  };
5228
5460
  BulkLinkContactsDto: {
5229
5461
  links: {
@@ -5246,6 +5478,10 @@ export interface components {
5246
5478
  LinkContactCompanyDto: {
5247
5479
  external_id: string;
5248
5480
  };
5481
+ SetCompanyOwnerDto: {
5482
+ /** @description The teammate who owns this account. Null leaves the company unowned. */
5483
+ owner: components["schemas"]["CompanyOwnerInput"] | null;
5484
+ };
5249
5485
  MakeOutboundCallDto: {
5250
5486
  phoneAgentId: string;
5251
5487
  contact: {
@@ -6169,6 +6405,22 @@ export interface components {
6169
6405
  phone_number: string;
6170
6406
  })[];
6171
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
+ };
6172
6424
  CreateTrainingPublicDto: {
6173
6425
  /** @description The scenario title or trigger phrase */
6174
6426
  title: string;
@@ -6266,7 +6518,7 @@ export interface components {
6266
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.
6267
6519
  * @enum {string}
6268
6520
  */
6269
- 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";
6270
6522
  /** @description Trigger-specific configuration (e.g. cron expression for cron-trigger) */
6271
6523
  trigger_configuration?: unknown | null;
6272
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). */
@@ -6283,7 +6535,7 @@ export interface components {
6283
6535
  * @description New trigger type
6284
6536
  * @enum {string}
6285
6537
  */
6286
- 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";
6287
6539
  /** @description New trigger configuration */
6288
6540
  trigger_configuration?: unknown | null;
6289
6541
  /** @description New workflow step/block definitions (replaces existing blocks) */
@@ -6296,7 +6548,7 @@ export interface components {
6296
6548
  * @description Trigger type to validate against
6297
6549
  * @enum {string}
6298
6550
  */
6299
- 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";
6300
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. */
6301
6553
  trigger_configuration?: unknown | null;
6302
6554
  /** @description Workflow blocks to validate */
@@ -6309,7 +6561,7 @@ export interface components {
6309
6561
  * @description Trigger type whose payload shape this synthetic payload should match
6310
6562
  * @enum {string}
6311
6563
  */
6312
- 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";
6313
6565
  payload: unknown;
6314
6566
  };
6315
6567
  };
@@ -6468,6 +6720,19 @@ export interface components {
6468
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. */
6469
6721
  expires_in_hours?: number;
6470
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
+ };
6471
6736
  CreateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
6472
6737
  UpdateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
6473
6738
  CreateMacroInput: {
@@ -7021,6 +7286,7 @@ export interface components {
7021
7286
  custom_data?: {
7022
7287
  [key: string]: unknown;
7023
7288
  } | null;
7289
+ assist_mode?: boolean;
7024
7290
  } | {
7025
7291
  actionCalls?: {
7026
7292
  action: {
@@ -7064,6 +7330,7 @@ export interface components {
7064
7330
  [key: string]: unknown;
7065
7331
  } | null;
7066
7332
  whatsapp_template_request?: unknown | null;
7333
+ assist_mode?: boolean;
7067
7334
  whatsapp_template_snapshot?: unknown | null;
7068
7335
  rule_violation_reflections?: {
7069
7336
  rule_name: string;
@@ -7221,6 +7488,16 @@ export interface components {
7221
7488
  name: string;
7222
7489
  group_ids: string[];
7223
7490
  sort_order: number;
7491
+ /**
7492
+ * @description What applying the status does to the agent: 'online' turns main availability on with the status's teams; 'offline' turns main availability and every support team off (e.g. a Break status)
7493
+ * @enum {string}
7494
+ */
7495
+ availability_type: "offline" | "online";
7496
+ /**
7497
+ * @description Display color for the status dot across the dashboard
7498
+ * @enum {string}
7499
+ */
7500
+ color: "blue" | "gray" | "green" | "orange" | "red";
7224
7501
  /** Format: date-time */
7225
7502
  created_at: string;
7226
7503
  /** Format: date-time */
@@ -7260,24 +7537,49 @@ export interface components {
7260
7537
  status_id: string;
7261
7538
  /** @description Name of the applied availability status */
7262
7539
  name: string;
7540
+ /**
7541
+ * @description Whether the applied status sets the agent online or offline
7542
+ * @enum {string}
7543
+ */
7544
+ availability_type: "offline" | "online";
7545
+ /**
7546
+ * @description Display color configured on the applied status
7547
+ * @enum {string}
7548
+ */
7549
+ color: "blue" | "gray" | "green" | "orange" | "red";
7263
7550
  } | {
7264
7551
  /**
7265
7552
  * @description Main availability on and available on every support team
7266
7553
  * @constant
7267
7554
  */
7268
7555
  kind: "online";
7556
+ /**
7557
+ * @description Always 'green' — the fixed color of the derived online state
7558
+ * @enum {string}
7559
+ */
7560
+ color: "blue" | "gray" | "green" | "orange" | "red";
7269
7561
  } | {
7270
7562
  /**
7271
7563
  * @description Main availability off
7272
7564
  * @constant
7273
7565
  */
7274
7566
  kind: "offline";
7567
+ /**
7568
+ * @description Always 'gray' — the fixed color of the derived offline state
7569
+ * @enum {string}
7570
+ */
7571
+ color: "blue" | "gray" | "green" | "orange" | "red";
7275
7572
  } | {
7276
7573
  /**
7277
7574
  * @description Main availability on but only available on some support teams
7278
7575
  * @constant
7279
7576
  */
7280
7577
  kind: "mixed";
7578
+ /**
7579
+ * @description Always 'green' — mixed is an online-related state
7580
+ * @enum {string}
7581
+ */
7582
+ color: "blue" | "gray" | "green" | "orange" | "red";
7281
7583
  /** @description Support teams the user is currently available on */
7282
7584
  available_teams: {
7283
7585
  id: string;
@@ -7322,6 +7624,27 @@ export interface components {
7322
7624
  /** Format: date-time */
7323
7625
  updated_at: string;
7324
7626
  };
7627
+ SalesforceAiReplyTemplateDto: {
7628
+ /** Format: uuid */
7629
+ id: string;
7630
+ name: string;
7631
+ template_html: string;
7632
+ is_default: boolean;
7633
+ rules: components["schemas"]["SalesforceReplyTemplateRules"] | null;
7634
+ /** Format: date-time */
7635
+ created_at: string;
7636
+ /** Format: date-time */
7637
+ updated_at: string;
7638
+ };
7639
+ SalesforceAiReplyTemplatesListDto: {
7640
+ templates: components["schemas"]["SalesforceAiReplyTemplateDto"][];
7641
+ };
7642
+ SalesforceAiReplyTemplatePreviewDto: {
7643
+ html: string;
7644
+ text: string;
7645
+ session_number: number | null;
7646
+ missing_variables: string[];
7647
+ };
7325
7648
  VersionHistoryItemDto: {
7326
7649
  /** Format: uuid */
7327
7650
  id: string;
@@ -7388,6 +7711,13 @@ export interface components {
7388
7711
  customDataKeys?: string[];
7389
7712
  }[];
7390
7713
  };
7714
+ CompanyAgentOwner: {
7715
+ /** @description The teammate’s OpenCX user id */
7716
+ id: number;
7717
+ name: string;
7718
+ /** Format: email */
7719
+ email: string;
7720
+ };
7391
7721
  Company: {
7392
7722
  /** Format: uuid */
7393
7723
  id: string;
@@ -7397,6 +7727,8 @@ export interface components {
7397
7727
  custom_data: {
7398
7728
  [key: string]: string | number | boolean;
7399
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;
7400
7732
  /** @description ISO 8601 timestamp of when the company was created */
7401
7733
  created_at: string;
7402
7734
  /** @description ISO 8601 timestamp of when the company was last updated */
@@ -8747,6 +9079,23 @@ export interface components {
8747
9079
  description: string | null;
8748
9080
  }[];
8749
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
+ };
8750
9099
  SaveContactOutput: {
8751
9100
  /** Format: uuid */
8752
9101
  id?: string;
@@ -9052,6 +9401,7 @@ export interface components {
9052
9401
  [key: string]: unknown;
9053
9402
  } | null;
9054
9403
  whatsapp_template_request?: unknown | null;
9404
+ assist_mode?: boolean;
9055
9405
  whatsapp_template_snapshot?: unknown | null;
9056
9406
  rule_violation_reflections?: {
9057
9407
  rule_name: string;
@@ -9904,6 +10254,17 @@ export interface components {
9904
10254
  CreateSequenceOutput: {
9905
10255
  id: string;
9906
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
+ };
9907
10268
  TagPublicResponseDto: {
9908
10269
  /** @description The tag name (unique per org) */
9909
10270
  tag_name: string;
@@ -10532,6 +10893,16 @@ export interface components {
10532
10893
  page: number;
10533
10894
  has_more: boolean;
10534
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
+ };
10535
10906
  GetCustomDomainsOutput: {
10536
10907
  domainName: string;
10537
10908
  domainNameVerificationStatus: string | null;
@@ -12027,6 +12398,41 @@ export interface operations {
12027
12398
  };
12028
12399
  };
12029
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
+ };
12030
12436
  listContacts: {
12031
12437
  parameters: {
12032
12438
  query?: {
@@ -13789,16 +14195,157 @@ export interface operations {
13789
14195
  };
13790
14196
  };
13791
14197
  };
13792
- sendEmail: {
14198
+ listOutboundBlocklist: {
13793
14199
  parameters: {
13794
- query?: never;
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
+ };
13795
14207
  header?: never;
13796
14208
  path?: never;
13797
14209
  cookie?: never;
13798
14210
  };
13799
- requestBody: {
13800
- content: {
13801
- "application/json": components["schemas"]["SendEmailInput"];
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
+ };
14339
+ sendEmail: {
14340
+ parameters: {
14341
+ query?: never;
14342
+ header?: never;
14343
+ path?: never;
14344
+ cookie?: never;
14345
+ };
14346
+ requestBody: {
14347
+ content: {
14348
+ "application/json": components["schemas"]["SendEmailInput"];
13802
14349
  };
13803
14350
  };
13804
14351
  responses: {
@@ -16683,6 +17230,42 @@ export interface operations {
16683
17230
  };
16684
17231
  };
16685
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
+ };
16686
17269
  getTeams: {
16687
17270
  parameters: {
16688
17271
  query?: never;
@@ -19477,7 +20060,7 @@ export interface operations {
19477
20060
  timezone?: string;
19478
20061
  policy_id?: string;
19479
20062
  team_id?: string;
19480
- 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";
19481
20064
  agent_id?: number;
19482
20065
  };
19483
20066
  header?: never;
@@ -19514,7 +20097,7 @@ export interface operations {
19514
20097
  timezone?: string;
19515
20098
  policy_id?: string;
19516
20099
  team_id?: string;
19517
- 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";
19518
20101
  agent_id?: number;
19519
20102
  group_by: "policy" | "team" | "agent" | "channel";
19520
20103
  };
@@ -19552,7 +20135,7 @@ export interface operations {
19552
20135
  timezone?: string;
19553
20136
  policy_id?: string;
19554
20137
  team_id?: string;
19555
- 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";
19556
20139
  agent_id?: number;
19557
20140
  granularity?: "day" | "week";
19558
20141
  };
@@ -19590,7 +20173,7 @@ export interface operations {
19590
20173
  timezone?: string;
19591
20174
  policy_id?: string;
19592
20175
  team_id?: string;
19593
- 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";
19594
20177
  agent_id?: number;
19595
20178
  };
19596
20179
  header?: never;
@@ -19913,6 +20496,167 @@ export interface operations {
19913
20496
  };
19914
20497
  };
19915
20498
  };
20499
+ listSalesforceAiReplyTemplates: {
20500
+ parameters: {
20501
+ query?: never;
20502
+ header?: never;
20503
+ path?: never;
20504
+ cookie?: never;
20505
+ };
20506
+ requestBody?: never;
20507
+ responses: {
20508
+ /** @description Default Response */
20509
+ 200: {
20510
+ headers: {
20511
+ [name: string]: unknown;
20512
+ };
20513
+ content: {
20514
+ "application/json": components["schemas"]["SalesforceAiReplyTemplatesListDto"];
20515
+ };
20516
+ };
20517
+ /** @description Internal Server Error */
20518
+ 500: {
20519
+ headers: {
20520
+ [name: string]: unknown;
20521
+ };
20522
+ content: {
20523
+ "application/json": components["schemas"]["ErrorDto"];
20524
+ };
20525
+ };
20526
+ };
20527
+ };
20528
+ createSalesforceAiReplyTemplate: {
20529
+ parameters: {
20530
+ query?: never;
20531
+ header?: never;
20532
+ path?: never;
20533
+ cookie?: never;
20534
+ };
20535
+ requestBody: {
20536
+ content: {
20537
+ "application/json": components["schemas"]["CreateSalesforceAiReplyTemplateDto"];
20538
+ };
20539
+ };
20540
+ responses: {
20541
+ /** @description Default Response */
20542
+ 201: {
20543
+ headers: {
20544
+ [name: string]: unknown;
20545
+ };
20546
+ content: {
20547
+ "application/json": components["schemas"]["SalesforceAiReplyTemplateDto"];
20548
+ };
20549
+ };
20550
+ /** @description Internal Server Error */
20551
+ 500: {
20552
+ headers: {
20553
+ [name: string]: unknown;
20554
+ };
20555
+ content: {
20556
+ "application/json": components["schemas"]["ErrorDto"];
20557
+ };
20558
+ };
20559
+ };
20560
+ };
20561
+ deleteSalesforceAiReplyTemplate: {
20562
+ parameters: {
20563
+ query?: never;
20564
+ header?: never;
20565
+ path: {
20566
+ /** @description Template ID */
20567
+ id: string;
20568
+ };
20569
+ cookie?: never;
20570
+ };
20571
+ requestBody?: never;
20572
+ responses: {
20573
+ /** @description Default Response */
20574
+ 204: {
20575
+ headers: {
20576
+ [name: string]: unknown;
20577
+ };
20578
+ content?: never;
20579
+ };
20580
+ /** @description Internal Server Error */
20581
+ 500: {
20582
+ headers: {
20583
+ [name: string]: unknown;
20584
+ };
20585
+ content: {
20586
+ "application/json": components["schemas"]["ErrorDto"];
20587
+ };
20588
+ };
20589
+ };
20590
+ };
20591
+ updateSalesforceAiReplyTemplate: {
20592
+ parameters: {
20593
+ query?: never;
20594
+ header?: never;
20595
+ path: {
20596
+ /** @description Template ID */
20597
+ id: string;
20598
+ };
20599
+ cookie?: never;
20600
+ };
20601
+ requestBody: {
20602
+ content: {
20603
+ "application/json": components["schemas"]["UpdateSalesforceAiReplyTemplateDto"];
20604
+ };
20605
+ };
20606
+ responses: {
20607
+ /** @description Default Response */
20608
+ 200: {
20609
+ headers: {
20610
+ [name: string]: unknown;
20611
+ };
20612
+ content: {
20613
+ "application/json": components["schemas"]["SalesforceAiReplyTemplateDto"];
20614
+ };
20615
+ };
20616
+ /** @description Internal Server Error */
20617
+ 500: {
20618
+ headers: {
20619
+ [name: string]: unknown;
20620
+ };
20621
+ content: {
20622
+ "application/json": components["schemas"]["ErrorDto"];
20623
+ };
20624
+ };
20625
+ };
20626
+ };
20627
+ previewSalesforceAiReplyTemplate: {
20628
+ parameters: {
20629
+ query?: never;
20630
+ header?: never;
20631
+ path?: never;
20632
+ cookie?: never;
20633
+ };
20634
+ requestBody: {
20635
+ content: {
20636
+ "application/json": components["schemas"]["PreviewSalesforceAiReplyTemplateDto"];
20637
+ };
20638
+ };
20639
+ responses: {
20640
+ /** @description Default Response */
20641
+ 200: {
20642
+ headers: {
20643
+ [name: string]: unknown;
20644
+ };
20645
+ content: {
20646
+ "application/json": components["schemas"]["SalesforceAiReplyTemplatePreviewDto"];
20647
+ };
20648
+ };
20649
+ /** @description Internal Server Error */
20650
+ 500: {
20651
+ headers: {
20652
+ [name: string]: unknown;
20653
+ };
20654
+ content: {
20655
+ "application/json": components["schemas"]["ErrorDto"];
20656
+ };
20657
+ };
20658
+ };
20659
+ };
19916
20660
  coworkerNotifyTeam: {
19917
20661
  parameters: {
19918
20662
  query?: never;