langwatch 1.18.0 → 1.19.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.
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/{chunk-JJASOJOK.js → chunk-CSV7B7B5.js} +2 -2
- package/dist/{chunk-JJASOJOK.js.map → chunk-CSV7B7B5.js.map} +1 -1
- package/dist/{chunk-HY2N6TO5.mjs → chunk-PIYOJF6V.mjs} +2 -2
- package/dist/{chunk-MVQJMRM6.mjs → chunk-SY5HSL5G.mjs} +2 -2
- package/dist/{chunk-MVQJMRM6.mjs.map → chunk-SY5HSL5G.mjs.map} +1 -1
- package/dist/{chunk-UEJSGC3P.js → chunk-WGLVIV4J.js} +12 -12
- package/dist/{chunk-UEJSGC3P.js.map → chunk-WGLVIV4J.js.map} +1 -1
- package/dist/cli/bundle.js +265 -261
- package/dist/{implementation-CQ__V0Vc.d.mts → implementation-CeTvnq6e.d.mts} +1 -1
- package/dist/{implementation-BvX-7vox.d.ts → implementation-CsQrexpY.d.ts} +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +63 -52
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -21
- package/dist/index.mjs.map +1 -1
- package/dist/observability-sdk/index.d.mts +3 -3
- package/dist/observability-sdk/index.d.ts +3 -3
- package/dist/observability-sdk/index.js +2 -2
- package/dist/observability-sdk/index.mjs +1 -1
- package/dist/observability-sdk/instrumentation/langchain/index.d.mts +1 -1
- package/dist/observability-sdk/instrumentation/langchain/index.d.ts +1 -1
- package/dist/observability-sdk/setup/node/index.js +3 -3
- package/dist/observability-sdk/setup/node/index.mjs +2 -2
- package/dist/{types-DfPAHmAh.d.mts → types-ofe1fAYQ.d.mts} +1597 -136
- package/dist/{types-CNEUr6Hm.d.ts → types-wuYJPoFb.d.ts} +1597 -136
- package/package.json +1 -1
- /package/dist/{chunk-HY2N6TO5.mjs.map → chunk-PIYOJF6V.mjs.map} +0 -0
|
@@ -1761,7 +1761,8 @@ interface paths {
|
|
|
1761
1761
|
path?: never;
|
|
1762
1762
|
cookie?: never;
|
|
1763
1763
|
};
|
|
1764
|
-
|
|
1764
|
+
/** @description List entries of a dataset (paginated). Same as GET /:slugOrId/records. */
|
|
1765
|
+
get: operations["getApiDatasetBySlugEntries"];
|
|
1765
1766
|
put?: never;
|
|
1766
1767
|
/** @description Add entries to a dataset */
|
|
1767
1768
|
post: operations["postApiDatasetBySlugEntries"];
|
|
@@ -2296,7 +2297,7 @@ interface paths {
|
|
|
2296
2297
|
put?: never;
|
|
2297
2298
|
/**
|
|
2298
2299
|
* Create a Slack alert trigger
|
|
2299
|
-
* @description Create a trigger that posts to a Slack incoming webhook
|
|
2300
|
+
* @description Create a trigger that posts to Slack when traces match its filters, through a Slack connection (`slack_connection_id`, plus `slack_channel_id` for a bot) or an incoming webhook URL (`slack_webhook`), which is stored as a connection. The trigger stores no secret of its own. The `/api/triggers` family supersedes this narrower form, which stays for callers written against it.
|
|
2300
2301
|
*/
|
|
2301
2302
|
post: operations["postApiTriggerSlack"];
|
|
2302
2303
|
delete?: never;
|
|
@@ -4640,10 +4641,10 @@ interface paths {
|
|
|
4640
4641
|
path?: never;
|
|
4641
4642
|
cookie?: never;
|
|
4642
4643
|
};
|
|
4643
|
-
/** @description List
|
|
4644
|
+
/** @description List the project's automations, newest first. Paused automations are included. */
|
|
4644
4645
|
get: operations["getApiTriggers"];
|
|
4645
4646
|
put?: never;
|
|
4646
|
-
/** @description Create a
|
|
4647
|
+
/** @description Create an automation. Send `customGraphId` + `graphAlert` for an alert on a metric, `report` for a scheduled report, or conditions for a trace automation. The delivery channel is fixed at creation. */
|
|
4647
4648
|
post: operations["postApiTriggers"];
|
|
4648
4649
|
delete?: never;
|
|
4649
4650
|
options?: never;
|
|
@@ -4666,10 +4667,95 @@ interface paths {
|
|
|
4666
4667
|
delete: operations["deleteApiTriggersById"];
|
|
4667
4668
|
options?: never;
|
|
4668
4669
|
head?: never;
|
|
4669
|
-
/** @description Update
|
|
4670
|
+
/** @description Update an automation. Every field is optional and what is left out is left alone, except `actionParams`, which replaces the delivery configuration as a whole. The delivery channel cannot be changed. */
|
|
4670
4671
|
patch: operations["patchApiTriggersById"];
|
|
4671
4672
|
trace?: never;
|
|
4672
4673
|
};
|
|
4674
|
+
"/api/triggers/{id}/fires": {
|
|
4675
|
+
parameters: {
|
|
4676
|
+
query?: never;
|
|
4677
|
+
header?: never;
|
|
4678
|
+
path?: never;
|
|
4679
|
+
cookie?: never;
|
|
4680
|
+
};
|
|
4681
|
+
/** @description What this automation has done: its fires, newest first. Metadata only — no trace ids and no trace content. Send `nextCursor` back as `cursor` to read the page after this one. */
|
|
4682
|
+
get: operations["getApiTriggersByIdFires"];
|
|
4683
|
+
put?: never;
|
|
4684
|
+
post?: never;
|
|
4685
|
+
delete?: never;
|
|
4686
|
+
options?: never;
|
|
4687
|
+
head?: never;
|
|
4688
|
+
patch?: never;
|
|
4689
|
+
trace?: never;
|
|
4690
|
+
};
|
|
4691
|
+
"/api/triggers/{id}/enable": {
|
|
4692
|
+
parameters: {
|
|
4693
|
+
query?: never;
|
|
4694
|
+
header?: never;
|
|
4695
|
+
path?: never;
|
|
4696
|
+
cookie?: never;
|
|
4697
|
+
};
|
|
4698
|
+
get?: never;
|
|
4699
|
+
put?: never;
|
|
4700
|
+
/** @description Resume an automation. A report's schedule is put back on the calendar. */
|
|
4701
|
+
post: operations["postApiTriggersByIdEnable"];
|
|
4702
|
+
delete?: never;
|
|
4703
|
+
options?: never;
|
|
4704
|
+
head?: never;
|
|
4705
|
+
patch?: never;
|
|
4706
|
+
trace?: never;
|
|
4707
|
+
};
|
|
4708
|
+
"/api/triggers/{id}/disable": {
|
|
4709
|
+
parameters: {
|
|
4710
|
+
query?: never;
|
|
4711
|
+
header?: never;
|
|
4712
|
+
path?: never;
|
|
4713
|
+
cookie?: never;
|
|
4714
|
+
};
|
|
4715
|
+
get?: never;
|
|
4716
|
+
put?: never;
|
|
4717
|
+
/** @description Pause an automation. A report stops claiming its schedule. */
|
|
4718
|
+
post: operations["postApiTriggersByIdDisable"];
|
|
4719
|
+
delete?: never;
|
|
4720
|
+
options?: never;
|
|
4721
|
+
head?: never;
|
|
4722
|
+
patch?: never;
|
|
4723
|
+
trace?: never;
|
|
4724
|
+
};
|
|
4725
|
+
"/api/triggers/{id}/test-fire": {
|
|
4726
|
+
parameters: {
|
|
4727
|
+
query?: never;
|
|
4728
|
+
header?: never;
|
|
4729
|
+
path?: never;
|
|
4730
|
+
cookie?: never;
|
|
4731
|
+
};
|
|
4732
|
+
get?: never;
|
|
4733
|
+
put?: never;
|
|
4734
|
+
/** @description Send this automation's message to the destination it is configured with, so you can confirm it arrives. Nothing is recorded as a fire. */
|
|
4735
|
+
post: operations["postApiTriggersByIdTestFire"];
|
|
4736
|
+
delete?: never;
|
|
4737
|
+
options?: never;
|
|
4738
|
+
head?: never;
|
|
4739
|
+
patch?: never;
|
|
4740
|
+
trace?: never;
|
|
4741
|
+
};
|
|
4742
|
+
"/api/slack-connections": {
|
|
4743
|
+
parameters: {
|
|
4744
|
+
query?: never;
|
|
4745
|
+
header?: never;
|
|
4746
|
+
path?: never;
|
|
4747
|
+
cookie?: never;
|
|
4748
|
+
};
|
|
4749
|
+
/** @description List the Slack connections this project can deliver through: its own and its organization's, by name. Never returns a token or webhook URL. */
|
|
4750
|
+
get: operations["getApiSlackConnections"];
|
|
4751
|
+
put?: never;
|
|
4752
|
+
post?: never;
|
|
4753
|
+
delete?: never;
|
|
4754
|
+
options?: never;
|
|
4755
|
+
head?: never;
|
|
4756
|
+
patch?: never;
|
|
4757
|
+
trace?: never;
|
|
4758
|
+
};
|
|
4673
4759
|
"/api/webhooks/v1/endpoints": {
|
|
4674
4760
|
parameters: {
|
|
4675
4761
|
query?: never;
|
|
@@ -10667,6 +10753,21 @@ interface operations {
|
|
|
10667
10753
|
};
|
|
10668
10754
|
responses: never;
|
|
10669
10755
|
};
|
|
10756
|
+
getApiDatasetBySlugEntries: {
|
|
10757
|
+
parameters: {
|
|
10758
|
+
query?: {
|
|
10759
|
+
page?: number;
|
|
10760
|
+
limit?: number;
|
|
10761
|
+
};
|
|
10762
|
+
header?: never;
|
|
10763
|
+
path: {
|
|
10764
|
+
slug: string;
|
|
10765
|
+
};
|
|
10766
|
+
cookie?: never;
|
|
10767
|
+
};
|
|
10768
|
+
requestBody?: never;
|
|
10769
|
+
responses: never;
|
|
10770
|
+
};
|
|
10670
10771
|
postApiDatasetBySlugEntries: {
|
|
10671
10772
|
parameters: {
|
|
10672
10773
|
query?: never;
|
|
@@ -14356,9 +14457,13 @@ interface operations {
|
|
|
14356
14457
|
"application/json": {
|
|
14357
14458
|
/**
|
|
14358
14459
|
* Format: uri
|
|
14359
|
-
* @description Incoming webhook URL the alert is posted to
|
|
14460
|
+
* @description Incoming webhook URL the alert is posted to. It is stored as a Slack connection this project can use (an existing one holding the same URL, else a new project connection). Send this or `slack_connection_id`, not both.
|
|
14360
14461
|
*/
|
|
14361
|
-
slack_webhook
|
|
14462
|
+
slack_webhook?: string;
|
|
14463
|
+
/** @description The Slack connection the alert posts through: an organization connection or one of this project's, as `GET /api/slack-connections` and `langwatch slack-connection list` list them. Send this or `slack_webhook`, not both. */
|
|
14464
|
+
slack_connection_id?: string;
|
|
14465
|
+
/** @description The channel a bot connection posts in; required with one. Invite the LangWatch app to it first. */
|
|
14466
|
+
slack_channel_id?: string;
|
|
14362
14467
|
/** @description How the trigger is listed in the app */
|
|
14363
14468
|
name: string;
|
|
14364
14469
|
/** @description Extra line included with each alert */
|
|
@@ -14628,6 +14733,25 @@ interface operations {
|
|
|
14628
14733
|
};
|
|
14629
14734
|
};
|
|
14630
14735
|
};
|
|
14736
|
+
/** @description The connection is not one this project can use (`slack_integration_missing`), or a bot connection was named without `slack_channel_id` (`invalid_action_params`) */
|
|
14737
|
+
422: {
|
|
14738
|
+
headers: {
|
|
14739
|
+
[name: string]: unknown;
|
|
14740
|
+
};
|
|
14741
|
+
content: {
|
|
14742
|
+
"application/json": {
|
|
14743
|
+
/** @description Stable failure code; branch on this */
|
|
14744
|
+
error: string;
|
|
14745
|
+
message?: string;
|
|
14746
|
+
/** @description Who the failure is attributable to: customer, platform, provider */
|
|
14747
|
+
fault?: string;
|
|
14748
|
+
tips?: string[];
|
|
14749
|
+
docsUrl?: string;
|
|
14750
|
+
} & {
|
|
14751
|
+
[key: string]: unknown;
|
|
14752
|
+
};
|
|
14753
|
+
};
|
|
14754
|
+
};
|
|
14631
14755
|
};
|
|
14632
14756
|
};
|
|
14633
14757
|
postApiWorkflowsByWorkflowIdRun: {
|
|
@@ -26073,6 +26197,7 @@ interface operations {
|
|
|
26073
26197
|
reasoning?: string;
|
|
26074
26198
|
metCriteria: string[];
|
|
26075
26199
|
unmetCriteria: string[];
|
|
26200
|
+
inconclusiveCriteria?: string[];
|
|
26076
26201
|
error?: string;
|
|
26077
26202
|
evaluations?: {
|
|
26078
26203
|
evaluatorId: string;
|
|
@@ -32598,13 +32723,67 @@ interface operations {
|
|
|
32598
32723
|
id: string;
|
|
32599
32724
|
name: string;
|
|
32600
32725
|
/** @enum {string} */
|
|
32601
|
-
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE";
|
|
32726
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
32727
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
32602
32728
|
actionParams: {
|
|
32603
32729
|
[key: string]: unknown;
|
|
32604
32730
|
};
|
|
32731
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
32732
|
+
graphAlert: {
|
|
32733
|
+
threshold: number;
|
|
32734
|
+
/** @enum {string} */
|
|
32735
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
32736
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
32737
|
+
seriesName: string;
|
|
32738
|
+
} | null;
|
|
32739
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
32740
|
+
report: {
|
|
32741
|
+
source: {
|
|
32742
|
+
/** @constant */
|
|
32743
|
+
kind: "dashboard";
|
|
32744
|
+
dashboardId: string;
|
|
32745
|
+
} | {
|
|
32746
|
+
/** @constant */
|
|
32747
|
+
kind: "customGraph";
|
|
32748
|
+
customGraphId: string;
|
|
32749
|
+
} | {
|
|
32750
|
+
/** @constant */
|
|
32751
|
+
kind: "traceQuery";
|
|
32752
|
+
/** @default {} */
|
|
32753
|
+
filters: {
|
|
32754
|
+
[key: string]: unknown;
|
|
32755
|
+
};
|
|
32756
|
+
metric?: string;
|
|
32757
|
+
/** @default 5 */
|
|
32758
|
+
topN: number;
|
|
32759
|
+
};
|
|
32760
|
+
schedule: {
|
|
32761
|
+
cron: string;
|
|
32762
|
+
timezone: string;
|
|
32763
|
+
};
|
|
32764
|
+
/** @default false */
|
|
32765
|
+
compareToPrevious: boolean;
|
|
32766
|
+
} | null;
|
|
32605
32767
|
filters: {
|
|
32606
32768
|
[key: string]: unknown;
|
|
32607
32769
|
};
|
|
32770
|
+
filterQuery: string | null;
|
|
32771
|
+
/**
|
|
32772
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
32773
|
+
* @enum {string}
|
|
32774
|
+
*/
|
|
32775
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
32776
|
+
customGraphId: string | null;
|
|
32777
|
+
notificationCadence: string | null;
|
|
32778
|
+
traceDebounceMs: number | null;
|
|
32779
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
32780
|
+
templates: {
|
|
32781
|
+
/** @enum {string|null} */
|
|
32782
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
32783
|
+
slackTemplate?: string | null;
|
|
32784
|
+
emailSubjectTemplate?: string | null;
|
|
32785
|
+
emailBodyTemplate?: string | null;
|
|
32786
|
+
};
|
|
32608
32787
|
active: boolean;
|
|
32609
32788
|
message: string | null;
|
|
32610
32789
|
/** @enum {string|null} */
|
|
@@ -32676,113 +32855,1212 @@ interface operations {
|
|
|
32676
32855
|
requestBody: {
|
|
32677
32856
|
content: {
|
|
32678
32857
|
"application/json": {
|
|
32679
|
-
|
|
32680
|
-
|
|
32681
|
-
|
|
32682
|
-
|
|
32683
|
-
|
|
32858
|
+
/** @constant */
|
|
32859
|
+
action: "SEND_EMAIL";
|
|
32860
|
+
/** @description Email delivery. */
|
|
32861
|
+
actionParams: {
|
|
32862
|
+
/** @description Who receives the email. Any address, not only teammates. */
|
|
32863
|
+
members: string[];
|
|
32864
|
+
} & {
|
|
32684
32865
|
[key: string]: unknown;
|
|
32685
32866
|
};
|
|
32867
|
+
name: string;
|
|
32686
32868
|
filters?: {
|
|
32687
|
-
[key: string]:
|
|
32869
|
+
[key: string]: string[] | {
|
|
32870
|
+
[key: string]: string[];
|
|
32871
|
+
} | {
|
|
32872
|
+
[key: string]: {
|
|
32873
|
+
[key: string]: string[];
|
|
32874
|
+
};
|
|
32875
|
+
};
|
|
32688
32876
|
};
|
|
32877
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
32878
|
+
filterQuery?: string | null;
|
|
32689
32879
|
message?: string;
|
|
32690
32880
|
/** @enum {string} */
|
|
32691
32881
|
alertType?: "CRITICAL" | "WARNING" | "INFO";
|
|
32692
|
-
|
|
32693
|
-
|
|
32694
|
-
|
|
32695
|
-
|
|
32696
|
-
|
|
32697
|
-
201: {
|
|
32698
|
-
headers: {
|
|
32699
|
-
[name: string]: unknown;
|
|
32700
|
-
};
|
|
32701
|
-
content: {
|
|
32702
|
-
"application/json": {
|
|
32703
|
-
id: string;
|
|
32704
|
-
name: string;
|
|
32882
|
+
/** @description Set to make this an alert on that graph. `graphAlert` and `alertType` are then required. */
|
|
32883
|
+
customGraphId?: string;
|
|
32884
|
+
/** @description The rule an alert fires by: series, operator, threshold, window. */
|
|
32885
|
+
graphAlert?: {
|
|
32886
|
+
threshold: number;
|
|
32705
32887
|
/** @enum {string} */
|
|
32706
|
-
|
|
32707
|
-
|
|
32708
|
-
|
|
32888
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
32889
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
32890
|
+
seriesName: string;
|
|
32891
|
+
};
|
|
32892
|
+
/** @description What a scheduled report renders and when it sends. */
|
|
32893
|
+
report?: {
|
|
32894
|
+
source: {
|
|
32895
|
+
/** @constant */
|
|
32896
|
+
kind: "dashboard";
|
|
32897
|
+
dashboardId: string;
|
|
32898
|
+
} | {
|
|
32899
|
+
/** @constant */
|
|
32900
|
+
kind: "customGraph";
|
|
32901
|
+
customGraphId: string;
|
|
32902
|
+
} | {
|
|
32903
|
+
/** @constant */
|
|
32904
|
+
kind: "traceQuery";
|
|
32905
|
+
/** @default {} */
|
|
32906
|
+
filters?: {
|
|
32907
|
+
[key: string]: unknown;
|
|
32908
|
+
};
|
|
32909
|
+
metric?: string;
|
|
32910
|
+
/** @default 5 */
|
|
32911
|
+
topN?: number;
|
|
32709
32912
|
};
|
|
32710
|
-
|
|
32711
|
-
|
|
32913
|
+
schedule: {
|
|
32914
|
+
cron: string;
|
|
32915
|
+
timezone: string;
|
|
32712
32916
|
};
|
|
32713
|
-
|
|
32714
|
-
|
|
32917
|
+
/** @default false */
|
|
32918
|
+
compareToPrevious?: boolean;
|
|
32919
|
+
};
|
|
32920
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
32921
|
+
templates?: {
|
|
32715
32922
|
/** @enum {string|null} */
|
|
32716
|
-
|
|
32717
|
-
|
|
32718
|
-
|
|
32719
|
-
|
|
32720
|
-
platformUrl: string;
|
|
32923
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
32924
|
+
slackTemplate?: string | null;
|
|
32925
|
+
emailSubjectTemplate?: string | null;
|
|
32926
|
+
emailBodyTemplate?: string | null;
|
|
32721
32927
|
};
|
|
32722
|
-
|
|
32723
|
-
|
|
32724
|
-
|
|
32725
|
-
|
|
32726
|
-
|
|
32727
|
-
|
|
32728
|
-
|
|
32729
|
-
|
|
32730
|
-
|
|
32731
|
-
|
|
32732
|
-
|
|
32928
|
+
/**
|
|
32929
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
32930
|
+
* @enum {string}
|
|
32931
|
+
*/
|
|
32932
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
32933
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
32934
|
+
traceDebounceMs?: number;
|
|
32935
|
+
} | {
|
|
32936
|
+
/** @constant */
|
|
32937
|
+
action: "SEND_SLACK_MESSAGE";
|
|
32938
|
+
/** @description Slack delivery through a Slack connection (`slackIntegrationId`), plus `slackChannelId` when the connection is a bot. */
|
|
32939
|
+
actionParams: {
|
|
32940
|
+
/** @description The Slack connection this automation posts through: an organization connection or one of this project's, listed under Settings, Integrations, Slack. A bot connection also needs `slackChannelId`; a webhook connection needs nothing else. Preferred over `slackWebhook` and `slackBotToken`, and what a read returns in their place. */
|
|
32941
|
+
slackIntegrationId?: string;
|
|
32942
|
+
/**
|
|
32943
|
+
* @description How the message reaches Slack. `webhook` posts to an incoming webhook URL, `bot` posts as the LangWatch Slack app. With `slackIntegrationId` it follows the connection's kind. Absent without a connection means `webhook`.
|
|
32944
|
+
* @enum {string}
|
|
32945
|
+
*/
|
|
32946
|
+
slackDelivery?: "webhook" | "bot";
|
|
32947
|
+
/** @description Legacy, accepted for one release: an incoming webhook URL, for `webhook` delivery. It is stored as a Slack connection (an existing one holding the same URL, else a new project connection) and the automation keeps only that connection's id. Send `slackIntegrationId` instead. */
|
|
32948
|
+
slackWebhook?: string;
|
|
32949
|
+
/** @description The channel the bot posts in, for a bot connection or `bot` delivery. Invite the LangWatch app to it first. */
|
|
32950
|
+
slackChannelId?: string;
|
|
32951
|
+
/** @description Legacy, accepted for one release: a bot token, for `bot` delivery. It is stored as a Slack connection (an existing one holding the same token, else a new project connection) and never reads back. Send `slackIntegrationId` instead. */
|
|
32952
|
+
slackBotToken?: string;
|
|
32953
|
+
/** @description Legacy and ignored: no read returns it. An update that retypes no secret moves an automation's own stored secret into a connection. */
|
|
32954
|
+
slackBotTokenSet?: boolean;
|
|
32955
|
+
} & {
|
|
32956
|
+
[key: string]: unknown;
|
|
32733
32957
|
};
|
|
32734
|
-
|
|
32735
|
-
|
|
32736
|
-
|
|
32737
|
-
|
|
32738
|
-
|
|
32739
|
-
|
|
32740
|
-
|
|
32741
|
-
|
|
32742
|
-
|
|
32743
|
-
error: string;
|
|
32744
|
-
message?: string;
|
|
32958
|
+
name: string;
|
|
32959
|
+
filters?: {
|
|
32960
|
+
[key: string]: string[] | {
|
|
32961
|
+
[key: string]: string[];
|
|
32962
|
+
} | {
|
|
32963
|
+
[key: string]: {
|
|
32964
|
+
[key: string]: string[];
|
|
32965
|
+
};
|
|
32966
|
+
};
|
|
32745
32967
|
};
|
|
32746
|
-
|
|
32747
|
-
|
|
32748
|
-
|
|
32749
|
-
|
|
32750
|
-
|
|
32751
|
-
|
|
32752
|
-
|
|
32753
|
-
|
|
32754
|
-
|
|
32755
|
-
|
|
32756
|
-
|
|
32968
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
32969
|
+
filterQuery?: string | null;
|
|
32970
|
+
message?: string;
|
|
32971
|
+
/** @enum {string} */
|
|
32972
|
+
alertType?: "CRITICAL" | "WARNING" | "INFO";
|
|
32973
|
+
/** @description Set to make this an alert on that graph. `graphAlert` and `alertType` are then required. */
|
|
32974
|
+
customGraphId?: string;
|
|
32975
|
+
/** @description The rule an alert fires by: series, operator, threshold, window. */
|
|
32976
|
+
graphAlert?: {
|
|
32977
|
+
threshold: number;
|
|
32978
|
+
/** @enum {string} */
|
|
32979
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
32980
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
32981
|
+
seriesName: string;
|
|
32757
32982
|
};
|
|
32758
|
-
|
|
32759
|
-
|
|
32760
|
-
|
|
32761
|
-
|
|
32762
|
-
|
|
32763
|
-
|
|
32764
|
-
|
|
32765
|
-
|
|
32766
|
-
|
|
32767
|
-
|
|
32768
|
-
|
|
32983
|
+
/** @description What a scheduled report renders and when it sends. */
|
|
32984
|
+
report?: {
|
|
32985
|
+
source: {
|
|
32986
|
+
/** @constant */
|
|
32987
|
+
kind: "dashboard";
|
|
32988
|
+
dashboardId: string;
|
|
32989
|
+
} | {
|
|
32990
|
+
/** @constant */
|
|
32991
|
+
kind: "customGraph";
|
|
32992
|
+
customGraphId: string;
|
|
32993
|
+
} | {
|
|
32994
|
+
/** @constant */
|
|
32995
|
+
kind: "traceQuery";
|
|
32996
|
+
/** @default {} */
|
|
32997
|
+
filters?: {
|
|
32998
|
+
[key: string]: unknown;
|
|
32999
|
+
};
|
|
33000
|
+
metric?: string;
|
|
33001
|
+
/** @default 5 */
|
|
33002
|
+
topN?: number;
|
|
33003
|
+
};
|
|
33004
|
+
schedule: {
|
|
33005
|
+
cron: string;
|
|
33006
|
+
timezone: string;
|
|
33007
|
+
};
|
|
33008
|
+
/** @default false */
|
|
33009
|
+
compareToPrevious?: boolean;
|
|
32769
33010
|
};
|
|
32770
|
-
|
|
32771
|
-
|
|
32772
|
-
|
|
32773
|
-
|
|
32774
|
-
|
|
32775
|
-
|
|
32776
|
-
|
|
32777
|
-
|
|
32778
|
-
|
|
32779
|
-
|
|
32780
|
-
|
|
32781
|
-
|
|
32782
|
-
|
|
33011
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33012
|
+
templates?: {
|
|
33013
|
+
/** @enum {string|null} */
|
|
33014
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33015
|
+
slackTemplate?: string | null;
|
|
33016
|
+
emailSubjectTemplate?: string | null;
|
|
33017
|
+
emailBodyTemplate?: string | null;
|
|
33018
|
+
};
|
|
33019
|
+
/**
|
|
33020
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
33021
|
+
* @enum {string}
|
|
33022
|
+
*/
|
|
33023
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
33024
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
33025
|
+
traceDebounceMs?: number;
|
|
33026
|
+
} | {
|
|
33027
|
+
/** @constant */
|
|
33028
|
+
action: "SEND_WEBHOOK";
|
|
33029
|
+
/** @description Delivery to a customer endpoint over HTTP, with a body in any media type. */
|
|
33030
|
+
actionParams: {
|
|
33031
|
+
/** @description Where the request goes. https only, and not a private host. */
|
|
33032
|
+
url: string;
|
|
33033
|
+
/**
|
|
33034
|
+
* @description The HTTP method. Absent means POST.
|
|
33035
|
+
* @enum {string}
|
|
33036
|
+
*/
|
|
33037
|
+
method?: "POST" | "PUT" | "PATCH";
|
|
33038
|
+
/** @description Static headers sent with every delivery. The values are credentials: they read back as the placeholder, and sending the placeholder back keeps the stored ones. Changing `url` means sending the values again in the same request. */
|
|
33039
|
+
headers?: {
|
|
33040
|
+
[key: string]: string;
|
|
33041
|
+
};
|
|
33042
|
+
/** @description A Liquid template for the body. Absent sends the standard LangWatch envelope for a JSON content type, and an empty body for any other. */
|
|
33043
|
+
bodyTemplate?: string | null;
|
|
33044
|
+
/** @description The `Content-Type` the delivery announces, which also decides how the body is treated: `application/json` (and any `+json` type) is checked and re-serialised; any other media type sends the rendered template verbatim. Absent means `application/json`. */
|
|
33045
|
+
contentType?: string;
|
|
33046
|
+
/** @description Signs every delivery so the receiver can verify it came from LangWatch. A credential: it reads back as the placeholder, and sending the placeholder back keeps the stored one. */
|
|
33047
|
+
signingSecret?: string | null;
|
|
33048
|
+
} & {
|
|
33049
|
+
[key: string]: unknown;
|
|
33050
|
+
};
|
|
33051
|
+
name: string;
|
|
33052
|
+
filters?: {
|
|
33053
|
+
[key: string]: string[] | {
|
|
33054
|
+
[key: string]: string[];
|
|
33055
|
+
} | {
|
|
33056
|
+
[key: string]: {
|
|
33057
|
+
[key: string]: string[];
|
|
33058
|
+
};
|
|
33059
|
+
};
|
|
33060
|
+
};
|
|
33061
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
33062
|
+
filterQuery?: string | null;
|
|
33063
|
+
message?: string;
|
|
33064
|
+
/** @enum {string} */
|
|
33065
|
+
alertType?: "CRITICAL" | "WARNING" | "INFO";
|
|
33066
|
+
/** @description Set to make this an alert on that graph. `graphAlert` and `alertType` are then required. */
|
|
33067
|
+
customGraphId?: string;
|
|
33068
|
+
/** @description The rule an alert fires by: series, operator, threshold, window. */
|
|
33069
|
+
graphAlert?: {
|
|
33070
|
+
threshold: number;
|
|
33071
|
+
/** @enum {string} */
|
|
33072
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33073
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33074
|
+
seriesName: string;
|
|
33075
|
+
};
|
|
33076
|
+
/** @description What a scheduled report renders and when it sends. */
|
|
33077
|
+
report?: {
|
|
33078
|
+
source: {
|
|
33079
|
+
/** @constant */
|
|
33080
|
+
kind: "dashboard";
|
|
33081
|
+
dashboardId: string;
|
|
33082
|
+
} | {
|
|
33083
|
+
/** @constant */
|
|
33084
|
+
kind: "customGraph";
|
|
33085
|
+
customGraphId: string;
|
|
33086
|
+
} | {
|
|
33087
|
+
/** @constant */
|
|
33088
|
+
kind: "traceQuery";
|
|
33089
|
+
/** @default {} */
|
|
33090
|
+
filters?: {
|
|
33091
|
+
[key: string]: unknown;
|
|
33092
|
+
};
|
|
33093
|
+
metric?: string;
|
|
33094
|
+
/** @default 5 */
|
|
33095
|
+
topN?: number;
|
|
33096
|
+
};
|
|
33097
|
+
schedule: {
|
|
33098
|
+
cron: string;
|
|
33099
|
+
timezone: string;
|
|
33100
|
+
};
|
|
33101
|
+
/** @default false */
|
|
33102
|
+
compareToPrevious?: boolean;
|
|
33103
|
+
};
|
|
33104
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33105
|
+
templates?: {
|
|
33106
|
+
/** @enum {string|null} */
|
|
33107
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33108
|
+
slackTemplate?: string | null;
|
|
33109
|
+
emailSubjectTemplate?: string | null;
|
|
33110
|
+
emailBodyTemplate?: string | null;
|
|
33111
|
+
};
|
|
33112
|
+
/**
|
|
33113
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
33114
|
+
* @enum {string}
|
|
33115
|
+
*/
|
|
33116
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
33117
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
33118
|
+
traceDebounceMs?: number;
|
|
33119
|
+
} | {
|
|
33120
|
+
/** @constant */
|
|
33121
|
+
action: "ADD_TO_DATASET";
|
|
33122
|
+
/** @description Append matched traces to a dataset. */
|
|
33123
|
+
actionParams: {
|
|
33124
|
+
/** @description The dataset matched traces are appended to. */
|
|
33125
|
+
datasetId: string;
|
|
33126
|
+
/** @description How a trace becomes a row in that dataset. */
|
|
33127
|
+
datasetMapping: {
|
|
33128
|
+
mapping: {
|
|
33129
|
+
[key: string]: unknown;
|
|
33130
|
+
};
|
|
33131
|
+
expansions?: string[];
|
|
33132
|
+
};
|
|
33133
|
+
} & {
|
|
33134
|
+
[key: string]: unknown;
|
|
33135
|
+
};
|
|
33136
|
+
name: string;
|
|
33137
|
+
filters?: {
|
|
33138
|
+
[key: string]: string[] | {
|
|
33139
|
+
[key: string]: string[];
|
|
33140
|
+
} | {
|
|
33141
|
+
[key: string]: {
|
|
33142
|
+
[key: string]: string[];
|
|
33143
|
+
};
|
|
33144
|
+
};
|
|
33145
|
+
};
|
|
33146
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
33147
|
+
filterQuery?: string | null;
|
|
33148
|
+
message?: string;
|
|
33149
|
+
/** @enum {string} */
|
|
33150
|
+
alertType?: "CRITICAL" | "WARNING" | "INFO";
|
|
33151
|
+
/** @description Set to make this an alert on that graph. `graphAlert` and `alertType` are then required. */
|
|
33152
|
+
customGraphId?: string;
|
|
33153
|
+
/** @description The rule an alert fires by: series, operator, threshold, window. */
|
|
33154
|
+
graphAlert?: {
|
|
33155
|
+
threshold: number;
|
|
33156
|
+
/** @enum {string} */
|
|
33157
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33158
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33159
|
+
seriesName: string;
|
|
33160
|
+
};
|
|
33161
|
+
/** @description What a scheduled report renders and when it sends. */
|
|
33162
|
+
report?: {
|
|
33163
|
+
source: {
|
|
33164
|
+
/** @constant */
|
|
33165
|
+
kind: "dashboard";
|
|
33166
|
+
dashboardId: string;
|
|
33167
|
+
} | {
|
|
33168
|
+
/** @constant */
|
|
33169
|
+
kind: "customGraph";
|
|
33170
|
+
customGraphId: string;
|
|
33171
|
+
} | {
|
|
33172
|
+
/** @constant */
|
|
33173
|
+
kind: "traceQuery";
|
|
33174
|
+
/** @default {} */
|
|
33175
|
+
filters?: {
|
|
33176
|
+
[key: string]: unknown;
|
|
33177
|
+
};
|
|
33178
|
+
metric?: string;
|
|
33179
|
+
/** @default 5 */
|
|
33180
|
+
topN?: number;
|
|
33181
|
+
};
|
|
33182
|
+
schedule: {
|
|
33183
|
+
cron: string;
|
|
33184
|
+
timezone: string;
|
|
33185
|
+
};
|
|
33186
|
+
/** @default false */
|
|
33187
|
+
compareToPrevious?: boolean;
|
|
33188
|
+
};
|
|
33189
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33190
|
+
templates?: {
|
|
33191
|
+
/** @enum {string|null} */
|
|
33192
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33193
|
+
slackTemplate?: string | null;
|
|
33194
|
+
emailSubjectTemplate?: string | null;
|
|
33195
|
+
emailBodyTemplate?: string | null;
|
|
33196
|
+
};
|
|
33197
|
+
/**
|
|
33198
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
33199
|
+
* @enum {string}
|
|
33200
|
+
*/
|
|
33201
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
33202
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
33203
|
+
traceDebounceMs?: number;
|
|
33204
|
+
} | {
|
|
33205
|
+
/** @constant */
|
|
33206
|
+
action: "ADD_TO_ANNOTATION_QUEUE";
|
|
33207
|
+
/** @description Queue matched traces for a person to label. */
|
|
33208
|
+
actionParams: {
|
|
33209
|
+
/** @description Who the queued items go to. */
|
|
33210
|
+
annotators: {
|
|
33211
|
+
id: string;
|
|
33212
|
+
name: string;
|
|
33213
|
+
}[];
|
|
33214
|
+
} & {
|
|
33215
|
+
[key: string]: unknown;
|
|
33216
|
+
};
|
|
33217
|
+
name: string;
|
|
33218
|
+
filters?: {
|
|
33219
|
+
[key: string]: string[] | {
|
|
33220
|
+
[key: string]: string[];
|
|
33221
|
+
} | {
|
|
33222
|
+
[key: string]: {
|
|
33223
|
+
[key: string]: string[];
|
|
33224
|
+
};
|
|
33225
|
+
};
|
|
33226
|
+
};
|
|
33227
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
33228
|
+
filterQuery?: string | null;
|
|
33229
|
+
message?: string;
|
|
33230
|
+
/** @enum {string} */
|
|
33231
|
+
alertType?: "CRITICAL" | "WARNING" | "INFO";
|
|
33232
|
+
/** @description Set to make this an alert on that graph. `graphAlert` and `alertType` are then required. */
|
|
33233
|
+
customGraphId?: string;
|
|
33234
|
+
/** @description The rule an alert fires by: series, operator, threshold, window. */
|
|
33235
|
+
graphAlert?: {
|
|
33236
|
+
threshold: number;
|
|
33237
|
+
/** @enum {string} */
|
|
33238
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33239
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33240
|
+
seriesName: string;
|
|
33241
|
+
};
|
|
33242
|
+
/** @description What a scheduled report renders and when it sends. */
|
|
33243
|
+
report?: {
|
|
33244
|
+
source: {
|
|
33245
|
+
/** @constant */
|
|
33246
|
+
kind: "dashboard";
|
|
33247
|
+
dashboardId: string;
|
|
33248
|
+
} | {
|
|
33249
|
+
/** @constant */
|
|
33250
|
+
kind: "customGraph";
|
|
33251
|
+
customGraphId: string;
|
|
33252
|
+
} | {
|
|
33253
|
+
/** @constant */
|
|
33254
|
+
kind: "traceQuery";
|
|
33255
|
+
/** @default {} */
|
|
33256
|
+
filters?: {
|
|
33257
|
+
[key: string]: unknown;
|
|
33258
|
+
};
|
|
33259
|
+
metric?: string;
|
|
33260
|
+
/** @default 5 */
|
|
33261
|
+
topN?: number;
|
|
33262
|
+
};
|
|
33263
|
+
schedule: {
|
|
33264
|
+
cron: string;
|
|
33265
|
+
timezone: string;
|
|
33266
|
+
};
|
|
33267
|
+
/** @default false */
|
|
33268
|
+
compareToPrevious?: boolean;
|
|
33269
|
+
};
|
|
33270
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33271
|
+
templates?: {
|
|
33272
|
+
/** @enum {string|null} */
|
|
33273
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33274
|
+
slackTemplate?: string | null;
|
|
33275
|
+
emailSubjectTemplate?: string | null;
|
|
33276
|
+
emailBodyTemplate?: string | null;
|
|
33277
|
+
};
|
|
33278
|
+
/**
|
|
33279
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
33280
|
+
* @enum {string}
|
|
33281
|
+
*/
|
|
33282
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
33283
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
33284
|
+
traceDebounceMs?: number;
|
|
33285
|
+
};
|
|
33286
|
+
};
|
|
33287
|
+
};
|
|
33288
|
+
responses: {
|
|
33289
|
+
/** @description Trigger created */
|
|
33290
|
+
201: {
|
|
33291
|
+
headers: {
|
|
33292
|
+
[name: string]: unknown;
|
|
33293
|
+
};
|
|
33294
|
+
content: {
|
|
33295
|
+
"application/json": {
|
|
33296
|
+
id: string;
|
|
33297
|
+
name: string;
|
|
33298
|
+
/** @enum {string} */
|
|
33299
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
33300
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
33301
|
+
actionParams: {
|
|
33302
|
+
[key: string]: unknown;
|
|
33303
|
+
};
|
|
33304
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
33305
|
+
graphAlert: {
|
|
33306
|
+
threshold: number;
|
|
33307
|
+
/** @enum {string} */
|
|
33308
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33309
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33310
|
+
seriesName: string;
|
|
33311
|
+
} | null;
|
|
33312
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
33313
|
+
report: {
|
|
33314
|
+
source: {
|
|
33315
|
+
/** @constant */
|
|
33316
|
+
kind: "dashboard";
|
|
33317
|
+
dashboardId: string;
|
|
33318
|
+
} | {
|
|
33319
|
+
/** @constant */
|
|
33320
|
+
kind: "customGraph";
|
|
33321
|
+
customGraphId: string;
|
|
33322
|
+
} | {
|
|
33323
|
+
/** @constant */
|
|
33324
|
+
kind: "traceQuery";
|
|
33325
|
+
/** @default {} */
|
|
33326
|
+
filters: {
|
|
33327
|
+
[key: string]: unknown;
|
|
33328
|
+
};
|
|
33329
|
+
metric?: string;
|
|
33330
|
+
/** @default 5 */
|
|
33331
|
+
topN: number;
|
|
33332
|
+
};
|
|
33333
|
+
schedule: {
|
|
33334
|
+
cron: string;
|
|
33335
|
+
timezone: string;
|
|
33336
|
+
};
|
|
33337
|
+
/** @default false */
|
|
33338
|
+
compareToPrevious: boolean;
|
|
33339
|
+
} | null;
|
|
33340
|
+
filters: {
|
|
33341
|
+
[key: string]: unknown;
|
|
33342
|
+
};
|
|
33343
|
+
filterQuery: string | null;
|
|
33344
|
+
/**
|
|
33345
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
33346
|
+
* @enum {string}
|
|
33347
|
+
*/
|
|
33348
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
33349
|
+
customGraphId: string | null;
|
|
33350
|
+
notificationCadence: string | null;
|
|
33351
|
+
traceDebounceMs: number | null;
|
|
33352
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33353
|
+
templates: {
|
|
33354
|
+
/** @enum {string|null} */
|
|
33355
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33356
|
+
slackTemplate?: string | null;
|
|
33357
|
+
emailSubjectTemplate?: string | null;
|
|
33358
|
+
emailBodyTemplate?: string | null;
|
|
33359
|
+
};
|
|
33360
|
+
active: boolean;
|
|
33361
|
+
message: string | null;
|
|
33362
|
+
/** @enum {string|null} */
|
|
33363
|
+
alertType: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
33364
|
+
createdAt: string;
|
|
33365
|
+
updatedAt: string;
|
|
33366
|
+
/** Format: uri */
|
|
33367
|
+
platformUrl: string;
|
|
33368
|
+
};
|
|
33369
|
+
};
|
|
33370
|
+
};
|
|
33371
|
+
/** @description Bad Request */
|
|
33372
|
+
400: {
|
|
33373
|
+
headers: {
|
|
33374
|
+
[name: string]: unknown;
|
|
33375
|
+
};
|
|
33376
|
+
content: {
|
|
33377
|
+
"application/json": {
|
|
33378
|
+
error: string;
|
|
33379
|
+
message?: string;
|
|
33380
|
+
};
|
|
33381
|
+
};
|
|
33382
|
+
};
|
|
33383
|
+
/** @description Unauthorized */
|
|
33384
|
+
401: {
|
|
33385
|
+
headers: {
|
|
33386
|
+
[name: string]: unknown;
|
|
33387
|
+
};
|
|
33388
|
+
content: {
|
|
33389
|
+
"application/json": {
|
|
33390
|
+
error: string;
|
|
33391
|
+
message?: string;
|
|
33392
|
+
};
|
|
33393
|
+
};
|
|
33394
|
+
};
|
|
33395
|
+
/** @description Unprocessable Entity */
|
|
33396
|
+
422: {
|
|
33397
|
+
headers: {
|
|
33398
|
+
[name: string]: unknown;
|
|
33399
|
+
};
|
|
33400
|
+
content: {
|
|
33401
|
+
"application/json": {
|
|
33402
|
+
error: string;
|
|
33403
|
+
message?: string;
|
|
33404
|
+
};
|
|
33405
|
+
};
|
|
33406
|
+
};
|
|
33407
|
+
/** @description Internal Server Error */
|
|
33408
|
+
500: {
|
|
33409
|
+
headers: {
|
|
33410
|
+
[name: string]: unknown;
|
|
33411
|
+
};
|
|
33412
|
+
content: {
|
|
33413
|
+
"application/json": {
|
|
33414
|
+
error: string;
|
|
33415
|
+
message?: string;
|
|
33416
|
+
};
|
|
33417
|
+
};
|
|
33418
|
+
};
|
|
33419
|
+
};
|
|
33420
|
+
};
|
|
33421
|
+
getApiTriggersById: {
|
|
33422
|
+
parameters: {
|
|
33423
|
+
query?: never;
|
|
33424
|
+
header?: never;
|
|
33425
|
+
path: {
|
|
33426
|
+
id: string;
|
|
33427
|
+
};
|
|
33428
|
+
cookie?: never;
|
|
33429
|
+
};
|
|
33430
|
+
requestBody?: never;
|
|
33431
|
+
responses: {
|
|
33432
|
+
/** @description Success */
|
|
33433
|
+
200: {
|
|
33434
|
+
headers: {
|
|
33435
|
+
[name: string]: unknown;
|
|
33436
|
+
};
|
|
33437
|
+
content: {
|
|
33438
|
+
"application/json": {
|
|
33439
|
+
id: string;
|
|
33440
|
+
name: string;
|
|
33441
|
+
/** @enum {string} */
|
|
33442
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
33443
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
33444
|
+
actionParams: {
|
|
33445
|
+
[key: string]: unknown;
|
|
33446
|
+
};
|
|
33447
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
33448
|
+
graphAlert: {
|
|
33449
|
+
threshold: number;
|
|
33450
|
+
/** @enum {string} */
|
|
33451
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33452
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33453
|
+
seriesName: string;
|
|
33454
|
+
} | null;
|
|
33455
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
33456
|
+
report: {
|
|
33457
|
+
source: {
|
|
33458
|
+
/** @constant */
|
|
33459
|
+
kind: "dashboard";
|
|
33460
|
+
dashboardId: string;
|
|
33461
|
+
} | {
|
|
33462
|
+
/** @constant */
|
|
33463
|
+
kind: "customGraph";
|
|
33464
|
+
customGraphId: string;
|
|
33465
|
+
} | {
|
|
33466
|
+
/** @constant */
|
|
33467
|
+
kind: "traceQuery";
|
|
33468
|
+
/** @default {} */
|
|
33469
|
+
filters: {
|
|
33470
|
+
[key: string]: unknown;
|
|
33471
|
+
};
|
|
33472
|
+
metric?: string;
|
|
33473
|
+
/** @default 5 */
|
|
33474
|
+
topN: number;
|
|
33475
|
+
};
|
|
33476
|
+
schedule: {
|
|
33477
|
+
cron: string;
|
|
33478
|
+
timezone: string;
|
|
33479
|
+
};
|
|
33480
|
+
/** @default false */
|
|
33481
|
+
compareToPrevious: boolean;
|
|
33482
|
+
} | null;
|
|
33483
|
+
filters: {
|
|
33484
|
+
[key: string]: unknown;
|
|
33485
|
+
};
|
|
33486
|
+
filterQuery: string | null;
|
|
33487
|
+
/**
|
|
33488
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
33489
|
+
* @enum {string}
|
|
33490
|
+
*/
|
|
33491
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
33492
|
+
customGraphId: string | null;
|
|
33493
|
+
notificationCadence: string | null;
|
|
33494
|
+
traceDebounceMs: number | null;
|
|
33495
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33496
|
+
templates: {
|
|
33497
|
+
/** @enum {string|null} */
|
|
33498
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33499
|
+
slackTemplate?: string | null;
|
|
33500
|
+
emailSubjectTemplate?: string | null;
|
|
33501
|
+
emailBodyTemplate?: string | null;
|
|
33502
|
+
};
|
|
33503
|
+
active: boolean;
|
|
33504
|
+
message: string | null;
|
|
33505
|
+
/** @enum {string|null} */
|
|
33506
|
+
alertType: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
33507
|
+
createdAt: string;
|
|
33508
|
+
updatedAt: string;
|
|
33509
|
+
/** Format: uri */
|
|
33510
|
+
platformUrl: string;
|
|
33511
|
+
};
|
|
33512
|
+
};
|
|
33513
|
+
};
|
|
33514
|
+
/** @description Bad Request */
|
|
33515
|
+
400: {
|
|
33516
|
+
headers: {
|
|
33517
|
+
[name: string]: unknown;
|
|
33518
|
+
};
|
|
33519
|
+
content: {
|
|
33520
|
+
"application/json": {
|
|
33521
|
+
error: string;
|
|
33522
|
+
message?: string;
|
|
33523
|
+
};
|
|
33524
|
+
};
|
|
33525
|
+
};
|
|
33526
|
+
/** @description Unauthorized */
|
|
33527
|
+
401: {
|
|
33528
|
+
headers: {
|
|
33529
|
+
[name: string]: unknown;
|
|
33530
|
+
};
|
|
33531
|
+
content: {
|
|
33532
|
+
"application/json": {
|
|
33533
|
+
error: string;
|
|
33534
|
+
message?: string;
|
|
33535
|
+
};
|
|
33536
|
+
};
|
|
33537
|
+
};
|
|
33538
|
+
/** @description Trigger not found */
|
|
33539
|
+
404: {
|
|
33540
|
+
headers: {
|
|
33541
|
+
[name: string]: unknown;
|
|
33542
|
+
};
|
|
33543
|
+
content: {
|
|
33544
|
+
"application/json": {
|
|
33545
|
+
error: string;
|
|
33546
|
+
message?: string;
|
|
33547
|
+
};
|
|
33548
|
+
};
|
|
33549
|
+
};
|
|
33550
|
+
/** @description Unprocessable Entity */
|
|
33551
|
+
422: {
|
|
33552
|
+
headers: {
|
|
33553
|
+
[name: string]: unknown;
|
|
33554
|
+
};
|
|
33555
|
+
content: {
|
|
33556
|
+
"application/json": {
|
|
33557
|
+
error: string;
|
|
33558
|
+
message?: string;
|
|
33559
|
+
};
|
|
33560
|
+
};
|
|
33561
|
+
};
|
|
33562
|
+
/** @description Internal Server Error */
|
|
33563
|
+
500: {
|
|
33564
|
+
headers: {
|
|
33565
|
+
[name: string]: unknown;
|
|
33566
|
+
};
|
|
33567
|
+
content: {
|
|
33568
|
+
"application/json": {
|
|
33569
|
+
error: string;
|
|
33570
|
+
message?: string;
|
|
33571
|
+
};
|
|
33572
|
+
};
|
|
33573
|
+
};
|
|
33574
|
+
};
|
|
33575
|
+
};
|
|
33576
|
+
deleteApiTriggersById: {
|
|
33577
|
+
parameters: {
|
|
33578
|
+
query?: never;
|
|
33579
|
+
header?: never;
|
|
33580
|
+
path: {
|
|
33581
|
+
id: string;
|
|
33582
|
+
};
|
|
33583
|
+
cookie?: never;
|
|
33584
|
+
};
|
|
33585
|
+
requestBody?: never;
|
|
33586
|
+
responses: {
|
|
33587
|
+
/** @description Trigger deleted */
|
|
33588
|
+
200: {
|
|
33589
|
+
headers: {
|
|
33590
|
+
[name: string]: unknown;
|
|
33591
|
+
};
|
|
33592
|
+
content: {
|
|
33593
|
+
"application/json": {
|
|
33594
|
+
id: string;
|
|
33595
|
+
deleted: boolean;
|
|
33596
|
+
};
|
|
33597
|
+
};
|
|
33598
|
+
};
|
|
33599
|
+
/** @description Bad Request */
|
|
33600
|
+
400: {
|
|
33601
|
+
headers: {
|
|
33602
|
+
[name: string]: unknown;
|
|
33603
|
+
};
|
|
33604
|
+
content: {
|
|
33605
|
+
"application/json": {
|
|
33606
|
+
error: string;
|
|
33607
|
+
message?: string;
|
|
33608
|
+
};
|
|
33609
|
+
};
|
|
33610
|
+
};
|
|
33611
|
+
/** @description Unauthorized */
|
|
33612
|
+
401: {
|
|
33613
|
+
headers: {
|
|
33614
|
+
[name: string]: unknown;
|
|
33615
|
+
};
|
|
33616
|
+
content: {
|
|
33617
|
+
"application/json": {
|
|
33618
|
+
error: string;
|
|
33619
|
+
message?: string;
|
|
33620
|
+
};
|
|
33621
|
+
};
|
|
33622
|
+
};
|
|
33623
|
+
/** @description Trigger not found */
|
|
33624
|
+
404: {
|
|
33625
|
+
headers: {
|
|
33626
|
+
[name: string]: unknown;
|
|
33627
|
+
};
|
|
33628
|
+
content: {
|
|
33629
|
+
"application/json": {
|
|
33630
|
+
error: string;
|
|
33631
|
+
message?: string;
|
|
33632
|
+
};
|
|
33633
|
+
};
|
|
33634
|
+
};
|
|
33635
|
+
/** @description Unprocessable Entity */
|
|
33636
|
+
422: {
|
|
33637
|
+
headers: {
|
|
33638
|
+
[name: string]: unknown;
|
|
33639
|
+
};
|
|
33640
|
+
content: {
|
|
33641
|
+
"application/json": {
|
|
33642
|
+
error: string;
|
|
33643
|
+
message?: string;
|
|
33644
|
+
};
|
|
33645
|
+
};
|
|
33646
|
+
};
|
|
33647
|
+
/** @description Internal Server Error */
|
|
33648
|
+
500: {
|
|
33649
|
+
headers: {
|
|
33650
|
+
[name: string]: unknown;
|
|
33651
|
+
};
|
|
33652
|
+
content: {
|
|
33653
|
+
"application/json": {
|
|
33654
|
+
error: string;
|
|
33655
|
+
message?: string;
|
|
33656
|
+
};
|
|
33657
|
+
};
|
|
33658
|
+
};
|
|
33659
|
+
};
|
|
33660
|
+
};
|
|
33661
|
+
patchApiTriggersById: {
|
|
33662
|
+
parameters: {
|
|
33663
|
+
query?: never;
|
|
33664
|
+
header?: never;
|
|
33665
|
+
path: {
|
|
33666
|
+
id: string;
|
|
33667
|
+
};
|
|
33668
|
+
cookie?: never;
|
|
33669
|
+
};
|
|
33670
|
+
requestBody: {
|
|
33671
|
+
content: {
|
|
33672
|
+
"application/json": {
|
|
33673
|
+
name?: string;
|
|
33674
|
+
active?: boolean;
|
|
33675
|
+
message?: string | null;
|
|
33676
|
+
/** @enum {string|null} */
|
|
33677
|
+
alertType?: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
33678
|
+
filters?: {
|
|
33679
|
+
[key: string]: string[] | {
|
|
33680
|
+
[key: string]: string[];
|
|
33681
|
+
} | {
|
|
33682
|
+
[key: string]: {
|
|
33683
|
+
[key: string]: string[];
|
|
33684
|
+
};
|
|
33685
|
+
};
|
|
33686
|
+
};
|
|
33687
|
+
/** @description The trace query this automation is about, in the syntax the traces view uses. When set it supersedes `filters`. */
|
|
33688
|
+
filterQuery?: string | null;
|
|
33689
|
+
/** @enum {string} */
|
|
33690
|
+
action?: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
33691
|
+
/** @description Replaces the delivery configuration as a whole rather than merging into it: send the fields this automation should have from now on, and anything left out is removed — omit `headers` and it delivers with none, omit `signingSecret` and its deliveries are no longer signed. The one exception is a credential the read hid: send back the `[redacted]` placeholder and the stored credential is kept (a Slack automation not yet on a connection has its stored secret moved into one), so reading an automation, changing one field and writing the whole object back is safe. Only this channel's fields are accepted; anything else is refused rather than dropped, and the rule this automation fires by belongs in `graphAlert` or `report`. */
|
|
33692
|
+
actionParams?: ({
|
|
33693
|
+
/** @description Who receives the email. Any address, not only teammates. */
|
|
33694
|
+
members: string[];
|
|
33695
|
+
} & {
|
|
33696
|
+
[key: string]: unknown;
|
|
33697
|
+
}) | ({
|
|
33698
|
+
/** @description The Slack connection this automation posts through: an organization connection or one of this project's, listed under Settings, Integrations, Slack. A bot connection also needs `slackChannelId`; a webhook connection needs nothing else. Preferred over `slackWebhook` and `slackBotToken`, and what a read returns in their place. */
|
|
33699
|
+
slackIntegrationId?: string;
|
|
33700
|
+
/**
|
|
33701
|
+
* @description How the message reaches Slack. `webhook` posts to an incoming webhook URL, `bot` posts as the LangWatch Slack app. With `slackIntegrationId` it follows the connection's kind. Absent without a connection means `webhook`.
|
|
33702
|
+
* @enum {string}
|
|
33703
|
+
*/
|
|
33704
|
+
slackDelivery?: "webhook" | "bot";
|
|
33705
|
+
/** @description Legacy, accepted for one release: an incoming webhook URL, for `webhook` delivery. It is stored as a Slack connection (an existing one holding the same URL, else a new project connection) and the automation keeps only that connection's id. Send `slackIntegrationId` instead. */
|
|
33706
|
+
slackWebhook?: string;
|
|
33707
|
+
/** @description The channel the bot posts in, for a bot connection or `bot` delivery. Invite the LangWatch app to it first. */
|
|
33708
|
+
slackChannelId?: string;
|
|
33709
|
+
/** @description Legacy, accepted for one release: a bot token, for `bot` delivery. It is stored as a Slack connection (an existing one holding the same token, else a new project connection) and never reads back. Send `slackIntegrationId` instead. */
|
|
33710
|
+
slackBotToken?: string;
|
|
33711
|
+
/** @description Legacy and ignored: no read returns it. An update that retypes no secret moves an automation's own stored secret into a connection. */
|
|
33712
|
+
slackBotTokenSet?: boolean;
|
|
33713
|
+
} & {
|
|
33714
|
+
[key: string]: unknown;
|
|
33715
|
+
}) | ({
|
|
33716
|
+
/** @description Where the request goes. https only, and not a private host. */
|
|
33717
|
+
url: string;
|
|
33718
|
+
/**
|
|
33719
|
+
* @description The HTTP method. Absent means POST.
|
|
33720
|
+
* @enum {string}
|
|
33721
|
+
*/
|
|
33722
|
+
method?: "POST" | "PUT" | "PATCH";
|
|
33723
|
+
/** @description Static headers sent with every delivery. The values are credentials: they read back as the placeholder, and sending the placeholder back keeps the stored ones. Changing `url` means sending the values again in the same request. */
|
|
33724
|
+
headers?: {
|
|
33725
|
+
[key: string]: string;
|
|
33726
|
+
};
|
|
33727
|
+
/** @description A Liquid template for the body. Absent sends the standard LangWatch envelope for a JSON content type, and an empty body for any other. */
|
|
33728
|
+
bodyTemplate?: string | null;
|
|
33729
|
+
/** @description The `Content-Type` the delivery announces, which also decides how the body is treated: `application/json` (and any `+json` type) is checked and re-serialised; any other media type sends the rendered template verbatim. Absent means `application/json`. */
|
|
33730
|
+
contentType?: string;
|
|
33731
|
+
/** @description Signs every delivery so the receiver can verify it came from LangWatch. A credential: it reads back as the placeholder, and sending the placeholder back keeps the stored one. */
|
|
33732
|
+
signingSecret?: string | null;
|
|
33733
|
+
} & {
|
|
33734
|
+
[key: string]: unknown;
|
|
33735
|
+
}) | ({
|
|
33736
|
+
/** @description The dataset matched traces are appended to. */
|
|
33737
|
+
datasetId: string;
|
|
33738
|
+
/** @description How a trace becomes a row in that dataset. */
|
|
33739
|
+
datasetMapping: {
|
|
33740
|
+
mapping: {
|
|
33741
|
+
[key: string]: unknown;
|
|
33742
|
+
};
|
|
33743
|
+
expansions?: string[];
|
|
33744
|
+
};
|
|
33745
|
+
} & {
|
|
33746
|
+
[key: string]: unknown;
|
|
33747
|
+
}) | ({
|
|
33748
|
+
/** @description Who the queued items go to. */
|
|
33749
|
+
annotators: {
|
|
33750
|
+
id: string;
|
|
33751
|
+
name: string;
|
|
33752
|
+
}[];
|
|
33753
|
+
} & {
|
|
33754
|
+
[key: string]: unknown;
|
|
33755
|
+
});
|
|
33756
|
+
/** @description The rule this alert fires by. Only for an automation that is one. */
|
|
33757
|
+
graphAlert?: {
|
|
33758
|
+
threshold: number;
|
|
33759
|
+
/** @enum {string} */
|
|
33760
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33761
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33762
|
+
seriesName: string;
|
|
33763
|
+
};
|
|
33764
|
+
/** @description What this report renders and when. Only for one that is a report. */
|
|
33765
|
+
report?: {
|
|
33766
|
+
source: {
|
|
33767
|
+
/** @constant */
|
|
33768
|
+
kind: "dashboard";
|
|
33769
|
+
dashboardId: string;
|
|
33770
|
+
} | {
|
|
33771
|
+
/** @constant */
|
|
33772
|
+
kind: "customGraph";
|
|
33773
|
+
customGraphId: string;
|
|
33774
|
+
} | {
|
|
33775
|
+
/** @constant */
|
|
33776
|
+
kind: "traceQuery";
|
|
33777
|
+
/** @default {} */
|
|
33778
|
+
filters?: {
|
|
33779
|
+
[key: string]: unknown;
|
|
33780
|
+
};
|
|
33781
|
+
metric?: string;
|
|
33782
|
+
/** @default 5 */
|
|
33783
|
+
topN?: number;
|
|
33784
|
+
};
|
|
33785
|
+
schedule: {
|
|
33786
|
+
cron: string;
|
|
33787
|
+
timezone: string;
|
|
33788
|
+
};
|
|
33789
|
+
/** @default false */
|
|
33790
|
+
compareToPrevious?: boolean;
|
|
33791
|
+
};
|
|
33792
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33793
|
+
templates?: {
|
|
33794
|
+
/** @enum {string|null} */
|
|
33795
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33796
|
+
slackTemplate?: string | null;
|
|
33797
|
+
emailSubjectTemplate?: string | null;
|
|
33798
|
+
emailBodyTemplate?: string | null;
|
|
33799
|
+
};
|
|
33800
|
+
/**
|
|
33801
|
+
* @description How often a notification automation is allowed to send. A new one starts on a five-minute digest, which is what keeps a broad condition from sending a message per matching trace.
|
|
33802
|
+
* @enum {string}
|
|
33803
|
+
*/
|
|
33804
|
+
notificationCadence?: "immediate" | "5min_digest" | "15min_digest" | "hourly_digest";
|
|
33805
|
+
/** @description How long to wait for a trace to settle before the conditions are read. */
|
|
33806
|
+
traceDebounceMs?: number;
|
|
33807
|
+
};
|
|
33808
|
+
};
|
|
33809
|
+
};
|
|
33810
|
+
responses: {
|
|
33811
|
+
/** @description Trigger updated */
|
|
33812
|
+
200: {
|
|
33813
|
+
headers: {
|
|
33814
|
+
[name: string]: unknown;
|
|
33815
|
+
};
|
|
33816
|
+
content: {
|
|
33817
|
+
"application/json": {
|
|
33818
|
+
id: string;
|
|
33819
|
+
name: string;
|
|
33820
|
+
/** @enum {string} */
|
|
33821
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
33822
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
33823
|
+
actionParams: {
|
|
33824
|
+
[key: string]: unknown;
|
|
33825
|
+
};
|
|
33826
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
33827
|
+
graphAlert: {
|
|
33828
|
+
threshold: number;
|
|
33829
|
+
/** @enum {string} */
|
|
33830
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
33831
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
33832
|
+
seriesName: string;
|
|
33833
|
+
} | null;
|
|
33834
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
33835
|
+
report: {
|
|
33836
|
+
source: {
|
|
33837
|
+
/** @constant */
|
|
33838
|
+
kind: "dashboard";
|
|
33839
|
+
dashboardId: string;
|
|
33840
|
+
} | {
|
|
33841
|
+
/** @constant */
|
|
33842
|
+
kind: "customGraph";
|
|
33843
|
+
customGraphId: string;
|
|
33844
|
+
} | {
|
|
33845
|
+
/** @constant */
|
|
33846
|
+
kind: "traceQuery";
|
|
33847
|
+
/** @default {} */
|
|
33848
|
+
filters: {
|
|
33849
|
+
[key: string]: unknown;
|
|
33850
|
+
};
|
|
33851
|
+
metric?: string;
|
|
33852
|
+
/** @default 5 */
|
|
33853
|
+
topN: number;
|
|
33854
|
+
};
|
|
33855
|
+
schedule: {
|
|
33856
|
+
cron: string;
|
|
33857
|
+
timezone: string;
|
|
33858
|
+
};
|
|
33859
|
+
/** @default false */
|
|
33860
|
+
compareToPrevious: boolean;
|
|
33861
|
+
} | null;
|
|
33862
|
+
filters: {
|
|
33863
|
+
[key: string]: unknown;
|
|
33864
|
+
};
|
|
33865
|
+
filterQuery: string | null;
|
|
33866
|
+
/**
|
|
33867
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
33868
|
+
* @enum {string}
|
|
33869
|
+
*/
|
|
33870
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
33871
|
+
customGraphId: string | null;
|
|
33872
|
+
notificationCadence: string | null;
|
|
33873
|
+
traceDebounceMs: number | null;
|
|
33874
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
33875
|
+
templates: {
|
|
33876
|
+
/** @enum {string|null} */
|
|
33877
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
33878
|
+
slackTemplate?: string | null;
|
|
33879
|
+
emailSubjectTemplate?: string | null;
|
|
33880
|
+
emailBodyTemplate?: string | null;
|
|
33881
|
+
};
|
|
33882
|
+
active: boolean;
|
|
33883
|
+
message: string | null;
|
|
33884
|
+
/** @enum {string|null} */
|
|
33885
|
+
alertType: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
33886
|
+
createdAt: string;
|
|
33887
|
+
updatedAt: string;
|
|
33888
|
+
/** Format: uri */
|
|
33889
|
+
platformUrl: string;
|
|
33890
|
+
};
|
|
33891
|
+
};
|
|
33892
|
+
};
|
|
33893
|
+
/** @description Bad Request */
|
|
33894
|
+
400: {
|
|
33895
|
+
headers: {
|
|
33896
|
+
[name: string]: unknown;
|
|
33897
|
+
};
|
|
33898
|
+
content: {
|
|
33899
|
+
"application/json": {
|
|
33900
|
+
error: string;
|
|
33901
|
+
message?: string;
|
|
33902
|
+
};
|
|
33903
|
+
};
|
|
33904
|
+
};
|
|
33905
|
+
/** @description Unauthorized */
|
|
33906
|
+
401: {
|
|
33907
|
+
headers: {
|
|
33908
|
+
[name: string]: unknown;
|
|
33909
|
+
};
|
|
33910
|
+
content: {
|
|
33911
|
+
"application/json": {
|
|
33912
|
+
error: string;
|
|
33913
|
+
message?: string;
|
|
33914
|
+
};
|
|
33915
|
+
};
|
|
33916
|
+
};
|
|
33917
|
+
/** @description Trigger not found */
|
|
33918
|
+
404: {
|
|
33919
|
+
headers: {
|
|
33920
|
+
[name: string]: unknown;
|
|
33921
|
+
};
|
|
33922
|
+
content: {
|
|
33923
|
+
"application/json": {
|
|
33924
|
+
error: string;
|
|
33925
|
+
message?: string;
|
|
33926
|
+
};
|
|
33927
|
+
};
|
|
33928
|
+
};
|
|
33929
|
+
/** @description Unprocessable Entity */
|
|
33930
|
+
422: {
|
|
33931
|
+
headers: {
|
|
33932
|
+
[name: string]: unknown;
|
|
33933
|
+
};
|
|
33934
|
+
content: {
|
|
33935
|
+
"application/json": {
|
|
33936
|
+
error: string;
|
|
33937
|
+
message?: string;
|
|
33938
|
+
};
|
|
33939
|
+
};
|
|
33940
|
+
};
|
|
33941
|
+
/** @description Internal Server Error */
|
|
33942
|
+
500: {
|
|
33943
|
+
headers: {
|
|
33944
|
+
[name: string]: unknown;
|
|
33945
|
+
};
|
|
33946
|
+
content: {
|
|
33947
|
+
"application/json": {
|
|
33948
|
+
error: string;
|
|
33949
|
+
message?: string;
|
|
33950
|
+
};
|
|
33951
|
+
};
|
|
33952
|
+
};
|
|
33953
|
+
};
|
|
33954
|
+
};
|
|
33955
|
+
getApiTriggersByIdFires: {
|
|
33956
|
+
parameters: {
|
|
33957
|
+
query?: {
|
|
33958
|
+
limit?: number;
|
|
33959
|
+
/** @description The `nextCursor` from the previous page. Omit for the newest fires. */
|
|
33960
|
+
cursor?: string;
|
|
33961
|
+
};
|
|
33962
|
+
header?: never;
|
|
33963
|
+
path: {
|
|
33964
|
+
id: string;
|
|
33965
|
+
};
|
|
33966
|
+
cookie?: never;
|
|
33967
|
+
};
|
|
32783
33968
|
requestBody?: never;
|
|
32784
33969
|
responses: {
|
|
32785
33970
|
/** @description Success */
|
|
33971
|
+
200: {
|
|
33972
|
+
headers: {
|
|
33973
|
+
[name: string]: unknown;
|
|
33974
|
+
};
|
|
33975
|
+
content: {
|
|
33976
|
+
"application/json": {
|
|
33977
|
+
/** @description One page of fires, newest first. */
|
|
33978
|
+
fires: {
|
|
33979
|
+
id: string;
|
|
33980
|
+
triggerId: string;
|
|
33981
|
+
customGraphId: string | null;
|
|
33982
|
+
firedAt: string;
|
|
33983
|
+
resolvedAt: string | null;
|
|
33984
|
+
}[];
|
|
33985
|
+
/** @description Pass as `cursor` to read the page after this one. Null on the last page. */
|
|
33986
|
+
nextCursor: string | null;
|
|
33987
|
+
};
|
|
33988
|
+
};
|
|
33989
|
+
};
|
|
33990
|
+
/** @description Bad Request */
|
|
33991
|
+
400: {
|
|
33992
|
+
headers: {
|
|
33993
|
+
[name: string]: unknown;
|
|
33994
|
+
};
|
|
33995
|
+
content: {
|
|
33996
|
+
"application/json": {
|
|
33997
|
+
error: string;
|
|
33998
|
+
message?: string;
|
|
33999
|
+
};
|
|
34000
|
+
};
|
|
34001
|
+
};
|
|
34002
|
+
/** @description Unauthorized */
|
|
34003
|
+
401: {
|
|
34004
|
+
headers: {
|
|
34005
|
+
[name: string]: unknown;
|
|
34006
|
+
};
|
|
34007
|
+
content: {
|
|
34008
|
+
"application/json": {
|
|
34009
|
+
error: string;
|
|
34010
|
+
message?: string;
|
|
34011
|
+
};
|
|
34012
|
+
};
|
|
34013
|
+
};
|
|
34014
|
+
/** @description Trigger not found */
|
|
34015
|
+
404: {
|
|
34016
|
+
headers: {
|
|
34017
|
+
[name: string]: unknown;
|
|
34018
|
+
};
|
|
34019
|
+
content: {
|
|
34020
|
+
"application/json": {
|
|
34021
|
+
error: string;
|
|
34022
|
+
message?: string;
|
|
34023
|
+
};
|
|
34024
|
+
};
|
|
34025
|
+
};
|
|
34026
|
+
/** @description Unprocessable Entity */
|
|
34027
|
+
422: {
|
|
34028
|
+
headers: {
|
|
34029
|
+
[name: string]: unknown;
|
|
34030
|
+
};
|
|
34031
|
+
content: {
|
|
34032
|
+
"application/json": {
|
|
34033
|
+
error: string;
|
|
34034
|
+
message?: string;
|
|
34035
|
+
};
|
|
34036
|
+
};
|
|
34037
|
+
};
|
|
34038
|
+
/** @description Internal Server Error */
|
|
34039
|
+
500: {
|
|
34040
|
+
headers: {
|
|
34041
|
+
[name: string]: unknown;
|
|
34042
|
+
};
|
|
34043
|
+
content: {
|
|
34044
|
+
"application/json": {
|
|
34045
|
+
error: string;
|
|
34046
|
+
message?: string;
|
|
34047
|
+
};
|
|
34048
|
+
};
|
|
34049
|
+
};
|
|
34050
|
+
};
|
|
34051
|
+
};
|
|
34052
|
+
postApiTriggersByIdEnable: {
|
|
34053
|
+
parameters: {
|
|
34054
|
+
query?: never;
|
|
34055
|
+
header?: never;
|
|
34056
|
+
path: {
|
|
34057
|
+
id: string;
|
|
34058
|
+
};
|
|
34059
|
+
cookie?: never;
|
|
34060
|
+
};
|
|
34061
|
+
requestBody?: never;
|
|
34062
|
+
responses: {
|
|
34063
|
+
/** @description Trigger resumed */
|
|
32786
34064
|
200: {
|
|
32787
34065
|
headers: {
|
|
32788
34066
|
[name: string]: unknown;
|
|
@@ -32792,13 +34070,67 @@ interface operations {
|
|
|
32792
34070
|
id: string;
|
|
32793
34071
|
name: string;
|
|
32794
34072
|
/** @enum {string} */
|
|
32795
|
-
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE";
|
|
34073
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
34074
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
32796
34075
|
actionParams: {
|
|
32797
34076
|
[key: string]: unknown;
|
|
32798
34077
|
};
|
|
34078
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
34079
|
+
graphAlert: {
|
|
34080
|
+
threshold: number;
|
|
34081
|
+
/** @enum {string} */
|
|
34082
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
34083
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
34084
|
+
seriesName: string;
|
|
34085
|
+
} | null;
|
|
34086
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
34087
|
+
report: {
|
|
34088
|
+
source: {
|
|
34089
|
+
/** @constant */
|
|
34090
|
+
kind: "dashboard";
|
|
34091
|
+
dashboardId: string;
|
|
34092
|
+
} | {
|
|
34093
|
+
/** @constant */
|
|
34094
|
+
kind: "customGraph";
|
|
34095
|
+
customGraphId: string;
|
|
34096
|
+
} | {
|
|
34097
|
+
/** @constant */
|
|
34098
|
+
kind: "traceQuery";
|
|
34099
|
+
/** @default {} */
|
|
34100
|
+
filters: {
|
|
34101
|
+
[key: string]: unknown;
|
|
34102
|
+
};
|
|
34103
|
+
metric?: string;
|
|
34104
|
+
/** @default 5 */
|
|
34105
|
+
topN: number;
|
|
34106
|
+
};
|
|
34107
|
+
schedule: {
|
|
34108
|
+
cron: string;
|
|
34109
|
+
timezone: string;
|
|
34110
|
+
};
|
|
34111
|
+
/** @default false */
|
|
34112
|
+
compareToPrevious: boolean;
|
|
34113
|
+
} | null;
|
|
32799
34114
|
filters: {
|
|
32800
34115
|
[key: string]: unknown;
|
|
32801
34116
|
};
|
|
34117
|
+
filterQuery: string | null;
|
|
34118
|
+
/**
|
|
34119
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
34120
|
+
* @enum {string}
|
|
34121
|
+
*/
|
|
34122
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
34123
|
+
customGraphId: string | null;
|
|
34124
|
+
notificationCadence: string | null;
|
|
34125
|
+
traceDebounceMs: number | null;
|
|
34126
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
34127
|
+
templates: {
|
|
34128
|
+
/** @enum {string|null} */
|
|
34129
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
34130
|
+
slackTemplate?: string | null;
|
|
34131
|
+
emailSubjectTemplate?: string | null;
|
|
34132
|
+
emailBodyTemplate?: string | null;
|
|
34133
|
+
};
|
|
32802
34134
|
active: boolean;
|
|
32803
34135
|
message: string | null;
|
|
32804
34136
|
/** @enum {string|null} */
|
|
@@ -32872,7 +34204,7 @@ interface operations {
|
|
|
32872
34204
|
};
|
|
32873
34205
|
};
|
|
32874
34206
|
};
|
|
32875
|
-
|
|
34207
|
+
postApiTriggersByIdDisable: {
|
|
32876
34208
|
parameters: {
|
|
32877
34209
|
query?: never;
|
|
32878
34210
|
header?: never;
|
|
@@ -32883,7 +34215,7 @@ interface operations {
|
|
|
32883
34215
|
};
|
|
32884
34216
|
requestBody?: never;
|
|
32885
34217
|
responses: {
|
|
32886
|
-
/** @description Trigger
|
|
34218
|
+
/** @description Trigger paused */
|
|
32887
34219
|
200: {
|
|
32888
34220
|
headers: {
|
|
32889
34221
|
[name: string]: unknown;
|
|
@@ -32891,7 +34223,77 @@ interface operations {
|
|
|
32891
34223
|
content: {
|
|
32892
34224
|
"application/json": {
|
|
32893
34225
|
id: string;
|
|
32894
|
-
|
|
34226
|
+
name: string;
|
|
34227
|
+
/** @enum {string} */
|
|
34228
|
+
action: "SEND_EMAIL" | "ADD_TO_DATASET" | "ADD_TO_ANNOTATION_QUEUE" | "SEND_SLACK_MESSAGE" | "SEND_WEBHOOK";
|
|
34229
|
+
/** @description Where this automation delivers, with every credential value replaced by the `[redacted]` placeholder. Which channel is configured, which destination is set and which header names are in play all survive; the values never leave; a Slack automation names its connection by `slackIntegrationId` and carries no secret. Sending the placeholder back on an update keeps the stored value. The rule this automation fires by is not here — it is stated in `graphAlert` or `report`, and sending it in this field is refused. */
|
|
34230
|
+
actionParams: {
|
|
34231
|
+
[key: string]: unknown;
|
|
34232
|
+
};
|
|
34233
|
+
/** @description The rule an alert fires by. Null for anything that is not one. */
|
|
34234
|
+
graphAlert: {
|
|
34235
|
+
threshold: number;
|
|
34236
|
+
/** @enum {string} */
|
|
34237
|
+
operator: "gt" | "lt" | "gte" | "lte" | "eq";
|
|
34238
|
+
timePeriod: 1 | 5 | 15 | 30 | 60 | 1440;
|
|
34239
|
+
seriesName: string;
|
|
34240
|
+
} | null;
|
|
34241
|
+
/** @description What a report renders and when. Null for anything else. */
|
|
34242
|
+
report: {
|
|
34243
|
+
source: {
|
|
34244
|
+
/** @constant */
|
|
34245
|
+
kind: "dashboard";
|
|
34246
|
+
dashboardId: string;
|
|
34247
|
+
} | {
|
|
34248
|
+
/** @constant */
|
|
34249
|
+
kind: "customGraph";
|
|
34250
|
+
customGraphId: string;
|
|
34251
|
+
} | {
|
|
34252
|
+
/** @constant */
|
|
34253
|
+
kind: "traceQuery";
|
|
34254
|
+
/** @default {} */
|
|
34255
|
+
filters: {
|
|
34256
|
+
[key: string]: unknown;
|
|
34257
|
+
};
|
|
34258
|
+
metric?: string;
|
|
34259
|
+
/** @default 5 */
|
|
34260
|
+
topN: number;
|
|
34261
|
+
};
|
|
34262
|
+
schedule: {
|
|
34263
|
+
cron: string;
|
|
34264
|
+
timezone: string;
|
|
34265
|
+
};
|
|
34266
|
+
/** @default false */
|
|
34267
|
+
compareToPrevious: boolean;
|
|
34268
|
+
} | null;
|
|
34269
|
+
filters: {
|
|
34270
|
+
[key: string]: unknown;
|
|
34271
|
+
};
|
|
34272
|
+
filterQuery: string | null;
|
|
34273
|
+
/**
|
|
34274
|
+
* @description What this automation is about: matching traces, a metric crossing a threshold, or a schedule.
|
|
34275
|
+
* @enum {string}
|
|
34276
|
+
*/
|
|
34277
|
+
kind: "AUTOMATION" | "ALERT" | "REPORT";
|
|
34278
|
+
customGraphId: string | null;
|
|
34279
|
+
notificationCadence: string | null;
|
|
34280
|
+
traceDebounceMs: number | null;
|
|
34281
|
+
/** @description The Liquid templates this automation's message is rendered from. Absent fields render the LangWatch default for the channel. */
|
|
34282
|
+
templates: {
|
|
34283
|
+
/** @enum {string|null} */
|
|
34284
|
+
slackTemplateType?: "string" | "block_kit" | null;
|
|
34285
|
+
slackTemplate?: string | null;
|
|
34286
|
+
emailSubjectTemplate?: string | null;
|
|
34287
|
+
emailBodyTemplate?: string | null;
|
|
34288
|
+
};
|
|
34289
|
+
active: boolean;
|
|
34290
|
+
message: string | null;
|
|
34291
|
+
/** @enum {string|null} */
|
|
34292
|
+
alertType: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
34293
|
+
createdAt: string;
|
|
34294
|
+
updatedAt: string;
|
|
34295
|
+
/** Format: uri */
|
|
34296
|
+
platformUrl: string;
|
|
32895
34297
|
};
|
|
32896
34298
|
};
|
|
32897
34299
|
};
|
|
@@ -32957,7 +34359,7 @@ interface operations {
|
|
|
32957
34359
|
};
|
|
32958
34360
|
};
|
|
32959
34361
|
};
|
|
32960
|
-
|
|
34362
|
+
postApiTriggersByIdTestFire: {
|
|
32961
34363
|
parameters: {
|
|
32962
34364
|
query?: never;
|
|
32963
34365
|
header?: never;
|
|
@@ -32966,49 +34368,24 @@ interface operations {
|
|
|
32966
34368
|
};
|
|
32967
34369
|
cookie?: never;
|
|
32968
34370
|
};
|
|
32969
|
-
requestBody
|
|
32970
|
-
content: {
|
|
32971
|
-
"application/json": {
|
|
32972
|
-
name?: string;
|
|
32973
|
-
active?: boolean;
|
|
32974
|
-
message?: string | null;
|
|
32975
|
-
/** @enum {string|null} */
|
|
32976
|
-
alertType?: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
32977
|
-
filters?: {
|
|
32978
|
-
[key: string]: unknown;
|
|
32979
|
-
};
|
|
32980
|
-
actionParams?: {
|
|
32981
|
-
[key: string]: unknown;
|
|
32982
|
-
};
|
|
32983
|
-
};
|
|
32984
|
-
};
|
|
32985
|
-
};
|
|
34371
|
+
requestBody?: never;
|
|
32986
34372
|
responses: {
|
|
32987
|
-
/** @description
|
|
34373
|
+
/** @description Test fire sent */
|
|
32988
34374
|
200: {
|
|
32989
34375
|
headers: {
|
|
32990
34376
|
[name: string]: unknown;
|
|
32991
34377
|
};
|
|
32992
34378
|
content: {
|
|
32993
34379
|
"application/json": {
|
|
32994
|
-
id: string;
|
|
32995
|
-
name: string;
|
|
32996
34380
|
/** @enum {string} */
|
|
32997
|
-
|
|
32998
|
-
|
|
32999
|
-
|
|
33000
|
-
|
|
33001
|
-
|
|
33002
|
-
|
|
33003
|
-
|
|
33004
|
-
|
|
33005
|
-
message: string | null;
|
|
33006
|
-
/** @enum {string|null} */
|
|
33007
|
-
alertType: "CRITICAL" | "WARNING" | "INFO" | null;
|
|
33008
|
-
createdAt: string;
|
|
33009
|
-
updatedAt: string;
|
|
33010
|
-
/** Format: uri */
|
|
33011
|
-
platformUrl: string;
|
|
34381
|
+
channel: "email" | "slack" | "webhook";
|
|
34382
|
+
recipientCount: number;
|
|
34383
|
+
/** @description Whether the LangWatch default message was rendered because this automation states no template of its own. */
|
|
34384
|
+
usedDefault: boolean;
|
|
34385
|
+
missingVariables: string[];
|
|
34386
|
+
errors: string[];
|
|
34387
|
+
/** @description Webhook only: what the endpoint answered with. */
|
|
34388
|
+
httpStatus?: number;
|
|
33012
34389
|
};
|
|
33013
34390
|
};
|
|
33014
34391
|
};
|
|
@@ -33074,6 +34451,90 @@ interface operations {
|
|
|
33074
34451
|
};
|
|
33075
34452
|
};
|
|
33076
34453
|
};
|
|
34454
|
+
getApiSlackConnections: {
|
|
34455
|
+
parameters: {
|
|
34456
|
+
query?: never;
|
|
34457
|
+
header?: never;
|
|
34458
|
+
path?: never;
|
|
34459
|
+
cookie?: never;
|
|
34460
|
+
};
|
|
34461
|
+
requestBody?: never;
|
|
34462
|
+
responses: {
|
|
34463
|
+
/** @description Success */
|
|
34464
|
+
200: {
|
|
34465
|
+
headers: {
|
|
34466
|
+
[name: string]: unknown;
|
|
34467
|
+
};
|
|
34468
|
+
content: {
|
|
34469
|
+
"application/json": {
|
|
34470
|
+
/** @description What an automation's `slackIntegrationId` names to post through this connection. */
|
|
34471
|
+
id: string;
|
|
34472
|
+
name: string;
|
|
34473
|
+
/**
|
|
34474
|
+
* @description `bot` posts as the LangWatch Slack app and needs a `slackChannelId` on the automation; `webhook` posts to its incoming webhook's channel.
|
|
34475
|
+
* @enum {string}
|
|
34476
|
+
*/
|
|
34477
|
+
kind: "bot" | "webhook";
|
|
34478
|
+
/** @enum {string} */
|
|
34479
|
+
scopeType: "ORGANIZATION" | "PROJECT";
|
|
34480
|
+
scopeId: string;
|
|
34481
|
+
scopeName: string;
|
|
34482
|
+
/** @description The Slack workspace a bot connection posts into. */
|
|
34483
|
+
slackTeamName: string | null;
|
|
34484
|
+
createdAt: string;
|
|
34485
|
+
}[];
|
|
34486
|
+
};
|
|
34487
|
+
};
|
|
34488
|
+
/** @description Bad Request */
|
|
34489
|
+
400: {
|
|
34490
|
+
headers: {
|
|
34491
|
+
[name: string]: unknown;
|
|
34492
|
+
};
|
|
34493
|
+
content: {
|
|
34494
|
+
"application/json": {
|
|
34495
|
+
error: string;
|
|
34496
|
+
message?: string;
|
|
34497
|
+
};
|
|
34498
|
+
};
|
|
34499
|
+
};
|
|
34500
|
+
/** @description Unauthorized */
|
|
34501
|
+
401: {
|
|
34502
|
+
headers: {
|
|
34503
|
+
[name: string]: unknown;
|
|
34504
|
+
};
|
|
34505
|
+
content: {
|
|
34506
|
+
"application/json": {
|
|
34507
|
+
error: string;
|
|
34508
|
+
message?: string;
|
|
34509
|
+
};
|
|
34510
|
+
};
|
|
34511
|
+
};
|
|
34512
|
+
/** @description Unprocessable Entity */
|
|
34513
|
+
422: {
|
|
34514
|
+
headers: {
|
|
34515
|
+
[name: string]: unknown;
|
|
34516
|
+
};
|
|
34517
|
+
content: {
|
|
34518
|
+
"application/json": {
|
|
34519
|
+
error: string;
|
|
34520
|
+
message?: string;
|
|
34521
|
+
};
|
|
34522
|
+
};
|
|
34523
|
+
};
|
|
34524
|
+
/** @description Internal Server Error */
|
|
34525
|
+
500: {
|
|
34526
|
+
headers: {
|
|
34527
|
+
[name: string]: unknown;
|
|
34528
|
+
};
|
|
34529
|
+
content: {
|
|
34530
|
+
"application/json": {
|
|
34531
|
+
error: string;
|
|
34532
|
+
message?: string;
|
|
34533
|
+
};
|
|
34534
|
+
};
|
|
34535
|
+
};
|
|
34536
|
+
};
|
|
34537
|
+
};
|
|
33077
34538
|
getApiWebhooksV1Endpoints: {
|
|
33078
34539
|
parameters: {
|
|
33079
34540
|
query?: never;
|