@wevion/cli 1.0.4088 → 1.0.4094

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.
Files changed (2) hide show
  1. package/openapi.json +1398 -561
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -327775,14 +327775,14 @@
327775
327775
  }
327776
327776
  }
327777
327777
  },
327778
- "/api/v1/traffic-filter/advertisers/{id}/test": {
327778
+ "/api/v1/traffic-filter/advertisers/{id}/duplicate": {
327779
327779
  "post": {
327780
- "operationId": "postApiV1TrafficFilterAdvertisersByIdTest",
327781
- "summary": "Test a Traffic Filter advertiser API",
327780
+ "operationId": "postApiV1TrafficFilterAdvertisersByIdDuplicate",
327781
+ "summary": "Duplicate a Traffic Filter advertiser",
327782
327782
  "tags": [
327783
327783
  "traffic-filter"
327784
327784
  ],
327785
- "description": "Fires a real request to the advertiser endpoint with a sample payload and evaluates success_criteria against the response.",
327785
+ "description": "Creates a copy of an advertiser owned by the current team, including its encrypted credentials, so an operator does not have to retype the whole configuration. The copy keeps the source status; pass a name to override the default \"<name> (copia)\".",
327786
327786
  "requestBody": {
327787
327787
  "required": true,
327788
327788
  "content": {
@@ -327791,13 +327791,10 @@
327791
327791
  "additionalProperties": false,
327792
327792
  "type": "object",
327793
327793
  "properties": {
327794
- "sample_data": {
327795
- "description": "JSON object with nested arrays and objects.",
327796
- "type": "object",
327797
- "additionalProperties": {
327798
- "$comment": "json-value",
327799
- "description": "Arbitrary JSON value with nested arrays and objects."
327800
- }
327794
+ "name": {
327795
+ "maxLength": 255,
327796
+ "minLength": 1,
327797
+ "type": "string"
327801
327798
  }
327802
327799
  }
327803
327800
  }
@@ -327834,33 +327831,87 @@
327834
327831
  }
327835
327832
  ],
327836
327833
  "responses": {
327837
- "200": {
327838
- "description": "Successful response",
327834
+ "201": {
327835
+ "description": "Resource created",
327839
327836
  "content": {
327840
327837
  "application/json": {
327841
327838
  "schema": {
327842
327839
  "type": "object",
327843
327840
  "required": [
327844
- "ok",
327841
+ "id",
327842
+ "teamId",
327843
+ "name",
327844
+ "apiEndpoint",
327845
+ "apiMethod",
327846
+ "apiAuthType",
327847
+ "hasAuthValue",
327848
+ "apiContentType",
327849
+ "apiHeaders",
327850
+ "hasBodyTemplate",
327851
+ "bodyTemplate",
327852
+ "fieldMapping",
327853
+ "staticParams",
327854
+ "successCriteria",
327855
+ "timeoutMs",
327845
327856
  "status",
327846
- "response",
327847
- "error"
327857
+ "createdAt",
327858
+ "updatedAt"
327848
327859
  ],
327849
327860
  "properties": {
327850
- "ok": {
327861
+ "id": {
327862
+ "format": "uuid",
327863
+ "type": "string"
327864
+ },
327865
+ "teamId": {
327866
+ "format": "uuid",
327867
+ "type": "string"
327868
+ },
327869
+ "name": {
327870
+ "type": "string"
327871
+ },
327872
+ "apiEndpoint": {
327873
+ "anyOf": [
327874
+ {
327875
+ "type": "string"
327876
+ },
327877
+ {
327878
+ "type": "null"
327879
+ }
327880
+ ]
327881
+ },
327882
+ "apiMethod": {
327883
+ "type": "string"
327884
+ },
327885
+ "apiAuthType": {
327886
+ "type": "string"
327887
+ },
327888
+ "hasAuthValue": {
327851
327889
  "type": "boolean"
327852
327890
  },
327853
- "status": {
327891
+ "apiContentType": {
327892
+ "type": "string"
327893
+ },
327894
+ "apiHeaders": {
327895
+ "description": "Custom headers. Credential-bearing values are returned as a fixed write-only mask.",
327854
327896
  "anyOf": [
327855
327897
  {
327856
- "type": "number"
327898
+ "description": "JSON object with nested arrays and objects.",
327899
+ "type": "object",
327900
+ "additionalProperties": {
327901
+ "$comment": "json-value",
327902
+ "description": "Arbitrary JSON value with nested arrays and objects."
327903
+ }
327857
327904
  },
327858
327905
  {
327859
327906
  "type": "null"
327860
327907
  }
327861
327908
  ]
327862
327909
  },
327863
- "response": {
327910
+ "hasBodyTemplate": {
327911
+ "type": "boolean"
327912
+ },
327913
+ "bodyTemplate": {
327914
+ "description": "Fixed write-only mask when a body template is configured; null otherwise.",
327864
327915
  "anyOf": [
327865
327916
  {
327866
327917
  "type": "string"
@@ -327870,9 +327921,85 @@
327870
327921
  }
327871
327922
  ]
327872
327923
  },
327873
- "error": {
327924
+ "fieldMapping": {
327925
+ "anyOf": [
327926
+ {
327927
+ "description": "JSON object with nested arrays and objects.",
327928
+ "type": "object",
327929
+ "additionalProperties": {
327930
+ "$comment": "json-value",
327931
+ "description": "Arbitrary JSON value with nested arrays and objects."
327932
+ }
327933
+ },
327934
+ {
327935
+ "type": "null"
327936
+ }
327937
+ ]
327938
+ },
327939
+ "staticParams": {
327940
+ "description": "Static-parameter keys with every configured value replaced by a fixed write-only mask.",
327941
+ "anyOf": [
327942
+ {
327943
+ "description": "JSON object with nested arrays and objects.",
327944
+ "type": "object",
327945
+ "additionalProperties": {
327946
+ "$comment": "json-value",
327947
+ "description": "Arbitrary JSON value with nested arrays and objects."
327948
+ }
327949
+ },
327950
+ {
327951
+ "type": "null"
327952
+ }
327953
+ ]
327954
+ },
327955
+ "successCriteria": {
327956
+ "anyOf": [
327957
+ {
327958
+ "description": "JSON object with nested arrays and objects.",
327959
+ "type": "object",
327960
+ "additionalProperties": {
327961
+ "$comment": "json-value",
327962
+ "description": "Arbitrary JSON value with nested arrays and objects."
327963
+ }
327964
+ },
327965
+ {
327966
+ "type": "null"
327967
+ }
327968
+ ]
327969
+ },
327970
+ "timeoutMs": {
327971
+ "type": "number"
327972
+ },
327973
+ "status": {
327974
+ "anyOf": [
327975
+ {
327976
+ "type": "string",
327977
+ "enum": [
327978
+ "active"
327979
+ ]
327980
+ },
327981
+ {
327982
+ "type": "string",
327983
+ "enum": [
327984
+ "paused"
327985
+ ]
327986
+ },
327987
+ {
327988
+ "type": "string",
327989
+ "enum": [
327990
+ "archived"
327991
+ ]
327992
+ }
327993
+ ]
327994
+ },
327995
+ "createdAt": {
327996
+ "format": "date-time",
327997
+ "type": "string"
327998
+ },
327999
+ "updatedAt": {
327874
328000
  "anyOf": [
327875
328001
  {
328002
+ "format": "date-time",
327876
328003
  "type": "string"
327877
328004
  },
327878
328005
  {
@@ -327886,35 +328013,58 @@
327886
328013
  }
327887
328014
  },
327888
328015
  "400": {
327889
- "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328016
+ "description": "Invalid request - schema validation failed",
327890
328017
  "content": {
327891
328018
  "application/json": {
327892
328019
  "schema": {
327893
- "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
327894
- "additionalProperties": false,
327895
- "type": "object",
327896
- "required": [
327897
- "statusCode",
327898
- "error",
327899
- "message"
327900
- ],
327901
- "properties": {
327902
- "statusCode": {
327903
- "type": "number"
327904
- },
327905
- "error": {
327906
- "type": "string"
327907
- },
327908
- "message": {
327909
- "type": "string"
328020
+ "anyOf": [
328021
+ {
328022
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328023
+ "additionalProperties": false,
328024
+ "type": "object",
328025
+ "required": [
328026
+ "statusCode",
328027
+ "error",
328028
+ "message"
328029
+ ],
328030
+ "properties": {
328031
+ "statusCode": {
328032
+ "type": "number"
328033
+ },
328034
+ "error": {
328035
+ "type": "string"
328036
+ },
328037
+ "message": {
328038
+ "type": "string"
328039
+ },
328040
+ "code": {
328041
+ "type": "string",
328042
+ "enum": [
328043
+ "SCOPE_TEAM_REQUIRED"
328044
+ ]
328045
+ }
328046
+ }
327910
328047
  },
327911
- "code": {
327912
- "type": "string",
327913
- "enum": [
327914
- "SCOPE_TEAM_REQUIRED"
327915
- ]
328048
+ {
328049
+ "type": "object",
328050
+ "required": [
328051
+ "statusCode",
328052
+ "error",
328053
+ "message"
328054
+ ],
328055
+ "properties": {
328056
+ "statusCode": {
328057
+ "type": "number"
328058
+ },
328059
+ "error": {
328060
+ "type": "string"
328061
+ },
328062
+ "message": {
328063
+ "type": "string"
328064
+ }
328065
+ }
327916
328066
  }
327917
- }
328067
+ ]
327918
328068
  }
327919
328069
  }
327920
328070
  }
@@ -328038,80 +328188,54 @@
328038
328188
  }
328039
328189
  }
328040
328190
  },
328041
- "/api/v1/traffic-filter/blacklist": {
328042
- "get": {
328043
- "operationId": "getApiV1TrafficFilterBlacklist",
328044
- "summary": "List Traffic Filter blacklist entries",
328191
+ "/api/v1/traffic-filter/advertisers/{id}/test": {
328192
+ "post": {
328193
+ "operationId": "postApiV1TrafficFilterAdvertisersByIdTest",
328194
+ "summary": "Test a Traffic Filter advertiser API",
328045
328195
  "tags": [
328046
328196
  "traffic-filter"
328047
328197
  ],
328048
- "description": "Returns all blacklist entries for the current team.",
328049
- "parameters": [
328050
- {
328051
- "schema": {
328052
- "maxLength": 40,
328053
- "type": "string"
328054
- },
328055
- "in": "query",
328056
- "name": "kind",
328057
- "required": false
328058
- },
328059
- {
328060
- "schema": {
328061
- "minimum": 1,
328062
- "maximum": 100,
328063
- "type": "integer"
328064
- },
328065
- "in": "query",
328066
- "name": "limit",
328067
- "required": false
328068
- },
328069
- {
328070
- "schema": {
328071
- "minimum": 0,
328072
- "type": "integer"
328073
- },
328074
- "in": "query",
328075
- "name": "offset",
328076
- "required": false
328077
- },
328078
- {
328079
- "schema": {
328080
- "anyOf": [
328081
- {
328082
- "type": "string",
328083
- "enum": [
328084
- "auto"
328085
- ]
328086
- },
328087
- {
328088
- "type": "string",
328089
- "enum": [
328090
- "manual"
328091
- ]
328198
+ "description": "Fires a real request to the advertiser endpoint with a sample payload and evaluates success_criteria against the response.",
328199
+ "requestBody": {
328200
+ "required": true,
328201
+ "content": {
328202
+ "application/json": {
328203
+ "schema": {
328204
+ "additionalProperties": false,
328205
+ "type": "object",
328206
+ "properties": {
328207
+ "sample_data": {
328208
+ "description": "JSON object with nested arrays and objects.",
328209
+ "type": "object",
328210
+ "additionalProperties": {
328211
+ "$comment": "json-value",
328212
+ "description": "Arbitrary JSON value with nested arrays and objects."
328213
+ }
328214
+ }
328092
328215
  }
328093
- ]
328094
- },
328095
- "in": "query",
328096
- "name": "source",
328097
- "required": false
328098
- },
328216
+ }
328217
+ }
328218
+ }
328219
+ },
328220
+ "parameters": [
328099
328221
  {
328100
328222
  "schema": {
328101
- "type": "boolean"
328223
+ "format": "uuid",
328224
+ "type": "string"
328102
328225
  },
328103
- "in": "query",
328104
- "name": "includeExpired",
328105
- "required": false
328226
+ "in": "path",
328227
+ "name": "id",
328228
+ "required": true
328106
328229
  },
328107
328230
  {
328108
328231
  "schema": {
328109
- "maxLength": 200,
328232
+ "format": "uuid",
328110
328233
  "type": "string"
328111
328234
  },
328112
- "in": "query",
328113
- "name": "search",
328114
- "required": false
328235
+ "in": "header",
328236
+ "name": "x-team-id",
328237
+ "required": false,
328238
+ "description": "Destination workspace team id."
328115
328239
  }
328116
328240
  ],
328117
328241
  "security": [
@@ -328130,147 +328254,57 @@
328130
328254
  "schema": {
328131
328255
  "type": "object",
328132
328256
  "required": [
328133
- "items",
328134
- "total"
328257
+ "ok",
328258
+ "status",
328259
+ "response",
328260
+ "error"
328135
328261
  ],
328136
328262
  "properties": {
328137
- "items": {
328138
- "type": "array",
328139
- "items": {
328140
- "type": "object",
328141
- "required": [
328142
- "id",
328143
- "teamId",
328144
- "value",
328145
- "kind",
328146
- "note",
328147
- "autoAdded",
328148
- "expiresAt",
328149
- "reason",
328150
- "country",
328151
- "isp",
328152
- "asn",
328153
- "createdAt"
328154
- ],
328155
- "properties": {
328156
- "id": {
328157
- "format": "uuid",
328158
- "type": "string"
328159
- },
328160
- "teamId": {
328161
- "format": "uuid",
328162
- "type": "string"
328163
- },
328164
- "value": {
328165
- "type": "string"
328166
- },
328167
- "kind": {
328168
- "type": "string"
328169
- },
328170
- "note": {
328171
- "anyOf": [
328172
- {
328173
- "type": "string"
328174
- },
328175
- {
328176
- "type": "null"
328177
- }
328178
- ]
328179
- },
328180
- "autoAdded": {
328181
- "type": "boolean"
328182
- },
328183
- "expiresAt": {
328184
- "anyOf": [
328185
- {
328186
- "format": "date-time",
328187
- "type": "string"
328188
- },
328189
- {
328190
- "type": "null"
328191
- }
328192
- ]
328193
- },
328194
- "reason": {
328195
- "anyOf": [
328196
- {
328197
- "type": "string"
328198
- },
328199
- {
328200
- "type": "null"
328201
- }
328202
- ]
328203
- },
328204
- "country": {
328205
- "anyOf": [
328206
- {
328207
- "type": "string"
328208
- },
328209
- {
328210
- "type": "null"
328211
- }
328212
- ]
328213
- },
328214
- "isp": {
328215
- "anyOf": [
328216
- {
328217
- "type": "string"
328218
- },
328219
- {
328220
- "type": "null"
328221
- }
328222
- ]
328223
- },
328224
- "asn": {
328225
- "anyOf": [
328226
- {
328227
- "type": "string"
328228
- },
328229
- {
328230
- "type": "null"
328231
- }
328232
- ]
328233
- },
328234
- "createdAt": {
328235
- "format": "date-time",
328236
- "type": "string"
328237
- }
328263
+ "ok": {
328264
+ "type": "boolean"
328265
+ },
328266
+ "status": {
328267
+ "anyOf": [
328268
+ {
328269
+ "type": "number"
328270
+ },
328271
+ {
328272
+ "type": "null"
328238
328273
  }
328239
- }
328274
+ ]
328240
328275
  },
328241
- "total": {
328242
- "type": "number"
328276
+ "response": {
328277
+ "anyOf": [
328278
+ {
328279
+ "type": "string"
328280
+ },
328281
+ {
328282
+ "type": "null"
328283
+ }
328284
+ ]
328285
+ },
328286
+ "error": {
328287
+ "anyOf": [
328288
+ {
328289
+ "type": "string"
328290
+ },
328291
+ {
328292
+ "type": "null"
328293
+ }
328294
+ ]
328243
328295
  }
328244
328296
  }
328245
328297
  }
328246
328298
  }
328247
328299
  }
328248
328300
  },
328249
- "401": {
328250
- "description": "Unauthorized - missing or invalid bearer token",
328251
- "content": {
328252
- "application/json": {
328253
- "schema": {
328254
- "$ref": "#/components/schemas/ErrorResponse"
328255
- }
328256
- }
328257
- }
328258
- },
328259
- "429": {
328260
- "description": "Too many requests - rate limit exceeded. Reachable on every API-key operation: the per-key cap sold with the plan answers `code: API_KEY_RATE_LIMITED` with `retry_after_seconds` and the `Retry-After` header. The global per-IP limiter can answer here too, with the same status and only `statusCode`, `error` and `message`.",
328261
- "content": {
328262
- "application/json": {
328263
- "schema": {
328264
- "$ref": "#/components/schemas/RateLimitedResponse"
328265
- }
328266
- }
328267
- }
328268
- },
328269
- "500": {
328270
- "description": "Internal server error",
328301
+ "400": {
328302
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328271
328303
  "content": {
328272
328304
  "application/json": {
328273
328305
  "schema": {
328306
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328307
+ "additionalProperties": false,
328274
328308
  "type": "object",
328275
328309
  "required": [
328276
328310
  "statusCode",
@@ -328286,22 +328320,20 @@
328286
328320
  },
328287
328321
  "message": {
328288
328322
  "type": "string"
328323
+ },
328324
+ "code": {
328325
+ "type": "string",
328326
+ "enum": [
328327
+ "SCOPE_TEAM_REQUIRED"
328328
+ ]
328289
328329
  }
328290
328330
  }
328291
328331
  }
328292
328332
  }
328293
328333
  }
328294
328334
  },
328295
- "503": {
328296
- "description": "Session revocation check unavailable (Redis): retry after the Retry-After header.",
328297
- "headers": {
328298
- "Retry-After": {
328299
- "description": "Seconds to wait before retrying the identical request.",
328300
- "schema": {
328301
- "type": "integer"
328302
- }
328303
- }
328304
- },
328335
+ "401": {
328336
+ "description": "Unauthorized - missing or invalid bearer token",
328305
328337
  "content": {
328306
328338
  "application/json": {
328307
328339
  "schema": {
@@ -328309,192 +328341,12 @@
328309
328341
  }
328310
328342
  }
328311
328343
  }
328312
- }
328313
- }
328314
- },
328315
- "post": {
328316
- "operationId": "postApiV1TrafficFilterBlacklist",
328317
- "summary": "Create a Traffic Filter blacklist entry",
328318
- "tags": [
328319
- "traffic-filter"
328320
- ],
328321
- "description": "Creates a new blacklist entry for the current team.",
328322
- "requestBody": {
328323
- "required": true,
328324
- "content": {
328325
- "application/json": {
328326
- "schema": {
328327
- "additionalProperties": false,
328328
- "type": "object",
328329
- "required": [
328330
- "value"
328331
- ],
328332
- "properties": {
328333
- "value": {
328334
- "minLength": 1,
328335
- "maxLength": 500,
328336
- "type": "string"
328337
- },
328338
- "kind": {
328339
- "maxLength": 40,
328340
- "type": "string"
328341
- },
328342
- "note": {
328343
- "anyOf": [
328344
- {
328345
- "maxLength": 1000,
328346
- "type": "string"
328347
- },
328348
- {
328349
- "type": "null"
328350
- }
328351
- ]
328352
- },
328353
- "team_id": {
328354
- "format": "uuid",
328355
- "type": "string"
328356
- }
328357
- }
328358
- }
328359
- }
328360
- }
328361
- },
328362
- "parameters": [
328363
- {
328364
- "schema": {
328365
- "format": "uuid",
328366
- "type": "string"
328367
- },
328368
- "in": "header",
328369
- "name": "x-team-id",
328370
- "required": false,
328371
- "description": "Destination workspace team id."
328372
- }
328373
- ],
328374
- "security": [
328375
- {
328376
- "bearerAuth": []
328377
- },
328378
- {
328379
- "apiKeyAuth": []
328380
- }
328381
- ],
328382
- "responses": {
328383
- "201": {
328384
- "description": "Resource created",
328385
- "content": {
328386
- "application/json": {
328387
- "schema": {
328388
- "type": "object",
328389
- "required": [
328390
- "id",
328391
- "teamId",
328392
- "value",
328393
- "kind",
328394
- "note",
328395
- "autoAdded",
328396
- "expiresAt",
328397
- "reason",
328398
- "country",
328399
- "isp",
328400
- "asn",
328401
- "createdAt"
328402
- ],
328403
- "properties": {
328404
- "id": {
328405
- "format": "uuid",
328406
- "type": "string"
328407
- },
328408
- "teamId": {
328409
- "format": "uuid",
328410
- "type": "string"
328411
- },
328412
- "value": {
328413
- "type": "string"
328414
- },
328415
- "kind": {
328416
- "type": "string"
328417
- },
328418
- "note": {
328419
- "anyOf": [
328420
- {
328421
- "type": "string"
328422
- },
328423
- {
328424
- "type": "null"
328425
- }
328426
- ]
328427
- },
328428
- "autoAdded": {
328429
- "type": "boolean"
328430
- },
328431
- "expiresAt": {
328432
- "anyOf": [
328433
- {
328434
- "format": "date-time",
328435
- "type": "string"
328436
- },
328437
- {
328438
- "type": "null"
328439
- }
328440
- ]
328441
- },
328442
- "reason": {
328443
- "anyOf": [
328444
- {
328445
- "type": "string"
328446
- },
328447
- {
328448
- "type": "null"
328449
- }
328450
- ]
328451
- },
328452
- "country": {
328453
- "anyOf": [
328454
- {
328455
- "type": "string"
328456
- },
328457
- {
328458
- "type": "null"
328459
- }
328460
- ]
328461
- },
328462
- "isp": {
328463
- "anyOf": [
328464
- {
328465
- "type": "string"
328466
- },
328467
- {
328468
- "type": "null"
328469
- }
328470
- ]
328471
- },
328472
- "asn": {
328473
- "anyOf": [
328474
- {
328475
- "type": "string"
328476
- },
328477
- {
328478
- "type": "null"
328479
- }
328480
- ]
328481
- },
328482
- "createdAt": {
328483
- "format": "date-time",
328484
- "type": "string"
328485
- }
328486
- }
328487
- }
328488
- }
328489
- }
328490
328344
  },
328491
- "400": {
328492
- "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328345
+ "403": {
328346
+ "description": "Forbidden - caller lacks the required role/permission",
328493
328347
  "content": {
328494
328348
  "application/json": {
328495
328349
  "schema": {
328496
- "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328497
- "additionalProperties": false,
328498
328350
  "type": "object",
328499
328351
  "required": [
328500
328352
  "statusCode",
@@ -328510,30 +328362,14 @@
328510
328362
  },
328511
328363
  "message": {
328512
328364
  "type": "string"
328513
- },
328514
- "code": {
328515
- "type": "string",
328516
- "enum": [
328517
- "SCOPE_TEAM_REQUIRED"
328518
- ]
328519
328365
  }
328520
328366
  }
328521
328367
  }
328522
328368
  }
328523
328369
  }
328524
328370
  },
328525
- "401": {
328526
- "description": "Unauthorized - missing or invalid bearer token",
328527
- "content": {
328528
- "application/json": {
328529
- "schema": {
328530
- "$ref": "#/components/schemas/ErrorResponse"
328531
- }
328532
- }
328533
- }
328534
- },
328535
- "403": {
328536
- "description": "Forbidden - caller lacks the required role/permission",
328371
+ "404": {
328372
+ "description": "Resource not found",
328537
328373
  "content": {
328538
328374
  "application/json": {
328539
328375
  "schema": {
@@ -328615,50 +328451,207 @@
328615
328451
  }
328616
328452
  }
328617
328453
  },
328618
- "/api/v1/traffic-filter/blacklist/stats": {
328454
+ "/api/v1/traffic-filter/blacklist": {
328619
328455
  "get": {
328620
- "operationId": "getApiV1TrafficFilterBlacklistStats",
328621
- "summary": "Traffic Filter blacklist stat cards",
328456
+ "operationId": "getApiV1TrafficFilterBlacklist",
328457
+ "summary": "List Traffic Filter blacklist entries",
328622
328458
  "tags": [
328623
328459
  "traffic-filter"
328624
328460
  ],
328625
- "description": "Total / auto / manual / active / expired counts for the current team.",
328626
- "security": [
328461
+ "description": "Returns all blacklist entries for the current team.",
328462
+ "parameters": [
328627
328463
  {
328628
- "bearerAuth": []
328464
+ "schema": {
328465
+ "maxLength": 40,
328466
+ "type": "string"
328467
+ },
328468
+ "in": "query",
328469
+ "name": "kind",
328470
+ "required": false
328629
328471
  },
328630
328472
  {
328631
- "apiKeyAuth": []
328632
- }
328633
- ],
328634
- "responses": {
328635
- "200": {
328636
- "description": "Successful response",
328637
- "content": {
328638
- "application/json": {
328639
- "schema": {
328640
- "type": "object",
328641
- "required": [
328642
- "total",
328643
- "auto",
328644
- "manual",
328645
- "active",
328646
- "expired"
328647
- ],
328648
- "properties": {
328649
- "total": {
328650
- "type": "number"
328651
- },
328652
- "auto": {
328653
- "type": "number"
328654
- },
328655
- "manual": {
328656
- "type": "number"
328657
- },
328658
- "active": {
328659
- "type": "number"
328473
+ "schema": {
328474
+ "minimum": 1,
328475
+ "maximum": 100,
328476
+ "type": "integer"
328477
+ },
328478
+ "in": "query",
328479
+ "name": "limit",
328480
+ "required": false
328481
+ },
328482
+ {
328483
+ "schema": {
328484
+ "minimum": 0,
328485
+ "type": "integer"
328486
+ },
328487
+ "in": "query",
328488
+ "name": "offset",
328489
+ "required": false
328490
+ },
328491
+ {
328492
+ "schema": {
328493
+ "anyOf": [
328494
+ {
328495
+ "type": "string",
328496
+ "enum": [
328497
+ "auto"
328498
+ ]
328499
+ },
328500
+ {
328501
+ "type": "string",
328502
+ "enum": [
328503
+ "manual"
328504
+ ]
328505
+ }
328506
+ ]
328507
+ },
328508
+ "in": "query",
328509
+ "name": "source",
328510
+ "required": false
328511
+ },
328512
+ {
328513
+ "schema": {
328514
+ "type": "boolean"
328515
+ },
328516
+ "in": "query",
328517
+ "name": "includeExpired",
328518
+ "required": false
328519
+ },
328520
+ {
328521
+ "schema": {
328522
+ "maxLength": 200,
328523
+ "type": "string"
328524
+ },
328525
+ "in": "query",
328526
+ "name": "search",
328527
+ "required": false
328528
+ }
328529
+ ],
328530
+ "security": [
328531
+ {
328532
+ "bearerAuth": []
328533
+ },
328534
+ {
328535
+ "apiKeyAuth": []
328536
+ }
328537
+ ],
328538
+ "responses": {
328539
+ "200": {
328540
+ "description": "Successful response",
328541
+ "content": {
328542
+ "application/json": {
328543
+ "schema": {
328544
+ "type": "object",
328545
+ "required": [
328546
+ "items",
328547
+ "total"
328548
+ ],
328549
+ "properties": {
328550
+ "items": {
328551
+ "type": "array",
328552
+ "items": {
328553
+ "type": "object",
328554
+ "required": [
328555
+ "id",
328556
+ "teamId",
328557
+ "value",
328558
+ "kind",
328559
+ "note",
328560
+ "autoAdded",
328561
+ "expiresAt",
328562
+ "reason",
328563
+ "country",
328564
+ "isp",
328565
+ "asn",
328566
+ "createdAt"
328567
+ ],
328568
+ "properties": {
328569
+ "id": {
328570
+ "format": "uuid",
328571
+ "type": "string"
328572
+ },
328573
+ "teamId": {
328574
+ "format": "uuid",
328575
+ "type": "string"
328576
+ },
328577
+ "value": {
328578
+ "type": "string"
328579
+ },
328580
+ "kind": {
328581
+ "type": "string"
328582
+ },
328583
+ "note": {
328584
+ "anyOf": [
328585
+ {
328586
+ "type": "string"
328587
+ },
328588
+ {
328589
+ "type": "null"
328590
+ }
328591
+ ]
328592
+ },
328593
+ "autoAdded": {
328594
+ "type": "boolean"
328595
+ },
328596
+ "expiresAt": {
328597
+ "anyOf": [
328598
+ {
328599
+ "format": "date-time",
328600
+ "type": "string"
328601
+ },
328602
+ {
328603
+ "type": "null"
328604
+ }
328605
+ ]
328606
+ },
328607
+ "reason": {
328608
+ "anyOf": [
328609
+ {
328610
+ "type": "string"
328611
+ },
328612
+ {
328613
+ "type": "null"
328614
+ }
328615
+ ]
328616
+ },
328617
+ "country": {
328618
+ "anyOf": [
328619
+ {
328620
+ "type": "string"
328621
+ },
328622
+ {
328623
+ "type": "null"
328624
+ }
328625
+ ]
328626
+ },
328627
+ "isp": {
328628
+ "anyOf": [
328629
+ {
328630
+ "type": "string"
328631
+ },
328632
+ {
328633
+ "type": "null"
328634
+ }
328635
+ ]
328636
+ },
328637
+ "asn": {
328638
+ "anyOf": [
328639
+ {
328640
+ "type": "string"
328641
+ },
328642
+ {
328643
+ "type": "null"
328644
+ }
328645
+ ]
328646
+ },
328647
+ "createdAt": {
328648
+ "format": "date-time",
328649
+ "type": "string"
328650
+ }
328651
+ }
328652
+ }
328660
328653
  },
328661
- "expired": {
328654
+ "total": {
328662
328655
  "type": "number"
328663
328656
  }
328664
328657
  }
@@ -328731,26 +328724,64 @@
328731
328724
  }
328732
328725
  }
328733
328726
  }
328734
- }
328735
- },
328736
- "/api/v1/traffic-filter/blacklist/bleed-impact": {
328737
- "get": {
328738
- "operationId": "getApiV1TrafficFilterBlacklistBleedImpact",
328739
- "summary": "Traffic Filter blacklist bleed-impact",
328727
+ },
328728
+ "post": {
328729
+ "operationId": "postApiV1TrafficFilterBlacklist",
328730
+ "summary": "Create a Traffic Filter blacklist entry",
328740
328731
  "tags": [
328741
328732
  "traffic-filter"
328742
328733
  ],
328743
- "description": "How much recent blocked traffic is attributable to the DB blacklist over the last N days.",
328734
+ "description": "Creates a new blacklist entry for the current team.",
328735
+ "requestBody": {
328736
+ "required": true,
328737
+ "content": {
328738
+ "application/json": {
328739
+ "schema": {
328740
+ "additionalProperties": false,
328741
+ "type": "object",
328742
+ "required": [
328743
+ "value"
328744
+ ],
328745
+ "properties": {
328746
+ "value": {
328747
+ "minLength": 1,
328748
+ "maxLength": 500,
328749
+ "type": "string"
328750
+ },
328751
+ "kind": {
328752
+ "maxLength": 40,
328753
+ "type": "string"
328754
+ },
328755
+ "note": {
328756
+ "anyOf": [
328757
+ {
328758
+ "maxLength": 1000,
328759
+ "type": "string"
328760
+ },
328761
+ {
328762
+ "type": "null"
328763
+ }
328764
+ ]
328765
+ },
328766
+ "team_id": {
328767
+ "format": "uuid",
328768
+ "type": "string"
328769
+ }
328770
+ }
328771
+ }
328772
+ }
328773
+ }
328774
+ },
328744
328775
  "parameters": [
328745
328776
  {
328746
328777
  "schema": {
328747
- "minimum": 1,
328748
- "maximum": 90,
328749
- "type": "integer"
328778
+ "format": "uuid",
328779
+ "type": "string"
328750
328780
  },
328751
- "in": "query",
328752
- "name": "days",
328753
- "required": false
328781
+ "in": "header",
328782
+ "name": "x-team-id",
328783
+ "required": false,
328784
+ "description": "Destination workspace team id."
328754
328785
  }
328755
328786
  ],
328756
328787
  "security": [
@@ -328762,38 +328793,142 @@
328762
328793
  }
328763
328794
  ],
328764
328795
  "responses": {
328765
- "200": {
328766
- "description": "Successful response",
328796
+ "201": {
328797
+ "description": "Resource created",
328767
328798
  "content": {
328768
328799
  "application/json": {
328769
328800
  "schema": {
328770
328801
  "type": "object",
328771
328802
  "required": [
328772
- "days",
328773
- "blocked",
328774
- "dbAttributed",
328775
- "dbOnly",
328776
- "dbAttributedPct",
328777
- "dbOnlyPct"
328803
+ "id",
328804
+ "teamId",
328805
+ "value",
328806
+ "kind",
328807
+ "note",
328808
+ "autoAdded",
328809
+ "expiresAt",
328810
+ "reason",
328811
+ "country",
328812
+ "isp",
328813
+ "asn",
328814
+ "createdAt"
328778
328815
  ],
328779
328816
  "properties": {
328780
- "days": {
328781
- "type": "number"
328817
+ "id": {
328818
+ "format": "uuid",
328819
+ "type": "string"
328782
328820
  },
328783
- "blocked": {
328784
- "type": "number"
328821
+ "teamId": {
328822
+ "format": "uuid",
328823
+ "type": "string"
328785
328824
  },
328786
- "dbAttributed": {
328787
- "type": "number"
328825
+ "value": {
328826
+ "type": "string"
328788
328827
  },
328789
- "dbOnly": {
328790
- "type": "number"
328828
+ "kind": {
328829
+ "type": "string"
328791
328830
  },
328792
- "dbAttributedPct": {
328793
- "type": "number"
328831
+ "note": {
328832
+ "anyOf": [
328833
+ {
328834
+ "type": "string"
328835
+ },
328836
+ {
328837
+ "type": "null"
328838
+ }
328839
+ ]
328794
328840
  },
328795
- "dbOnlyPct": {
328841
+ "autoAdded": {
328842
+ "type": "boolean"
328843
+ },
328844
+ "expiresAt": {
328845
+ "anyOf": [
328846
+ {
328847
+ "format": "date-time",
328848
+ "type": "string"
328849
+ },
328850
+ {
328851
+ "type": "null"
328852
+ }
328853
+ ]
328854
+ },
328855
+ "reason": {
328856
+ "anyOf": [
328857
+ {
328858
+ "type": "string"
328859
+ },
328860
+ {
328861
+ "type": "null"
328862
+ }
328863
+ ]
328864
+ },
328865
+ "country": {
328866
+ "anyOf": [
328867
+ {
328868
+ "type": "string"
328869
+ },
328870
+ {
328871
+ "type": "null"
328872
+ }
328873
+ ]
328874
+ },
328875
+ "isp": {
328876
+ "anyOf": [
328877
+ {
328878
+ "type": "string"
328879
+ },
328880
+ {
328881
+ "type": "null"
328882
+ }
328883
+ ]
328884
+ },
328885
+ "asn": {
328886
+ "anyOf": [
328887
+ {
328888
+ "type": "string"
328889
+ },
328890
+ {
328891
+ "type": "null"
328892
+ }
328893
+ ]
328894
+ },
328895
+ "createdAt": {
328896
+ "format": "date-time",
328897
+ "type": "string"
328898
+ }
328899
+ }
328900
+ }
328901
+ }
328902
+ }
328903
+ },
328904
+ "400": {
328905
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328906
+ "content": {
328907
+ "application/json": {
328908
+ "schema": {
328909
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
328910
+ "additionalProperties": false,
328911
+ "type": "object",
328912
+ "required": [
328913
+ "statusCode",
328914
+ "error",
328915
+ "message"
328916
+ ],
328917
+ "properties": {
328918
+ "statusCode": {
328796
328919
  "type": "number"
328920
+ },
328921
+ "error": {
328922
+ "type": "string"
328923
+ },
328924
+ "message": {
328925
+ "type": "string"
328926
+ },
328927
+ "code": {
328928
+ "type": "string",
328929
+ "enum": [
328930
+ "SCOPE_TEAM_REQUIRED"
328931
+ ]
328797
328932
  }
328798
328933
  }
328799
328934
  }
@@ -328810,6 +328945,32 @@
328810
328945
  }
328811
328946
  }
328812
328947
  },
328948
+ "403": {
328949
+ "description": "Forbidden - caller lacks the required role/permission",
328950
+ "content": {
328951
+ "application/json": {
328952
+ "schema": {
328953
+ "type": "object",
328954
+ "required": [
328955
+ "statusCode",
328956
+ "error",
328957
+ "message"
328958
+ ],
328959
+ "properties": {
328960
+ "statusCode": {
328961
+ "type": "number"
328962
+ },
328963
+ "error": {
328964
+ "type": "string"
328965
+ },
328966
+ "message": {
328967
+ "type": "string"
328968
+ }
328969
+ }
328970
+ }
328971
+ }
328972
+ }
328973
+ },
328813
328974
  "429": {
328814
328975
  "description": "Too many requests - rate limit exceeded. Reachable on every API-key operation: the per-key cap sold with the plan answers `code: API_KEY_RATE_LIMITED` with `retry_after_seconds` and the `Retry-After` header. The global per-IP limiter can answer here too, with the same status and only `statusCode`, `error` and `message`.",
328815
328976
  "content": {
@@ -328867,14 +329028,14 @@
328867
329028
  }
328868
329029
  }
328869
329030
  },
328870
- "/api/v1/traffic-filter/blacklist/export": {
329031
+ "/api/v1/traffic-filter/blacklist/stats": {
328871
329032
  "get": {
328872
- "operationId": "getApiV1TrafficFilterBlacklistExport",
328873
- "summary": "Export Traffic Filter blacklist as CSV",
329033
+ "operationId": "getApiV1TrafficFilterBlacklistStats",
329034
+ "summary": "Traffic Filter blacklist stat cards",
328874
329035
  "tags": [
328875
329036
  "traffic-filter"
328876
329037
  ],
328877
- "description": "Returns up to 50,000 active blacklist entries as a spreadsheet-safe CSV download; formula-like text cells are neutralized.",
329038
+ "description": "Total / auto / manual / active / expired counts for the current team.",
328878
329039
  "security": [
328879
329040
  {
328880
329041
  "bearerAuth": []
@@ -328885,12 +329046,35 @@
328885
329046
  ],
328886
329047
  "responses": {
328887
329048
  "200": {
328888
- "description": "CSV file with the active blacklist entries.",
329049
+ "description": "Successful response",
328889
329050
  "content": {
328890
- "text/csv": {
329051
+ "application/json": {
328891
329052
  "schema": {
328892
- "description": "CSV file content.",
328893
- "type": "string"
329053
+ "type": "object",
329054
+ "required": [
329055
+ "total",
329056
+ "auto",
329057
+ "manual",
329058
+ "active",
329059
+ "expired"
329060
+ ],
329061
+ "properties": {
329062
+ "total": {
329063
+ "type": "number"
329064
+ },
329065
+ "auto": {
329066
+ "type": "number"
329067
+ },
329068
+ "manual": {
329069
+ "type": "number"
329070
+ },
329071
+ "active": {
329072
+ "type": "number"
329073
+ },
329074
+ "expired": {
329075
+ "type": "number"
329076
+ }
329077
+ }
328894
329078
  }
328895
329079
  }
328896
329080
  }
@@ -328962,49 +329146,24 @@
328962
329146
  }
328963
329147
  }
328964
329148
  },
328965
- "/api/v1/traffic-filter/blacklist/bulk-delete": {
328966
- "post": {
328967
- "operationId": "postApiV1TrafficFilterBlacklistBulkDelete",
328968
- "summary": "Bulk-delete Traffic Filter blacklist entries",
329149
+ "/api/v1/traffic-filter/blacklist/bleed-impact": {
329150
+ "get": {
329151
+ "operationId": "getApiV1TrafficFilterBlacklistBleedImpact",
329152
+ "summary": "Traffic Filter blacklist bleed-impact",
328969
329153
  "tags": [
328970
329154
  "traffic-filter"
328971
329155
  ],
328972
- "description": "Permanently deletes the given blacklist entries (scoped to accessible teams).",
328973
- "requestBody": {
328974
- "required": true,
328975
- "content": {
328976
- "application/json": {
328977
- "schema": {
328978
- "additionalProperties": false,
328979
- "type": "object",
328980
- "required": [
328981
- "ids"
328982
- ],
328983
- "properties": {
328984
- "ids": {
328985
- "minItems": 1,
328986
- "maxItems": 500,
328987
- "type": "array",
328988
- "items": {
328989
- "format": "uuid",
328990
- "type": "string"
328991
- }
328992
- }
328993
- }
328994
- }
328995
- }
328996
- }
328997
- },
329156
+ "description": "How much recent blocked traffic is attributable to the DB blacklist over the last N days.",
328998
329157
  "parameters": [
328999
329158
  {
329000
329159
  "schema": {
329001
- "format": "uuid",
329002
- "type": "string"
329160
+ "minimum": 1,
329161
+ "maximum": 90,
329162
+ "type": "integer"
329003
329163
  },
329004
- "in": "header",
329005
- "name": "x-team-id",
329006
- "required": false,
329007
- "description": "Destination workspace team id."
329164
+ "in": "query",
329165
+ "name": "days",
329166
+ "required": false
329008
329167
  }
329009
329168
  ],
329010
329169
  "security": [
@@ -329023,13 +329182,267 @@
329023
329182
  "schema": {
329024
329183
  "type": "object",
329025
329184
  "required": [
329026
- "deleted"
329185
+ "days",
329186
+ "blocked",
329187
+ "dbAttributed",
329188
+ "dbOnly",
329189
+ "dbAttributedPct",
329190
+ "dbOnlyPct"
329027
329191
  ],
329028
329192
  "properties": {
329029
- "deleted": {
329193
+ "days": {
329030
329194
  "type": "number"
329031
- }
329032
- }
329195
+ },
329196
+ "blocked": {
329197
+ "type": "number"
329198
+ },
329199
+ "dbAttributed": {
329200
+ "type": "number"
329201
+ },
329202
+ "dbOnly": {
329203
+ "type": "number"
329204
+ },
329205
+ "dbAttributedPct": {
329206
+ "type": "number"
329207
+ },
329208
+ "dbOnlyPct": {
329209
+ "type": "number"
329210
+ }
329211
+ }
329212
+ }
329213
+ }
329214
+ }
329215
+ },
329216
+ "401": {
329217
+ "description": "Unauthorized - missing or invalid bearer token",
329218
+ "content": {
329219
+ "application/json": {
329220
+ "schema": {
329221
+ "$ref": "#/components/schemas/ErrorResponse"
329222
+ }
329223
+ }
329224
+ }
329225
+ },
329226
+ "429": {
329227
+ "description": "Too many requests - rate limit exceeded. Reachable on every API-key operation: the per-key cap sold with the plan answers `code: API_KEY_RATE_LIMITED` with `retry_after_seconds` and the `Retry-After` header. The global per-IP limiter can answer here too, with the same status and only `statusCode`, `error` and `message`.",
329228
+ "content": {
329229
+ "application/json": {
329230
+ "schema": {
329231
+ "$ref": "#/components/schemas/RateLimitedResponse"
329232
+ }
329233
+ }
329234
+ }
329235
+ },
329236
+ "500": {
329237
+ "description": "Internal server error",
329238
+ "content": {
329239
+ "application/json": {
329240
+ "schema": {
329241
+ "type": "object",
329242
+ "required": [
329243
+ "statusCode",
329244
+ "error",
329245
+ "message"
329246
+ ],
329247
+ "properties": {
329248
+ "statusCode": {
329249
+ "type": "number"
329250
+ },
329251
+ "error": {
329252
+ "type": "string"
329253
+ },
329254
+ "message": {
329255
+ "type": "string"
329256
+ }
329257
+ }
329258
+ }
329259
+ }
329260
+ }
329261
+ },
329262
+ "503": {
329263
+ "description": "Session revocation check unavailable (Redis): retry after the Retry-After header.",
329264
+ "headers": {
329265
+ "Retry-After": {
329266
+ "description": "Seconds to wait before retrying the identical request.",
329267
+ "schema": {
329268
+ "type": "integer"
329269
+ }
329270
+ }
329271
+ },
329272
+ "content": {
329273
+ "application/json": {
329274
+ "schema": {
329275
+ "$ref": "#/components/schemas/ErrorResponse"
329276
+ }
329277
+ }
329278
+ }
329279
+ }
329280
+ }
329281
+ }
329282
+ },
329283
+ "/api/v1/traffic-filter/blacklist/export": {
329284
+ "get": {
329285
+ "operationId": "getApiV1TrafficFilterBlacklistExport",
329286
+ "summary": "Export Traffic Filter blacklist as CSV",
329287
+ "tags": [
329288
+ "traffic-filter"
329289
+ ],
329290
+ "description": "Returns up to 50,000 active blacklist entries as a spreadsheet-safe CSV download; formula-like text cells are neutralized.",
329291
+ "security": [
329292
+ {
329293
+ "bearerAuth": []
329294
+ },
329295
+ {
329296
+ "apiKeyAuth": []
329297
+ }
329298
+ ],
329299
+ "responses": {
329300
+ "200": {
329301
+ "description": "CSV file with the active blacklist entries.",
329302
+ "content": {
329303
+ "text/csv": {
329304
+ "schema": {
329305
+ "description": "CSV file content.",
329306
+ "type": "string"
329307
+ }
329308
+ }
329309
+ }
329310
+ },
329311
+ "401": {
329312
+ "description": "Unauthorized - missing or invalid bearer token",
329313
+ "content": {
329314
+ "application/json": {
329315
+ "schema": {
329316
+ "$ref": "#/components/schemas/ErrorResponse"
329317
+ }
329318
+ }
329319
+ }
329320
+ },
329321
+ "429": {
329322
+ "description": "Too many requests - rate limit exceeded. Reachable on every API-key operation: the per-key cap sold with the plan answers `code: API_KEY_RATE_LIMITED` with `retry_after_seconds` and the `Retry-After` header. The global per-IP limiter can answer here too, with the same status and only `statusCode`, `error` and `message`.",
329323
+ "content": {
329324
+ "application/json": {
329325
+ "schema": {
329326
+ "$ref": "#/components/schemas/RateLimitedResponse"
329327
+ }
329328
+ }
329329
+ }
329330
+ },
329331
+ "500": {
329332
+ "description": "Internal server error",
329333
+ "content": {
329334
+ "application/json": {
329335
+ "schema": {
329336
+ "type": "object",
329337
+ "required": [
329338
+ "statusCode",
329339
+ "error",
329340
+ "message"
329341
+ ],
329342
+ "properties": {
329343
+ "statusCode": {
329344
+ "type": "number"
329345
+ },
329346
+ "error": {
329347
+ "type": "string"
329348
+ },
329349
+ "message": {
329350
+ "type": "string"
329351
+ }
329352
+ }
329353
+ }
329354
+ }
329355
+ }
329356
+ },
329357
+ "503": {
329358
+ "description": "Session revocation check unavailable (Redis): retry after the Retry-After header.",
329359
+ "headers": {
329360
+ "Retry-After": {
329361
+ "description": "Seconds to wait before retrying the identical request.",
329362
+ "schema": {
329363
+ "type": "integer"
329364
+ }
329365
+ }
329366
+ },
329367
+ "content": {
329368
+ "application/json": {
329369
+ "schema": {
329370
+ "$ref": "#/components/schemas/ErrorResponse"
329371
+ }
329372
+ }
329373
+ }
329374
+ }
329375
+ }
329376
+ }
329377
+ },
329378
+ "/api/v1/traffic-filter/blacklist/bulk-delete": {
329379
+ "post": {
329380
+ "operationId": "postApiV1TrafficFilterBlacklistBulkDelete",
329381
+ "summary": "Bulk-delete Traffic Filter blacklist entries",
329382
+ "tags": [
329383
+ "traffic-filter"
329384
+ ],
329385
+ "description": "Permanently deletes the given blacklist entries (scoped to accessible teams).",
329386
+ "requestBody": {
329387
+ "required": true,
329388
+ "content": {
329389
+ "application/json": {
329390
+ "schema": {
329391
+ "additionalProperties": false,
329392
+ "type": "object",
329393
+ "required": [
329394
+ "ids"
329395
+ ],
329396
+ "properties": {
329397
+ "ids": {
329398
+ "minItems": 1,
329399
+ "maxItems": 500,
329400
+ "type": "array",
329401
+ "items": {
329402
+ "format": "uuid",
329403
+ "type": "string"
329404
+ }
329405
+ }
329406
+ }
329407
+ }
329408
+ }
329409
+ }
329410
+ },
329411
+ "parameters": [
329412
+ {
329413
+ "schema": {
329414
+ "format": "uuid",
329415
+ "type": "string"
329416
+ },
329417
+ "in": "header",
329418
+ "name": "x-team-id",
329419
+ "required": false,
329420
+ "description": "Destination workspace team id."
329421
+ }
329422
+ ],
329423
+ "security": [
329424
+ {
329425
+ "bearerAuth": []
329426
+ },
329427
+ {
329428
+ "apiKeyAuth": []
329429
+ }
329430
+ ],
329431
+ "responses": {
329432
+ "200": {
329433
+ "description": "Successful response",
329434
+ "content": {
329435
+ "application/json": {
329436
+ "schema": {
329437
+ "type": "object",
329438
+ "required": [
329439
+ "deleted"
329440
+ ],
329441
+ "properties": {
329442
+ "deleted": {
329443
+ "type": "number"
329444
+ }
329445
+ }
329033
329446
  }
329034
329447
  }
329035
329448
  }
@@ -346000,6 +346413,430 @@
346000
346413
  }
346001
346414
  }
346002
346415
  },
346416
+ "/api/v1/traffic-filter/forms/{id}/duplicate": {
346417
+ "post": {
346418
+ "operationId": "postApiV1TrafficFilterFormsByIdDuplicate",
346419
+ "summary": "Duplicate a Traffic Filter form",
346420
+ "tags": [
346421
+ "traffic-filter"
346422
+ ],
346423
+ "description": "Creates a copy of a form owned by the current team, fields and theme included, so an operator does not have to rebuild it field by field. The copy keeps the source status; pass a name to override the default \"<name> (copia)\".",
346424
+ "requestBody": {
346425
+ "required": true,
346426
+ "content": {
346427
+ "application/json": {
346428
+ "schema": {
346429
+ "additionalProperties": false,
346430
+ "type": "object",
346431
+ "properties": {
346432
+ "name": {
346433
+ "maxLength": 200,
346434
+ "minLength": 1,
346435
+ "type": "string"
346436
+ }
346437
+ }
346438
+ }
346439
+ }
346440
+ }
346441
+ },
346442
+ "parameters": [
346443
+ {
346444
+ "schema": {
346445
+ "format": "uuid",
346446
+ "type": "string"
346447
+ },
346448
+ "in": "path",
346449
+ "name": "id",
346450
+ "required": true
346451
+ },
346452
+ {
346453
+ "schema": {
346454
+ "format": "uuid",
346455
+ "type": "string"
346456
+ },
346457
+ "in": "header",
346458
+ "name": "x-team-id",
346459
+ "required": false,
346460
+ "description": "Destination workspace team id."
346461
+ }
346462
+ ],
346463
+ "security": [
346464
+ {
346465
+ "bearerAuth": []
346466
+ },
346467
+ {
346468
+ "apiKeyAuth": []
346469
+ }
346470
+ ],
346471
+ "responses": {
346472
+ "201": {
346473
+ "description": "Resource created",
346474
+ "content": {
346475
+ "application/json": {
346476
+ "schema": {
346477
+ "type": "object",
346478
+ "required": [
346479
+ "id",
346480
+ "teamId",
346481
+ "advertiserId",
346482
+ "productId",
346483
+ "name",
346484
+ "fields",
346485
+ "theme",
346486
+ "smsEnabled",
346487
+ "smsTemplate",
346488
+ "smsTriggerStatuses",
346489
+ "phoneValidationEnabled",
346490
+ "phoneCountryCode",
346491
+ "includeFingerprint",
346492
+ "tyLandingId",
346493
+ "status",
346494
+ "createdAt",
346495
+ "updatedAt"
346496
+ ],
346497
+ "properties": {
346498
+ "id": {
346499
+ "format": "uuid",
346500
+ "type": "string"
346501
+ },
346502
+ "teamId": {
346503
+ "format": "uuid",
346504
+ "type": "string"
346505
+ },
346506
+ "advertiserId": {
346507
+ "anyOf": [
346508
+ {
346509
+ "format": "uuid",
346510
+ "type": "string"
346511
+ },
346512
+ {
346513
+ "type": "null"
346514
+ }
346515
+ ]
346516
+ },
346517
+ "productId": {
346518
+ "anyOf": [
346519
+ {
346520
+ "format": "uuid",
346521
+ "type": "string"
346522
+ },
346523
+ {
346524
+ "type": "null"
346525
+ }
346526
+ ]
346527
+ },
346528
+ "name": {
346529
+ "type": "string"
346530
+ },
346531
+ "fields": {
346532
+ "anyOf": [
346533
+ {
346534
+ "type": "array",
346535
+ "items": {
346536
+ "additionalProperties": true,
346537
+ "type": "object",
346538
+ "required": [
346539
+ "key",
346540
+ "label",
346541
+ "type"
346542
+ ],
346543
+ "properties": {
346544
+ "key": {
346545
+ "type": "string"
346546
+ },
346547
+ "label": {
346548
+ "type": "string"
346549
+ },
346550
+ "type": {
346551
+ "type": "string"
346552
+ },
346553
+ "required": {
346554
+ "type": "boolean"
346555
+ },
346556
+ "placeholder": {
346557
+ "anyOf": [
346558
+ {
346559
+ "type": "string"
346560
+ },
346561
+ {
346562
+ "type": "null"
346563
+ }
346564
+ ]
346565
+ },
346566
+ "options": {
346567
+ "type": "array",
346568
+ "items": {
346569
+ "type": "string"
346570
+ }
346571
+ }
346572
+ }
346573
+ }
346574
+ },
346575
+ {
346576
+ "type": "null"
346577
+ }
346578
+ ]
346579
+ },
346580
+ "theme": {
346581
+ "anyOf": [
346582
+ {
346583
+ "description": "JSON object with nested arrays and objects.",
346584
+ "type": "object",
346585
+ "additionalProperties": {
346586
+ "$comment": "json-value",
346587
+ "description": "Arbitrary JSON value with nested arrays and objects."
346588
+ }
346589
+ },
346590
+ {
346591
+ "type": "null"
346592
+ }
346593
+ ]
346594
+ },
346595
+ "smsEnabled": {
346596
+ "type": "boolean"
346597
+ },
346598
+ "smsTemplate": {
346599
+ "anyOf": [
346600
+ {
346601
+ "type": "string"
346602
+ },
346603
+ {
346604
+ "type": "null"
346605
+ }
346606
+ ]
346607
+ },
346608
+ "smsTriggerStatuses": {
346609
+ "type": "array",
346610
+ "items": {
346611
+ "type": "string"
346612
+ }
346613
+ },
346614
+ "phoneValidationEnabled": {
346615
+ "type": "boolean"
346616
+ },
346617
+ "phoneCountryCode": {
346618
+ "anyOf": [
346619
+ {
346620
+ "type": "string"
346621
+ },
346622
+ {
346623
+ "type": "null"
346624
+ }
346625
+ ]
346626
+ },
346627
+ "includeFingerprint": {
346628
+ "type": "boolean"
346629
+ },
346630
+ "tyLandingId": {
346631
+ "anyOf": [
346632
+ {
346633
+ "format": "uuid",
346634
+ "type": "string"
346635
+ },
346636
+ {
346637
+ "type": "null"
346638
+ }
346639
+ ]
346640
+ },
346641
+ "status": {
346642
+ "type": "string"
346643
+ },
346644
+ "createdAt": {
346645
+ "format": "date-time",
346646
+ "type": "string"
346647
+ },
346648
+ "updatedAt": {
346649
+ "anyOf": [
346650
+ {
346651
+ "format": "date-time",
346652
+ "type": "string"
346653
+ },
346654
+ {
346655
+ "type": "null"
346656
+ }
346657
+ ]
346658
+ }
346659
+ }
346660
+ }
346661
+ }
346662
+ }
346663
+ },
346664
+ "400": {
346665
+ "description": "Invalid request - schema validation failed",
346666
+ "content": {
346667
+ "application/json": {
346668
+ "schema": {
346669
+ "anyOf": [
346670
+ {
346671
+ "description": "Explicit destination workspace required: send the x-team-id header or activate a team scope for this operation.",
346672
+ "additionalProperties": false,
346673
+ "type": "object",
346674
+ "required": [
346675
+ "statusCode",
346676
+ "error",
346677
+ "message"
346678
+ ],
346679
+ "properties": {
346680
+ "statusCode": {
346681
+ "type": "number"
346682
+ },
346683
+ "error": {
346684
+ "type": "string"
346685
+ },
346686
+ "message": {
346687
+ "type": "string"
346688
+ },
346689
+ "code": {
346690
+ "type": "string",
346691
+ "enum": [
346692
+ "SCOPE_TEAM_REQUIRED"
346693
+ ]
346694
+ }
346695
+ }
346696
+ },
346697
+ {
346698
+ "type": "object",
346699
+ "required": [
346700
+ "statusCode",
346701
+ "error",
346702
+ "message"
346703
+ ],
346704
+ "properties": {
346705
+ "statusCode": {
346706
+ "type": "number"
346707
+ },
346708
+ "error": {
346709
+ "type": "string"
346710
+ },
346711
+ "message": {
346712
+ "type": "string"
346713
+ }
346714
+ }
346715
+ }
346716
+ ]
346717
+ }
346718
+ }
346719
+ }
346720
+ },
346721
+ "401": {
346722
+ "description": "Unauthorized - missing or invalid bearer token",
346723
+ "content": {
346724
+ "application/json": {
346725
+ "schema": {
346726
+ "$ref": "#/components/schemas/ErrorResponse"
346727
+ }
346728
+ }
346729
+ }
346730
+ },
346731
+ "403": {
346732
+ "description": "Forbidden - caller lacks the required role/permission",
346733
+ "content": {
346734
+ "application/json": {
346735
+ "schema": {
346736
+ "type": "object",
346737
+ "required": [
346738
+ "statusCode",
346739
+ "error",
346740
+ "message"
346741
+ ],
346742
+ "properties": {
346743
+ "statusCode": {
346744
+ "type": "number"
346745
+ },
346746
+ "error": {
346747
+ "type": "string"
346748
+ },
346749
+ "message": {
346750
+ "type": "string"
346751
+ }
346752
+ }
346753
+ }
346754
+ }
346755
+ }
346756
+ },
346757
+ "404": {
346758
+ "description": "Resource not found",
346759
+ "content": {
346760
+ "application/json": {
346761
+ "schema": {
346762
+ "type": "object",
346763
+ "required": [
346764
+ "statusCode",
346765
+ "error",
346766
+ "message"
346767
+ ],
346768
+ "properties": {
346769
+ "statusCode": {
346770
+ "type": "number"
346771
+ },
346772
+ "error": {
346773
+ "type": "string"
346774
+ },
346775
+ "message": {
346776
+ "type": "string"
346777
+ }
346778
+ }
346779
+ }
346780
+ }
346781
+ }
346782
+ },
346783
+ "429": {
346784
+ "description": "Too many requests - rate limit exceeded. Reachable on every API-key operation: the per-key cap sold with the plan answers `code: API_KEY_RATE_LIMITED` with `retry_after_seconds` and the `Retry-After` header. The global per-IP limiter can answer here too, with the same status and only `statusCode`, `error` and `message`.",
346785
+ "content": {
346786
+ "application/json": {
346787
+ "schema": {
346788
+ "$ref": "#/components/schemas/RateLimitedResponse"
346789
+ }
346790
+ }
346791
+ }
346792
+ },
346793
+ "500": {
346794
+ "description": "Internal server error",
346795
+ "content": {
346796
+ "application/json": {
346797
+ "schema": {
346798
+ "type": "object",
346799
+ "required": [
346800
+ "statusCode",
346801
+ "error",
346802
+ "message"
346803
+ ],
346804
+ "properties": {
346805
+ "statusCode": {
346806
+ "type": "number"
346807
+ },
346808
+ "error": {
346809
+ "type": "string"
346810
+ },
346811
+ "message": {
346812
+ "type": "string"
346813
+ }
346814
+ }
346815
+ }
346816
+ }
346817
+ }
346818
+ },
346819
+ "503": {
346820
+ "description": "Session revocation check unavailable (Redis): retry after the Retry-After header.",
346821
+ "headers": {
346822
+ "Retry-After": {
346823
+ "description": "Seconds to wait before retrying the identical request.",
346824
+ "schema": {
346825
+ "type": "integer"
346826
+ }
346827
+ }
346828
+ },
346829
+ "content": {
346830
+ "application/json": {
346831
+ "schema": {
346832
+ "$ref": "#/components/schemas/ErrorResponse"
346833
+ }
346834
+ }
346835
+ }
346836
+ }
346837
+ }
346838
+ }
346839
+ },
346003
346840
  "/api/v1/traffic-filter/integrations/meta/status": {
346004
346841
  "get": {
346005
346842
  "operationId": "getApiV1TrafficFilterIntegrationsMetaStatus",