@opencx/mcp 1.15.34 → 1.15.35

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
@@ -3310,7 +3310,7 @@ export interface paths {
3310
3310
  get?: never;
3311
3311
  /**
3312
3312
  * Replace the step list of a DRAFT sequence
3313
- * @description Full replace, drafts only — the authoring call in the enroll-first flow (create the shell, enroll and qualify a real audience, then author steps). On a launched sequence use editSequenceSteps instead; a live step list is never blind-replaced under people mid-journey.
3313
+ * @description Full replace, drafts only — the authoring call in the enroll-first flow (create the shell, enroll and qualify a real audience, then author steps). On a launched sequence use editSequenceSteps instead; a live step list is never blind-replaced under people mid-journey. The response is the sequence plus variable_coverage: for every source the steps bind, how many enrolled people have a value.
3314
3314
  */
3315
3315
  put: operations["setSequenceSteps"];
3316
3316
  post?: never;
@@ -3319,11 +3319,31 @@ export interface paths {
3319
3319
  head?: never;
3320
3320
  /**
3321
3321
  * Surgically edit steps — update content/delays, append, remove (any status)
3322
- * @description One transactional batch of typed edits. Execution order is fixed: removes (highest index first), then appends, then updates — indices address the array AFTER earlier phases of the same batch. Content/delay updates are allowed on any step (people already past it keep what they received); append is always allowed (completed people do not revive); remove is refused for any step somebody already reached. Any illegal edit rejects the whole batch, named by its position.
3322
+ * @description One transactional batch of typed edits. Execution order is fixed: removes (highest index first), then appends, then updates — indices address the array AFTER earlier phases of the same batch. Content/delay updates are allowed on any step (people already past it keep what they received); append is always allowed (completed people do not revive); remove is refused for any step somebody already reached. Any illegal edit rejects the whole batch, named by its position. The response is the sequence plus variable_coverage for every source the resulting steps bind.
3323
3323
  */
3324
3324
  patch: operations["editSequenceSteps"];
3325
3325
  trace?: never;
3326
3326
  };
3327
+ "/sequences/{sequenceId}/data-keys": {
3328
+ parameters: {
3329
+ query?: never;
3330
+ header?: never;
3331
+ path?: never;
3332
+ cookie?: never;
3333
+ };
3334
+ /**
3335
+ * List the attached-data keys a sequence's people carry
3336
+ * @description Every top-level key of the data attached to enrolled people (extra_data), with how many people in a bounded sample have a value at it. A key here is usable verbatim as a step variable's source. Read it to bind data you did not attach yourself, or to check that the keys you attached landed as spelled.
3337
+ */
3338
+ get: operations["listSequenceDataKeys"];
3339
+ put?: never;
3340
+ post?: never;
3341
+ delete?: never;
3342
+ options?: never;
3343
+ head?: never;
3344
+ patch?: never;
3345
+ trace?: never;
3346
+ };
3327
3347
  "/sequences/{sequenceId}/contacts": {
3328
3348
  parameters: {
3329
3349
  query?: never;
@@ -6450,6 +6470,33 @@ export interface components {
6450
6470
  /** @description Optional reason for redaction */
6451
6471
  reason?: string;
6452
6472
  };
6473
+ CreateWhatsAppTemplateDraftButtonDto: {
6474
+ /** @constant */
6475
+ type: "QUICK_REPLY";
6476
+ /** @description The label, 25 chars. */
6477
+ text: string;
6478
+ } | {
6479
+ /** @constant */
6480
+ type: "URL";
6481
+ /** @description The label, 25 chars. */
6482
+ text: string;
6483
+ /** @description Static, or ending in exactly one {{1}} for a per-message suffix (https://open.cx/track/{{1}}). A suffix button needs a step binding to send. */
6484
+ url: string;
6485
+ /** @description REQUIRED when the url ends in {{1}}: the full url with a realistic suffix, for review. Omit for a static url. */
6486
+ url_example?: string;
6487
+ } | {
6488
+ /** @constant */
6489
+ type: "PHONE_NUMBER";
6490
+ /** @description The label, 25 chars. */
6491
+ text: string;
6492
+ /** @description E.164, e.g. +962790000000. */
6493
+ phone_number: string;
6494
+ } | {
6495
+ /** @constant */
6496
+ type: "COPY_CODE";
6497
+ /** @description A sample coupon, 15 chars. The real code is bound per message on the step. */
6498
+ example: string;
6499
+ };
6453
6500
  CreateWhatsAppTemplateDraftDto: {
6454
6501
  name: string;
6455
6502
  /** @description BCP-47 code, e.g. en_US, ar, ar_SA. */
@@ -6469,6 +6516,13 @@ export interface components {
6469
6516
  /** @description Plain text only, no placeholders. */
6470
6517
  header_text?: string;
6471
6518
  footer_text?: string;
6519
+ /**
6520
+ * @description In display order. Quick replies must sit together — all before or all after the other kinds (Meta groups them). Up to 10.
6521
+ * @default []
6522
+ */
6523
+ buttons: components["schemas"]["CreateWhatsAppTemplateDraftButtonDto"][];
6524
+ /** @description Message validity period in seconds. Authentication: 30–900, Utility: 30–43200, Marketing: 43200–2592000. -1 = explicit 30-day TTL (authentication/utility only). */
6525
+ message_send_ttl_seconds?: number;
6472
6526
  /** @description Only needed when the org has more than one WABA; otherwise resolved. */
6473
6527
  waba_id?: string;
6474
6528
  };
@@ -6573,9 +6627,26 @@ export interface components {
6573
6627
  template_language: string;
6574
6628
  variables: {
6575
6629
  [key: string]: {
6576
- /** @enum {string} */
6577
- source: "display_name" | "phone" | "email";
6630
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6631
+ source: string;
6578
6632
  fallback?: string;
6633
+ /**
6634
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6635
+ * @enum {string}
6636
+ */
6637
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6638
+ };
6639
+ };
6640
+ buttons?: {
6641
+ [key: string]: {
6642
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6643
+ source: string;
6644
+ fallback?: string;
6645
+ /**
6646
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6647
+ * @enum {string}
6648
+ */
6649
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6579
6650
  };
6580
6651
  };
6581
6652
  };
@@ -6589,9 +6660,14 @@ export interface components {
6589
6660
  extra_instructions?: string;
6590
6661
  variables?: {
6591
6662
  [key: string]: {
6592
- /** @enum {string} */
6593
- source: "display_name" | "phone" | "email";
6663
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6664
+ source: string;
6594
6665
  fallback?: string;
6666
+ /**
6667
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6668
+ * @enum {string}
6669
+ */
6670
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6595
6671
  };
6596
6672
  };
6597
6673
  };
@@ -6608,9 +6684,14 @@ export interface components {
6608
6684
  /** @default {} */
6609
6685
  variables: {
6610
6686
  [key: string]: {
6611
- /** @enum {string} */
6612
- source: "display_name" | "phone" | "email";
6687
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6688
+ source: string;
6613
6689
  fallback?: string;
6690
+ /**
6691
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6692
+ * @enum {string}
6693
+ */
6694
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6614
6695
  };
6615
6696
  };
6616
6697
  };
@@ -6702,9 +6783,26 @@ export interface components {
6702
6783
  template_language: string;
6703
6784
  variables: {
6704
6785
  [key: string]: {
6705
- /** @enum {string} */
6706
- source: "display_name" | "phone" | "email";
6786
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6787
+ source: string;
6707
6788
  fallback?: string;
6789
+ /**
6790
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6791
+ * @enum {string}
6792
+ */
6793
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6794
+ };
6795
+ };
6796
+ buttons?: {
6797
+ [key: string]: {
6798
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6799
+ source: string;
6800
+ fallback?: string;
6801
+ /**
6802
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6803
+ * @enum {string}
6804
+ */
6805
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6708
6806
  };
6709
6807
  };
6710
6808
  };
@@ -6718,9 +6816,14 @@ export interface components {
6718
6816
  extra_instructions?: string;
6719
6817
  variables?: {
6720
6818
  [key: string]: {
6721
- /** @enum {string} */
6722
- source: "display_name" | "phone" | "email";
6819
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6820
+ source: string;
6723
6821
  fallback?: string;
6822
+ /**
6823
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6824
+ * @enum {string}
6825
+ */
6826
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6724
6827
  };
6725
6828
  };
6726
6829
  };
@@ -6737,9 +6840,14 @@ export interface components {
6737
6840
  /** @default {} */
6738
6841
  variables: {
6739
6842
  [key: string]: {
6740
- /** @enum {string} */
6741
- source: "display_name" | "phone" | "email";
6843
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6844
+ source: string;
6742
6845
  fallback?: string;
6846
+ /**
6847
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6848
+ * @enum {string}
6849
+ */
6850
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6743
6851
  };
6744
6852
  };
6745
6853
  };
@@ -6759,9 +6867,26 @@ export interface components {
6759
6867
  template_language: string;
6760
6868
  variables: {
6761
6869
  [key: string]: {
6762
- /** @enum {string} */
6763
- source: "display_name" | "phone" | "email";
6870
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6871
+ source: string;
6764
6872
  fallback?: string;
6873
+ /**
6874
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6875
+ * @enum {string}
6876
+ */
6877
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6878
+ };
6879
+ };
6880
+ buttons?: {
6881
+ [key: string]: {
6882
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6883
+ source: string;
6884
+ fallback?: string;
6885
+ /**
6886
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6887
+ * @enum {string}
6888
+ */
6889
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6765
6890
  };
6766
6891
  };
6767
6892
  } | {
@@ -6770,9 +6895,14 @@ export interface components {
6770
6895
  extra_instructions?: string;
6771
6896
  variables?: {
6772
6897
  [key: string]: {
6773
- /** @enum {string} */
6774
- source: "display_name" | "phone" | "email";
6898
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6899
+ source: string;
6775
6900
  fallback?: string;
6901
+ /**
6902
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6903
+ * @enum {string}
6904
+ */
6905
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6776
6906
  };
6777
6907
  };
6778
6908
  } | {
@@ -6784,9 +6914,14 @@ export interface components {
6784
6914
  /** @default {} */
6785
6915
  variables: {
6786
6916
  [key: string]: {
6787
- /** @enum {string} */
6788
- source: "display_name" | "phone" | "email";
6917
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6918
+ source: string;
6789
6919
  fallback?: string;
6920
+ /**
6921
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6922
+ * @enum {string}
6923
+ */
6924
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6790
6925
  };
6791
6926
  };
6792
6927
  };
@@ -6806,9 +6941,26 @@ export interface components {
6806
6941
  template_language: string;
6807
6942
  variables: {
6808
6943
  [key: string]: {
6809
- /** @enum {string} */
6810
- source: "display_name" | "phone" | "email";
6944
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6945
+ source: string;
6811
6946
  fallback?: string;
6947
+ /**
6948
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6949
+ * @enum {string}
6950
+ */
6951
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6952
+ };
6953
+ };
6954
+ buttons?: {
6955
+ [key: string]: {
6956
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6957
+ source: string;
6958
+ fallback?: string;
6959
+ /**
6960
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6961
+ * @enum {string}
6962
+ */
6963
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6812
6964
  };
6813
6965
  };
6814
6966
  };
@@ -6822,9 +6974,14 @@ export interface components {
6822
6974
  extra_instructions?: string;
6823
6975
  variables?: {
6824
6976
  [key: string]: {
6825
- /** @enum {string} */
6826
- source: "display_name" | "phone" | "email";
6977
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
6978
+ source: string;
6827
6979
  fallback?: string;
6980
+ /**
6981
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
6982
+ * @enum {string}
6983
+ */
6984
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6828
6985
  };
6829
6986
  };
6830
6987
  };
@@ -6841,9 +6998,14 @@ export interface components {
6841
6998
  /** @default {} */
6842
6999
  variables: {
6843
7000
  [key: string]: {
6844
- /** @enum {string} */
6845
- source: "display_name" | "phone" | "email";
7001
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
7002
+ source: string;
6846
7003
  fallback?: string;
7004
+ /**
7005
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
7006
+ * @enum {string}
7007
+ */
7008
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
6847
7009
  };
6848
7010
  };
6849
7011
  };
@@ -8403,6 +8565,7 @@ export interface components {
8403
8565
  url: string;
8404
8566
  openai_file_id?: string;
8405
8567
  email_inline?: boolean;
8568
+ content_id?: string;
8406
8569
  };
8407
8570
  WhatsAppTemplateDto: {
8408
8571
  id: string;
@@ -8649,6 +8812,41 @@ export interface components {
8649
8812
  /** @constant */
8650
8813
  type: "prohibited_topic";
8651
8814
  topic: string;
8815
+ decisionEvidence?: ({
8816
+ /** @constant */
8817
+ origin: "prohibited_topic_precheck";
8818
+ /** @constant */
8819
+ decision: "stop_response";
8820
+ topic: {
8821
+ id: string | null;
8822
+ index: number;
8823
+ name: string;
8824
+ description: string | null;
8825
+ };
8826
+ /** @enum {string} */
8827
+ behavior: "always_handoff" | "never_handoff" | "handoff_within_hours_only";
8828
+ /** @enum {string} */
8829
+ handoff: "callback_completed" | "callback_unavailable" | "suppressed";
8830
+ within_office_hours: boolean | null;
8831
+ } | {
8832
+ /** @enum {string} */
8833
+ origin: "handoff_tool" | "reply_handoff_guard";
8834
+ /** @constant */
8835
+ decision: "handoff";
8836
+ /** @enum {string} */
8837
+ outcome: "callback_completed" | "callback_failed";
8838
+ explanation: string;
8839
+ sources: {
8840
+ ref_id: string;
8841
+ /** @enum {string} */
8842
+ type: "knowledge" | "instruction";
8843
+ id: string;
8844
+ title: string;
8845
+ chunk_index?: number;
8846
+ /** @enum {string} */
8847
+ source_format?: "html" | "knowledge" | "text";
8848
+ }[];
8849
+ })[];
8652
8850
  } | {
8653
8851
  /** @constant */
8654
8852
  type: "response_skipped";
@@ -8761,6 +8959,7 @@ export interface components {
8761
8959
  };
8762
8960
  };
8763
8961
  actionCalls?: {
8962
+ callId?: string;
8764
8963
  action: {
8765
8964
  name: string;
8766
8965
  id: string;
@@ -8835,6 +9034,7 @@ export interface components {
8835
9034
  assist_mode?: boolean;
8836
9035
  } | {
8837
9036
  actionCalls?: {
9037
+ callId?: string;
8838
9038
  action: {
8839
9039
  name: string;
8840
9040
  id: string;
@@ -9342,6 +9542,82 @@ export interface components {
9342
9542
  */
9343
9543
  outcome: "unlinked" | "unchanged";
9344
9544
  };
9545
+ SalesforceCrmContactDetailsDto: {
9546
+ id: string;
9547
+ salesforce_record_id: string;
9548
+ /** @enum {string} */
9549
+ record_type: "Contact" | "Lead";
9550
+ email?: string;
9551
+ phone?: string;
9552
+ first_name?: string;
9553
+ last_name?: string;
9554
+ company?: string;
9555
+ salesforce_data: unknown;
9556
+ cached_at: string;
9557
+ salesforce_link: string;
9558
+ };
9559
+ SalesforceCrmAccountDetailsDto: {
9560
+ salesforce_account_id: string;
9561
+ name?: string;
9562
+ website?: string;
9563
+ industry?: string;
9564
+ number_of_employees?: string;
9565
+ annual_revenue?: string;
9566
+ billing_city?: string;
9567
+ billing_state?: string;
9568
+ billing_country?: string;
9569
+ salesforce_data: unknown;
9570
+ salesforce_link: string;
9571
+ };
9572
+ SalesforceCrmOpportunityDetailsDto: {
9573
+ salesforce_opportunity_id: string;
9574
+ name?: string;
9575
+ stage_name?: string;
9576
+ amount?: string;
9577
+ close_date?: string;
9578
+ is_closed?: boolean;
9579
+ is_won?: boolean;
9580
+ salesforce_data: unknown;
9581
+ salesforce_link: string;
9582
+ };
9583
+ SalesforceCrmCaseDetailsDto: {
9584
+ salesforce_case_id: string;
9585
+ case_number?: string;
9586
+ subject?: string;
9587
+ status?: string;
9588
+ priority?: string;
9589
+ origin?: string;
9590
+ created_date?: string;
9591
+ last_modified_date?: string;
9592
+ salesforce_data: unknown;
9593
+ salesforce_link: string;
9594
+ };
9595
+ SalesforceCrmCustomObjectRecordDto: {
9596
+ id: string;
9597
+ values: {
9598
+ [key: string]: string | number | boolean | null;
9599
+ };
9600
+ salesforce_link: string;
9601
+ };
9602
+ SalesforceCrmCustomObjectSectionDto: {
9603
+ object_api_name: string;
9604
+ label: string;
9605
+ records?: components["schemas"]["SalesforceCrmCustomObjectRecordDto"][];
9606
+ };
9607
+ ConsumerSalesforceCrmContactResponseDto: {
9608
+ consumer_id: string;
9609
+ consumer_email?: string;
9610
+ consumer_phone?: string;
9611
+ salesforce_contact?: components["schemas"]["SalesforceCrmContactDetailsDto"];
9612
+ accounts?: components["schemas"]["SalesforceCrmAccountDetailsDto"][];
9613
+ opportunities?: components["schemas"]["SalesforceCrmOpportunityDetailsDto"][];
9614
+ previous_cases?: components["schemas"]["SalesforceCrmCaseDetailsDto"][];
9615
+ custom_objects?: components["schemas"]["SalesforceCrmCustomObjectSectionDto"][];
9616
+ found_in_salesforce: boolean;
9617
+ /** @enum {string} */
9618
+ lookup_status: "found" | "none" | "failed";
9619
+ message: string;
9620
+ };
9345
9621
  CsatSettingsResponseDto: {
9346
9622
  /** @description The ID of the organization */
9347
9623
  organization_id: string;
@@ -9621,7 +9897,7 @@ export interface components {
9621
9897
  };
9622
9898
  PhoneAgentVoiceDto: {
9623
9899
  /** @enum {string} */
9624
- provider: "elevenlabs" | "cartesia";
9900
+ provider: "elevenlabs" | "cartesia" | "vapi";
9625
9901
  voice_id: string;
9626
9902
  name: string;
9627
9903
  labels: {
@@ -9916,6 +10192,16 @@ export interface components {
9916
10192
  /** Format: date-time */
9917
10193
  updated_at: string;
9918
10194
  };
10195
+ WhatsAppTemplateButtonOptionDto: {
10196
+ /** @description Meta's 0-based button index — the key a step's `buttons` binding uses. */
10197
+ index: number;
10198
+ /** @enum {string} */
10199
+ type: "QUICK_REPLY" | "URL" | "PHONE_NUMBER" | "COPY_CODE" | "FLOW" | "MPM";
10200
+ /** @description The label. Null for a copy-code or product button. */
10201
+ text: string | null;
10202
+ /** @description True for a URL button whose link ends in a placeholder (the suffix) and for a copy-code button (the coupon). Each such index needs a binding in the step content; the rest take none. */
10203
+ needs_value: boolean;
10204
+ };
9919
10205
  WhatsAppTemplateOptionDto: {
9920
10206
  id: string;
9921
10207
  /** @description The value a sequence step's content.template_name takes. */
@@ -9937,7 +10223,7 @@ export interface components {
9937
10223
  header_format: ("TEXT" | "IMAGE" | "DOCUMENT" | "VIDEO" | "LOCATION") | null;
9938
10224
  header_text: string | null;
9939
10225
  footer_text: string | null;
9940
- button_labels: string[];
10226
+ buttons: components["schemas"]["WhatsAppTemplateButtonOptionDto"][];
9941
10227
  /** @description Why Meta rejected it, when it did. Null otherwise. */
9942
10228
  rejected_reason: string | null;
9943
10229
  };
@@ -9972,6 +10258,8 @@ export interface components {
9972
10258
  */
9973
10259
  category: "UTILITY" | "MARKETING" | "AUTHENTICATION";
9974
10260
  variables: string[];
10261
+ /** @description Which indexes take a step binding — see needs_value. */
10262
+ buttons: components["schemas"]["WhatsAppTemplateButtonOptionDto"][];
9975
10263
  /** @description Effectively always false on create: Meta review takes minutes to hours. Reference it from a step now — a pending template does not block launch; sends start the moment it clears. */
9976
10264
  sendable: boolean;
9977
10265
  };
@@ -10037,10 +10325,26 @@ export interface components {
10037
10325
  subject: string;
10038
10326
  html: string;
10039
10327
  text: string;
10328
+ /** @description Each substituted variable with its value and whether it came from the person's data or the binding's fallback. Empty when there is nothing to attribute: a personalization (a hand-written snapshot) or a send record (what went out, whole). */
10329
+ variables: {
10330
+ [key: string]: {
10331
+ value: string;
10332
+ /** @enum {string} */
10333
+ via: "data" | "fallback";
10334
+ };
10335
+ };
10040
10336
  } | {
10041
10337
  /** @constant */
10042
10338
  type: "voice_call";
10043
10339
  extra_instructions: string | null;
10340
+ /** @description Each substituted variable with its value and whether it came from the person's data or the binding's fallback. Empty when there is nothing to attribute: a personalization (a hand-written snapshot) or a send record (what went out, whole). */
10341
+ variables: {
10342
+ [key: string]: {
10343
+ value: string;
10344
+ /** @enum {string} */
10345
+ via: "data" | "fallback";
10346
+ };
10347
+ };
10044
10348
  } | {
10045
10349
  /** @constant */
10046
10350
  type: "whatsapp_template";
@@ -10049,6 +10353,9 @@ export interface components {
10049
10353
  values: {
10050
10354
  [key: string]: string;
10051
10355
  };
10356
+ via: {
10357
+ [key: string]: "data" | "fallback";
10358
+ };
10052
10359
  rendered_text: string | null;
10053
10360
  };
10054
10361
  } | {
@@ -10384,9 +10691,26 @@ export interface components {
10384
10691
  template_language: string;
10385
10692
  variables: {
10386
10693
  [key: string]: {
10387
- /** @enum {string} */
10388
- source: "display_name" | "phone" | "email";
10694
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10695
+ source: string;
10696
+ fallback?: string;
10697
+ /**
10698
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10699
+ * @enum {string}
10700
+ */
10701
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10702
+ };
10703
+ };
10704
+ buttons?: {
10705
+ [key: string]: {
10706
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10707
+ source: string;
10389
10708
  fallback?: string;
10709
+ /**
10710
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10711
+ * @enum {string}
10712
+ */
10713
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10390
10714
  };
10391
10715
  };
10392
10716
  };
@@ -10400,9 +10724,14 @@ export interface components {
10400
10724
  extra_instructions?: string;
10401
10725
  variables?: {
10402
10726
  [key: string]: {
10403
- /** @enum {string} */
10404
- source: "display_name" | "phone" | "email";
10727
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10728
+ source: string;
10405
10729
  fallback?: string;
10730
+ /**
10731
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10732
+ * @enum {string}
10733
+ */
10734
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10406
10735
  };
10407
10736
  };
10408
10737
  };
@@ -10419,9 +10748,14 @@ export interface components {
10419
10748
  /** @default {} */
10420
10749
  variables: {
10421
10750
  [key: string]: {
10422
- /** @enum {string} */
10423
- source: "display_name" | "phone" | "email";
10751
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10752
+ source: string;
10424
10753
  fallback?: string;
10754
+ /**
10755
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10756
+ * @enum {string}
10757
+ */
10758
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10425
10759
  };
10426
10760
  };
10427
10761
  };
@@ -10483,9 +10817,26 @@ export interface components {
10483
10817
  template_language: string;
10484
10818
  variables: {
10485
10819
  [key: string]: {
10486
- /** @enum {string} */
10487
- source: "display_name" | "phone" | "email";
10820
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10821
+ source: string;
10822
+ fallback?: string;
10823
+ /**
10824
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10825
+ * @enum {string}
10826
+ */
10827
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10828
+ };
10829
+ };
10830
+ buttons?: {
10831
+ [key: string]: {
10832
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10833
+ source: string;
10488
10834
  fallback?: string;
10835
+ /**
10836
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10837
+ * @enum {string}
10838
+ */
10839
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10489
10840
  };
10490
10841
  };
10491
10842
  };
@@ -10499,9 +10850,14 @@ export interface components {
10499
10850
  extra_instructions?: string;
10500
10851
  variables?: {
10501
10852
  [key: string]: {
10502
- /** @enum {string} */
10503
- source: "display_name" | "phone" | "email";
10853
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10854
+ source: string;
10504
10855
  fallback?: string;
10856
+ /**
10857
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10858
+ * @enum {string}
10859
+ */
10860
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10505
10861
  };
10506
10862
  };
10507
10863
  };
@@ -10518,9 +10874,14 @@ export interface components {
10518
10874
  /** @default {} */
10519
10875
  variables: {
10520
10876
  [key: string]: {
10521
- /** @enum {string} */
10522
- source: "display_name" | "phone" | "email";
10877
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
10878
+ source: string;
10523
10879
  fallback?: string;
10880
+ /**
10881
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
10882
+ * @enum {string}
10883
+ */
10884
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
10524
10885
  };
10525
10886
  };
10526
10887
  };
@@ -10746,6 +11107,165 @@ export interface components {
10746
11107
  /** @description Informational: present when the campaign has voice steps reaching a catalogued country. Show it before launching and pass regulatory_acknowledged: true when the user confirms — the launch itself never refuses over it. Null: nothing to show. */
10747
11108
  regulatory_notice: components["schemas"]["SequenceRegulatoryNoticeDto"] | null;
10748
11109
  };
11110
+ SequenceVariableCoverageDto: {
11111
+ /** @description True when the sequence holds more people than the sample these counts read. */
11112
+ sampled: boolean;
11113
+ /** @description People the counts were read over (first N by id). */
11114
+ sample_size: number;
11115
+ /** @description Enrolled people on the sequence. */
11116
+ total: number;
11117
+ /** @description Keyed by each binding's `source` — a recipient column or an attached-data key. */
11118
+ sources: {
11119
+ [key: string]: {
11120
+ /** @description People in the sample with a non-blank value. */
11121
+ present: number;
11122
+ /** @description People in the sample without one. */
11123
+ missing: number;
11124
+ };
11125
+ };
11126
+ };
11127
+ SequenceStepsWriteDto: {
11128
+ /** Format: uuid */
11129
+ id: string;
11130
+ /** Format: uuid */
11131
+ org_id: string;
11132
+ name: string;
11133
+ /** @enum {string} */
11134
+ status: "draft" | "active" | "paused";
11135
+ steps: ({
11136
+ /** @constant */
11137
+ channel: "whatsapp";
11138
+ content: {
11139
+ /** @constant */
11140
+ type: "whatsapp_template";
11141
+ template_name: string;
11142
+ template_language: string;
11143
+ variables: {
11144
+ [key: string]: {
11145
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
11146
+ source: string;
11147
+ fallback?: string;
11148
+ /**
11149
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
11150
+ * @enum {string}
11151
+ */
11152
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
11153
+ };
11154
+ };
11155
+ buttons?: {
11156
+ [key: string]: {
11157
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
11158
+ source: string;
11159
+ fallback?: string;
11160
+ /**
11161
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
11162
+ * @enum {string}
11163
+ */
11164
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
11165
+ };
11166
+ };
11167
+ };
11168
+ delay_minutes: number;
11169
+ } | {
11170
+ /** @constant */
11171
+ channel: "voice";
11172
+ content: {
11173
+ /** @constant */
11174
+ type: "voice_call";
11175
+ extra_instructions?: string;
11176
+ variables?: {
11177
+ [key: string]: {
11178
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
11179
+ source: string;
11180
+ fallback?: string;
11181
+ /**
11182
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
11183
+ * @enum {string}
11184
+ */
11185
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
11186
+ };
11187
+ };
11188
+ };
11189
+ delay_minutes: number;
11190
+ } | {
11191
+ /** @constant */
11192
+ channel: "email";
11193
+ content: {
11194
+ /** @constant */
11195
+ type: "email";
11196
+ subject: string;
11197
+ html: string;
11198
+ text: string;
11199
+ /** @default {} */
11200
+ variables: {
11201
+ [key: string]: {
11202
+ /** @description A recipient column ('display_name', 'phone', 'email') or the exact name of a key in the person's attached data (extra_data). Those three names always read the column — a key spelled the same is unreachable; any other string reads the attached data, matched verbatim as a top-level key. A missing or empty value falls to `fallback`, and with no fallback the person parks (needs_data). */
11203
+ source: string;
11204
+ fallback?: string;
11205
+ /**
11206
+ * @description Optional. Applies to attached-data sources only — ignored on the three columns. How to read the value: string, number, boolean, date, string[] or number[] — the same vocabulary as People-table columns. Absent: text and numbers pass through, anything else counts as missing. Declared: text is parsed where it is unambiguous ("250" as a number or a string, "true" as a boolean, an ISO-shaped date such as "2026-03-12" — other date spellings and epoch numbers are missing), a date renders as a plain day in the person's timezone, a list needs an actual list in the data and joins with commas, dropping items it cannot read, and a value that cannot be read as the declared type counts as missing.
11207
+ * @enum {string}
11208
+ */
11209
+ type?: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
11210
+ };
11211
+ };
11212
+ };
11213
+ delay_minutes: number;
11214
+ })[];
11215
+ settings: {
11216
+ block_active_elsewhere?: boolean;
11217
+ block_contacted_before?: boolean;
11218
+ respect_office_hours?: boolean;
11219
+ /** Format: uuid */
11220
+ office_hours_id?: string;
11221
+ };
11222
+ brief: string;
11223
+ reply_instructions: string;
11224
+ criteria: {
11225
+ must: {
11226
+ /** @description A few words naming this criterion, shown in the dashboard — "Recent invoicing complaint", "Business account". Not a sentence. */
11227
+ label: string;
11228
+ /** @description The full instruction the judge reads. Name the boundary explicitly — what counts and what does not. Never shown in the table. */
11229
+ text: string;
11230
+ }[];
11231
+ nice: {
11232
+ /** @description A few words naming this criterion, shown in the dashboard — "Recent invoicing complaint", "Business account". Not a sentence. */
11233
+ label: string;
11234
+ /** @description The full instruction the judge reads. Name the boundary explicitly — what counts and what does not. Never shown in the table. */
11235
+ text: string;
11236
+ /** @enum {string} */
11237
+ grade: "high" | "medium" | "low";
11238
+ }[];
11239
+ };
11240
+ columns: {
11241
+ key: string;
11242
+ label: string;
11243
+ path: string;
11244
+ /** @enum {string} */
11245
+ type: "string" | "number" | "boolean" | "date" | "string[]" | "number[]";
11246
+ }[];
11247
+ /** Format: date-time */
11248
+ created_at: string;
11249
+ /** Format: date-time */
11250
+ updated_at: string;
11251
+ deleted_at: string | null;
11252
+ variable_coverage: components["schemas"]["SequenceVariableCoverageDto"];
11253
+ };
11254
+ SequenceDataKeysDto: {
11255
+ /** @description True when the sequence holds more people than the sample read. */
11256
+ sampled: boolean;
11257
+ /** @description People the keys were read over (first N by id). */
11258
+ sample_size: number;
11259
+ /** @description Enrolled people on the sequence. */
11260
+ total: number;
11261
+ /** @description Most-covered first, at most 200 — a wider bag is truncated. */
11262
+ keys: {
11263
+ /** @description A top-level attached-data key, usable verbatim as a `source`. */
11264
+ key: string;
11265
+ /** @description People in the sample with a non-blank value at it. */
11266
+ present: number;
11267
+ }[];
11268
+ };
10749
11269
  SequenceSendersDto: {
10750
11270
  senders: {
10751
11271
  channel: string;
@@ -10853,82 +11373,6 @@ export interface components {
10853
11373
  /** @description Parent folder id; null for a top-level folder. */
10854
11374
  parent_id: string | null;
10855
11375
  };
10856
- SalesforceCrmContactDetailsDto: {
10857
- id: string;
10858
- salesforce_record_id: string;
10859
- /** @enum {string} */
10860
- record_type: "Contact" | "Lead";
10861
- email?: string;
10862
- phone?: string;
10863
- first_name?: string;
10864
- last_name?: string;
10865
- company?: string;
10866
- salesforce_data: unknown;
10867
- cached_at: string;
10868
- salesforce_link: string;
10869
- };
10870
- SalesforceCrmAccountDetailsDto: {
10871
- salesforce_account_id: string;
10872
- name?: string;
10873
- website?: string;
10874
- industry?: string;
10875
- number_of_employees?: string;
10876
- annual_revenue?: string;
10877
- billing_city?: string;
10878
- billing_state?: string;
10879
- billing_country?: string;
10880
- salesforce_data: unknown;
10881
- salesforce_link: string;
10882
- };
10883
- SalesforceCrmOpportunityDetailsDto: {
10884
- salesforce_opportunity_id: string;
10885
- name?: string;
10886
- stage_name?: string;
10887
- amount?: string;
10888
- close_date?: string;
10889
- is_closed?: boolean;
10890
- is_won?: boolean;
10891
- salesforce_data: unknown;
10892
- salesforce_link: string;
10893
- };
10894
- SalesforceCrmCaseDetailsDto: {
10895
- salesforce_case_id: string;
10896
- case_number?: string;
10897
- subject?: string;
10898
- status?: string;
10899
- priority?: string;
10900
- origin?: string;
10901
- created_date?: string;
10902
- last_modified_date?: string;
10903
- salesforce_data: unknown;
10904
- salesforce_link: string;
10905
- };
10906
- SalesforceCrmCustomObjectRecordDto: {
10907
- id: string;
10908
- values: {
10909
- [key: string]: string | number | boolean | null;
10910
- };
10911
- salesforce_link: string;
10912
- };
10913
- SalesforceCrmCustomObjectSectionDto: {
10914
- object_api_name: string;
10915
- label: string;
10916
- records?: components["schemas"]["SalesforceCrmCustomObjectRecordDto"][];
10917
- };
10918
- ConsumerSalesforceCrmContactResponseDto: {
10919
- consumer_id: string;
10920
- consumer_email?: string;
10921
- consumer_phone?: string;
10922
- salesforce_contact?: components["schemas"]["SalesforceCrmContactDetailsDto"];
10923
- accounts?: components["schemas"]["SalesforceCrmAccountDetailsDto"][];
10924
- opportunities?: components["schemas"]["SalesforceCrmOpportunityDetailsDto"][];
10925
- previous_cases?: components["schemas"]["SalesforceCrmCaseDetailsDto"][];
10926
- custom_objects?: components["schemas"]["SalesforceCrmCustomObjectSectionDto"][];
10927
- found_in_salesforce: boolean;
10928
- /** @enum {string} */
10929
- lookup_status: "found" | "none" | "failed";
10930
- message: string;
10931
- };
10932
11376
  SalesforceCrmConnectionStatusDto: {
10933
11377
  is_active: boolean;
10934
11378
  };
@@ -11964,6 +12408,7 @@ export interface components {
11964
12408
  completelyAndFullyCoveredUserIssue: boolean;
11965
12409
  debugInfo?: {
11966
12410
  actionCalls?: {
12411
+ callId?: string;
11967
12412
  action: {
11968
12413
  name: string;
11969
12414
  id: string;
@@ -12105,6 +12550,7 @@ export interface components {
12105
12550
  };
12106
12551
  sessionIsHandedOff?: boolean;
12107
12552
  steeredIntoTurnId?: string;
12553
+ workflowRunIds?: string[];
12108
12554
  resolveArgs?: {
12109
12555
  /** @description Summary of the conversation with the user to be viewed by a human agent. */
12110
12556
  summary: string;
@@ -13353,7 +13799,7 @@ export interface components {
13353
13799
  /** Format: email */
13354
13800
  email: string;
13355
13801
  avatar_url?: string | null;
13356
- permissions?: ("*" | "sessions:read" | "sessions:write" | "sessions-shared-views:read" | "sessions-shared-views:write" | "sessions-create:write" | "sessions-sub-sessions:write" | "contacts:read" | "contacts:write" | "companies:read" | "companies:write" | "sequences:read" | "sequences:write" | "ai-training:read" | "ai-training:write" | "reports:read" | "reports:write" | "help-center:read" | "help-center:write" | "workflows:read" | "workflows:write" | "workflows:execute" | "actions:read" | "actions:write" | "mini-apps:read" | "mini-apps:write" | "companion:read" | "companion:write" | "redaction:read" | "redaction:write" | "voc:read" | "voc:write" | "audit-logs:read" | "settings:read" | "settings:write" | "settings-general:read" | "settings-general:write" | "settings-billing:read" | "settings-billing:write" | "settings-api-keys:read" | "settings-api-keys:write" | "settings-autopilot:read" | "settings-autopilot:write" | "settings-structured-fields:read" | "settings-structured-fields:write" | "settings-webhooks:read" | "settings-webhooks:write" | "settings-secrets:read" | "settings-secrets:write" | "settings-handoff:read" | "settings-handoff:write" | "settings-translations:read" | "settings-translations:write" | "settings-sso:read" | "settings-sso:write" | "settings-integrations:read" | "settings-integrations:write" | "settings-members:read" | "settings-members:write" | "settings-tags:read" | "settings-tags:write" | "settings-sla:read" | "settings-sla:write" | "settings-csat:read" | "settings-csat:write" | "settings-reports:read" | "settings-reports:write" | "settings-office-hours:read" | "settings-office-hours:write" | "settings-channels:read" | "settings-channels:write" | "settings-channels-voice:read" | "settings-channels-voice:write" | "settings-email-fleet:read" | "settings-email-fleet:write" | "settings-helpdesk:read" | "settings-helpdesk:write" | "settings-custom-statuses:read" | "settings-custom-statuses:write" | "settings-availability-statuses:read" | "settings-availability-statuses:write" | "settings-personal-profile:read" | "settings-personal-profile:write" | "settings-groups:read" | "settings-groups:write" | "settings-roles:read" | "settings-roles:write" | "settings-macros:read" | "settings-macros:write" | "settings-skills:read" | "settings-skills:write")[] | null;
13802
+ permissions?: ("*" | "sessions:read" | "sessions:write" | "sessions-personal-views:write" | "sessions-shared-views:read" | "sessions-shared-views:write" | "sessions-create:write" | "sessions-sub-sessions:write" | "contacts:read" | "contacts:write" | "companies:read" | "companies:write" | "sequences:read" | "sequences:write" | "ai-training:read" | "ai-training:write" | "reports:read" | "reports:write" | "help-center:read" | "help-center:write" | "workflows:read" | "workflows:write" | "workflows:execute" | "actions:read" | "actions:write" | "mini-apps:read" | "mini-apps:write" | "companion:read" | "companion:write" | "redaction:read" | "redaction:write" | "voc:read" | "voc:write" | "audit-logs:read" | "settings:read" | "settings:write" | "settings-general:read" | "settings-general:write" | "settings-billing:read" | "settings-billing:write" | "settings-api-keys:read" | "settings-api-keys:write" | "settings-autopilot:read" | "settings-autopilot:write" | "settings-structured-fields:read" | "settings-structured-fields:write" | "settings-webhooks:read" | "settings-webhooks:write" | "settings-secrets:read" | "settings-secrets:write" | "settings-handoff:read" | "settings-handoff:write" | "settings-translations:read" | "settings-translations:write" | "settings-sso:read" | "settings-sso:write" | "settings-integrations:read" | "settings-integrations:write" | "settings-members:read" | "settings-members:write" | "settings-tags:read" | "settings-tags:write" | "settings-sla:read" | "settings-sla:write" | "settings-csat:read" | "settings-csat:write" | "settings-reports:read" | "settings-reports:write" | "settings-office-hours:read" | "settings-office-hours:write" | "settings-channels:read" | "settings-channels:write" | "settings-channels-voice:read" | "settings-channels-voice:write" | "settings-email-fleet:read" | "settings-email-fleet:write" | "settings-helpdesk:read" | "settings-helpdesk:write" | "settings-custom-statuses:read" | "settings-custom-statuses:write" | "settings-availability-statuses:read" | "settings-availability-statuses:write" | "settings-personal-profile:read" | "settings-personal-profile:write" | "settings-groups:read" | "settings-groups:write" | "settings-roles:read" | "settings-roles:write" | "settings-macros:read" | "settings-macros:write" | "settings-skills:read" | "settings-skills:write")[] | null;
13357
13803
  };
13358
13804
  OrgUserDetail: {
13359
13805
  id: number;
@@ -13362,7 +13808,7 @@ export interface components {
13362
13808
  /** Format: email */
13363
13809
  email: string;
13364
13810
  avatar_url?: string | null;
13365
- permissions?: ("*" | "sessions:read" | "sessions:write" | "sessions-shared-views:read" | "sessions-shared-views:write" | "sessions-create:write" | "sessions-sub-sessions:write" | "contacts:read" | "contacts:write" | "companies:read" | "companies:write" | "sequences:read" | "sequences:write" | "ai-training:read" | "ai-training:write" | "reports:read" | "reports:write" | "help-center:read" | "help-center:write" | "workflows:read" | "workflows:write" | "workflows:execute" | "actions:read" | "actions:write" | "mini-apps:read" | "mini-apps:write" | "companion:read" | "companion:write" | "redaction:read" | "redaction:write" | "voc:read" | "voc:write" | "audit-logs:read" | "settings:read" | "settings:write" | "settings-general:read" | "settings-general:write" | "settings-billing:read" | "settings-billing:write" | "settings-api-keys:read" | "settings-api-keys:write" | "settings-autopilot:read" | "settings-autopilot:write" | "settings-structured-fields:read" | "settings-structured-fields:write" | "settings-webhooks:read" | "settings-webhooks:write" | "settings-secrets:read" | "settings-secrets:write" | "settings-handoff:read" | "settings-handoff:write" | "settings-translations:read" | "settings-translations:write" | "settings-sso:read" | "settings-sso:write" | "settings-integrations:read" | "settings-integrations:write" | "settings-members:read" | "settings-members:write" | "settings-tags:read" | "settings-tags:write" | "settings-sla:read" | "settings-sla:write" | "settings-csat:read" | "settings-csat:write" | "settings-reports:read" | "settings-reports:write" | "settings-office-hours:read" | "settings-office-hours:write" | "settings-channels:read" | "settings-channels:write" | "settings-channels-voice:read" | "settings-channels-voice:write" | "settings-email-fleet:read" | "settings-email-fleet:write" | "settings-helpdesk:read" | "settings-helpdesk:write" | "settings-custom-statuses:read" | "settings-custom-statuses:write" | "settings-availability-statuses:read" | "settings-availability-statuses:write" | "settings-personal-profile:read" | "settings-personal-profile:write" | "settings-groups:read" | "settings-groups:write" | "settings-roles:read" | "settings-roles:write" | "settings-macros:read" | "settings-macros:write" | "settings-skills:read" | "settings-skills:write")[] | null;
13811
+ permissions?: ("*" | "sessions:read" | "sessions:write" | "sessions-personal-views:write" | "sessions-shared-views:read" | "sessions-shared-views:write" | "sessions-create:write" | "sessions-sub-sessions:write" | "contacts:read" | "contacts:write" | "companies:read" | "companies:write" | "sequences:read" | "sequences:write" | "ai-training:read" | "ai-training:write" | "reports:read" | "reports:write" | "help-center:read" | "help-center:write" | "workflows:read" | "workflows:write" | "workflows:execute" | "actions:read" | "actions:write" | "mini-apps:read" | "mini-apps:write" | "companion:read" | "companion:write" | "redaction:read" | "redaction:write" | "voc:read" | "voc:write" | "audit-logs:read" | "settings:read" | "settings:write" | "settings-general:read" | "settings-general:write" | "settings-billing:read" | "settings-billing:write" | "settings-api-keys:read" | "settings-api-keys:write" | "settings-autopilot:read" | "settings-autopilot:write" | "settings-structured-fields:read" | "settings-structured-fields:write" | "settings-webhooks:read" | "settings-webhooks:write" | "settings-secrets:read" | "settings-secrets:write" | "settings-handoff:read" | "settings-handoff:write" | "settings-translations:read" | "settings-translations:write" | "settings-sso:read" | "settings-sso:write" | "settings-integrations:read" | "settings-integrations:write" | "settings-members:read" | "settings-members:write" | "settings-tags:read" | "settings-tags:write" | "settings-sla:read" | "settings-sla:write" | "settings-csat:read" | "settings-csat:write" | "settings-reports:read" | "settings-reports:write" | "settings-office-hours:read" | "settings-office-hours:write" | "settings-channels:read" | "settings-channels:write" | "settings-channels-voice:read" | "settings-channels-voice:write" | "settings-email-fleet:read" | "settings-email-fleet:write" | "settings-helpdesk:read" | "settings-helpdesk:write" | "settings-custom-statuses:read" | "settings-custom-statuses:write" | "settings-availability-statuses:read" | "settings-availability-statuses:write" | "settings-personal-profile:read" | "settings-personal-profile:write" | "settings-groups:read" | "settings-groups:write" | "settings-roles:read" | "settings-roles:write" | "settings-macros:read" | "settings-macros:write" | "settings-skills:read" | "settings-skills:write")[] | null;
13366
13812
  teams: {
13367
13813
  group: components["schemas"]["GroupDto"];
13368
13814
  is_user_available_on_group: boolean;
@@ -21237,7 +21683,7 @@ export interface operations {
21237
21683
  [name: string]: unknown;
21238
21684
  };
21239
21685
  content: {
21240
- "application/json": components["schemas"]["SequenceDto"];
21686
+ "application/json": components["schemas"]["SequenceStepsWriteDto"];
21241
21687
  };
21242
21688
  };
21243
21689
  /** @description Internal Server Error */
@@ -21273,7 +21719,39 @@ export interface operations {
21273
21719
  [name: string]: unknown;
21274
21720
  };
21275
21721
  content: {
21276
- "application/json": components["schemas"]["SequenceDto"];
21722
+ "application/json": components["schemas"]["SequenceStepsWriteDto"];
21723
+ };
21724
+ };
21725
+ /** @description Internal Server Error */
21726
+ 500: {
21727
+ headers: {
21728
+ [name: string]: unknown;
21729
+ };
21730
+ content: {
21731
+ "application/json": components["schemas"]["ErrorDto"];
21732
+ };
21733
+ };
21734
+ };
21735
+ };
21736
+ listSequenceDataKeys: {
21737
+ parameters: {
21738
+ query?: never;
21739
+ header?: never;
21740
+ path: {
21741
+ /** @description The unique identifier of the sequence */
21742
+ sequenceId: string;
21743
+ };
21744
+ cookie?: never;
21745
+ };
21746
+ requestBody?: never;
21747
+ responses: {
21748
+ /** @description Default Response */
21749
+ 200: {
21750
+ headers: {
21751
+ [name: string]: unknown;
21752
+ };
21753
+ content: {
21754
+ "application/json": components["schemas"]["SequenceDataKeysDto"];
21277
21755
  };
21278
21756
  };
21279
21757
  /** @description Internal Server Error */