@lessly/sdk-app 78.0.0 → 80.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -97404,6 +97404,30 @@ export interface SupportLabelCreateOutput {
97404
97404
  */
97405
97405
  createdAt: string;
97406
97406
  }
97407
+ export interface SupportLabelGetInput {
97408
+ /**
97409
+ * Label id
97410
+ */
97411
+ id: string;
97412
+ }
97413
+ export interface SupportLabelGetOutput {
97414
+ /**
97415
+ * Label id
97416
+ */
97417
+ id: string;
97418
+ /**
97419
+ * Label name, unique within the product
97420
+ */
97421
+ name: string;
97422
+ /**
97423
+ * Display colour as a hex string, or null if uncoloured
97424
+ */
97425
+ color: (string | null);
97426
+ /**
97427
+ * ISO-8601 creation timestamp
97428
+ */
97429
+ createdAt: string;
97430
+ }
97407
97431
  export interface SupportLabelListInput {
97408
97432
  }
97409
97433
  export interface SupportLabelListOutput {
@@ -97515,10 +97539,95 @@ export interface SupportMessageCreateOutput {
97515
97539
  */
97516
97540
  downloadUrl: string;
97517
97541
  }[];
97542
+ /**
97543
+ * The same files as a flat list of ids, in the order attachments[] has them. This is the value support_message_create takes back; attachments.0.id names only the first file
97544
+ */
97545
+ attachmentIds: string[];
97546
+ /**
97547
+ * The agent author, or null when the external end user wrote the message
97548
+ */
97549
+ authorAgentId: (string | null);
97550
+ /**
97551
+ * How many files this message carries, 0 when it carries none. A dot-path has no length, so this is the only way a step can branch on whether there are files at all — and a message may carry a file and no body, so it is what tells those two messages apart
97552
+ */
97553
+ attachmentCount: number;
97554
+ /**
97555
+ * The external author, or null when an agent wrote the message
97556
+ */
97557
+ authorExternalId: (string | null);
97558
+ }
97559
+ export interface SupportMessageGetInput {
97560
+ /**
97561
+ * Message id
97562
+ */
97563
+ id: string;
97564
+ }
97565
+ export interface SupportMessageGetOutput {
97566
+ /**
97567
+ * Message id
97568
+ */
97569
+ id: string;
97570
+ /**
97571
+ * The message text, byte-identical to what was stored
97572
+ */
97573
+ body: string;
97574
+ /**
97575
+ * Thread this message belongs to
97576
+ */
97577
+ threadId: string;
97578
+ /**
97579
+ * ISO-8601 creation timestamp
97580
+ */
97581
+ createdAt: string;
97582
+ /**
97583
+ * inbound: written by the external end user. outbound: written by support, going out to them
97584
+ */
97585
+ direction: ("inbound" | "outbound");
97586
+ /**
97587
+ * public: part of the conversation the external end user sees. internal: a note between agents that never leaves the support contour
97588
+ */
97589
+ visibility: ("public" | "internal");
97590
+ /**
97591
+ * Files this message carries, each with a freshly signed download URL. Empty when there are none. Attachments whose upload was never confirmed are never listed here
97592
+ */
97593
+ attachments: {
97594
+ /**
97595
+ * Attachment id
97596
+ */
97597
+ id: string;
97598
+ /**
97599
+ * Display name of the file
97600
+ */
97601
+ fileName: string;
97602
+ /**
97603
+ * ISO-8601 timestamp of when the attachment was created
97604
+ */
97605
+ createdAt: string;
97606
+ /**
97607
+ * Size in bytes as reported by storage
97608
+ */
97609
+ sizeBytes: number;
97610
+ /**
97611
+ * MIME type of the file
97612
+ */
97613
+ contentType: string;
97614
+ /**
97615
+ * Short-lived signed URL to read the file. Re-read the message to get a fresh one
97616
+ */
97617
+ downloadUrl: string;
97618
+ }[];
97619
+ /**
97620
+ * The same files as a flat list of ids, in the order attachments[] has them. This is the value support_message_create takes back; attachments.0.id names only the first file
97621
+ */
97622
+ attachmentIds: string[];
97518
97623
  /**
97519
97624
  * The agent author, or null when the external end user wrote the message
97520
97625
  */
97521
97626
  authorAgentId: (string | null);
97627
+ /**
97628
+ * How many files this message carries, 0 when it carries none. A dot-path has no length, so this is the only way a step can branch on whether there are files at all — and a message may carry a file and no body, so it is what tells those two messages apart
97629
+ */
97630
+ attachmentCount: number;
97522
97631
  /**
97523
97632
  * The external author, or null when an agent wrote the message
97524
97633
  */
@@ -97620,10 +97729,18 @@ export interface SupportMessageListOutput {
97620
97729
  */
97621
97730
  downloadUrl: string;
97622
97731
  }[];
97732
+ /**
97733
+ * The same files as a flat list of ids, in the order attachments[] has them. This is the value support_message_create takes back; attachments.0.id names only the first file
97734
+ */
97735
+ attachmentIds: string[];
97623
97736
  /**
97624
97737
  * The agent author, or null when the external end user wrote the message
97625
97738
  */
97626
97739
  authorAgentId: (string | null);
97740
+ /**
97741
+ * How many files this message carries, 0 when it carries none. A dot-path has no length, so this is the only way a step can branch on whether there are files at all — and a message may carry a file and no body, so it is what tells those two messages apart
97742
+ */
97743
+ attachmentCount: number;
97627
97744
  /**
97628
97745
  * The external author, or null when an agent wrote the message
97629
97746
  */
@@ -97711,6 +97828,10 @@ export interface SupportResponseEscalateOutput {
97711
97828
  */
97712
97829
  category: ("open" | "pending" | "resolved" | "closed");
97713
97830
  };
97831
+ /**
97832
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
97833
+ */
97834
+ labelIds: string[];
97714
97835
  /**
97715
97836
  * Free-form client-owned JSON
97716
97837
  */
@@ -97733,6 +97854,10 @@ export interface SupportResponseEscalateOutput {
97733
97854
  * ISO-8601 last-modification timestamp
97734
97855
  */
97735
97856
  updatedAt: string;
97857
+ /**
97858
+ * The same labels as a flat list of names, in the order labels[] has them
97859
+ */
97860
+ labelNames: string[];
97736
97861
  /**
97737
97862
  * ISO-8601 timestamp of the last reply, or null while there are none
97738
97863
  */
@@ -97958,14 +98083,23 @@ export interface SupportRuleCreateInput {
97958
98083
  * When to show the survey once the page matches
97959
98084
  */
97960
98085
  trigger: ({
98086
+ /**
98087
+ * An immediate trigger, with nothing else to set
98088
+ */
97961
98089
  kind: "immediate";
97962
98090
  } | {
98091
+ /**
98092
+ * A delayed trigger, which needs seconds
98093
+ */
97963
98094
  kind: "delay";
97964
98095
  /**
97965
98096
  * How long to wait after the page matched, in seconds (at most a day)
97966
98097
  */
97967
98098
  seconds: number;
97968
98099
  } | {
98100
+ /**
98101
+ * An event trigger, which needs the event name
98102
+ */
97969
98103
  kind: "event";
97970
98104
  /**
97971
98105
  * An event in the client’s own runtime. This toolkit never sees it
@@ -100969,6 +101103,9 @@ export interface SupportRuleCreateInput {
100969
101103
  }
100970
101104
  ];
100971
101105
  }
101106
+ /**
101107
+ * One delivery rule: which pages get which survey, when, how often, and to whom
101108
+ */
100972
101109
  export interface SupportRuleCreateOutput {
100973
101110
  /**
100974
101111
  * Rule id
@@ -100982,6 +101119,9 @@ export interface SupportRuleCreateOutput {
100982
101119
  * Whether the rule is live
100983
101120
  */
100984
101121
  enabled: boolean;
101122
+ /**
101123
+ * When the client’s runtime shows the survey once the page matches: immediately, after a delay, or on an event of its own
101124
+ */
100985
101125
  trigger: {
100986
101126
  /**
100987
101127
  * Which kind of trigger this is
@@ -101008,13 +101148,22 @@ export interface SupportRuleCreateOutput {
101008
101148
  * exact: the whole URL, character for character. prefix: the URL starts with the value. contains: the value appears anywhere in the URL. regex: a JavaScript regular expression, applied unanchored — write ^ yourself if you mean the start
101009
101149
  */
101010
101150
  kind: ("exact" | "prefix" | "contains" | "regex");
101151
+ /**
101152
+ * What the URL is compared against, read according to kind
101153
+ */
101011
101154
  value: string;
101012
101155
  };
101013
101156
  /**
101014
101157
  * ISO-8601 creation timestamp
101015
101158
  */
101016
101159
  createdAt: string;
101160
+ /**
101161
+ * How often the same person may see this survey. The client’s runtime enforces it — this toolkit never sees the end user
101162
+ */
101017
101163
  frequency: {
101164
+ /**
101165
+ * once: show it a single time, ever. until_answered: keep showing it until they respond. always: show it every time the rule matches
101166
+ */
101018
101167
  kind: ("once" | "until_answered" | "always");
101019
101168
  /**
101020
101169
  * Days between showings, when set
@@ -104014,6 +104163,9 @@ export interface SupportRuleGetInput {
104014
104163
  */
104015
104164
  id: string;
104016
104165
  }
104166
+ /**
104167
+ * One delivery rule: which pages get which survey, when, how often, and to whom
104168
+ */
104017
104169
  export interface SupportRuleGetOutput {
104018
104170
  /**
104019
104171
  * Rule id
@@ -104027,6 +104179,9 @@ export interface SupportRuleGetOutput {
104027
104179
  * Whether the rule is live
104028
104180
  */
104029
104181
  enabled: boolean;
104182
+ /**
104183
+ * When the client’s runtime shows the survey once the page matches: immediately, after a delay, or on an event of its own
104184
+ */
104030
104185
  trigger: {
104031
104186
  /**
104032
104187
  * Which kind of trigger this is
@@ -104053,13 +104208,22 @@ export interface SupportRuleGetOutput {
104053
104208
  * exact: the whole URL, character for character. prefix: the URL starts with the value. contains: the value appears anywhere in the URL. regex: a JavaScript regular expression, applied unanchored — write ^ yourself if you mean the start
104054
104209
  */
104055
104210
  kind: ("exact" | "prefix" | "contains" | "regex");
104211
+ /**
104212
+ * What the URL is compared against, read according to kind
104213
+ */
104056
104214
  value: string;
104057
104215
  };
104058
104216
  /**
104059
104217
  * ISO-8601 creation timestamp
104060
104218
  */
104061
104219
  createdAt: string;
104220
+ /**
104221
+ * How often the same person may see this survey. The client’s runtime enforces it — this toolkit never sees the end user
104222
+ */
104062
104223
  frequency: {
104224
+ /**
104225
+ * once: show it a single time, ever. until_answered: keep showing it until they respond. always: show it every time the rule matches
104226
+ */
104063
104227
  kind: ("once" | "until_answered" | "always");
104064
104228
  /**
104065
104229
  * Days between showings, when set
@@ -107084,6 +107248,9 @@ export interface SupportRuleListOutput {
107084
107248
  * Whether the rule is live
107085
107249
  */
107086
107250
  enabled: boolean;
107251
+ /**
107252
+ * When the client’s runtime shows the survey once the page matches: immediately, after a delay, or on an event of its own
107253
+ */
107087
107254
  trigger: {
107088
107255
  /**
107089
107256
  * Which kind of trigger this is
@@ -107110,13 +107277,22 @@ export interface SupportRuleListOutput {
107110
107277
  * exact: the whole URL, character for character. prefix: the URL starts with the value. contains: the value appears anywhere in the URL. regex: a JavaScript regular expression, applied unanchored — write ^ yourself if you mean the start
107111
107278
  */
107112
107279
  kind: ("exact" | "prefix" | "contains" | "regex");
107280
+ /**
107281
+ * What the URL is compared against, read according to kind
107282
+ */
107113
107283
  value: string;
107114
107284
  };
107115
107285
  /**
107116
107286
  * ISO-8601 creation timestamp
107117
107287
  */
107118
107288
  createdAt: string;
107289
+ /**
107290
+ * How often the same person may see this survey. The client’s runtime enforces it — this toolkit never sees the end user
107291
+ */
107119
107292
  frequency: {
107293
+ /**
107294
+ * once: show it a single time, ever. until_answered: keep showing it until they respond. always: show it every time the rule matches
107295
+ */
107120
107296
  kind: ("once" | "until_answered" | "always");
107121
107297
  /**
107122
107298
  * Days between showings, when set
@@ -110116,14 +110292,23 @@ export interface SupportRuleUpdateInput {
110116
110292
  * The new trigger, replacing the old one
110117
110293
  */
110118
110294
  trigger?: ({
110295
+ /**
110296
+ * An immediate trigger, with nothing else to set
110297
+ */
110119
110298
  kind: "immediate";
110120
110299
  } | {
110300
+ /**
110301
+ * A delayed trigger, which needs seconds
110302
+ */
110121
110303
  kind: "delay";
110122
110304
  /**
110123
110305
  * How long to wait after the page matched, in seconds (at most a day)
110124
110306
  */
110125
110307
  seconds: number;
110126
110308
  } | {
110309
+ /**
110310
+ * An event trigger, which needs the event name
110311
+ */
110127
110312
  kind: "event";
110128
110313
  /**
110129
110314
  * An event in the client’s own runtime. This toolkit never sees it
@@ -113123,6 +113308,9 @@ export interface SupportRuleUpdateInput {
113123
113308
  }
113124
113309
  ];
113125
113310
  }
113311
+ /**
113312
+ * One delivery rule: which pages get which survey, when, how often, and to whom
113313
+ */
113126
113314
  export interface SupportRuleUpdateOutput {
113127
113315
  /**
113128
113316
  * Rule id
@@ -113136,6 +113324,9 @@ export interface SupportRuleUpdateOutput {
113136
113324
  * Whether the rule is live
113137
113325
  */
113138
113326
  enabled: boolean;
113327
+ /**
113328
+ * When the client’s runtime shows the survey once the page matches: immediately, after a delay, or on an event of its own
113329
+ */
113139
113330
  trigger: {
113140
113331
  /**
113141
113332
  * Which kind of trigger this is
@@ -113162,13 +113353,22 @@ export interface SupportRuleUpdateOutput {
113162
113353
  * exact: the whole URL, character for character. prefix: the URL starts with the value. contains: the value appears anywhere in the URL. regex: a JavaScript regular expression, applied unanchored — write ^ yourself if you mean the start
113163
113354
  */
113164
113355
  kind: ("exact" | "prefix" | "contains" | "regex");
113356
+ /**
113357
+ * What the URL is compared against, read according to kind
113358
+ */
113165
113359
  value: string;
113166
113360
  };
113167
113361
  /**
113168
113362
  * ISO-8601 creation timestamp
113169
113363
  */
113170
113364
  createdAt: string;
113365
+ /**
113366
+ * How often the same person may see this survey. The client’s runtime enforces it — this toolkit never sees the end user
113367
+ */
113171
113368
  frequency: {
113369
+ /**
113370
+ * once: show it a single time, ever. until_answered: keep showing it until they respond. always: show it every time the rule matches
113371
+ */
113172
113372
  kind: ("once" | "until_answered" | "always");
113173
113373
  /**
113174
113374
  * Days between showings, when set
@@ -116226,6 +116426,38 @@ export interface SupportStatusCreateOutput {
116226
116426
  */
116227
116427
  category: ("open" | "pending" | "resolved" | "closed");
116228
116428
  }
116429
+ export interface SupportStatusGetInput {
116430
+ /**
116431
+ * Status id
116432
+ */
116433
+ id: string;
116434
+ }
116435
+ export interface SupportStatusGetOutput {
116436
+ /**
116437
+ * Status id
116438
+ */
116439
+ id: string;
116440
+ /**
116441
+ * Status name, unique within the product
116442
+ */
116443
+ name: string;
116444
+ /**
116445
+ * Display colour as a hex string
116446
+ */
116447
+ color: string;
116448
+ /**
116449
+ * Sort order within the status dictionary
116450
+ */
116451
+ order: number;
116452
+ /**
116453
+ * Archived statuses stay readable but are not offered as targets
116454
+ */
116455
+ archived: boolean;
116456
+ /**
116457
+ * Lifecycle bucket the status belongs to
116458
+ */
116459
+ category: ("open" | "pending" | "resolved" | "closed");
116460
+ }
116229
116461
  export interface SupportStatusListInput {
116230
116462
  /**
116231
116463
  * Also return archived statuses (default false)
@@ -116406,6 +116638,14 @@ export interface SupportSurveyArchiveOutput {
116406
116638
  * ISO-8601 last-modification timestamp
116407
116639
  */
116408
116640
  updatedAt: string;
116641
+ /**
116642
+ * The same questions as a flat list of ids, in the order they are asked
116643
+ */
116644
+ questionIds: string[];
116645
+ /**
116646
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
116647
+ */
116648
+ questionCount: number;
116409
116649
  }
116410
116650
  export interface SupportSurveyCreateInput {
116411
116651
  /**
@@ -116572,6 +116812,14 @@ export interface SupportSurveyCreateOutput {
116572
116812
  * ISO-8601 last-modification timestamp
116573
116813
  */
116574
116814
  updatedAt: string;
116815
+ /**
116816
+ * The same questions as a flat list of ids, in the order they are asked
116817
+ */
116818
+ questionIds: string[];
116819
+ /**
116820
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
116821
+ */
116822
+ questionCount: number;
116575
116823
  }
116576
116824
  export interface SupportSurveyGetInput {
116577
116825
  /**
@@ -116668,6 +116916,14 @@ export interface SupportSurveyGetOutput {
116668
116916
  * ISO-8601 last-modification timestamp
116669
116917
  */
116670
116918
  updatedAt: string;
116919
+ /**
116920
+ * The same questions as a flat list of ids, in the order they are asked
116921
+ */
116922
+ questionIds: string[];
116923
+ /**
116924
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
116925
+ */
116926
+ questionCount: number;
116671
116927
  }
116672
116928
  export interface SupportSurveyListInput {
116673
116929
  /**
@@ -116784,6 +117040,14 @@ export interface SupportSurveyListOutput {
116784
117040
  * ISO-8601 last-modification timestamp
116785
117041
  */
116786
117042
  updatedAt: string;
117043
+ /**
117044
+ * The same questions as a flat list of ids, in the order they are asked
117045
+ */
117046
+ questionIds: string[];
117047
+ /**
117048
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
117049
+ */
117050
+ questionCount: number;
116787
117051
  }[];
116788
117052
  }
116789
117053
  export interface SupportSurveyPublishInput {
@@ -116881,6 +117145,14 @@ export interface SupportSurveyPublishOutput {
116881
117145
  * ISO-8601 last-modification timestamp
116882
117146
  */
116883
117147
  updatedAt: string;
117148
+ /**
117149
+ * The same questions as a flat list of ids, in the order they are asked
117150
+ */
117151
+ questionIds: string[];
117152
+ /**
117153
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
117154
+ */
117155
+ questionCount: number;
116884
117156
  }
116885
117157
  export interface SupportSurveyStatsInput {
116886
117158
  /**
@@ -117102,6 +117374,14 @@ export interface SupportSurveyUnpublishOutput {
117102
117374
  * ISO-8601 last-modification timestamp
117103
117375
  */
117104
117376
  updatedAt: string;
117377
+ /**
117378
+ * The same questions as a flat list of ids, in the order they are asked
117379
+ */
117380
+ questionIds: string[];
117381
+ /**
117382
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
117383
+ */
117384
+ questionCount: number;
117105
117385
  }
117106
117386
  export interface SupportSurveyUpdateInput {
117107
117387
  /**
@@ -117272,6 +117552,14 @@ export interface SupportSurveyUpdateOutput {
117272
117552
  * ISO-8601 last-modification timestamp
117273
117553
  */
117274
117554
  updatedAt: string;
117555
+ /**
117556
+ * The same questions as a flat list of ids, in the order they are asked
117557
+ */
117558
+ questionIds: string[];
117559
+ /**
117560
+ * How many questions this survey asks — the same field support/survey.published carries, so a workflow built from the trigger and one built from a get-step bind one shape
117561
+ */
117562
+ questionCount: number;
117275
117563
  }
117276
117564
  export interface SupportThreadAssignInput {
117277
117565
  /**
@@ -117350,6 +117638,10 @@ export interface SupportThreadAssignOutput {
117350
117638
  */
117351
117639
  category: ("open" | "pending" | "resolved" | "closed");
117352
117640
  };
117641
+ /**
117642
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
117643
+ */
117644
+ labelIds: string[];
117353
117645
  /**
117354
117646
  * Free-form client-owned JSON
117355
117647
  */
@@ -117372,6 +117664,10 @@ export interface SupportThreadAssignOutput {
117372
117664
  * ISO-8601 last-modification timestamp
117373
117665
  */
117374
117666
  updatedAt: string;
117667
+ /**
117668
+ * The same labels as a flat list of names, in the order labels[] has them
117669
+ */
117670
+ labelNames: string[];
117375
117671
  /**
117376
117672
  * ISO-8601 timestamp of the last reply, or null while there are none
117377
117673
  */
@@ -117490,6 +117786,10 @@ export interface SupportThreadCreateOutput {
117490
117786
  */
117491
117787
  category: ("open" | "pending" | "resolved" | "closed");
117492
117788
  };
117789
+ /**
117790
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
117791
+ */
117792
+ labelIds: string[];
117493
117793
  /**
117494
117794
  * Free-form client-owned JSON
117495
117795
  */
@@ -117512,6 +117812,10 @@ export interface SupportThreadCreateOutput {
117512
117812
  * ISO-8601 last-modification timestamp
117513
117813
  */
117514
117814
  updatedAt: string;
117815
+ /**
117816
+ * The same labels as a flat list of names, in the order labels[] has them
117817
+ */
117818
+ labelNames: string[];
117515
117819
  /**
117516
117820
  * ISO-8601 timestamp of the last reply, or null while there are none
117517
117821
  */
@@ -117602,6 +117906,10 @@ export interface SupportThreadGetOutput {
117602
117906
  */
117603
117907
  category: ("open" | "pending" | "resolved" | "closed");
117604
117908
  };
117909
+ /**
117910
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
117911
+ */
117912
+ labelIds: string[];
117605
117913
  /**
117606
117914
  * Free-form client-owned JSON
117607
117915
  */
@@ -117624,6 +117932,10 @@ export interface SupportThreadGetOutput {
117624
117932
  * ISO-8601 last-modification timestamp
117625
117933
  */
117626
117934
  updatedAt: string;
117935
+ /**
117936
+ * The same labels as a flat list of names, in the order labels[] has them
117937
+ */
117938
+ labelNames: string[];
117627
117939
  /**
117628
117940
  * ISO-8601 timestamp of the last reply, or null while there are none
117629
117941
  */
@@ -117774,6 +118086,10 @@ export interface SupportThreadListOutput {
117774
118086
  */
117775
118087
  category: ("open" | "pending" | "resolved" | "closed");
117776
118088
  };
118089
+ /**
118090
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
118091
+ */
118092
+ labelIds: string[];
117777
118093
  /**
117778
118094
  * Free-form client-owned JSON
117779
118095
  */
@@ -117796,6 +118112,10 @@ export interface SupportThreadListOutput {
117796
118112
  * ISO-8601 last-modification timestamp
117797
118113
  */
117798
118114
  updatedAt: string;
118115
+ /**
118116
+ * The same labels as a flat list of names, in the order labels[] has them
118117
+ */
118118
+ labelNames: string[];
117799
118119
  /**
117800
118120
  * ISO-8601 timestamp of the last reply, or null while there are none
117801
118121
  */
@@ -117891,6 +118211,10 @@ export interface SupportThreadStatusSetOutput {
117891
118211
  */
117892
118212
  category: ("open" | "pending" | "resolved" | "closed");
117893
118213
  };
118214
+ /**
118215
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
118216
+ */
118217
+ labelIds: string[];
117894
118218
  /**
117895
118219
  * Free-form client-owned JSON
117896
118220
  */
@@ -117913,6 +118237,10 @@ export interface SupportThreadStatusSetOutput {
117913
118237
  * ISO-8601 last-modification timestamp
117914
118238
  */
117915
118239
  updatedAt: string;
118240
+ /**
118241
+ * The same labels as a flat list of names, in the order labels[] has them
118242
+ */
118243
+ labelNames: string[];
117916
118244
  /**
117917
118245
  * ISO-8601 timestamp of the last reply, or null while there are none
117918
118246
  */
@@ -118023,6 +118351,10 @@ export interface SupportThreadUpdateOutput {
118023
118351
  */
118024
118352
  category: ("open" | "pending" | "resolved" | "closed");
118025
118353
  };
118354
+ /**
118355
+ * The same labels as a flat list of ids, in the order labels[] has them. This is the value support_thread_update takes back: a dot-path can name this whole set, while labels.0.id names only the first element
118356
+ */
118357
+ labelIds: string[];
118026
118358
  /**
118027
118359
  * Free-form client-owned JSON
118028
118360
  */
@@ -118045,6 +118377,10 @@ export interface SupportThreadUpdateOutput {
118045
118377
  * ISO-8601 last-modification timestamp
118046
118378
  */
118047
118379
  updatedAt: string;
118380
+ /**
118381
+ * The same labels as a flat list of names, in the order labels[] has them
118382
+ */
118383
+ labelNames: string[];
118048
118384
  /**
118049
118385
  * ISO-8601 timestamp of the last reply, or null while there are none
118050
118386
  */
@@ -118474,87 +118810,267 @@ export interface SupportWebhookUpdateOutput {
118474
118810
  secretPrefix: string;
118475
118811
  }
118476
118812
  export interface TrackingDomainsCreateInput {
118813
+ /**
118814
+ * Bare hostname to serve tracking from, which must sit under the chosen domain (e.g. analytics.example.com); a suggestion is used when omitted
118815
+ */
118477
118816
  host?: string;
118817
+ /**
118818
+ * DNS records to request instead of the default CNAME to the tracking edge; leave unset unless the domain needs custom records
118819
+ */
118478
118820
  records?: {
118821
+ /**
118822
+ * Time-to-live in seconds the record should be published with; the platform picks one when omitted
118823
+ */
118479
118824
  ttl?: number;
118825
+ /**
118826
+ * Fully-qualified host the record is published at; defaults to the claimed tracking host
118827
+ */
118480
118828
  name?: string;
118829
+ /**
118830
+ * Value the record points at — the edge hostname for a CNAME, the proof string for a TXT
118831
+ */
118481
118832
  target: string;
118833
+ /**
118834
+ * DNS record type to publish, e.g. CNAME or TXT
118835
+ */
118482
118836
  recordType: string;
118483
118837
  }[];
118484
- domainId: string;
118838
+ /**
118839
+ * Product domain to claim the tracking host under, as listed in `domains[].domainId` by tracking_domains_list
118840
+ */
118841
+ domainId: string;
118485
118842
  }
118486
118843
  export interface TrackingDomainsCreateOutput {
118844
+ /**
118845
+ * The binding as just claimed; it starts `pending` and goes `active` once the DNS is observed live
118846
+ */
118487
118847
  binding: {
118848
+ /**
118849
+ * Fully-qualified tracking host this binding serves, e.g. analytics.example.com
118850
+ */
118488
118851
  host: string;
118852
+ /**
118853
+ * Where the claim stands: `pending` while DNS has not been observed live, `active` once it serves, `failed` when the check gave up
118854
+ */
118489
118855
  status: ("pending" | "active" | "failed");
118856
+ /**
118857
+ * DNS records the platform expects to see published for this host, as returned when the binding was claimed
118858
+ */
118490
118859
  records: unknown[];
118860
+ /**
118861
+ * Product domain this tracking host sits under
118862
+ */
118491
118863
  domainId: string;
118864
+ /**
118865
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
118866
+ */
118492
118867
  bindingId: string;
118868
+ /**
118869
+ * When the binding was claimed
118870
+ */
118493
118871
  createdAt: string;
118872
+ /**
118873
+ * Product the binding belongs to
118874
+ */
118494
118875
  productId: string;
118876
+ /**
118877
+ * When the binding last changed status or records
118878
+ */
118495
118879
  updatedAt: string;
118880
+ /**
118881
+ * Human-readable reason behind the current status, such as the DNS error that made it fail; null while there is nothing to report
118882
+ */
118496
118883
  statusDetail: (string | null);
118884
+ /**
118885
+ * Extension that claimed the binding; tracking bindings are owned by this toolkit
118886
+ */
118497
118887
  ownerExtension: string;
118498
118888
  };
118889
+ /**
118890
+ * Ordered, human-readable steps for publishing the DNS the claim needs; empty when the platform manages the domain itself
118891
+ */
118499
118892
  instructions: string[];
118500
118893
  }
118501
118894
  export interface TrackingDomainsDeleteInput {
118895
+ /**
118896
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
118897
+ */
118502
118898
  bindingId: string;
118503
118899
  }
118504
118900
  export interface TrackingDomainsDeleteOutput {
118901
+ /**
118902
+ * Always true — the release succeeded; a failure arrives as an error, not as false
118903
+ */
118505
118904
  ok: true;
118506
118905
  }
118507
118906
  export interface TrackingDomainsGetInput {
118907
+ /**
118908
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
118909
+ */
118508
118910
  bindingId: string;
118509
118911
  }
118510
118912
  export interface TrackingDomainsGetOutput {
118913
+ /**
118914
+ * Fully-qualified tracking host this binding serves, e.g. analytics.example.com
118915
+ */
118511
118916
  host: string;
118917
+ /**
118918
+ * Where the claim stands: `pending` while DNS has not been observed live, `active` once it serves, `failed` when the check gave up
118919
+ */
118512
118920
  status: ("pending" | "active" | "failed");
118921
+ /**
118922
+ * DNS records the platform expects to see published for this host, as returned when the binding was claimed
118923
+ */
118513
118924
  records: unknown[];
118925
+ /**
118926
+ * Product domain this tracking host sits under
118927
+ */
118514
118928
  domainId: string;
118929
+ /**
118930
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
118931
+ */
118515
118932
  bindingId: string;
118933
+ /**
118934
+ * When the binding was claimed
118935
+ */
118516
118936
  createdAt: string;
118937
+ /**
118938
+ * Product the binding belongs to
118939
+ */
118517
118940
  productId: string;
118941
+ /**
118942
+ * When the binding last changed status or records
118943
+ */
118518
118944
  updatedAt: string;
118945
+ /**
118946
+ * Human-readable reason behind the current status, such as the DNS error that made it fail; null while there is nothing to report
118947
+ */
118519
118948
  statusDetail: (string | null);
118949
+ /**
118950
+ * Extension that claimed the binding; tracking bindings are owned by this toolkit
118951
+ */
118520
118952
  ownerExtension: string;
118521
118953
  }
118522
118954
  export interface TrackingDomainsListInput {
118523
118955
  }
118524
118956
  export interface TrackingDomainsListOutput {
118957
+ /**
118958
+ * The product's domains as the platform vouches for them — the set a new tracking host may be claimed under
118959
+ */
118525
118960
  domains: {
118961
+ /**
118962
+ * Who runs the DNS: `managed` means the platform publishes records for you, `external` means you publish them yourself
118963
+ */
118526
118964
  mode: ("external" | "managed");
118965
+ /**
118966
+ * Apex domain name the product owns, e.g. example.com
118967
+ */
118527
118968
  domain: string;
118969
+ /**
118970
+ * Stable platform id of the product domain, and what a claim takes as its `domainId`
118971
+ */
118528
118972
  domainId: string;
118973
+ /**
118974
+ * ISO-8601 timestamp of when the domain was added to the product
118975
+ */
118529
118976
  createdAt: string;
118977
+ /**
118978
+ * How many extensions currently hold a host binding under this domain
118979
+ */
118530
118980
  extensionCount: number;
118531
118981
  }[];
118982
+ /**
118983
+ * Tracking-host bindings this toolkit currently holds across those domains
118984
+ */
118532
118985
  bindings: {
118986
+ /**
118987
+ * Fully-qualified tracking host this binding serves, e.g. analytics.example.com
118988
+ */
118533
118989
  host: string;
118990
+ /**
118991
+ * Where the claim stands: `pending` while DNS has not been observed live, `active` once it serves, `failed` when the check gave up
118992
+ */
118534
118993
  status: ("pending" | "active" | "failed");
118994
+ /**
118995
+ * DNS records the platform expects to see published for this host, as returned when the binding was claimed
118996
+ */
118535
118997
  records: unknown[];
118998
+ /**
118999
+ * Product domain this tracking host sits under
119000
+ */
118536
119001
  domainId: string;
119002
+ /**
119003
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
119004
+ */
118537
119005
  bindingId: string;
119006
+ /**
119007
+ * When the binding was claimed
119008
+ */
118538
119009
  createdAt: string;
119010
+ /**
119011
+ * Product the binding belongs to
119012
+ */
118539
119013
  productId: string;
119014
+ /**
119015
+ * When the binding last changed status or records
119016
+ */
118540
119017
  updatedAt: string;
119018
+ /**
119019
+ * Human-readable reason behind the current status, such as the DNS error that made it fail; null while there is nothing to report
119020
+ */
118541
119021
  statusDetail: (string | null);
119022
+ /**
119023
+ * Extension that claimed the binding; tracking bindings are owned by this toolkit
119024
+ */
118542
119025
  ownerExtension: string;
118543
119026
  }[];
118544
119027
  }
118545
119028
  export interface TrackingDomainsVerifyInput {
119029
+ /**
119030
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
119031
+ */
118546
119032
  bindingId: string;
118547
119033
  }
118548
119034
  export interface TrackingDomainsVerifyOutput {
119035
+ /**
119036
+ * Fully-qualified tracking host this binding serves, e.g. analytics.example.com
119037
+ */
118549
119038
  host: string;
119039
+ /**
119040
+ * Where the claim stands: `pending` while DNS has not been observed live, `active` once it serves, `failed` when the check gave up
119041
+ */
118550
119042
  status: ("pending" | "active" | "failed");
119043
+ /**
119044
+ * DNS records the platform expects to see published for this host, as returned when the binding was claimed
119045
+ */
118551
119046
  records: unknown[];
119047
+ /**
119048
+ * Product domain this tracking host sits under
119049
+ */
118552
119050
  domainId: string;
119051
+ /**
119052
+ * Id of the tracking-host binding to act on, as returned in `bindings[].bindingId` by tracking_domains_list
119053
+ */
118553
119054
  bindingId: string;
119055
+ /**
119056
+ * When the binding was claimed
119057
+ */
118554
119058
  createdAt: string;
119059
+ /**
119060
+ * Product the binding belongs to
119061
+ */
118555
119062
  productId: string;
119063
+ /**
119064
+ * When the binding last changed status or records
119065
+ */
118556
119066
  updatedAt: string;
119067
+ /**
119068
+ * Human-readable reason behind the current status, such as the DNS error that made it fail; null while there is nothing to report
119069
+ */
118557
119070
  statusDetail: (string | null);
119071
+ /**
119072
+ * Extension that claimed the binding; tracking bindings are owned by this toolkit
119073
+ */
118558
119074
  ownerExtension: string;
118559
119075
  }
118560
119076
  export interface TrackingEventNamesArchiveInput {
@@ -118564,7 +119080,13 @@ export interface TrackingEventNamesArchiveInput {
118564
119080
  name: string;
118565
119081
  }
118566
119082
  export interface TrackingEventNamesArchiveOutput {
119083
+ /**
119084
+ * Event name whose status was changed
119085
+ */
118567
119086
  name: string;
119087
+ /**
119088
+ * The status as it now stands: `archived` hides the name from pickers and reports, `active` restores it
119089
+ */
118568
119090
  status: ("active" | "archived");
118569
119091
  }
118570
119092
  export interface TrackingEventNamesListInput {
@@ -118586,13 +119108,37 @@ export interface TrackingEventNamesListInput {
118586
119108
  status?: ("active" | "archived");
118587
119109
  }
118588
119110
  export interface TrackingEventNamesListOutput {
119111
+ /**
119112
+ * The matching catalogue entries, ordered by the requested sort
119113
+ */
118589
119114
  names: {
119115
+ /**
119116
+ * Event name exactly as the tracking script sends it — the string other tools take as their `event`
119117
+ */
118590
119118
  name: string;
119119
+ /**
119120
+ * How many events with this name have been received in total
119121
+ */
118591
119122
  count: number;
119123
+ /**
119124
+ * `active` for a name in use, `archived` for one hidden from pickers and reports
119125
+ */
118592
119126
  status: string;
119127
+ /**
119128
+ * ISO-8601 timestamp of the most recent event received under this name
119129
+ */
118593
119130
  lastSeen: string;
119131
+ /**
119132
+ * ISO-8601 timestamp of the first event ever received under this name
119133
+ */
118594
119134
  firstSeen: string;
119135
+ /**
119136
+ * Property keys sampled from recent events with this name, so you can see what the payload carries
119137
+ */
118595
119138
  propsKeys: string[];
119139
+ /**
119140
+ * Whether this name is marked a conversion, which is what makes it available as a workflow trigger
119141
+ */
118596
119142
  isConversion: boolean;
118597
119143
  }[];
118598
119144
  }
@@ -118607,7 +119153,13 @@ export interface TrackingEventNamesSetConversionInput {
118607
119153
  isConversion: boolean;
118608
119154
  }
118609
119155
  export interface TrackingEventNamesSetConversionOutput {
119156
+ /**
119157
+ * Event name the conversion flag was applied to
119158
+ */
118610
119159
  name: string;
119160
+ /**
119161
+ * The flag as it now stands after the change
119162
+ */
118611
119163
  isConversion: boolean;
118612
119164
  }
118613
119165
  export interface TrackingEventNamesUnarchiveInput {
@@ -118617,20 +119169,44 @@ export interface TrackingEventNamesUnarchiveInput {
118617
119169
  name: string;
118618
119170
  }
118619
119171
  export interface TrackingEventNamesUnarchiveOutput {
119172
+ /**
119173
+ * Event name whose status was changed
119174
+ */
118620
119175
  name: string;
119176
+ /**
119177
+ * The status as it now stands: `archived` hides the name from pickers and reports, `active` restores it
119178
+ */
118621
119179
  status: ("active" | "archived");
118622
119180
  }
118623
119181
  export interface TrackingGoogleadsConnectionStatusInput {
118624
119182
  }
118625
119183
  export type TrackingGoogleadsConnectionStatusOutput = ({
119184
+ /**
119185
+ * Where the Google Ads connection stands: connected means an account is chosen and its credential works, so the other tools will run.
119186
+ */
118626
119187
  state: "connected";
119188
+ /**
119189
+ * The Google Ads account the data is read from and conversions are written to, as a customer id. Only present while connected.
119190
+ */
118627
119191
  customerId: string;
119192
+ /**
119193
+ * The manager account the connection authenticates through, as a Google customer id. Same as customerId when the account is not managed. Only present while connected.
119194
+ */
118628
119195
  loginCustomerId: string;
118629
119196
  } | {
119197
+ /**
119198
+ * Google is authorised but nobody has picked which Google Ads account to use yet, so nothing can run until someone does.
119199
+ */
118630
119200
  state: "pending_account_selection";
118631
119201
  } | {
119202
+ /**
119203
+ * The Google authorisation expired or was revoked and has to be granted again before anything can run.
119204
+ */
118632
119205
  state: "reauth_required";
118633
119206
  } | {
119207
+ /**
119208
+ * No Google Ads connection has been set up for this product at all.
119209
+ */
118634
119210
  state: "not_connected";
118635
119211
  });
118636
119212
  export interface TrackingGoogleadsConversionActionsInput {
@@ -118645,26 +119221,77 @@ export type TrackingGoogleadsConversionActionsOutput = {
118645
119221
  export interface TrackingGoogleadsFeedbackConfigGetInput {
118646
119222
  }
118647
119223
  export interface TrackingGoogleadsFeedbackConfigGetOutput {
119224
+ /**
119225
+ * How the uploads coexist with the account's own tag: existing_pixel means the Google tag also records these conversions, so send only to actions the tag does not already cover; fresh_pixel means these uploads are the only source.
119226
+ */
118648
119227
  mode: ("existing_pixel" | "fresh_pixel");
119228
+ /**
119229
+ * Which tracked events become which Google Ads conversion action, and where each one takes its money value from. Disabled rules stay listed.
119230
+ */
118649
119231
  rules: {
119232
+ /**
119233
+ * Tracked event-name this rule uploads, as listed by tracking_event-names_list
119234
+ */
118650
119235
  event: string;
119236
+ /**
119237
+ * What monetary value is reported to Google for each conversion this rule uploads
119238
+ */
118651
119239
  value: ({
119240
+ /**
119241
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119242
+ */
118652
119243
  source: "revenue";
118653
119244
  } | {
119245
+ /**
119246
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119247
+ */
118654
119248
  source: "dynamic";
118655
119249
  } | {
119250
+ /**
119251
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119252
+ */
118656
119253
  source: "fixed";
119254
+ /**
119255
+ * ISO-4217 currency the fixed amount is denominated in, e.g. USD
119256
+ */
118657
119257
  currency: string;
119258
+ /**
119259
+ * The fixed value in minor units (e.g. cents); 0 means a value-less lead conversion
119260
+ */
118658
119261
  amountMinor: number;
118659
119262
  });
119263
+ /**
119264
+ * Whether this single mapping is live; a disabled rule is kept but uploads nothing
119265
+ */
118660
119266
  enabled: boolean;
119267
+ /**
119268
+ * Google conversion action the event is reported as, in the form customers/<cid>/conversionActions/<id>
119269
+ */
118661
119270
  conversionAction: string;
118662
119271
  }[];
119272
+ /**
119273
+ * Whether conversions are being sent to Google Ads at all. False leaves every rule below in place but uploads nothing.
119274
+ */
118663
119275
  enabled: boolean;
119276
+ /**
119277
+ * The tenant this configuration belongs to. Never supplied by a caller — it comes from the authenticated identity.
119278
+ */
118664
119279
  productId: string;
119280
+ /**
119281
+ * How many days back each pass looks for conversions to send, and how far back a click may be matched. Google rejects clicks older than about 90 days.
119282
+ */
118665
119283
  lookbackDays: number;
119284
+ /**
119285
+ * Currency of the connected Google Ads account, as a three-letter ISO 4217 code such as EUR. Null when the account could not be read.
119286
+ */
118666
119287
  accountCurrency: (string | null);
119288
+ /**
119289
+ * The event names that may use the Dynamic value source, because revenue is known for them. Any other event needs a fixed amount.
119290
+ */
118667
119291
  dynamicValueEvents: string[];
119292
+ /**
119293
+ * Whether a stored email or phone number is sent alongside the click, so Google can match conversions the click id alone would miss.
119294
+ */
118668
119295
  enhancedConversions: boolean;
118669
119296
  }
118670
119297
  export interface TrackingGoogleadsFeedbackConfigSetInput {
@@ -118680,11 +119307,23 @@ export interface TrackingGoogleadsFeedbackConfigSetInput {
118680
119307
  * Any tracked event-name for this product (validated against the event-name catalog)
118681
119308
  */
118682
119309
  event: string;
119310
+ /**
119311
+ * What monetary value to report to Google for each conversion this rule uploads
119312
+ */
118683
119313
  value: ({
119314
+ /**
119315
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119316
+ */
118684
119317
  source: "revenue";
118685
119318
  } | {
119319
+ /**
119320
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119321
+ */
118686
119322
  source: "dynamic";
118687
119323
  } | {
119324
+ /**
119325
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119326
+ */
118688
119327
  source: "fixed";
118689
119328
  /**
118690
119329
  * ISO-4217 currency code, e.g. USD
@@ -118695,6 +119334,9 @@ export interface TrackingGoogleadsFeedbackConfigSetInput {
118695
119334
  */
118696
119335
  amountMinor?: number;
118697
119336
  });
119337
+ /**
119338
+ * Whether this single mapping is live; a disabled rule is kept but uploads nothing
119339
+ */
118698
119340
  enabled: boolean;
118699
119341
  /**
118700
119342
  * Google conversion action resource: customers/<cid>/conversionActions/<id>
@@ -118715,65 +119357,209 @@ export interface TrackingGoogleadsFeedbackConfigSetInput {
118715
119357
  enhancedConversions?: boolean;
118716
119358
  }
118717
119359
  export interface TrackingGoogleadsFeedbackConfigSetOutput {
119360
+ /**
119361
+ * The config as it now stands after the write, with server-side normalisation applied
119362
+ */
118718
119363
  config: {
119364
+ /**
119365
+ * How our uploads sit beside your own tag: `existing_pixel` only fills gaps it left, `fresh_pixel` reports our data alone
119366
+ */
118719
119367
  mode: ("existing_pixel" | "fresh_pixel");
119368
+ /**
119369
+ * The event-to-conversion-action mappings, each with its own value source
119370
+ */
118720
119371
  rules: {
119372
+ /**
119373
+ * Tracked event-name this rule uploads, as listed by tracking_event-names_list
119374
+ */
118721
119375
  event: string;
119376
+ /**
119377
+ * What monetary value is reported to Google for each conversion this rule uploads
119378
+ */
118722
119379
  value: ({
119380
+ /**
119381
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119382
+ */
118723
119383
  source: "revenue";
118724
119384
  } | {
119385
+ /**
119386
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119387
+ */
118725
119388
  source: "dynamic";
118726
119389
  } | {
119390
+ /**
119391
+ * Where the conversion value comes from: `revenue` uses the net revenue of the subscription, `dynamic` reads the amount carried by the occurrence itself, `fixed` always sends the same amount
119392
+ */
118727
119393
  source: "fixed";
119394
+ /**
119395
+ * ISO-4217 currency the fixed amount is denominated in, e.g. USD
119396
+ */
118728
119397
  currency: string;
119398
+ /**
119399
+ * The fixed value in minor units (e.g. cents); 0 means a value-less lead conversion
119400
+ */
118729
119401
  amountMinor: number;
118730
119402
  });
119403
+ /**
119404
+ * Whether this single mapping is live; a disabled rule is kept but uploads nothing
119405
+ */
118731
119406
  enabled: boolean;
119407
+ /**
119408
+ * Google conversion action the event is reported as, in the form customers/<cid>/conversionActions/<id>
119409
+ */
118732
119410
  conversionAction: string;
118733
119411
  }[];
119412
+ /**
119413
+ * Master switch: with it off no rule uploads anything, however the individual rules are set
119414
+ */
118734
119415
  enabled: boolean;
119416
+ /**
119417
+ * Product this conversion-feedback config belongs to
119418
+ */
118735
119419
  productId: string;
119420
+ /**
119421
+ * How many days back a click may have happened and still be matched to a conversion (max 90)
119422
+ */
118736
119423
  lookbackDays: number;
119424
+ /**
119425
+ * The connected Google Ads account's currency, best-effort; null or absent when it could not be read
119426
+ */
118737
119427
  accountCurrency?: (string | null);
119428
+ /**
119429
+ * Whether hashed email and phone are sent alongside gclid as additional match keys, which raises match rates
119430
+ */
118738
119431
  enhancedConversions: boolean;
118739
119432
  };
119433
+ /**
119434
+ * Plain-language safety notes about what this combination of mode and match keys will do to the connected account
119435
+ */
118740
119436
  guidance: string[];
118741
119437
  }
118742
119438
  export interface TrackingGoogleadsFeedbackRunInput {
118743
119439
  }
118744
119440
  export interface TrackingGoogleadsFeedbackRunOutput {
119441
+ /**
119442
+ * This one upload pass. Match the completion event back to this step on it, not on productId: the daily cron pass and a manual run on the same day are two passes of the same product.
119443
+ */
119444
+ runId: string;
119445
+ /**
119446
+ * Rows Google rejected in this pass.
119447
+ */
118745
119448
  failed: number;
119449
+ /**
119450
+ * Of those, the ones that had a usable click id and a value, so a payload was actually built for them.
119451
+ */
118746
119452
  matched: number;
119453
+ /**
119454
+ * Conversions dropped because no Google click could be tied to the person. A high count here is a tagging problem, not a Google one.
119455
+ */
118747
119456
  noGclid: number;
119457
+ /**
119458
+ * Present only when the pass did no work, and says why: feedback is switched off, no rule is enabled, or no Google Ads account is connected. Absent on a pass that ran.
119459
+ */
118748
119460
  skipped?: ("disabled" | "no_rules" | "not_connected");
119461
+ /**
119462
+ * Conversions in the lookback window that an enabled rule applied to.
119463
+ */
118749
119464
  selected: number;
119465
+ /**
119466
+ * Rows Google accepted in this pass.
119467
+ */
118750
119468
  uploaded: number;
119469
+ /**
119470
+ * The tenant whose conversions this pass uploaded.
119471
+ */
118751
119472
  productId: string;
119473
+ /**
119474
+ * Conversions held back because their money value had not landed yet. They are retried on a later pass.
119475
+ */
118752
119476
  zeroValue: number;
118753
- partialFailureError?: unknown;
119477
+ /**
119478
+ * Google's own rejection detail, passed through unchanged, when it refused part of the batch. Absent when it accepted everything.
119479
+ */
119480
+ partialFailureError?: {
119481
+ [k: string]: unknown;
119482
+ };
118754
119483
  }
118755
119484
  export interface TrackingGoogleadsFeedbackStatusInput {
118756
119485
  }
118757
119486
  export interface TrackingGoogleadsFeedbackStatusOutput {
119487
+ /**
119488
+ * How the uploads coexist with the account's own tag: existing_pixel means the Google tag also records these conversions; fresh_pixel means these uploads are the only source.
119489
+ */
118758
119490
  mode: ("existing_pixel" | "fresh_pixel");
119491
+ /**
119492
+ * Rows Google has rejected since this product was connected, across every pass.
119493
+ */
118759
119494
  failed: number;
119495
+ /**
119496
+ * Whether conversions are being sent to Google Ads at all.
119497
+ */
118760
119498
  enabled: boolean;
119499
+ /**
119500
+ * Coverage of the most recent pass. Null when no pass has run for this product yet.
119501
+ */
118761
119502
  lastRun: ({
119503
+ /**
119504
+ * When the last pass finished. Null when the stored summary predates this field.
119505
+ */
118762
119506
  ranAt: (string | null);
119507
+ /**
119508
+ * Rows Google rejected. Anything above zero is what makes the status partial.
119509
+ */
118763
119510
  failed: number;
119511
+ /**
119512
+ * How the pass ended: ok is a clean pass, partial means Google rejected some rows and accepted others, not_connected means no Google Ads account was reachable and nothing was sent.
119513
+ */
118764
119514
  status: ("ok" | "partial" | "not_connected");
119515
+ /**
119516
+ * Of those, the ones that had a usable click id and a value, so a payload was actually built for them.
119517
+ */
118765
119518
  matched: number;
119519
+ /**
119520
+ * Conversions dropped because no Google click could be tied to the person. A high count here is a tagging problem, not a Google one.
119521
+ */
118766
119522
  noGclid: number;
119523
+ /**
119524
+ * Conversions in the lookback window that an enabled rule applied to.
119525
+ */
118767
119526
  selected: number;
119527
+ /**
119528
+ * Rows Google accepted.
119529
+ */
118768
119530
  uploaded: number;
119531
+ /**
119532
+ * Conversions held back because their money value had not landed yet. They are retried on a later pass.
119533
+ */
118769
119534
  zeroValue: number;
118770
119535
  } | null);
119536
+ /**
119537
+ * Plain-language warnings about the current setup, such as double counting when the Google tag already records the same conversion. Empty when nothing needs saying.
119538
+ */
118771
119539
  guidance: string[];
119540
+ /**
119541
+ * Rows Google has accepted since this product was connected, across every pass.
119542
+ */
118772
119543
  uploaded: number;
119544
+ /**
119545
+ * How many event-to-conversion-action rules are configured, enabled or not.
119546
+ */
118773
119547
  ruleCount: number;
119548
+ /**
119549
+ * How many days back each pass looks for conversions to send, and how far back a click may be matched.
119550
+ */
118774
119551
  lookbackDays: number;
119552
+ /**
119553
+ * Currency of the connected Google Ads account, as a three-letter ISO 4217 code such as EUR. Null when the account could not be read.
119554
+ */
118775
119555
  accountCurrency: (string | null);
119556
+ /**
119557
+ * The event names that may use the Dynamic value source, because revenue is known for them.
119558
+ */
118776
119559
  dynamicValueEvents: string[];
119560
+ /**
119561
+ * Whether a stored email or phone number is sent alongside the click, so Google can match conversions the click id alone would miss.
119562
+ */
118777
119563
  enhancedConversions: boolean;
118778
119564
  }
118779
119565
  export interface TrackingGoogleadsFeedbackUploadsInput {
@@ -118792,84 +119578,293 @@ export type TrackingGoogleadsFeedbackUploadsOutput = {
118792
119578
  conversionDatetime: string;
118793
119579
  }[];
118794
119580
  export interface TrackingGoogleadsRoasReportInput {
118795
- to: string;
118796
- from: string;
119581
+ /**
119582
+ * End of the reporting window, inclusive. ISO-8601 date or timestamp; a date-only value covers that whole day, so revenue after midnight is not cut off. Omit to end now.
119583
+ */
119584
+ to?: string;
119585
+ /**
119586
+ * Start of the reporting window, inclusive. ISO-8601 date or timestamp, e.g. 2026-01-01. Omit to start 30 days before the end of the window.
119587
+ */
119588
+ from?: string;
119589
+ /**
119590
+ * Which touchpoint gets the credit for a conversion: the last paid click before it, or the first. Defaults to last_click.
119591
+ */
118797
119592
  model?: ("last_click" | "first_click");
119593
+ /**
119594
+ * Restrict to conversions tracked on this installed site, e.g. acme.com. Omit to cover every domain of the product.
119595
+ */
118798
119596
  domain?: string;
119597
+ /**
119598
+ * Restrict to one Google Ads account, by its customer id without dashes. Omit to cover every connected account.
119599
+ */
118799
119600
  customerId?: string;
119601
+ /**
119602
+ * How far back before a conversion a paid click may sit and still earn the credit, in days. 1-365, silently clamped into that range; defaults to 30.
119603
+ */
118800
119604
  lookbackDays?: number;
118801
119605
  }
118802
119606
  export interface TrackingGoogleadsRoasReportOutput {
119607
+ /**
119608
+ * End of the window this report covers, echoed back as an ISO-8601 UTC timestamp.
119609
+ */
118803
119610
  to: string;
119611
+ /**
119612
+ * Start of the window this report covers, echoed back as an ISO-8601 UTC timestamp.
119613
+ */
118804
119614
  from: string;
119615
+ /**
119616
+ * Which touchpoint earned the credit in these numbers: the last paid click before the conversion, or the first.
119617
+ */
118805
119618
  model: ("last_click" | "first_click");
119619
+ /**
119620
+ * True when any account below is running on cost older than the freshness threshold, or on no cost at all — read this before acting on the numbers.
119621
+ */
119622
+ stale: boolean;
119623
+ /**
119624
+ * The installed site this report was restricted to; null when it covers every domain of the product.
119625
+ */
118806
119626
  domain: (string | null);
119627
+ /**
119628
+ * One entry per Google Ads account and currency. Kept apart on purpose: amounts in different currencies are never added together.
119629
+ */
118807
119630
  accounts: {
119631
+ /**
119632
+ * True when this account's cost is older than the freshness threshold, or was never pulled — the ROAS below is then built on outdated spend.
119633
+ */
118808
119634
  stale: boolean;
119635
+ /**
119636
+ * ISO-4217 code every amount under this account is expressed in, e.g. USD. One account appears once per currency its cost was booked in.
119637
+ */
118809
119638
  currency: string;
119639
+ /**
119640
+ * This account's campaigns, each with its ad groups and ads nested underneath.
119641
+ */
118810
119642
  campaigns: TrackingGoogleadsRoasReportOutputItems[];
119643
+ /**
119644
+ * Google Ads account these campaigns belong to, by customer id without dashes.
119645
+ */
118811
119646
  customerId: string;
119647
+ /**
119648
+ * When cost was last pulled from Google Ads for this account (ISO-8601 UTC); null when it has never been pulled.
119649
+ */
118812
119650
  costLastSyncedAt: (string | null);
118813
119651
  }[];
119652
+ /**
119653
+ * ISO-4217 code every amount in this report is expressed in, when all accounts share one; null when the report spans several currencies.
119654
+ */
119655
+ currency: (string | null);
119656
+ /**
119657
+ * When this report was calculated (ISO-8601 UTC). The figures are a snapshot at this moment, not live.
119658
+ */
118814
119659
  computedAt: string;
119660
+ /**
119661
+ * Google Ads account this whole report covers, when it covers exactly one; null when it spans several accounts.
119662
+ */
119663
+ customerId: (string | null);
119664
+ /**
119665
+ * How far back before a conversion a paid click was allowed to sit and still earn the credit, in days.
119666
+ */
118815
119667
  lookbackDays: number;
119668
+ /**
119669
+ * Oldest moment cost was pulled from Google Ads across the accounts below (ISO-8601 UTC); null when any account has never synced.
119670
+ */
119671
+ costLastSyncedAt: (string | null);
119672
+ /**
119673
+ * Revenue we tracked but could not tie to any Google Ads campaign, grouped by the utm_campaign we saw. A long list here means the ad tagging needs fixing, not that the ads failed.
119674
+ */
118816
119675
  unmatchedAttributed: {
119676
+ /**
119677
+ * Revenue that stayed outside every campaign, one row per currency. Never cross-summed.
119678
+ */
118817
119679
  revenue: TrackingGoogleadsRoasReportOutputItems1[];
119680
+ /**
119681
+ * How many distinct customers paid but could not be traced to any Google Ads campaign.
119682
+ */
118818
119683
  conversions: number;
119684
+ /**
119685
+ * The utm_campaign value we saw on the visit, which matched no Google Ads campaign; null when the visit carried none. This is the diagnostic: fix the tagging and the revenue moves into a campaign.
119686
+ */
118819
119687
  utmCampaign: (string | null);
118820
119688
  }[];
118821
119689
  }
118822
119690
  export interface TrackingGoogleadsRoasReportOutputItems {
119691
+ /**
119692
+ * What one attributed customer cost: cost divided by attributed conversions, in minor units of the account currency. null when there were no attributed conversions.
119693
+ */
118823
119694
  cpa: (number | null);
119695
+ /**
119696
+ * Google Ads ad this node is, by its numeric id; null on a campaign or ad group node.
119697
+ */
118824
119698
  adId: (string | null);
119699
+ /**
119700
+ * What Google charged and what Google itself counted for this node over the window.
119701
+ */
118825
119702
  cost: {
119703
+ /**
119704
+ * How many times someone clicked through from Google over the window.
119705
+ */
118826
119706
  clicks: number;
119707
+ /**
119708
+ * ISO-4217 code of the Google Ads account these numbers come from, e.g. USD. Fixed per account.
119709
+ */
118827
119710
  currency: string;
119711
+ /**
119712
+ * What Google charged for this campaign, ad group or ad over the window, in minor units (1250 = 12.50).
119713
+ */
118828
119714
  costMinor: number;
119715
+ /**
119716
+ * How many times Google showed this ad over the window.
119717
+ */
118829
119718
  impressions: number;
119719
+ /**
119720
+ * Conversions GOOGLE counted for this node — its own attribution, not ours. May be fractional, because Google splits credit across touchpoints.
119721
+ */
118830
119722
  platformConversions: number;
119723
+ /**
119724
+ * Conversion value GOOGLE reports for this node, in minor units of the account currency. Compare it with our attributed revenue; the two rarely agree.
119725
+ */
118831
119726
  platformConversionsValueMinor: number;
118832
119727
  };
119728
+ /**
119729
+ * What this campaign, ad group or ad is called in Google Ads; null when the name has not been synced.
119730
+ */
118833
119731
  name: (string | null);
119732
+ /**
119733
+ * Return on ad spend: our net attributed revenue divided by cost, both in the account currency. A plain ratio, not a percentage — 2.4 means 2.40 back per 1.00 spent. null when cost is 0 or nothing was attributed.
119734
+ */
118834
119735
  roas: (number | null);
119736
+ /**
119737
+ * How deep in the Google Ads hierarchy this node sits. Attributed revenue, ROAS and CPA exist at campaign level only; cost exists at all three.
119738
+ */
118835
119739
  level: ("campaign" | "ad_group" | "ad");
119740
+ /**
119741
+ * Google Ads campaign state, passed through raw: ENABLED, PAUSED, REMOVED. Present on campaign nodes only — the key is absent below.
119742
+ */
118836
119743
  status?: string;
119744
+ /**
119745
+ * The level below this one: ad groups under a campaign, ads under an ad group, empty on an ad.
119746
+ */
118837
119747
  children: TrackingGoogleadsRoasReportOutputItems[];
119748
+ /**
119749
+ * Google Ads ad group this node belongs to, by its numeric id; null on a campaign node.
119750
+ */
118838
119751
  adGroupId: (string | null);
119752
+ /**
119753
+ * What WE traced back to this node from our own tracking. null below campaign level, and null on a campaign nothing was traced to.
119754
+ */
118839
119755
  attributed: ({
119756
+ /**
119757
+ * What WE traced back to this campaign, one row per currency the customers paid in. Never cross-summed — use accountCurrencyNetMinor for a single figure.
119758
+ */
118840
119759
  revenue: TrackingGoogleadsRoasReportOutputItems1[];
118841
- matchedBy: (("campaign_id" | "campaign_name" | "gclid") | null);
119760
+ /**
119761
+ * Which key actually joined this revenue to the Google campaign, strongest first: lt_campaign_id (the id our own tracking template stamps on the landing URL), campaign_id (the id inside utm_campaign), campaign_name (the campaign name inside utm_campaign, a guess), gclid (the click id). null means the join key is unknown; treat campaign_name as the weakest evidence.
119762
+ */
119763
+ matchedBy: (("lt_campaign_id" | "campaign_id" | "campaign_name" | "gclid") | null);
119764
+ /**
119765
+ * How many distinct customers we traced back to this campaign over the window. Whole numbers: we give a conversion to one campaign, we never split it.
119766
+ */
118842
119767
  conversions: number;
119768
+ /**
119769
+ * Our net attributed revenue in the account currency alone, in minor units. 0 when nobody paid in that currency. This is the ROAS numerator, and the single-value answer beside the revenue list.
119770
+ */
118843
119771
  accountCurrencyNetMinor: number;
118844
119772
  } | null);
119773
+ /**
119774
+ * Google Ads campaign this node belongs to, by its numeric id. Set at every level.
119775
+ */
118845
119776
  campaignId: string;
119777
+ /**
119778
+ * Google Ads account this node belongs to, by customer id without dashes.
119779
+ */
118846
119780
  customerId: string;
119781
+ /**
119782
+ * Where Google ran the campaign, passed through raw: SEARCH, DISPLAY, VIDEO, PERFORMANCE_MAX and so on. Present on campaign nodes only, and may be null there.
119783
+ */
118847
119784
  channelType?: (string | null);
118848
119785
  }
118849
119786
  export interface TrackingGoogleadsRoasReportOutputItems1 {
119787
+ /**
119788
+ * ISO-4217 code the three amounts on this row are denominated in, e.g. USD. One row per currency; rows are never added together.
119789
+ */
118850
119790
  currency: string;
119791
+ /**
119792
+ * Money kept after refunds (gross minus refunded), in minor units of this row's currency. This is what ROAS is calculated from.
119793
+ */
118851
119794
  netMinor: number;
119795
+ /**
119796
+ * Money taken before refunds, in minor units of this row's currency (1250 = 12.50).
119797
+ */
118852
119798
  grossMinor: number;
119799
+ /**
119800
+ * Money given back within the window, in minor units of this row's currency; already subtracted from netMinor.
119801
+ */
118853
119802
  refundedMinor: number;
118854
119803
  }
118855
119804
  export interface TrackingGoogleadsSyncNowInput {
118856
119805
  }
118857
119806
  export interface TrackingGoogleadsSyncNowOutput {
119807
+ /**
119808
+ * How much this sweep wrote, split by what it wrote. Re-running the same window updates rows in place rather than adding, so these are rows touched, not rows gained. All zero when the status is skipped.
119809
+ */
118858
119810
  rows: {
119811
+ /**
119812
+ * Ads written.
119813
+ */
118859
119814
  ads: number;
119815
+ /**
119816
+ * Day-by-day ad spend and metric rows written.
119817
+ */
118860
119818
  adDaily: number;
119819
+ /**
119820
+ * Ad groups written.
119821
+ */
118861
119822
  adGroups: number;
119823
+ /**
119824
+ * Campaigns written, names and status included.
119825
+ */
118862
119826
  campaigns: number;
119827
+ /**
119828
+ * Day-by-day ad-group spend and metric rows written.
119829
+ */
118863
119830
  adGroupDaily: number;
119831
+ /**
119832
+ * Day-by-day campaign spend and metric rows written.
119833
+ */
118864
119834
  campaignDaily: number;
118865
119835
  };
119836
+ /**
119837
+ * This one sync run. Match the completion event back to this step on it, not on productId: a product syncs many times, and the daily cron run and a manual one are different runs.
119838
+ */
119839
+ runId: string;
119840
+ /**
119841
+ * Why nothing was written, when the status is skipped: the account is not chosen yet, the authorisation expired, or Google was unavailable. Absent on a sweep that ran.
119842
+ */
118866
119843
  reason?: string;
119844
+ /**
119845
+ * Whether the sweep ran. skipped means the Google Ads account could not be reached and nothing at all was written.
119846
+ */
118867
119847
  status: ("ok" | "skipped");
119848
+ /**
119849
+ * The range of days this sweep read spend and metrics for.
119850
+ */
118868
119851
  window: {
119852
+ /**
119853
+ * Last day covered, inclusive, as YYYY-MM-DD.
119854
+ */
118869
119855
  end: string;
119856
+ /**
119857
+ * First day covered, inclusive, as YYYY-MM-DD.
119858
+ */
118870
119859
  start: string;
118871
119860
  };
119861
+ /**
119862
+ * The tenant whose Google Ads account was swept.
119863
+ */
118872
119864
  productId: string;
119865
+ /**
119866
+ * When the sweep finished. Null when nothing was written.
119867
+ */
118873
119868
  lastSyncedAt: (string | null);
118874
119869
  }
118875
119870
  export interface TrackingGoogleadsTrackingHealthInput {
@@ -118883,61 +119878,212 @@ export interface TrackingGoogleadsTrackingHealthInput {
118883
119878
  from?: string;
118884
119879
  }
118885
119880
  export interface TrackingGoogleadsTrackingHealthOutput {
119881
+ /**
119882
+ * End of the range these figures cover, as an instant.
119883
+ */
118886
119884
  to: string;
119885
+ /**
119886
+ * Start of the range these figures cover, as an instant. Echoes back the range that was asked for.
119887
+ */
118887
119888
  from: string;
119889
+ /**
119890
+ * Whether the tracking template has been seen working live: true once at least one tagged click has arrived.
119891
+ */
118888
119892
  installed: boolean;
119893
+ /**
119894
+ * Whether the sample above was cut short. True means more untagged URLs exist than are listed.
119895
+ */
118889
119896
  truncated: boolean;
119897
+ /**
119898
+ * Google paid clicks that arrived on the site in this range. The denominator for everything below.
119899
+ */
118890
119900
  paidClicks: number;
119901
+ /**
119902
+ * How complete the figures above are. Holds no metric of its own — it exists so the breakage rate is not read as one uniform population.
119903
+ */
118891
119904
  dataQuality: {
119905
+ /**
119906
+ * Paid clicks from visitors who declined consent. Counted inside paidClicks, never added to it — a cookieless click is a real click. Clicks from sites running no consent banner are not counted here: nobody was asked, which is not the same as being told no.
119907
+ */
118892
119908
  cookielessPaidClicks: number;
118893
119909
  };
119910
+ /**
119911
+ * Share of paid clicks that arrived untagged, between 0 and 1. Anything much above zero means the tracking template needs fixing.
119912
+ */
118894
119913
  breakageRate: number;
119914
+ /**
119915
+ * Of those, the ones that arrived carrying our URL tracking parameters, so the campaign behind them is known.
119916
+ */
118895
119917
  taggedClicks: number;
119918
+ /**
119919
+ * When the most recent untagged click arrived. Close to now means the breakage is still live. Null when none did.
119920
+ */
118896
119921
  lastUntaggedAt: (string | null);
119922
+ /**
119923
+ * Of those, the ones that arrived without our parameters, so the money spent on them cannot be attributed. This is what the tracking template being missing or broken looks like.
119924
+ */
118897
119925
  untaggedClicks: number;
119926
+ /**
119927
+ * When the first untagged click of the range arrived — roughly when the breakage started. Null when none did.
119928
+ */
118898
119929
  firstUntaggedAt: (string | null);
119930
+ /**
119931
+ * A handful of the actual landing URLs that arrived untagged, to paste into a browser while fixing the template. Real customer URLs, query strings included.
119932
+ */
118899
119933
  sampleUntaggedUrls: string[];
118900
119934
  }
118901
119935
  export interface TrackingGoogleadsUsVsPlatformInput {
118902
- to: string;
118903
- from: string;
119936
+ /**
119937
+ * End of the reporting window, inclusive. ISO-8601 date or timestamp; a date-only value covers that whole day, so revenue after midnight is not cut off. Omit to end now.
119938
+ */
119939
+ to?: string;
119940
+ /**
119941
+ * Start of the reporting window, inclusive. ISO-8601 date or timestamp, e.g. 2026-01-01. Omit to start 30 days before the end of the window.
119942
+ */
119943
+ from?: string;
119944
+ /**
119945
+ * Which touchpoint gets the credit for a conversion: the last paid click before it, or the first. Defaults to last_click.
119946
+ */
118904
119947
  model?: ("last_click" | "first_click");
119948
+ /**
119949
+ * Restrict to conversions tracked on this installed site, e.g. acme.com. Omit to cover every domain of the product.
119950
+ */
118905
119951
  domain?: string;
119952
+ /**
119953
+ * Restrict to one Google Ads account, by its customer id without dashes. Omit to cover every connected account.
119954
+ */
118906
119955
  customerId?: string;
119956
+ /**
119957
+ * How far back before a conversion a paid click may sit and still earn the credit, in days. 1-365, silently clamped into that range; defaults to 30.
119958
+ */
118907
119959
  lookbackDays?: number;
118908
119960
  }
118909
119961
  export interface TrackingGoogleadsUsVsPlatformOutput {
119962
+ /**
119963
+ * End of the window this comparison covers, echoed back as an ISO-8601 UTC timestamp.
119964
+ */
118910
119965
  to: string;
119966
+ /**
119967
+ * Start of the window this comparison covers, echoed back as an ISO-8601 UTC timestamp.
119968
+ */
118911
119969
  from: string;
119970
+ /**
119971
+ * Which touchpoint earned the credit on OUR side of the comparison: the last paid click before the conversion, or the first. Google always uses its own model.
119972
+ */
118912
119973
  model: ("last_click" | "first_click");
119974
+ /**
119975
+ * True when any account below is running on cost older than the freshness threshold, or on no cost at all — read this before acting on the numbers.
119976
+ */
119977
+ stale: boolean;
119978
+ /**
119979
+ * The installed site this comparison was restricted to; null when it covers every domain of the product.
119980
+ */
118913
119981
  domain: (string | null);
119982
+ /**
119983
+ * One entry per Google Ads account and currency, each holding its per-campaign comparison rows. Currencies are never added together.
119984
+ */
118914
119985
  accounts: {
119986
+ /**
119987
+ * One row per campaign in this account, ours beside Google's.
119988
+ */
118915
119989
  rows: {
119990
+ /**
119991
+ * What this campaign is called in Google Ads; null when the name has not been synced.
119992
+ */
118916
119993
  name: (string | null);
119994
+ /**
119995
+ * ISO-4217 code both sides of this comparison are expressed in, e.g. USD. Ours and Google's are never converted.
119996
+ */
118917
119997
  currency: string;
119998
+ /**
119999
+ * The Google Ads campaign this row compares, by its numeric id.
120000
+ */
118918
120001
  campaignId: string;
120002
+ /**
120003
+ * Google Ads account this campaign belongs to, by customer id without dashes.
120004
+ */
118919
120005
  customerId: string;
120006
+ /**
120007
+ * How many distinct customers WE traced to this campaign. A whole number: we never split a customer across campaigns.
120008
+ */
118920
120009
  ourConversions: number;
120010
+ /**
120011
+ * Net revenue WE traced to this campaign, in minor units of the account currency (1250 = 12.50). 0 when we traced none.
120012
+ */
118921
120013
  ourRevenueNetMinor: number;
120014
+ /**
120015
+ * Conversions GOOGLE counted for the same campaign. May be fractional, because Google splits credit across touchpoints — which is the usual reason the two sides disagree.
120016
+ */
118922
120017
  platformConversions: number;
120018
+ /**
120019
+ * Conversion value GOOGLE reports for the same campaign, in minor units of the account currency. The counterpart of ourRevenueNetMinor.
120020
+ */
118923
120021
  platformConversionsValueMinor: number;
118924
120022
  }[];
120023
+ /**
120024
+ * True when this account's Google-side numbers are older than the freshness threshold, or were never pulled — the comparison is then unfair to one side.
120025
+ */
118925
120026
  stale: boolean;
120027
+ /**
120028
+ * ISO-4217 code every amount under this account is expressed in, e.g. USD. One account appears once per currency its cost was booked in.
120029
+ */
118926
120030
  currency: string;
120031
+ /**
120032
+ * Google Ads account these comparison rows belong to, by customer id without dashes.
120033
+ */
118927
120034
  customerId: string;
120035
+ /**
120036
+ * When cost was last pulled from Google Ads for this account (ISO-8601 UTC); null when it has never been pulled.
120037
+ */
118928
120038
  costLastSyncedAt: (string | null);
118929
120039
  }[];
120040
+ /**
120041
+ * ISO-4217 code every amount in this report is expressed in, when all accounts share one; null when the report spans several currencies.
120042
+ */
120043
+ currency: (string | null);
120044
+ /**
120045
+ * When this comparison was calculated (ISO-8601 UTC). The figures are a snapshot at this moment, not live.
120046
+ */
118930
120047
  computedAt: string;
120048
+ /**
120049
+ * Google Ads account this whole report covers, when it covers exactly one; null when it spans several accounts.
120050
+ */
120051
+ customerId: (string | null);
120052
+ /**
120053
+ * How far back before a conversion a paid click was allowed to sit and still earn the credit on our side, in days.
120054
+ */
118931
120055
  lookbackDays: number;
120056
+ /**
120057
+ * Oldest moment cost was pulled from Google Ads across the accounts below (ISO-8601 UTC); null when any account has never synced.
120058
+ */
120059
+ costLastSyncedAt: (string | null);
118932
120060
  }
118933
120061
  export interface TrackingIdentityHealthInput {
118934
120062
  }
118935
120063
  export interface TrackingIdentityHealthOutput {
120064
+ /**
120065
+ * When these numbers were computed, ISO 8601 UTC. They are a live count, so this is effectively the moment of the call.
120066
+ */
118936
120067
  computedAt: string;
120068
+ /**
120069
+ * How many people the product holds in total, anonymous ones included. The denominator of both rates below.
120070
+ */
118937
120071
  totalProfiles: number;
120072
+ /**
120073
+ * Identified people as a share of the total, normally 0 to 1 (0.42 is 42%). A drop here usually means a broken identify() call, not fewer visitors.
120074
+ */
118938
120075
  identifiedRate: number;
120076
+ /**
120077
+ * People with an ad touchpoint as a share of the total, normally 0 to 1. It counts click-id identifiers, so an identifier outliving its profile can push it just above 1 — read it as an indicator, not as a proportion to assert on.
120078
+ */
118939
120079
  adTouchpointRate: number;
120080
+ /**
120081
+ * How many of them an email or phone is known for — the people a message can actually be sent to.
120082
+ */
118940
120083
  identifiedProfiles: number;
120084
+ /**
120085
+ * How many people arrived carrying an ad click id. A proxy for paid reach: it counts anyone with at least one click id on record.
120086
+ */
118941
120087
  adTouchpointProfiles: number;
118942
120088
  }
118943
120089
  export interface TrackingInstallDomainsCreateInput {
@@ -118947,6 +120093,9 @@ export interface TrackingInstallDomainsCreateInput {
118947
120093
  domain: string;
118948
120094
  }
118949
120095
  export interface TrackingInstallDomainsCreateOutput {
120096
+ /**
120097
+ * The domain as stored after normalisation, which may differ from what was submitted
120098
+ */
118950
120099
  domain: string;
118951
120100
  }
118952
120101
  export interface TrackingInstallDomainsDeleteInput {
@@ -118956,19 +120105,43 @@ export interface TrackingInstallDomainsDeleteInput {
118956
120105
  domain: string;
118957
120106
  }
118958
120107
  export interface TrackingInstallDomainsDeleteOutput {
120108
+ /**
120109
+ * Always true — the domain was removed; a failure arrives as an error, not as false
120110
+ */
118959
120111
  ok: true;
118960
120112
  }
118961
120113
  export interface TrackingInstallDomainsListInput {
118962
120114
  }
118963
120115
  export interface TrackingInstallDomainsListOutput {
120116
+ /**
120117
+ * Domains sending events that nobody registered — usually a staging host, a typo, or an install worth adding
120118
+ */
118964
120119
  discovered: TrackingInstallDomainsListOutputItems[];
120120
+ /**
120121
+ * Domains deliberately put on the install checklist, each with whether its script has been seen
120122
+ */
118965
120123
  registered: TrackingInstallDomainsListOutputItems[];
120124
+ /**
120125
+ * Length in days of the lookback window the `seen` and `lastSeen` figures are measured over
120126
+ */
118966
120127
  windowDays: number;
118967
120128
  }
118968
120129
  export interface TrackingInstallDomainsListOutputItems {
120130
+ /**
120131
+ * Whether the tracking script actually sent an event from this domain inside the lookback window
120132
+ */
118969
120133
  seen: boolean;
120134
+ /**
120135
+ * Normalised domain name the status is reported for
120136
+ */
118970
120137
  domain: string;
120138
+ /**
120139
+ * ISO-8601 timestamp of the most recent event from this domain, or null if none arrived in the window
120140
+ */
118971
120141
  lastSeen: (string | null);
120142
+ /**
120143
+ * Whether the domain is on the install checklist on purpose, as opposed to merely observed sending events
120144
+ */
118972
120145
  registered: boolean;
118973
120146
  }
118974
120147
  export interface TrackingLinkDomainsCreateInput {
@@ -118978,6 +120151,9 @@ export interface TrackingLinkDomainsCreateInput {
118978
120151
  domain: string;
118979
120152
  }
118980
120153
  export interface TrackingLinkDomainsCreateOutput {
120154
+ /**
120155
+ * The domain as stored after normalisation, which may differ from what was submitted
120156
+ */
118981
120157
  domain: string;
118982
120158
  }
118983
120159
  export interface TrackingLinkDomainsDeleteInput {
@@ -118987,11 +120163,17 @@ export interface TrackingLinkDomainsDeleteInput {
118987
120163
  domain: string;
118988
120164
  }
118989
120165
  export interface TrackingLinkDomainsDeleteOutput {
120166
+ /**
120167
+ * Always true — the domain left the linking group; a failure arrives as an error, not as false
120168
+ */
118990
120169
  ok: true;
118991
120170
  }
118992
120171
  export interface TrackingLinkDomainsListInput {
118993
120172
  }
118994
120173
  export interface TrackingLinkDomainsListOutput {
120174
+ /**
120175
+ * Root domains in the linking group; the tracking script decorates links between any two of them so one visitor stays one visitor
120176
+ */
118995
120177
  domains: string[];
118996
120178
  }
118997
120179
  export interface TrackingLiveEventsListInput {
@@ -119009,22 +120191,70 @@ export interface TrackingLiveEventsListInput {
119009
120191
  domain?: string;
119010
120192
  }
119011
120193
  export interface TrackingLiveEventsListOutput {
120194
+ /**
120195
+ * Pass back as `since` to fetch what arrived after this page. Null when there is nothing older to page into.
120196
+ */
119012
120197
  cursor: (string | null);
120198
+ /**
120199
+ * The page of events, newest first.
120200
+ */
119013
120201
  events: {
120202
+ /**
120203
+ * Stable identifier of this single event; unique within the product and safe to deduplicate on across polls.
120204
+ */
119014
120205
  id: string;
120206
+ /**
120207
+ * When the event happened, as reported by the tracker (ISO 8601, UTC).
120208
+ */
119015
120209
  ts: string;
120210
+ /**
120211
+ * Page address the event fired on, query string included. Free text from the customer site, so it can carry personal data.
120212
+ */
119016
120213
  url: (string | null);
120214
+ /**
120215
+ * Event name as sent by the site, e.g. 'pageview' or a custom conversion name.
120216
+ */
119017
120217
  name: string;
120218
+ /**
120219
+ * Document title of that page at the time. Free text from the customer site, so it can carry personal data.
120220
+ */
119018
120221
  title: (string | null);
120222
+ /**
120223
+ * Site the event came from; null when the tracker could not determine one.
120224
+ */
119019
120225
  domain: (string | null);
120226
+ /**
120227
+ * Where this visit came from, as read off the landing URL and referrer. Every field is null when the visit carried nothing.
120228
+ */
119020
120229
  source: {
120230
+ /**
120231
+ * Address the visitor arrived from; null on a direct visit. Free text from the customer site, so it can carry personal data.
120232
+ */
119021
120233
  referrer: (string | null);
120234
+ /**
120235
+ * utm_medium of the landing URL, e.g. cpc; null when absent.
120236
+ */
119022
120237
  utmMedium: (string | null);
120238
+ /**
120239
+ * utm_source of the landing URL, e.g. newsletter; null when absent.
120240
+ */
119023
120241
  utmSource: (string | null);
120242
+ /**
120243
+ * Which ad-network click id was present on the landing URL, e.g. 'gclid'. Null when the visit carried none.
120244
+ */
119024
120245
  clickIdType: (string | null);
120246
+ /**
120247
+ * utm_campaign of the landing URL; null when absent.
120248
+ */
119025
120249
  utmCampaign: (string | null);
119026
120250
  };
120251
+ /**
120252
+ * Two-letter ISO 3166-1 alpha-2 country resolved from the request, e.g. DE; null when it could not be resolved.
120253
+ */
119027
120254
  country: (string | null);
120255
+ /**
120256
+ * Pseudonymous visitor id the person graph joins on. Null for a visitor who declined statistics consent or was never asked — those events arrive cookieless and carry no identifier at all.
120257
+ */
119028
120258
  anonymousId: (string | null);
119029
120259
  }[];
119030
120260
  }
@@ -119035,18 +120265,52 @@ export interface TrackingProfilesDeleteInput {
119035
120265
  profileId: string;
119036
120266
  }
119037
120267
  export interface TrackingProfilesDeleteOutput {
120268
+ /**
120269
+ * Always true: the response only exists when the erasure ran. A failure arrives as an error, not as ok=false.
120270
+ */
119038
120271
  ok: true;
120272
+ /**
120273
+ * What happened to the archived copy of the events. Postgres is erased synchronously; the archive is not, and this says so out loud.
120274
+ */
119039
120275
  archive: {
120276
+ /**
120277
+ * Plain-language reason the archived copy could not be deleted in the same breath — text meant to be quoted into a compliance record.
120278
+ */
119040
120279
  note: string;
120280
+ /**
120281
+ * Always gap_flagged: the archived copy is known to still hold this person and the gap has been recorded rather than silently ignored.
120282
+ */
119041
120283
  status: "gap_flagged";
119042
120284
  };
120285
+ /**
120286
+ * How much was actually destroyed, by kind. Worth recording: it is the evidence that the erasure did something.
120287
+ */
119043
120288
  deleted: {
120289
+ /**
120290
+ * Tracked events removed, found through the anonymous ids this person browsed under.
120291
+ */
119044
120292
  events: number;
120293
+ /**
120294
+ * Merge records removed — the history of this person having been joined with another.
120295
+ */
119045
120296
  merges: number;
120297
+ /**
120298
+ * Profile rows removed: 1 in practice, and 0 only if the row vanished between the lookup and the delete.
120299
+ */
119046
120300
  profile: number;
120301
+ /**
120302
+ * Emails, phones, anonymous ids and click ids removed for this person.
120303
+ */
119047
120304
  identifiers: number;
119048
120305
  };
120306
+ /**
120307
+ * The person who was erased. Nothing else of them remains, so this is all there is left to name them by.
120308
+ */
119049
120309
  profileId: string;
120310
+ /**
120311
+ * This erasure attempt. The completion event carries the same value under the same name, so a step recognises its own completion even when another workflow is erasing the same person at the same moment.
120312
+ */
120313
+ requestId: string;
119050
120314
  }
119051
120315
  export interface TrackingProfilesExportInput {
119052
120316
  /**
@@ -119055,52 +120319,172 @@ export interface TrackingProfilesExportInput {
119055
120319
  profileId: string;
119056
120320
  }
119057
120321
  export interface TrackingProfilesExportOutput {
120322
+ /**
120323
+ * The complete history, newest event first, capped at 50000 events — check `truncated` before treating it as complete.
120324
+ */
119058
120325
  journey: {
120326
+ /**
120327
+ * When the event happened, ISO 8601 UTC. The journey is ordered by this, newest first.
120328
+ */
119059
120329
  ts: string;
120330
+ /**
120331
+ * Opaque handle for this one event, unique inside the product. Use it to deduplicate, not to sort — it carries no order.
120332
+ */
119060
120333
  ref: string;
120334
+ /**
120335
+ * Full address of the page, query string included. Personal data — it can carry an email in a link. Null off-page.
120336
+ */
119061
120337
  url: (string | null);
120338
+ /**
120339
+ * What happened, as the tracking snippet named it: page_view, signup, purchase, or any custom name the product sends.
120340
+ */
119062
120341
  name: string;
120342
+ /**
120343
+ * Custom properties the product attached to this event. Free-form: the keys are whatever the snippet sent, and they differ by event name.
120344
+ */
119063
120345
  props: {
119064
120346
  [k: string]: unknown;
119065
120347
  };
120348
+ /**
120349
+ * Title of the page as the browser reported it. Null off-page.
120350
+ */
119066
120351
  title: (string | null);
120352
+ /**
120353
+ * Hostname the event was sent from. Null for an event with no page behind it, such as a server-side call.
120354
+ */
119067
120355
  domain: (string | null);
120356
+ /**
120357
+ * Campaign tags and ad click carried by this event, as they were on the URL at the time.
120358
+ */
119068
120359
  source: {
120360
+ /**
120361
+ * The ad click identifier on this URL, raw. Personal data: it resolves to one individual inside the ad network.
120362
+ */
119069
120363
  clickId: (string | null);
120364
+ /**
120365
+ * utm_term on the URL of this event — the keyword bought, on a paid-search arrival.
120366
+ */
119070
120367
  utmTerm: (string | null);
120368
+ /**
120369
+ * utm_medium on the URL of this event.
120370
+ */
119071
120371
  utmMedium: (string | null);
120372
+ /**
120373
+ * utm_source on the URL of THIS event — the campaign at this moment, not the one that first acquired the person.
120374
+ */
119072
120375
  utmSource: (string | null);
120376
+ /**
120377
+ * utm_content on the URL of this event — which creative or link variant was clicked.
120378
+ */
119073
120379
  utmContent: (string | null);
120380
+ /**
120381
+ * Which ad network stamped the click id below: gclid for Google Ads, fbclid for Meta. Null on a non-ad arrival.
120382
+ */
119074
120383
  clickIdType: (string | null);
120384
+ /**
120385
+ * utm_campaign on the URL of this event.
120386
+ */
119075
120387
  utmCampaign: (string | null);
119076
120388
  };
120389
+ /**
120390
+ * Two-letter ISO 3166-1 country the request came from, resolved from the IP at collection time. Null when it could not be resolved.
120391
+ */
119077
120392
  country: (string | null);
120393
+ /**
120394
+ * Where the person came from immediately before this event. Null on a direct arrival or off-page.
120395
+ */
119078
120396
  referrer: (string | null);
120397
+ /**
120398
+ * Handle for the browsing session this event belongs to; events sharing it happened in one sitting. Null for an event collected outside a session.
120399
+ */
119079
120400
  sessionId: (string | null);
119080
120401
  }[];
120402
+ /**
120403
+ * The person themselves: their handle, how far they have come, and when they were seen.
120404
+ */
119081
120405
  profile: {
120406
+ /**
120407
+ * How far the person has come: anonymous = only a browser behind them, identified = an email or phone is known, customer = they have paid at least once.
120408
+ */
119082
120409
  status: ("anonymous" | "identified" | "customer");
120410
+ /**
120411
+ * When this product first created the profile row, ISO 8601 UTC. Later than firstSeenAt when events were backfilled.
120412
+ */
119083
120413
  createdAt: string;
120414
+ /**
120415
+ * Stable handle for this person inside the product. Pass it to any other people step; it survives identity merges.
120416
+ */
119084
120417
  profileId: string;
120418
+ /**
120419
+ * Timestamp of their most recent event, ISO 8601 UTC — the freshness of everything else here.
120420
+ */
119085
120421
  lastSeenAt: string;
120422
+ /**
120423
+ * Timestamp of the earliest event on record for this person, ISO 8601 UTC.
120424
+ */
119086
120425
  firstSeenAt: string;
119087
120426
  };
120427
+ /**
120428
+ * Everything known about who this person is: the addresses they have been identified by, the ad clicks they arrived by, and the sites they were seen on. Every part of it is a list, and none of the lists names a primary.
120429
+ */
119088
120430
  signals: {
120431
+ /**
120432
+ * Every email this person has ever been identified by. Stably ordered for display and diffing — the position of an address says NOTHING about which one to contact, and this toolkit holds no primary. Usually one entry; a person who signed up twice has several.
120433
+ */
119089
120434
  emails: string[];
120435
+ /**
120436
+ * Every phone number this person has been identified by. Stably ordered for display and diffing only, with no primary among them.
120437
+ */
119090
120438
  phones: string[];
120439
+ /**
120440
+ * Distinct hostnames this person browsed, taken from their events — not an identifier type, just where they were.
120441
+ */
119091
120442
  domains: string[];
120443
+ /**
120444
+ * Every ad click this person arrived by, stably ordered and with no primary among them. Personal data: a click id resolves to one individual inside the ad network.
120445
+ */
119092
120446
  clickIds: {
120447
+ /**
120448
+ * Which ad network the click came from — gclid for Google Ads, fbclid for Meta. Open set.
120449
+ */
119093
120450
  type: string;
120451
+ /**
120452
+ * The click identifier itself, raw, as the network stamped it on the landing URL.
120453
+ */
119094
120454
  value: string;
119095
120455
  }[];
119096
120456
  };
120457
+ /**
120458
+ * True when the history hit the 50000-event cap and older events were left out. False means this export is everything held.
120459
+ */
119097
120460
  truncated: boolean;
120461
+ /**
120462
+ * When this export was produced, ISO 8601 UTC — the as-of date to put on a subject-access response.
120463
+ */
119098
120464
  exportedAt: string;
120465
+ /**
120466
+ * First touch: the campaign that brought this person in, frozen at their earliest event and never overwritten by later visits. Null for a person with no events at all.
120467
+ */
119099
120468
  acquisition: ({
120469
+ /**
120470
+ * Channel of that same first visit (utm_medium): cpc, email, social, and so on. Null when untagged.
120471
+ */
119100
120472
  utmMedium: (string | null);
120473
+ /**
120474
+ * Where the person came from on their very first visit — the utm_source of their earliest event. Null when they arrived with no campaign tags.
120475
+ */
119101
120476
  utmSource: (string | null);
120477
+ /**
120478
+ * Which ad network stamped the click that brought them in — gclid for Google Ads, fbclid for Meta. Null for a non-ad arrival. Open set: new networks appear without a release here.
120479
+ */
119102
120480
  clickIdType: (string | null);
120481
+ /**
120482
+ * When that first visit happened, ISO 8601 UTC. This is the timestamp of the earliest event, not when the profile row was written.
120483
+ */
119103
120484
  firstSeenAt: string;
120485
+ /**
120486
+ * Campaign of that same first visit (utm_campaign). Null when untagged.
120487
+ */
119104
120488
  utmCampaign: (string | null);
119105
120489
  } | null);
119106
120490
  }
@@ -119114,76 +120498,226 @@ export interface TrackingProfilesGetInput {
119114
120498
  */
119115
120499
  journeyLimit?: number;
119116
120500
  /**
119117
- * Opaque cursor to page further back through the journey
120501
+ * Continue paging back through the journey: pass the cursor the previous page returned. Omit to start at the most recent event.
119118
120502
  */
119119
120503
  journeyCursor?: string;
119120
120504
  }
119121
120505
  export interface TrackingProfilesGetOutput {
120506
+ /**
120507
+ * Lifetime value of this person, per currency. Null when revenue tracking is not in use for the product.
120508
+ */
119122
120509
  ltv: ({
120510
+ /**
120511
+ * One row per currency this person has paid in. Empty for someone who never paid; there is no cross-currency total, because converting would need a rate this toolkit does not hold.
120512
+ */
119123
120513
  entries: {
120514
+ /**
120515
+ * ISO 4217 code the amounts beside it are denominated in, e.g. EUR. One entry per code the person ever paid in.
120516
+ */
119124
120517
  currency: string;
120518
+ /**
120519
+ * What the business actually kept: gross minus refunded, in minor units. This is the number to rank customers by.
120520
+ */
119125
120521
  netMinor: number;
120522
+ /**
120523
+ * Everything the person was ever charged, in minor units (1250 = 12.50 EUR). Refunds are not subtracted here.
120524
+ */
119126
120525
  grossMinor: number;
120526
+ /**
120527
+ * Their most recent payment in this currency, ISO 8601 UTC — how live the relationship is.
120528
+ */
119127
120529
  lastPaymentAt: (string | null);
120530
+ /**
120531
+ * How much of the gross went back to them, in minor units. Zero for a person who never had a refund.
120532
+ */
119128
120533
  refundedMinor: number;
120534
+ /**
120535
+ * When this person first paid in this currency, ISO 8601 UTC. Null when the totals were computed without a dated payment.
120536
+ */
119129
120537
  firstPaymentAt: (string | null);
119130
120538
  }[];
120539
+ /**
120540
+ * The person these totals belong to — the same handle as profile.profileId.
120541
+ */
119131
120542
  profileId: string;
120543
+ /**
120544
+ * When these totals were last recomputed, ISO 8601 UTC. Null when they have never been computed.
120545
+ */
119132
120546
  computedAt: (string | null);
119133
120547
  } | null);
120548
+ /**
120549
+ * What this person did, newest first, one page at a time. Use the export step instead when the whole history is wanted in one go.
120550
+ */
119134
120551
  journey: {
120552
+ /**
120553
+ * Pass back as `journeyCursor` to page further back in time. Null once the journey is exhausted.
120554
+ */
119135
120555
  cursor: (string | null);
120556
+ /**
120557
+ * This page of the journey, newest event first.
120558
+ */
119136
120559
  events: {
120560
+ /**
120561
+ * When the event happened, ISO 8601 UTC. The journey is ordered by this, newest first.
120562
+ */
119137
120563
  ts: string;
120564
+ /**
120565
+ * Opaque handle for this one event, unique inside the product. Use it to deduplicate, not to sort — it carries no order.
120566
+ */
119138
120567
  ref: string;
120568
+ /**
120569
+ * Full address of the page, query string included. Personal data — it can carry an email in a link. Null off-page.
120570
+ */
119139
120571
  url: (string | null);
120572
+ /**
120573
+ * What happened, as the tracking snippet named it: page_view, signup, purchase, or any custom name the product sends.
120574
+ */
119140
120575
  name: string;
120576
+ /**
120577
+ * Custom properties the product attached to this event. Free-form: the keys are whatever the snippet sent, and they differ by event name.
120578
+ */
119141
120579
  props: {
119142
120580
  [k: string]: unknown;
119143
120581
  };
120582
+ /**
120583
+ * Title of the page as the browser reported it. Null off-page.
120584
+ */
119144
120585
  title: (string | null);
120586
+ /**
120587
+ * Hostname the event was sent from. Null for an event with no page behind it, such as a server-side call.
120588
+ */
119145
120589
  domain: (string | null);
120590
+ /**
120591
+ * Campaign tags and ad click carried by this event, as they were on the URL at the time.
120592
+ */
119146
120593
  source: {
120594
+ /**
120595
+ * The ad click identifier on this URL, raw. Personal data: it resolves to one individual inside the ad network.
120596
+ */
119147
120597
  clickId: (string | null);
120598
+ /**
120599
+ * utm_term on the URL of this event — the keyword bought, on a paid-search arrival.
120600
+ */
119148
120601
  utmTerm: (string | null);
120602
+ /**
120603
+ * utm_medium on the URL of this event.
120604
+ */
119149
120605
  utmMedium: (string | null);
120606
+ /**
120607
+ * utm_source on the URL of THIS event — the campaign at this moment, not the one that first acquired the person.
120608
+ */
119150
120609
  utmSource: (string | null);
120610
+ /**
120611
+ * utm_content on the URL of this event — which creative or link variant was clicked.
120612
+ */
119151
120613
  utmContent: (string | null);
120614
+ /**
120615
+ * Which ad network stamped the click id below: gclid for Google Ads, fbclid for Meta. Null on a non-ad arrival.
120616
+ */
119152
120617
  clickIdType: (string | null);
120618
+ /**
120619
+ * utm_campaign on the URL of this event.
120620
+ */
119153
120621
  utmCampaign: (string | null);
119154
120622
  };
120623
+ /**
120624
+ * Two-letter ISO 3166-1 country the request came from, resolved from the IP at collection time. Null when it could not be resolved.
120625
+ */
119155
120626
  country: (string | null);
120627
+ /**
120628
+ * Where the person came from immediately before this event. Null on a direct arrival or off-page.
120629
+ */
119156
120630
  referrer: (string | null);
120631
+ /**
120632
+ * Handle for the browsing session this event belongs to; events sharing it happened in one sitting. Null for an event collected outside a session.
120633
+ */
119157
120634
  sessionId: (string | null);
119158
120635
  }[];
119159
120636
  };
120637
+ /**
120638
+ * The person themselves: their handle, how far they have come, and when they were seen.
120639
+ */
119160
120640
  profile: {
120641
+ /**
120642
+ * How far the person has come: anonymous = only a browser behind them, identified = an email or phone is known, customer = they have paid at least once.
120643
+ */
119161
120644
  status: ("anonymous" | "identified" | "customer");
120645
+ /**
120646
+ * When this product first created the profile row, ISO 8601 UTC. Later than firstSeenAt when events were backfilled.
120647
+ */
119162
120648
  createdAt: string;
120649
+ /**
120650
+ * Stable handle for this person inside the product. Pass it to any other people step; it survives identity merges.
120651
+ */
119163
120652
  profileId: string;
120653
+ /**
120654
+ * Timestamp of their most recent event, ISO 8601 UTC — the freshness of everything else here.
120655
+ */
119164
120656
  lastSeenAt: string;
120657
+ /**
120658
+ * Timestamp of the earliest event on record for this person, ISO 8601 UTC.
120659
+ */
119165
120660
  firstSeenAt: string;
119166
120661
  };
120662
+ /**
120663
+ * Everything known about who this person is: the addresses they have been identified by, the ad clicks they arrived by, and the sites they were seen on. Every part of it is a list, and none of the lists names a primary.
120664
+ */
119167
120665
  signals: {
120666
+ /**
120667
+ * Every email this person has ever been identified by. Stably ordered for display and diffing — the position of an address says NOTHING about which one to contact, and this toolkit holds no primary. Usually one entry; a person who signed up twice has several.
120668
+ */
119168
120669
  emails: string[];
120670
+ /**
120671
+ * Every phone number this person has been identified by. Stably ordered for display and diffing only, with no primary among them.
120672
+ */
119169
120673
  phones: string[];
120674
+ /**
120675
+ * Distinct hostnames this person browsed, taken from their events — not an identifier type, just where they were.
120676
+ */
119170
120677
  domains: string[];
120678
+ /**
120679
+ * Every ad click this person arrived by, stably ordered and with no primary among them. Personal data: a click id resolves to one individual inside the ad network.
120680
+ */
119171
120681
  clickIds: {
120682
+ /**
120683
+ * Which ad network the click came from — gclid for Google Ads, fbclid for Meta. Open set.
120684
+ */
119172
120685
  type: string;
120686
+ /**
120687
+ * The click identifier itself, raw, as the network stamped it on the landing URL.
120688
+ */
119173
120689
  value: string;
119174
120690
  }[];
119175
120691
  };
120692
+ /**
120693
+ * First touch: the campaign that brought this person in, frozen at their earliest event and never overwritten by later visits. Null for a person with no events at all.
120694
+ */
119176
120695
  acquisition: ({
120696
+ /**
120697
+ * Channel of that same first visit (utm_medium): cpc, email, social, and so on. Null when untagged.
120698
+ */
119177
120699
  utmMedium: (string | null);
120700
+ /**
120701
+ * Where the person came from on their very first visit — the utm_source of their earliest event. Null when they arrived with no campaign tags.
120702
+ */
119178
120703
  utmSource: (string | null);
120704
+ /**
120705
+ * Which ad network stamped the click that brought them in — gclid for Google Ads, fbclid for Meta. Null for a non-ad arrival. Open set: new networks appear without a release here.
120706
+ */
119179
120707
  clickIdType: (string | null);
120708
+ /**
120709
+ * When that first visit happened, ISO 8601 UTC. This is the timestamp of the earliest event, not when the profile row was written.
120710
+ */
119180
120711
  firstSeenAt: string;
120712
+ /**
120713
+ * Campaign of that same first visit (utm_campaign). Null when untagged.
120714
+ */
119181
120715
  utmCampaign: (string | null);
119182
120716
  } | null);
119183
120717
  }
119184
120718
  export interface TrackingProfilesListInput {
119185
120719
  /**
119186
- * Exact email to find (case-insensitive), or a prefix when emailMatch=prefix
120720
+ * Email to search people by — the whole address by default, or its beginning when emailMatch is prefix. Omit to search across everyone.
119187
120721
  */
119188
120722
  email?: string;
119189
120723
  /**
@@ -119191,126 +120725,357 @@ export interface TrackingProfilesListInput {
119191
120725
  */
119192
120726
  limit?: number;
119193
120727
  /**
119194
- * Opaque pagination cursor from a previous response
120728
+ * Continue a previous page: pass the cursor that page returned. Omit to start from the most recently seen person.
119195
120729
  */
119196
120730
  cursor?: string;
119197
120731
  /**
119198
- * Filter by profile status
120732
+ * Keep only people at this stage — anonymous, identified or customer. Omit to get all three.
119199
120733
  */
119200
120734
  status?: ("anonymous" | "identified" | "customer");
119201
120735
  /**
119202
- * How to match the email filter
120736
+ * How the email filter is matched: exact (default) compares the whole address case-insensitively, prefix matches everyone whose address starts with what you typed.
119203
120737
  */
119204
120738
  emailMatch?: ("exact" | "prefix");
119205
120739
  }
119206
120740
  export interface TrackingProfilesListOutput {
120741
+ /**
120742
+ * Pass this back as `cursor` to fetch the next page. Null on the last page — that null is how a loop knows to stop.
120743
+ */
119207
120744
  cursor: (string | null);
120745
+ /**
120746
+ * The page of people, most recently seen first. Shorter than the requested limit on the last page.
120747
+ */
119208
120748
  profiles: {
120749
+ /**
120750
+ * Every email this person has been identified by. Stably ordered for display, with no primary among them — position 0 is not the address to contact.
120751
+ */
119209
120752
  emails: string[];
120753
+ /**
120754
+ * How far this person has come: anonymous = only a browser, identified = an email or phone is known, customer = they have paid.
120755
+ */
119210
120756
  status: ("anonymous" | "identified" | "customer");
120757
+ /**
120758
+ * Stable handle for this person. Feed it to a get, export or erase step.
120759
+ */
119211
120760
  profileId: string;
120761
+ /**
120762
+ * Timestamp of their most recent event, ISO 8601 UTC. The page is ordered by this, newest first.
120763
+ */
119212
120764
  lastSeenAt: string;
120765
+ /**
120766
+ * First touch: the campaign that brought this person in, frozen at their earliest event and never overwritten by later visits. Null for a person with no events at all.
120767
+ */
119213
120768
  acquisition: ({
120769
+ /**
120770
+ * Channel of that same first visit (utm_medium): cpc, email, social, and so on. Null when untagged.
120771
+ */
119214
120772
  utmMedium: (string | null);
120773
+ /**
120774
+ * Where the person came from on their very first visit — the utm_source of their earliest event. Null when they arrived with no campaign tags.
120775
+ */
119215
120776
  utmSource: (string | null);
120777
+ /**
120778
+ * Which ad network stamped the click that brought them in — gclid for Google Ads, fbclid for Meta. Null for a non-ad arrival. Open set: new networks appear without a release here.
120779
+ */
119216
120780
  clickIdType: (string | null);
120781
+ /**
120782
+ * When that first visit happened, ISO 8601 UTC. This is the timestamp of the earliest event, not when the profile row was written.
120783
+ */
119217
120784
  firstSeenAt: string;
120785
+ /**
120786
+ * Campaign of that same first visit (utm_campaign). Null when untagged.
120787
+ */
119218
120788
  utmCampaign: (string | null);
119219
120789
  } | null);
120790
+ /**
120791
+ * Timestamp of their earliest event, ISO 8601 UTC.
120792
+ */
119220
120793
  firstSeenAt: string;
119221
120794
  }[];
119222
120795
  }
119223
120796
  export interface TrackingReportsAttributedJourneyInput {
120797
+ /**
120798
+ * Show only journey events at or before this instant (ISO). Omit for the whole history.
120799
+ */
119224
120800
  to?: string;
120801
+ /**
120802
+ * Show only journey events at or after this instant (ISO). Omit for the whole history.
120803
+ */
119225
120804
  from?: string;
120805
+ /**
120806
+ * Attribution model to explain the decision under; re-reads the same history, so switching it is free (default 'last_click').
120807
+ */
119226
120808
  model?: ("last_click" | "first_click");
119227
120809
  /**
119228
120810
  * The profile id (uuid)
119229
120811
  */
119230
120812
  profileId: string;
120813
+ /**
120814
+ * How far back before the conversion a touchpoint may be credited, in days (default 30).
120815
+ */
119231
120816
  lookbackDays?: number;
119232
120817
  }
119233
120818
  export interface TrackingReportsAttributedJourneyOutput {
120819
+ /**
120820
+ * What this person actually did, in order.
120821
+ */
119234
120822
  journey: {
120823
+ /**
120824
+ * Every tracked event for this person inside the requested window, oldest first.
120825
+ */
119235
120826
  events: {
120827
+ /**
120828
+ * When the event happened (ISO 8601, UTC). Events are ordered oldest first.
120829
+ */
119236
120830
  ts: string;
120831
+ /**
120832
+ * Handle for this event within the journey; `decisions[].winnerRef` points back at one of these to name the winning touchpoint.
120833
+ */
119237
120834
  ref: string;
120835
+ /**
120836
+ * Page address the event fired on. Free text from the customer site, so it can carry personal data.
120837
+ */
119238
120838
  url: (string | null);
120839
+ /**
120840
+ * Event name as sent by the site, e.g. 'pageview' or a custom conversion name.
120841
+ */
119239
120842
  name: string;
120843
+ /**
120844
+ * Custom properties the site attached to this event. Shape is the customer's, so it can carry anything, personal data included.
120845
+ */
119240
120846
  props: {
119241
120847
  [k: string]: unknown;
119242
120848
  };
120849
+ /**
120850
+ * Document title of that page. Free text from the customer site, so it can carry personal data.
120851
+ */
119243
120852
  title: (string | null);
120853
+ /**
120854
+ * Site the event came from; null when the tracker could not determine one.
120855
+ */
119244
120856
  domain: (string | null);
120857
+ /**
120858
+ * Where this event's visit came from, as read off the landing URL. Every field is null when the visit carried nothing.
120859
+ */
119245
120860
  source: {
120861
+ /**
120862
+ * The click id value itself. Identifies one ad click by this person, so treat it as personal data.
120863
+ */
119246
120864
  clickId: (string | null);
120865
+ /**
120866
+ * utm_term of the landing URL, the paid keyword; null when absent.
120867
+ */
119247
120868
  utmTerm: (string | null);
120869
+ /**
120870
+ * utm_medium of the landing URL; null when absent.
120871
+ */
119248
120872
  utmMedium: (string | null);
120873
+ /**
120874
+ * utm_source of the landing URL; null when absent.
120875
+ */
119249
120876
  utmSource: (string | null);
120877
+ /**
120878
+ * utm_content of the landing URL, the creative variant; null when absent.
120879
+ */
119250
120880
  utmContent: (string | null);
120881
+ /**
120882
+ * Which ad-network click id was present, e.g. 'gclid'; null when the visit carried none.
120883
+ */
119251
120884
  clickIdType: (string | null);
120885
+ /**
120886
+ * utm_campaign of the landing URL; null when absent.
120887
+ */
119252
120888
  utmCampaign: (string | null);
119253
120889
  };
120890
+ /**
120891
+ * Two-letter ISO 3166-1 alpha-2 country resolved from the request, e.g. DE; null when it could not be resolved.
120892
+ */
119254
120893
  country: (string | null);
120894
+ /**
120895
+ * Address the visitor arrived from; null on a direct visit. Free text from the customer site, so it can carry personal data.
120896
+ */
119255
120897
  referrer: (string | null);
120898
+ /**
120899
+ * Visit this event belongs to; events sharing one happened in the same sitting. Null when no session could be established.
120900
+ */
119256
120901
  sessionId: (string | null);
119257
120902
  }[];
119258
120903
  };
119259
- decisions: {
119260
- model: ("last_click" | "first_click");
119261
- reason: string;
119262
- revenue: {
119263
- currency: string;
119264
- netMinor: number;
119265
- grossMinor: number;
119266
- refundedMinor: number;
119267
- }[];
119268
- winnerRef: (string | null);
119269
- conversionTs: string;
119270
- lookbackDays: number;
119271
- winningTouchpoint: ({
119272
- ts: string;
119273
- channel: ("paid" | "organic" | "direct" | "email");
119274
- utmMedium: (string | null);
119275
- utmSource: (string | null);
119276
- clickIdType: (string | null);
119277
- utmCampaign: (string | null);
119278
- } | null);
119279
- }[];
120904
+ /**
120905
+ * Holds at most one entry: the decision for this person's originating conversion, present only when that conversion falls inside the requested window. Kept as a list for callers that already read it; `originatingDecision` is the same value at a bindable path.
120906
+ */
120907
+ decisions: TrackingReportsAttributedJourneyOutputItems[];
120908
+ /**
120909
+ * The person this journey belongs to, echoed back from the request.
120910
+ */
119280
120911
  profileId: string;
120912
+ /**
120913
+ * The attribution decision for this person's originating conversion — the same value as `decisions[0]`, at a path a workflow can bind. Null means the decision is not in THIS window, not that the person never converted: a conversion before `from` or after `to` is excluded here while still being their originating one. Widen the window to see it.
120914
+ */
120915
+ originatingDecision: (TrackingReportsAttributedJourneyOutputItems | null);
120916
+ }
120917
+ export interface TrackingReportsAttributedJourneyOutputItems {
120918
+ /**
120919
+ * Attribution model the winner was picked under, echoed back from the request.
120920
+ */
120921
+ model: ("last_click" | "first_click");
120922
+ /**
120923
+ * Why this touchpoint won, or why nothing did, in a sentence a person can read.
120924
+ */
120925
+ reason: string;
120926
+ /**
120927
+ * Revenue of that conversion, one row per currency.
120928
+ */
120929
+ revenue: {
120930
+ /**
120931
+ * ISO 4217 code the amounts below are denominated in, e.g. EUR.
120932
+ */
120933
+ currency: string;
120934
+ /**
120935
+ * `grossMinor` minus `refundedMinor`, in minor units of `currency`. This is the figure to report.
120936
+ */
120937
+ netMinor: number;
120938
+ /**
120939
+ * Billed amount before refunds, in minor units of `currency` (cents for EUR).
120940
+ */
120941
+ grossMinor: number;
120942
+ /**
120943
+ * Amount refunded out of `grossMinor`, in minor units of `currency`.
120944
+ */
120945
+ refundedMinor: number;
120946
+ }[];
120947
+ /**
120948
+ * `journey.events[].ref` of the touchpoint that won the credit. Null when nothing inside the window qualified.
120949
+ */
120950
+ winnerRef: (string | null);
120951
+ /**
120952
+ * When the conversion this decision explains happened (ISO 8601, UTC).
120953
+ */
120954
+ conversionTs: string;
120955
+ /**
120956
+ * How far back before `conversionTs` a touchpoint was allowed to be credited, in days; echoed back.
120957
+ */
120958
+ lookbackDays: number;
120959
+ /**
120960
+ * The winning touchpoint spelled out, so a reader need not resolve `winnerRef`. Null exactly when `winnerRef` is null.
120961
+ */
120962
+ winningTouchpoint: ({
120963
+ /**
120964
+ * When the winning touchpoint happened (ISO 8601, UTC).
120965
+ */
120966
+ ts: string;
120967
+ /**
120968
+ * Channel the winning touchpoint belongs to.
120969
+ */
120970
+ channel: ("paid" | "organic" | "direct" | "email");
120971
+ /**
120972
+ * utm_medium of the winning touchpoint; null when it carried none.
120973
+ */
120974
+ utmMedium: (string | null);
120975
+ /**
120976
+ * utm_source of the winning touchpoint; null when it carried none.
120977
+ */
120978
+ utmSource: (string | null);
120979
+ /**
120980
+ * Campaign id carried by our own `_lt_campaign` landing-URL parameter; null when the visit carried none.
120981
+ */
120982
+ ltCampaign?: (string | null);
120983
+ /**
120984
+ * Ad-network click id present on the winning touchpoint, e.g. 'gclid'; null when it carried none.
120985
+ */
120986
+ clickIdType: (string | null);
120987
+ /**
120988
+ * utm_campaign of the winning touchpoint; null when it carried none.
120989
+ */
120990
+ utmCampaign: (string | null);
120991
+ } | null);
119281
120992
  }
119282
120993
  export interface TrackingReportsEventVolumeInput {
119283
- to: string;
119284
- from: string;
120994
+ /**
120995
+ * End of the range to count, inclusive (ISO 8601). Optional — defaults to the moment of the call.
120996
+ */
120997
+ to?: string;
120998
+ /**
120999
+ * Start of the range to count, inclusive (ISO 8601). Optional — defaults to 30 days back, the start of that UTC day.
121000
+ */
121001
+ from?: string;
121002
+ /**
121003
+ * Count only this site. Omit to count every site the product sends from.
121004
+ */
119285
121005
  domain?: string;
119286
121006
  }
119287
121007
  export interface TrackingReportsEventVolumeOutput {
121008
+ /**
121009
+ * End of the range the figures cover, echoed back (ISO 8601, UTC).
121010
+ */
119288
121011
  to: string;
121012
+ /**
121013
+ * Start of the range the figures cover, echoed back (ISO 8601, UTC).
121014
+ */
119289
121015
  from: string;
121016
+ /**
121017
+ * Site the figures were restricted to; null when every site of the product is included.
121018
+ */
119290
121019
  domain: (string | null);
121020
+ /**
121021
+ * When this report was computed (ISO 8601, UTC).
121022
+ */
119291
121023
  computedAt: string;
121024
+ /**
121025
+ * How COMPLETE the two headline figures above are. Contains no metric of its own — never present a field of it as a headline number and never add it to anything. consentGrantedEvents + cookielessEvents + noBannerEvents = totalEvents.
121026
+ */
119292
121027
  dataQuality: {
121028
+ /**
121029
+ * Fraction of `totalEvents` (0..1) that came from sites running no consent banner, where nobody was ever asked.
121030
+ */
119293
121031
  noBannerShare: number;
121032
+ /**
121033
+ * Events from sites with no consent banner. Kept apart from `cookielessEvents` on purpose: nobody refused here, nobody was asked.
121034
+ */
119294
121035
  noBannerEvents: number;
121036
+ /**
121037
+ * How many UTC days the range spans; each one re-counts a returning declining visitor.
121038
+ */
119295
121039
  utcDaysInRange: number;
121040
+ /**
121041
+ * Fraction of `totalEvents` (0..1) that came from visitors who declined statistics consent.
121042
+ */
119296
121043
  cookielessShare: number;
121044
+ /**
121045
+ * Events from visitors who declined; no cookie was written and no identifier sent.
121046
+ */
119297
121047
  cookielessEvents: number;
121048
+ /**
121049
+ * Events carrying an anonymous id. A different cut that overlaps the three consent buckets — it is not the complement of `cookielessEvents` and must never be added to it.
121050
+ */
119298
121051
  identifiedEvents: number;
121052
+ /**
121053
+ * True when `visitorsDeduplicatedPerUtcDay` over-counts for this range: the range spans more than one UTC day and there is declining traffic in it.
121054
+ */
119299
121055
  visitorsOverstated: boolean;
121056
+ /**
121057
+ * Events from visitors who granted statistics consent.
121058
+ */
119300
121059
  consentGrantedEvents: number;
119301
121060
  };
121061
+ /**
121062
+ * How many events arrived in the range, across every consent state.
121063
+ */
119302
121064
  totalEvents: number;
121065
+ /**
121066
+ * How many PEOPLE those events came from: one COUNT DISTINCT over consenting visitors (by anonymous id) and declining visitors (by a daily key destroyed each UTC midnight) at once. Over a range longer than one UTC day this is an OVER-count of the declining half — read `dataQuality.visitorsOverstated` before reporting it.
121067
+ */
119303
121068
  visitorsDeduplicatedPerUtcDay: number;
119304
121069
  }
119305
121070
  export interface TrackingReportsRevenueBySourceInput {
119306
121071
  /**
119307
- * Cohort window end (ISO)
121072
+ * Cohort window end (ISO). Optional — defaults to the moment of the call.
119308
121073
  */
119309
- to: string;
121074
+ to?: string;
119310
121075
  /**
119311
- * Cohort window start (ISO); selects conversions by subscription start
121076
+ * Cohort window start (ISO); selects conversions by subscription start. Optional — defaults to 30 days back, the start of that UTC day.
119312
121077
  */
119313
- from: string;
121078
+ from?: string;
119314
121079
  /**
119315
121080
  * Attribution model
119316
121081
  */
@@ -119325,53 +121090,149 @@ export interface TrackingReportsRevenueBySourceInput {
119325
121090
  lookbackDays?: number;
119326
121091
  }
119327
121092
  export interface TrackingReportsRevenueBySourceOutput {
121093
+ /**
121094
+ * End of the cohort window the figures cover, echoed back (ISO 8601, UTC).
121095
+ */
119328
121096
  to: string;
121097
+ /**
121098
+ * Start of the cohort window the figures cover, echoed back (ISO 8601, UTC).
121099
+ */
119329
121100
  from: string;
121101
+ /**
121102
+ * Attribution model the credit was assigned under, echoed back. Pass the same value to `tracking_reports_source_people` to drill into a row.
121103
+ */
119330
121104
  model: ("last_click" | "first_click");
121105
+ /**
121106
+ * Site touchpoints were restricted to; null when every site of the product was considered.
121107
+ */
119331
121108
  domain: (string | null);
121109
+ /**
121110
+ * Every channel plus `unattributed`. This is the whole window, not the attributed part of it.
121111
+ */
119332
121112
  totals: {
121113
+ /**
121114
+ * Revenue over every channel plus `unattributed`, one row per currency.
121115
+ */
119333
121116
  revenue: TrackingReportsRevenueBySourceOutputItems[];
121117
+ /**
121118
+ * Distinct paying people over every channel plus `unattributed`.
121119
+ */
119334
121120
  customers: number;
119335
121121
  };
121122
+ /**
121123
+ * One row per channel that earned revenue in the window. Channels with none are omitted.
121124
+ */
119336
121125
  channels: {
121126
+ /**
121127
+ * Which acquisition channel this row aggregates.
121128
+ */
119337
121129
  channel: ("paid" | "organic" | "direct" | "email");
121130
+ /**
121131
+ * Revenue credited to this channel, one row per currency, ordered by currency code. Currencies are never summed, so there is no single figure here: a product trading in two currencies has two rows and both must be reported.
121132
+ */
119338
121133
  revenue: TrackingReportsRevenueBySourceOutputItems[];
121134
+ /**
121135
+ * Distinct paying people credited to this channel.
121136
+ */
119339
121137
  customers: number;
121138
+ /**
121139
+ * The channel split by UTM combination. Each row is a drill-down target for `tracking_reports_source_people`.
121140
+ */
119340
121141
  utmBreakdown: {
121142
+ /**
121143
+ * Revenue credited to this UTM combination, one row per currency.
121144
+ */
119341
121145
  revenue: TrackingReportsRevenueBySourceOutputItems[];
121146
+ /**
121147
+ * Distinct paying people credited to this UTM combination.
121148
+ */
119342
121149
  customers: number;
121150
+ /**
121151
+ * utm_medium of this row; null when the visit carried none.
121152
+ */
119343
121153
  utmMedium: (string | null);
121154
+ /**
121155
+ * utm_source of this row; null when the visit carried none.
121156
+ */
119344
121157
  utmSource: (string | null);
121158
+ /**
121159
+ * Ad-network click id present on the visit, e.g. 'gclid'; null when it carried none.
121160
+ */
119345
121161
  clickIdType: (string | null);
121162
+ /**
121163
+ * utm_campaign of this row; null when the visit carried none.
121164
+ */
119346
121165
  utmCampaign: (string | null);
119347
121166
  }[];
119348
121167
  }[];
121168
+ /**
121169
+ * Fraction of paying people (0..1) a touchpoint could be found for: attributed customers over `totals.customers`. Count-based, never revenue-weighted.
121170
+ */
119349
121171
  matchRate: number;
121172
+ /**
121173
+ * When this report was computed (ISO 8601, UTC).
121174
+ */
119350
121175
  computedAt: string;
121176
+ /**
121177
+ * How far back before a conversion a touchpoint was allowed to be credited, in days; echoed back.
121178
+ */
119351
121179
  lookbackDays: number;
121180
+ /**
121181
+ * Revenue that reached no channel — kept as its own row so the channel rows are never quietly inflated to cover it.
121182
+ */
119352
121183
  unattributed: {
121184
+ /**
121185
+ * Revenue no touchpoint could be credited for, one row per currency.
121186
+ */
119353
121187
  revenue: TrackingReportsRevenueBySourceOutputItems[];
121188
+ /**
121189
+ * Distinct paying people no touchpoint could be credited for.
121190
+ */
119354
121191
  customers: number;
119355
121192
  };
119356
121193
  }
119357
121194
  export interface TrackingReportsRevenueBySourceOutputItems {
121195
+ /**
121196
+ * ISO 4217 code the amounts below are denominated in, e.g. EUR.
121197
+ */
119358
121198
  currency: string;
121199
+ /**
121200
+ * `grossMinor` minus `refundedMinor`, in minor units of `currency`. This is the figure to report.
121201
+ */
119359
121202
  netMinor: number;
121203
+ /**
121204
+ * Billed amount before refunds, in minor units of `currency` (cents for EUR).
121205
+ */
119360
121206
  grossMinor: number;
121207
+ /**
121208
+ * Amount refunded out of `grossMinor`, in minor units of `currency`.
121209
+ */
119361
121210
  refundedMinor: number;
119362
121211
  }
119363
121212
  export interface TrackingReportsSourcePeopleInput {
119364
- to: string;
119365
- from: string;
121213
+ /**
121214
+ * Cohort window end (ISO); must match the report this row came from. Optional — defaults to the moment of the call.
121215
+ */
121216
+ to?: string;
121217
+ /**
121218
+ * Cohort window start (ISO); must match the report this row came from. Optional — defaults to 30 days back, the start of that UTC day.
121219
+ */
121220
+ from?: string;
119366
121221
  /**
119367
121222
  * People per page (default 50, max 200)
119368
121223
  */
119369
121224
  limit?: number;
121225
+ /**
121226
+ * Attribution model to credit the touchpoint under; must match the report this row came from (default 'last_click').
121227
+ */
119370
121228
  model?: ("last_click" | "first_click");
119371
121229
  /**
119372
121230
  * Opaque keyset cursor from a previous page
119373
121231
  */
119374
121232
  cursor?: string;
121233
+ /**
121234
+ * Only consider touchpoints on this domain; must match the report this row came from. Omit for no restriction.
121235
+ */
119375
121236
  domain?: string;
119376
121237
  /**
119377
121238
  * Channel to drill into
@@ -119381,26 +121242,71 @@ export interface TrackingReportsSourcePeopleInput {
119381
121242
  * Comma-separated dimension names (utmSource,utmMedium,utmCampaign,clickIdType) that must be IS NULL
119382
121243
  */
119383
121244
  utmNulls?: string;
121245
+ /**
121246
+ * utm_medium of the breakdown row to drill into. Omit for no filter; to match the IS-NULL row, list it in utmNulls instead.
121247
+ */
119384
121248
  utmMedium?: string;
121249
+ /**
121250
+ * utm_source of the breakdown row to drill into. Omit for no filter; to match the IS-NULL row, list it in utmNulls instead.
121251
+ */
119385
121252
  utmSource?: string;
119386
121253
  /**
119387
121254
  * Native click-id type of the breakdown row to drill into (e.g. 'gclid'). Tri-state: omit for no filter (all click ids), pass a value to match it, or list 'clickIdType' in utmNulls to match the IS-NULL row.
119388
121255
  */
119389
121256
  clickIdType?: string;
121257
+ /**
121258
+ * utm_campaign of the breakdown row to drill into. Omit for no filter; to match the IS-NULL row, list it in utmNulls instead.
121259
+ */
119390
121260
  utmCampaign?: string;
121261
+ /**
121262
+ * How far back before a conversion a touchpoint may be credited, in days; must match the report this row came from (default 30).
121263
+ */
119391
121264
  lookbackDays?: number;
119392
121265
  }
119393
121266
  export interface TrackingReportsSourcePeopleOutput {
121267
+ /**
121268
+ * Pass back as `cursor` for the next page. Null on the last page.
121269
+ */
119394
121270
  cursor: (string | null);
121271
+ /**
121272
+ * The page of people behind the requested row, ordered by the keyset the cursor walks.
121273
+ */
119395
121274
  people: {
121275
+ /**
121276
+ * Where this person stands in their subscription lifecycle, e.g. active or churned.
121277
+ */
119396
121278
  status: string;
121279
+ /**
121280
+ * Identifier of this person; pass it to `tracking_reports_attributed_journey` to see why they were credited here.
121281
+ */
119397
121282
  profileId: string;
121283
+ /**
121284
+ * Most recent tracked activity for this person (ISO 8601, UTC); null when none was recorded.
121285
+ */
119398
121286
  lastSeenAt: (string | null);
121287
+ /**
121288
+ * Earliest tracked activity for this person (ISO 8601, UTC); null when none was recorded.
121289
+ */
119399
121290
  firstSeenAt: (string | null);
121291
+ /**
121292
+ * Lifetime revenue credited to this person under the requested model, one row per currency.
121293
+ */
119400
121294
  attributedRevenue: {
121295
+ /**
121296
+ * ISO 4217 code the amounts below are denominated in, e.g. EUR.
121297
+ */
119401
121298
  currency: string;
121299
+ /**
121300
+ * `grossMinor` minus `refundedMinor`, in minor units of `currency`. This is the figure to report.
121301
+ */
119402
121302
  netMinor: number;
121303
+ /**
121304
+ * Billed amount before refunds, in minor units of `currency` (cents for EUR).
121305
+ */
119403
121306
  grossMinor: number;
121307
+ /**
121308
+ * Amount refunded out of `grossMinor`, in minor units of `currency`.
121309
+ */
119404
121310
  refundedMinor: number;
119405
121311
  }[];
119406
121312
  }[];
@@ -119408,9 +121314,21 @@ export interface TrackingReportsSourcePeopleOutput {
119408
121314
  export interface TrackingSnippetsGetInput {
119409
121315
  }
119410
121316
  export interface TrackingSnippetsGetOutput {
121317
+ /**
121318
+ * Tracking host the snippet sends to — the customer-facing domain events and the bundle are served from.
121319
+ */
119411
121320
  host: string;
121321
+ /**
121322
+ * The tag to paste into every page, verbatim, before </head>. Includes the consent-aware bootstrap; install it unconditionally rather than behind a consent gate.
121323
+ */
119412
121324
  snippet: string;
121325
+ /**
121326
+ * Absolute URL of the tracker bundle the snippet loads; already points at this product's own tracking host.
121327
+ */
119413
121328
  scriptUrl: string;
121329
+ /**
121330
+ * The same tag stripped to the bare script element, for tag managers and CMS fields that reject anything else. Behaves identically; use it only when the full snippet will not fit.
121331
+ */
119414
121332
  minimalSnippet: string;
119415
121333
  }
119416
121334
  export interface UsersApikeysCreateInput {