@wevion/cli 1.0.3578 → 1.0.3584

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 +1380 -250
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -6595,6 +6595,8 @@
6595
6595
  "risk_level",
6596
6596
  "created_at",
6597
6597
  "confirmed_at",
6598
+ "confirmed_by",
6599
+ "second_approver_id",
6598
6600
  "executed_at"
6599
6601
  ],
6600
6602
  "properties": {
@@ -6644,6 +6646,26 @@
6644
6646
  }
6645
6647
  ]
6646
6648
  },
6649
+ "confirmed_by": {
6650
+ "anyOf": [
6651
+ {
6652
+ "type": "string"
6653
+ },
6654
+ {
6655
+ "type": "null"
6656
+ }
6657
+ ]
6658
+ },
6659
+ "second_approver_id": {
6660
+ "anyOf": [
6661
+ {
6662
+ "type": "string"
6663
+ },
6664
+ {
6665
+ "type": "null"
6666
+ }
6667
+ ]
6668
+ },
6647
6669
  "executed_at": {
6648
6670
  "anyOf": [
6649
6671
  {
@@ -105909,7 +105931,7 @@
105909
105931
  "tags": [
105910
105932
  "creative-hub"
105911
105933
  ],
105912
- "description": "Queues a custom text-to-avatar or photo-to-avatar generation job.",
105934
+ "description": "Queues a custom text-to-avatar or photo-to-avatar generation job. For mode=text the prompt is composed server-side from `traits`; every group is optional and an unset group falls back to its default.",
105913
105935
  "requestBody": {
105914
105936
  "required": true,
105915
105937
  "content": {
@@ -105947,6 +105969,635 @@
105947
105969
  "maxLength": 2000,
105948
105970
  "type": "string"
105949
105971
  },
105972
+ "traits": {
105973
+ "additionalProperties": false,
105974
+ "description": "Text-to-avatar traits. Every group is optional; the server composes the generation prompt from them.",
105975
+ "type": "object",
105976
+ "properties": {
105977
+ "age": {
105978
+ "anyOf": [
105979
+ {
105980
+ "type": "string",
105981
+ "enum": [
105982
+ "teens"
105983
+ ]
105984
+ },
105985
+ {
105986
+ "type": "string",
105987
+ "enum": [
105988
+ "twenties"
105989
+ ]
105990
+ },
105991
+ {
105992
+ "type": "string",
105993
+ "enum": [
105994
+ "thirties"
105995
+ ]
105996
+ },
105997
+ {
105998
+ "type": "string",
105999
+ "enum": [
106000
+ "forties"
106001
+ ]
106002
+ },
106003
+ {
106004
+ "type": "string",
106005
+ "enum": [
106006
+ "fifties_plus"
106007
+ ]
106008
+ }
106009
+ ]
106010
+ },
106011
+ "gender": {
106012
+ "anyOf": [
106013
+ {
106014
+ "type": "string",
106015
+ "enum": [
106016
+ "male"
106017
+ ]
106018
+ },
106019
+ {
106020
+ "type": "string",
106021
+ "enum": [
106022
+ "female"
106023
+ ]
106024
+ },
106025
+ {
106026
+ "type": "string",
106027
+ "enum": [
106028
+ "androgynous"
106029
+ ]
106030
+ },
106031
+ {
106032
+ "type": "string",
106033
+ "enum": [
106034
+ "unspecified"
106035
+ ]
106036
+ }
106037
+ ]
106038
+ },
106039
+ "complexion": {
106040
+ "anyOf": [
106041
+ {
106042
+ "type": "string",
106043
+ "enum": [
106044
+ "porcelain"
106045
+ ]
106046
+ },
106047
+ {
106048
+ "type": "string",
106049
+ "enum": [
106050
+ "fair"
106051
+ ]
106052
+ },
106053
+ {
106054
+ "type": "string",
106055
+ "enum": [
106056
+ "olive"
106057
+ ]
106058
+ },
106059
+ {
106060
+ "type": "string",
106061
+ "enum": [
106062
+ "tan"
106063
+ ]
106064
+ },
106065
+ {
106066
+ "type": "string",
106067
+ "enum": [
106068
+ "deep"
106069
+ ]
106070
+ }
106071
+ ]
106072
+ },
106073
+ "hair_color": {
106074
+ "anyOf": [
106075
+ {
106076
+ "type": "string",
106077
+ "enum": [
106078
+ "black"
106079
+ ]
106080
+ },
106081
+ {
106082
+ "type": "string",
106083
+ "enum": [
106084
+ "brown"
106085
+ ]
106086
+ },
106087
+ {
106088
+ "type": "string",
106089
+ "enum": [
106090
+ "blonde"
106091
+ ]
106092
+ },
106093
+ {
106094
+ "type": "string",
106095
+ "enum": [
106096
+ "red"
106097
+ ]
106098
+ },
106099
+ {
106100
+ "type": "string",
106101
+ "enum": [
106102
+ "grey"
106103
+ ]
106104
+ }
106105
+ ]
106106
+ },
106107
+ "hair_texture": {
106108
+ "anyOf": [
106109
+ {
106110
+ "type": "string",
106111
+ "enum": [
106112
+ "straight"
106113
+ ]
106114
+ },
106115
+ {
106116
+ "type": "string",
106117
+ "enum": [
106118
+ "wavy"
106119
+ ]
106120
+ },
106121
+ {
106122
+ "type": "string",
106123
+ "enum": [
106124
+ "curly"
106125
+ ]
106126
+ },
106127
+ {
106128
+ "type": "string",
106129
+ "enum": [
106130
+ "coily"
106131
+ ]
106132
+ }
106133
+ ]
106134
+ },
106135
+ "hair_length": {
106136
+ "anyOf": [
106137
+ {
106138
+ "type": "string",
106139
+ "enum": [
106140
+ "bald"
106141
+ ]
106142
+ },
106143
+ {
106144
+ "type": "string",
106145
+ "enum": [
106146
+ "buzzed"
106147
+ ]
106148
+ },
106149
+ {
106150
+ "type": "string",
106151
+ "enum": [
106152
+ "short"
106153
+ ]
106154
+ },
106155
+ {
106156
+ "type": "string",
106157
+ "enum": [
106158
+ "medium"
106159
+ ]
106160
+ },
106161
+ {
106162
+ "type": "string",
106163
+ "enum": [
106164
+ "long"
106165
+ ]
106166
+ }
106167
+ ]
106168
+ },
106169
+ "eyes": {
106170
+ "anyOf": [
106171
+ {
106172
+ "type": "string",
106173
+ "enum": [
106174
+ "brown"
106175
+ ]
106176
+ },
106177
+ {
106178
+ "type": "string",
106179
+ "enum": [
106180
+ "hazel"
106181
+ ]
106182
+ },
106183
+ {
106184
+ "type": "string",
106185
+ "enum": [
106186
+ "green"
106187
+ ]
106188
+ },
106189
+ {
106190
+ "type": "string",
106191
+ "enum": [
106192
+ "blue"
106193
+ ]
106194
+ },
106195
+ {
106196
+ "type": "string",
106197
+ "enum": [
106198
+ "grey"
106199
+ ]
106200
+ }
106201
+ ]
106202
+ },
106203
+ "makeup": {
106204
+ "anyOf": [
106205
+ {
106206
+ "type": "string",
106207
+ "enum": [
106208
+ "none"
106209
+ ]
106210
+ },
106211
+ {
106212
+ "type": "string",
106213
+ "enum": [
106214
+ "natural"
106215
+ ]
106216
+ },
106217
+ {
106218
+ "type": "string",
106219
+ "enum": [
106220
+ "defined"
106221
+ ]
106222
+ },
106223
+ {
106224
+ "type": "string",
106225
+ "enum": [
106226
+ "bold"
106227
+ ]
106228
+ },
106229
+ {
106230
+ "type": "string",
106231
+ "enum": [
106232
+ "dramatic"
106233
+ ]
106234
+ }
106235
+ ]
106236
+ },
106237
+ "face": {
106238
+ "anyOf": [
106239
+ {
106240
+ "type": "string",
106241
+ "enum": [
106242
+ "oval"
106243
+ ]
106244
+ },
106245
+ {
106246
+ "type": "string",
106247
+ "enum": [
106248
+ "round"
106249
+ ]
106250
+ },
106251
+ {
106252
+ "type": "string",
106253
+ "enum": [
106254
+ "square"
106255
+ ]
106256
+ },
106257
+ {
106258
+ "type": "string",
106259
+ "enum": [
106260
+ "heart"
106261
+ ]
106262
+ },
106263
+ {
106264
+ "type": "string",
106265
+ "enum": [
106266
+ "angular"
106267
+ ]
106268
+ }
106269
+ ]
106270
+ },
106271
+ "beard": {
106272
+ "anyOf": [
106273
+ {
106274
+ "type": "string",
106275
+ "enum": [
106276
+ "clean"
106277
+ ]
106278
+ },
106279
+ {
106280
+ "type": "string",
106281
+ "enum": [
106282
+ "stubble"
106283
+ ]
106284
+ },
106285
+ {
106286
+ "type": "string",
106287
+ "enum": [
106288
+ "beard"
106289
+ ]
106290
+ },
106291
+ {
106292
+ "type": "string",
106293
+ "enum": [
106294
+ "moustache"
106295
+ ]
106296
+ },
106297
+ {
106298
+ "type": "string",
106299
+ "enum": [
106300
+ "goatee"
106301
+ ]
106302
+ }
106303
+ ]
106304
+ },
106305
+ "marks": {
106306
+ "uniqueItems": true,
106307
+ "maxItems": 5,
106308
+ "type": "array",
106309
+ "items": {
106310
+ "anyOf": [
106311
+ {
106312
+ "type": "string",
106313
+ "enum": [
106314
+ "freckles"
106315
+ ]
106316
+ },
106317
+ {
106318
+ "type": "string",
106319
+ "enum": [
106320
+ "acne"
106321
+ ]
106322
+ },
106323
+ {
106324
+ "type": "string",
106325
+ "enum": [
106326
+ "moles"
106327
+ ]
106328
+ },
106329
+ {
106330
+ "type": "string",
106331
+ "enum": [
106332
+ "scars"
106333
+ ]
106334
+ },
106335
+ {
106336
+ "type": "string",
106337
+ "enum": [
106338
+ "vitiligo"
106339
+ ]
106340
+ }
106341
+ ]
106342
+ }
106343
+ },
106344
+ "build": {
106345
+ "anyOf": [
106346
+ {
106347
+ "type": "string",
106348
+ "enum": [
106349
+ "slim"
106350
+ ]
106351
+ },
106352
+ {
106353
+ "type": "string",
106354
+ "enum": [
106355
+ "average"
106356
+ ]
106357
+ },
106358
+ {
106359
+ "type": "string",
106360
+ "enum": [
106361
+ "athletic"
106362
+ ]
106363
+ },
106364
+ {
106365
+ "type": "string",
106366
+ "enum": [
106367
+ "muscular"
106368
+ ]
106369
+ },
106370
+ {
106371
+ "type": "string",
106372
+ "enum": [
106373
+ "curvy"
106374
+ ]
106375
+ },
106376
+ {
106377
+ "type": "string",
106378
+ "enum": [
106379
+ "heavy"
106380
+ ]
106381
+ }
106382
+ ]
106383
+ },
106384
+ "height": {
106385
+ "anyOf": [
106386
+ {
106387
+ "type": "string",
106388
+ "enum": [
106389
+ "petite"
106390
+ ]
106391
+ },
106392
+ {
106393
+ "type": "string",
106394
+ "enum": [
106395
+ "short"
106396
+ ]
106397
+ },
106398
+ {
106399
+ "type": "string",
106400
+ "enum": [
106401
+ "average"
106402
+ ]
106403
+ },
106404
+ {
106405
+ "type": "string",
106406
+ "enum": [
106407
+ "tall"
106408
+ ]
106409
+ },
106410
+ {
106411
+ "type": "string",
106412
+ "enum": [
106413
+ "very_tall"
106414
+ ]
106415
+ }
106416
+ ]
106417
+ },
106418
+ "style_register": {
106419
+ "anyOf": [
106420
+ {
106421
+ "type": "string",
106422
+ "enum": [
106423
+ "casual"
106424
+ ]
106425
+ },
106426
+ {
106427
+ "type": "string",
106428
+ "enum": [
106429
+ "sporty"
106430
+ ]
106431
+ },
106432
+ {
106433
+ "type": "string",
106434
+ "enum": [
106435
+ "formal"
106436
+ ]
106437
+ },
106438
+ {
106439
+ "type": "string",
106440
+ "enum": [
106441
+ "streetwear"
106442
+ ]
106443
+ },
106444
+ {
106445
+ "type": "string",
106446
+ "enum": [
106447
+ "elegant"
106448
+ ]
106449
+ }
106450
+ ]
106451
+ },
106452
+ "top": {
106453
+ "anyOf": [
106454
+ {
106455
+ "type": "string",
106456
+ "enum": [
106457
+ "tee"
106458
+ ]
106459
+ },
106460
+ {
106461
+ "type": "string",
106462
+ "enum": [
106463
+ "shirt"
106464
+ ]
106465
+ },
106466
+ {
106467
+ "type": "string",
106468
+ "enum": [
106469
+ "tank"
106470
+ ]
106471
+ },
106472
+ {
106473
+ "type": "string",
106474
+ "enum": [
106475
+ "hoodie"
106476
+ ]
106477
+ },
106478
+ {
106479
+ "type": "string",
106480
+ "enum": [
106481
+ "sweater"
106482
+ ]
106483
+ },
106484
+ {
106485
+ "type": "string",
106486
+ "enum": [
106487
+ "jacket"
106488
+ ]
106489
+ }
106490
+ ]
106491
+ },
106492
+ "fit": {
106493
+ "anyOf": [
106494
+ {
106495
+ "type": "string",
106496
+ "enum": [
106497
+ "slim"
106498
+ ]
106499
+ },
106500
+ {
106501
+ "type": "string",
106502
+ "enum": [
106503
+ "regular"
106504
+ ]
106505
+ },
106506
+ {
106507
+ "type": "string",
106508
+ "enum": [
106509
+ "relaxed"
106510
+ ]
106511
+ },
106512
+ {
106513
+ "type": "string",
106514
+ "enum": [
106515
+ "oversized"
106516
+ ]
106517
+ },
106518
+ {
106519
+ "type": "string",
106520
+ "enum": [
106521
+ "boxy"
106522
+ ]
106523
+ }
106524
+ ]
106525
+ },
106526
+ "material": {
106527
+ "anyOf": [
106528
+ {
106529
+ "type": "string",
106530
+ "enum": [
106531
+ "cotton"
106532
+ ]
106533
+ },
106534
+ {
106535
+ "type": "string",
106536
+ "enum": [
106537
+ "denim"
106538
+ ]
106539
+ },
106540
+ {
106541
+ "type": "string",
106542
+ "enum": [
106543
+ "leather"
106544
+ ]
106545
+ },
106546
+ {
106547
+ "type": "string",
106548
+ "enum": [
106549
+ "knit"
106550
+ ]
106551
+ },
106552
+ {
106553
+ "type": "string",
106554
+ "enum": [
106555
+ "technical"
106556
+ ]
106557
+ }
106558
+ ]
106559
+ },
106560
+ "accessories": {
106561
+ "uniqueItems": true,
106562
+ "maxItems": 5,
106563
+ "type": "array",
106564
+ "items": {
106565
+ "anyOf": [
106566
+ {
106567
+ "type": "string",
106568
+ "enum": [
106569
+ "glasses"
106570
+ ]
106571
+ },
106572
+ {
106573
+ "type": "string",
106574
+ "enum": [
106575
+ "hat"
106576
+ ]
106577
+ },
106578
+ {
106579
+ "type": "string",
106580
+ "enum": [
106581
+ "earrings"
106582
+ ]
106583
+ },
106584
+ {
106585
+ "type": "string",
106586
+ "enum": [
106587
+ "necklace"
106588
+ ]
106589
+ },
106590
+ {
106591
+ "type": "string",
106592
+ "enum": [
106593
+ "none"
106594
+ ]
106595
+ }
106596
+ ]
106597
+ }
106598
+ }
106599
+ }
106600
+ },
105950
106601
  "template_avatar_id": {
105951
106602
  "type": "string"
105952
106603
  },
@@ -106694,14 +107345,435 @@
106694
107345
  }
106695
107346
  }
106696
107347
  }
106697
- },
106698
- "delete": {
106699
- "operationId": "deleteApiV1CreativeHubAvatarsById",
106700
- "summary": "Delete Creative Hub avatar",
107348
+ },
107349
+ "delete": {
107350
+ "operationId": "deleteApiV1CreativeHubAvatarsById",
107351
+ "summary": "Delete Creative Hub avatar",
107352
+ "tags": [
107353
+ "creative-hub"
107354
+ ],
107355
+ "description": "Soft-deletes a custom avatar owned by the authenticated user.",
107356
+ "parameters": [
107357
+ {
107358
+ "schema": {
107359
+ "format": "uuid",
107360
+ "type": "string"
107361
+ },
107362
+ "in": "path",
107363
+ "name": "id",
107364
+ "required": true
107365
+ }
107366
+ ],
107367
+ "security": [
107368
+ {
107369
+ "bearerAuth": []
107370
+ },
107371
+ {
107372
+ "apiKeyAuth": []
107373
+ }
107374
+ ],
107375
+ "responses": {
107376
+ "204": {
107377
+ "description": "No content"
107378
+ },
107379
+ "401": {
107380
+ "description": "Unauthorized - missing or invalid bearer token",
107381
+ "content": {
107382
+ "application/json": {
107383
+ "schema": {
107384
+ "additionalProperties": false,
107385
+ "type": "object",
107386
+ "required": [
107387
+ "error"
107388
+ ],
107389
+ "properties": {
107390
+ "code": {
107391
+ "type": "string"
107392
+ },
107393
+ "error": {
107394
+ "type": "string"
107395
+ },
107396
+ "message": {
107397
+ "type": "string"
107398
+ }
107399
+ }
107400
+ }
107401
+ }
107402
+ }
107403
+ },
107404
+ "403": {
107405
+ "description": "Forbidden - caller lacks the required role/permission",
107406
+ "content": {
107407
+ "application/json": {
107408
+ "schema": {
107409
+ "additionalProperties": false,
107410
+ "type": "object",
107411
+ "required": [
107412
+ "error"
107413
+ ],
107414
+ "properties": {
107415
+ "code": {
107416
+ "type": "string"
107417
+ },
107418
+ "error": {
107419
+ "type": "string"
107420
+ },
107421
+ "message": {
107422
+ "type": "string"
107423
+ }
107424
+ }
107425
+ }
107426
+ }
107427
+ }
107428
+ },
107429
+ "404": {
107430
+ "description": "Resource not found",
107431
+ "content": {
107432
+ "application/json": {
107433
+ "schema": {
107434
+ "additionalProperties": false,
107435
+ "type": "object",
107436
+ "required": [
107437
+ "error"
107438
+ ],
107439
+ "properties": {
107440
+ "code": {
107441
+ "type": "string"
107442
+ },
107443
+ "error": {
107444
+ "type": "string"
107445
+ },
107446
+ "message": {
107447
+ "type": "string"
107448
+ }
107449
+ }
107450
+ }
107451
+ }
107452
+ }
107453
+ }
107454
+ }
107455
+ }
107456
+ },
107457
+ "/api/v1/creative-hub/avatars/{id}/confirm": {
107458
+ "post": {
107459
+ "operationId": "postApiV1CreativeHubAvatarsByIdConfirm",
107460
+ "summary": "Confirm a generated Creative Hub avatar",
107461
+ "tags": [
107462
+ "creative-hub"
107463
+ ],
107464
+ "description": "Promotes a generated preview to a saved avatar. Only a preview owned by the authenticated user can be confirmed.",
107465
+ "parameters": [
107466
+ {
107467
+ "schema": {
107468
+ "format": "uuid",
107469
+ "type": "string"
107470
+ },
107471
+ "in": "path",
107472
+ "name": "id",
107473
+ "required": true
107474
+ }
107475
+ ],
107476
+ "security": [
107477
+ {
107478
+ "bearerAuth": []
107479
+ },
107480
+ {
107481
+ "apiKeyAuth": []
107482
+ }
107483
+ ],
107484
+ "responses": {
107485
+ "200": {
107486
+ "description": "Successful response",
107487
+ "content": {
107488
+ "application/json": {
107489
+ "schema": {
107490
+ "additionalProperties": false,
107491
+ "type": "object",
107492
+ "required": [
107493
+ "id",
107494
+ "team_id",
107495
+ "created_by",
107496
+ "name",
107497
+ "gender",
107498
+ "age_bracket",
107499
+ "scenario",
107500
+ "image_url",
107501
+ "thumbnail_url",
107502
+ "preview_video_url",
107503
+ "prompt",
107504
+ "voice_id",
107505
+ "provider",
107506
+ "provider_avatar_ref",
107507
+ "is_library",
107508
+ "status",
107509
+ "tags",
107510
+ "metadata",
107511
+ "created_at",
107512
+ "updated_at",
107513
+ "deleted_at"
107514
+ ],
107515
+ "properties": {
107516
+ "id": {
107517
+ "format": "uuid",
107518
+ "type": "string"
107519
+ },
107520
+ "team_id": {
107521
+ "anyOf": [
107522
+ {
107523
+ "format": "uuid",
107524
+ "type": "string"
107525
+ },
107526
+ {
107527
+ "type": "null"
107528
+ }
107529
+ ]
107530
+ },
107531
+ "created_by": {
107532
+ "anyOf": [
107533
+ {
107534
+ "format": "uuid",
107535
+ "type": "string"
107536
+ },
107537
+ {
107538
+ "type": "null"
107539
+ }
107540
+ ]
107541
+ },
107542
+ "name": {
107543
+ "type": "string"
107544
+ },
107545
+ "gender": {
107546
+ "anyOf": [
107547
+ {
107548
+ "type": "string"
107549
+ },
107550
+ {
107551
+ "type": "null"
107552
+ }
107553
+ ]
107554
+ },
107555
+ "age_bracket": {
107556
+ "anyOf": [
107557
+ {
107558
+ "type": "string"
107559
+ },
107560
+ {
107561
+ "type": "null"
107562
+ }
107563
+ ]
107564
+ },
107565
+ "scenario": {
107566
+ "anyOf": [
107567
+ {
107568
+ "type": "string"
107569
+ },
107570
+ {
107571
+ "type": "null"
107572
+ }
107573
+ ]
107574
+ },
107575
+ "image_url": {
107576
+ "type": "string"
107577
+ },
107578
+ "thumbnail_url": {
107579
+ "anyOf": [
107580
+ {
107581
+ "type": "string"
107582
+ },
107583
+ {
107584
+ "type": "null"
107585
+ }
107586
+ ]
107587
+ },
107588
+ "preview_video_url": {
107589
+ "anyOf": [
107590
+ {
107591
+ "type": "string"
107592
+ },
107593
+ {
107594
+ "type": "null"
107595
+ }
107596
+ ]
107597
+ },
107598
+ "prompt": {
107599
+ "anyOf": [
107600
+ {
107601
+ "type": "string"
107602
+ },
107603
+ {
107604
+ "type": "null"
107605
+ }
107606
+ ]
107607
+ },
107608
+ "voice_id": {
107609
+ "anyOf": [
107610
+ {
107611
+ "format": "uuid",
107612
+ "type": "string"
107613
+ },
107614
+ {
107615
+ "type": "null"
107616
+ }
107617
+ ]
107618
+ },
107619
+ "provider": {
107620
+ "type": "string"
107621
+ },
107622
+ "provider_avatar_ref": {
107623
+ "anyOf": [
107624
+ {
107625
+ "type": "string"
107626
+ },
107627
+ {
107628
+ "type": "null"
107629
+ }
107630
+ ]
107631
+ },
107632
+ "is_library": {
107633
+ "type": "boolean"
107634
+ },
107635
+ "status": {
107636
+ "type": "string"
107637
+ },
107638
+ "tags": {
107639
+ "type": "array",
107640
+ "items": {
107641
+ "type": "string"
107642
+ }
107643
+ },
107644
+ "metadata": {
107645
+ "type": "object",
107646
+ "additionalProperties": {
107647
+ "$comment": "json-value"
107648
+ }
107649
+ },
107650
+ "created_at": {
107651
+ "format": "date-time",
107652
+ "type": "string"
107653
+ },
107654
+ "updated_at": {
107655
+ "format": "date-time",
107656
+ "type": "string"
107657
+ },
107658
+ "deleted_at": {
107659
+ "anyOf": [
107660
+ {
107661
+ "format": "date-time",
107662
+ "type": "string"
107663
+ },
107664
+ {
107665
+ "type": "null"
107666
+ }
107667
+ ]
107668
+ }
107669
+ }
107670
+ }
107671
+ }
107672
+ }
107673
+ },
107674
+ "401": {
107675
+ "description": "Unauthorized - missing or invalid bearer token",
107676
+ "content": {
107677
+ "application/json": {
107678
+ "schema": {
107679
+ "additionalProperties": false,
107680
+ "type": "object",
107681
+ "required": [
107682
+ "error"
107683
+ ],
107684
+ "properties": {
107685
+ "code": {
107686
+ "type": "string"
107687
+ },
107688
+ "error": {
107689
+ "type": "string"
107690
+ },
107691
+ "message": {
107692
+ "type": "string"
107693
+ }
107694
+ }
107695
+ }
107696
+ }
107697
+ }
107698
+ },
107699
+ "403": {
107700
+ "description": "Forbidden - caller lacks the required role/permission",
107701
+ "content": {
107702
+ "application/json": {
107703
+ "schema": {
107704
+ "additionalProperties": false,
107705
+ "type": "object",
107706
+ "required": [
107707
+ "error"
107708
+ ],
107709
+ "properties": {
107710
+ "code": {
107711
+ "type": "string"
107712
+ },
107713
+ "error": {
107714
+ "type": "string"
107715
+ },
107716
+ "message": {
107717
+ "type": "string"
107718
+ }
107719
+ }
107720
+ }
107721
+ }
107722
+ }
107723
+ },
107724
+ "404": {
107725
+ "description": "Resource not found",
107726
+ "content": {
107727
+ "application/json": {
107728
+ "schema": {
107729
+ "additionalProperties": false,
107730
+ "type": "object",
107731
+ "required": [
107732
+ "error"
107733
+ ],
107734
+ "properties": {
107735
+ "code": {
107736
+ "type": "string"
107737
+ },
107738
+ "error": {
107739
+ "type": "string"
107740
+ },
107741
+ "message": {
107742
+ "type": "string"
107743
+ }
107744
+ }
107745
+ }
107746
+ }
107747
+ }
107748
+ }
107749
+ }
107750
+ }
107751
+ },
107752
+ "/api/v1/creative-hub/avatars/{id}/regenerate": {
107753
+ "post": {
107754
+ "operationId": "postApiV1CreativeHubAvatarsByIdRegenerate",
107755
+ "summary": "Regenerate a Creative Hub avatar preview",
106701
107756
  "tags": [
106702
107757
  "creative-hub"
106703
107758
  ],
106704
- "description": "Soft-deletes a custom avatar owned by the authenticated user.",
107759
+ "description": "Runs the generation again on the traits already stored for the preview. An optional feedback note is appended to the previous free text instead of replacing it. Charges the generation again.",
107760
+ "requestBody": {
107761
+ "required": true,
107762
+ "content": {
107763
+ "application/json": {
107764
+ "schema": {
107765
+ "additionalProperties": false,
107766
+ "type": "object",
107767
+ "properties": {
107768
+ "feedback": {
107769
+ "maxLength": 2000,
107770
+ "type": "string"
107771
+ }
107772
+ }
107773
+ }
107774
+ }
107775
+ }
107776
+ },
106705
107777
  "parameters": [
106706
107778
  {
106707
107779
  "schema": {
@@ -106722,8 +107794,44 @@
106722
107794
  }
106723
107795
  ],
106724
107796
  "responses": {
106725
- "204": {
106726
- "description": "No content"
107797
+ "202": {
107798
+ "description": "Accepted - processing asynchronously",
107799
+ "content": {
107800
+ "application/json": {
107801
+ "schema": {
107802
+ "additionalProperties": false,
107803
+ "type": "object",
107804
+ "required": [
107805
+ "avatar_id",
107806
+ "estimated_credits",
107807
+ "generation_id",
107808
+ "polling_interval_ms",
107809
+ "status"
107810
+ ],
107811
+ "properties": {
107812
+ "avatar_id": {
107813
+ "format": "uuid",
107814
+ "type": "string"
107815
+ },
107816
+ "estimated_credits": {
107817
+ "minimum": 0,
107818
+ "type": "integer"
107819
+ },
107820
+ "generation_id": {
107821
+ "format": "uuid",
107822
+ "type": "string"
107823
+ },
107824
+ "polling_interval_ms": {
107825
+ "minimum": 0,
107826
+ "type": "integer"
107827
+ },
107828
+ "status": {
107829
+ "type": "string"
107830
+ }
107831
+ }
107832
+ }
107833
+ }
107834
+ }
106727
107835
  },
106728
107836
  "401": {
106729
107837
  "description": "Unauthorized - missing or invalid bearer token",
@@ -106750,6 +107858,31 @@
106750
107858
  }
106751
107859
  }
106752
107860
  },
107861
+ "402": {
107862
+ "description": "Response 402",
107863
+ "content": {
107864
+ "application/json": {
107865
+ "schema": {
107866
+ "additionalProperties": false,
107867
+ "type": "object",
107868
+ "required": [
107869
+ "error"
107870
+ ],
107871
+ "properties": {
107872
+ "code": {
107873
+ "type": "string"
107874
+ },
107875
+ "error": {
107876
+ "type": "string"
107877
+ },
107878
+ "message": {
107879
+ "type": "string"
107880
+ }
107881
+ }
107882
+ }
107883
+ }
107884
+ }
107885
+ },
106753
107886
  "403": {
106754
107887
  "description": "Forbidden - caller lacks the required role/permission",
106755
107888
  "content": {
@@ -106799,6 +107932,81 @@
106799
107932
  }
106800
107933
  }
106801
107934
  }
107935
+ },
107936
+ "429": {
107937
+ "description": "Too many requests - rate limit exceeded",
107938
+ "content": {
107939
+ "application/json": {
107940
+ "schema": {
107941
+ "additionalProperties": false,
107942
+ "type": "object",
107943
+ "required": [
107944
+ "error"
107945
+ ],
107946
+ "properties": {
107947
+ "code": {
107948
+ "type": "string"
107949
+ },
107950
+ "error": {
107951
+ "type": "string"
107952
+ },
107953
+ "message": {
107954
+ "type": "string"
107955
+ }
107956
+ }
107957
+ }
107958
+ }
107959
+ }
107960
+ },
107961
+ "500": {
107962
+ "description": "Internal server error",
107963
+ "content": {
107964
+ "application/json": {
107965
+ "schema": {
107966
+ "additionalProperties": false,
107967
+ "type": "object",
107968
+ "required": [
107969
+ "error"
107970
+ ],
107971
+ "properties": {
107972
+ "code": {
107973
+ "type": "string"
107974
+ },
107975
+ "error": {
107976
+ "type": "string"
107977
+ },
107978
+ "message": {
107979
+ "type": "string"
107980
+ }
107981
+ }
107982
+ }
107983
+ }
107984
+ }
107985
+ },
107986
+ "503": {
107987
+ "description": "Service unavailable",
107988
+ "content": {
107989
+ "application/json": {
107990
+ "schema": {
107991
+ "additionalProperties": false,
107992
+ "type": "object",
107993
+ "required": [
107994
+ "error"
107995
+ ],
107996
+ "properties": {
107997
+ "code": {
107998
+ "type": "string"
107999
+ },
108000
+ "error": {
108001
+ "type": "string"
108002
+ },
108003
+ "message": {
108004
+ "type": "string"
108005
+ }
108006
+ }
108007
+ }
108008
+ }
108009
+ }
106802
108010
  }
106803
108011
  }
106804
108012
  }
@@ -159924,134 +161132,47 @@
159924
161132
  }
159925
161133
  }
159926
161134
  },
159927
- "/api/v1/onboarding/progress": {
159928
- "patch": {
159929
- "operationId": "patchApiV1OnboardingProgress",
159930
- "summary": "Save onboarding progress",
159931
- "tags": [
159932
- "onboarding"
159933
- ],
159934
- "description": "Persists the current onboarding step and selections for resume after page refresh.",
159935
- "requestBody": {
159936
- "required": true,
159937
- "content": {
159938
- "application/json": {
159939
- "schema": {
159940
- "additionalProperties": false,
159941
- "type": "object",
159942
- "required": [
159943
- "step"
159944
- ],
159945
- "properties": {
159946
- "step": {
159947
- "minimum": 1,
159948
- "maximum": 4,
159949
- "type": "integer"
159950
- },
159951
- "selected_accounts": {
159952
- "type": "array",
159953
- "items": {
159954
- "type": "string"
159955
- }
159956
- },
159957
- "selected_pages": {
159958
- "type": "array",
159959
- "items": {
159960
- "type": "string"
159961
- }
159962
- }
159963
- }
159964
- }
159965
- }
159966
- }
159967
- },
159968
- "security": [
159969
- {
159970
- "bearerAuth": []
159971
- }
159972
- ],
159973
- "responses": {
159974
- "200": {
159975
- "description": "Successful response",
159976
- "content": {
159977
- "application/json": {
159978
- "schema": {
159979
- "type": "object",
159980
- "required": [
159981
- "ok"
159982
- ],
159983
- "properties": {
159984
- "ok": {
159985
- "type": "boolean"
159986
- }
159987
- }
159988
- }
159989
- }
159990
- }
159991
- },
159992
- "401": {
159993
- "description": "Unauthorized - missing or invalid bearer token",
159994
- "content": {
159995
- "application/json": {
159996
- "schema": {
159997
- "type": "object",
159998
- "required": [
159999
- "statusCode",
160000
- "error",
160001
- "message"
160002
- ],
160003
- "properties": {
160004
- "statusCode": {
160005
- "type": "number"
160006
- },
160007
- "error": {
160008
- "type": "string"
160009
- },
160010
- "message": {
160011
- "type": "string"
160012
- }
160013
- }
160014
- }
160015
- }
160016
- }
160017
- },
160018
- "500": {
160019
- "description": "Internal server error",
160020
- "content": {
160021
- "application/json": {
160022
- "schema": {
160023
- "type": "object",
160024
- "required": [
160025
- "statusCode",
160026
- "error",
160027
- "message"
160028
- ],
160029
- "properties": {
160030
- "statusCode": {
160031
- "type": "number"
160032
- },
160033
- "error": {
160034
- "type": "string"
160035
- },
160036
- "message": {
160037
- "type": "string"
160038
- }
160039
- }
160040
- }
160041
- }
160042
- }
160043
- }
160044
- }
160045
- }
160046
- },
160047
- "/api/v1/onboarding/setup-checklist/dismiss": {
160048
- "post": {
160049
- "operationId": "postApiV1OnboardingSetupChecklistDismiss",
160050
- "summary": "Dismiss the dashboard setup checklist",
161135
+ "/api/v1/onboarding/progress": {
161136
+ "patch": {
161137
+ "operationId": "patchApiV1OnboardingProgress",
161138
+ "summary": "Save onboarding progress",
160051
161139
  "tags": [
160052
161140
  "onboarding"
160053
161141
  ],
160054
- "description": "Marks the setup checklist/homepage onboarding section as dismissed for the current user.",
161142
+ "description": "Persists the current onboarding step and selections for resume after page refresh.",
161143
+ "requestBody": {
161144
+ "required": true,
161145
+ "content": {
161146
+ "application/json": {
161147
+ "schema": {
161148
+ "additionalProperties": false,
161149
+ "type": "object",
161150
+ "required": [
161151
+ "step"
161152
+ ],
161153
+ "properties": {
161154
+ "step": {
161155
+ "minimum": 1,
161156
+ "maximum": 4,
161157
+ "type": "integer"
161158
+ },
161159
+ "selected_accounts": {
161160
+ "type": "array",
161161
+ "items": {
161162
+ "type": "string"
161163
+ }
161164
+ },
161165
+ "selected_pages": {
161166
+ "type": "array",
161167
+ "items": {
161168
+ "type": "string"
161169
+ }
161170
+ }
161171
+ }
161172
+ }
161173
+ }
161174
+ }
161175
+ },
160055
161176
  "security": [
160056
161177
  {
160057
161178
  "bearerAuth": []
@@ -160065,16 +161186,11 @@
160065
161186
  "schema": {
160066
161187
  "type": "object",
160067
161188
  "required": [
160068
- "onboarding_state"
161189
+ "ok"
160069
161190
  ],
160070
161191
  "properties": {
160071
- "onboarding_state": {
160072
- "description": "JSON object with nested arrays and objects.",
160073
- "type": "object",
160074
- "additionalProperties": {
160075
- "$comment": "json-value",
160076
- "description": "Arbitrary JSON value with nested arrays and objects."
160077
- }
161192
+ "ok": {
161193
+ "type": "boolean"
160078
161194
  }
160079
161195
  }
160080
161196
  }
@@ -160136,14 +161252,14 @@
160136
161252
  }
160137
161253
  }
160138
161254
  },
160139
- "/api/v1/onboarding/wizard/skip": {
161255
+ "/api/v1/onboarding/setup-checklist/dismiss": {
160140
161256
  "post": {
160141
- "operationId": "postApiV1OnboardingWizardSkip",
160142
- "summary": "Skip onboarding wizard",
161257
+ "operationId": "postApiV1OnboardingSetupChecklistDismiss",
161258
+ "summary": "Dismiss the dashboard setup checklist",
160143
161259
  "tags": [
160144
161260
  "onboarding"
160145
161261
  ],
160146
- "description": "Marks only the onboarding wizard as skipped for the current user.",
161262
+ "description": "Marks the setup checklist/homepage onboarding section as dismissed for the current user.",
160147
161263
  "security": [
160148
161264
  {
160149
161265
  "bearerAuth": []
@@ -160228,14 +161344,14 @@
160228
161344
  }
160229
161345
  }
160230
161346
  },
160231
- "/api/v1/onboarding/skip-all": {
161347
+ "/api/v1/onboarding/wizard/skip": {
160232
161348
  "post": {
160233
- "operationId": "postApiV1OnboardingSkipAll",
160234
- "summary": "Skip onboarding wizard and dismiss setup checklist",
161349
+ "operationId": "postApiV1OnboardingWizardSkip",
161350
+ "summary": "Skip onboarding wizard",
160235
161351
  "tags": [
160236
161352
  "onboarding"
160237
161353
  ],
160238
- "description": "Marks the onboarding wizard as skipped and dismisses the setup checklist so the current user can access the dashboard without onboarding redirects.",
161354
+ "description": "Marks only the onboarding wizard as skipped for the current user.",
160239
161355
  "security": [
160240
161356
  {
160241
161357
  "bearerAuth": []
@@ -160320,14 +161436,14 @@
160320
161436
  }
160321
161437
  }
160322
161438
  },
160323
- "/api/v1/onboarding/enterprise/complete": {
161439
+ "/api/v1/onboarding/skip-all": {
160324
161440
  "post": {
160325
- "operationId": "postApiV1OnboardingEnterpriseComplete",
160326
- "summary": "Mark enterprise onboarding as completed",
161441
+ "operationId": "postApiV1OnboardingSkipAll",
161442
+ "summary": "Skip onboarding wizard and dismiss setup checklist",
160327
161443
  "tags": [
160328
161444
  "onboarding"
160329
161445
  ],
160330
- "description": "Persists onboarding_state.enterprise_onboarding_completed = true for the current user so the enterprise-onboarding protected-route gate is satisfied across devices.",
161446
+ "description": "Marks the onboarding wizard as skipped and dismisses the setup checklist so the current user can access the dashboard without onboarding redirects.",
160331
161447
  "security": [
160332
161448
  {
160333
161449
  "bearerAuth": []
@@ -160412,32 +161528,14 @@
160412
161528
  }
160413
161529
  }
160414
161530
  },
160415
- "/api/v1/onboarding/wizard-complete": {
161531
+ "/api/v1/onboarding/enterprise/complete": {
160416
161532
  "post": {
160417
- "operationId": "postApiV1OnboardingWizardComplete",
160418
- "summary": "Mark the onboarding wizard as completed (PRD-37)",
161533
+ "operationId": "postApiV1OnboardingEnterpriseComplete",
161534
+ "summary": "Mark enterprise onboarding as completed",
160419
161535
  "tags": [
160420
161536
  "onboarding"
160421
161537
  ],
160422
- "description": "Idempotently records onboarding completion time and optional wizard duration for the current user session.",
160423
- "requestBody": {
160424
- "required": true,
160425
- "content": {
160426
- "application/json": {
160427
- "schema": {
160428
- "additionalProperties": false,
160429
- "type": "object",
160430
- "properties": {
160431
- "duration_sec": {
160432
- "minimum": 0,
160433
- "maximum": 604800,
160434
- "type": "integer"
160435
- }
160436
- }
160437
- }
160438
- }
160439
- }
160440
- },
161538
+ "description": "Persists onboarding_state.enterprise_onboarding_completed = true for the current user so the enterprise-onboarding protected-route gate is satisfied across devices.",
160441
161539
  "security": [
160442
161540
  {
160443
161541
  "bearerAuth": []
@@ -160451,16 +161549,16 @@
160451
161549
  "schema": {
160452
161550
  "type": "object",
160453
161551
  "required": [
160454
- "already_completed",
160455
- "completed_at"
161552
+ "onboarding_state"
160456
161553
  ],
160457
161554
  "properties": {
160458
- "already_completed": {
160459
- "type": "boolean"
160460
- },
160461
- "completed_at": {
160462
- "format": "date-time",
160463
- "type": "string"
161555
+ "onboarding_state": {
161556
+ "description": "JSON object with nested arrays and objects.",
161557
+ "type": "object",
161558
+ "additionalProperties": {
161559
+ "$comment": "json-value",
161560
+ "description": "Arbitrary JSON value with nested arrays and objects."
161561
+ }
160464
161562
  }
160465
161563
  }
160466
161564
  }
@@ -160472,7 +161570,23 @@
160472
161570
  "content": {
160473
161571
  "application/json": {
160474
161572
  "schema": {
160475
- "$ref": "#/components/schemas/ErrorResponse"
161573
+ "type": "object",
161574
+ "required": [
161575
+ "statusCode",
161576
+ "error",
161577
+ "message"
161578
+ ],
161579
+ "properties": {
161580
+ "statusCode": {
161581
+ "type": "number"
161582
+ },
161583
+ "error": {
161584
+ "type": "string"
161585
+ },
161586
+ "message": {
161587
+ "type": "string"
161588
+ }
161589
+ }
160476
161590
  }
160477
161591
  }
160478
161592
  }
@@ -160484,11 +161598,19 @@
160484
161598
  "schema": {
160485
161599
  "type": "object",
160486
161600
  "required": [
160487
- "error"
161601
+ "statusCode",
161602
+ "error",
161603
+ "message"
160488
161604
  ],
160489
161605
  "properties": {
161606
+ "statusCode": {
161607
+ "type": "number"
161608
+ },
160490
161609
  "error": {
160491
161610
  "type": "string"
161611
+ },
161612
+ "message": {
161613
+ "type": "string"
160492
161614
  }
160493
161615
  }
160494
161616
  }
@@ -160498,14 +161620,14 @@
160498
161620
  }
160499
161621
  }
160500
161622
  },
160501
- "/api/v1/onboarding/profile": {
160502
- "put": {
160503
- "operationId": "putApiV1OnboardingProfile",
160504
- "summary": "Persist the onboarding wizard profile snapshot (PRD-N1)",
161623
+ "/api/v1/onboarding/wizard-complete": {
161624
+ "post": {
161625
+ "operationId": "postApiV1OnboardingWizardComplete",
161626
+ "summary": "Mark the onboarding wizard as completed (PRD-37)",
160505
161627
  "tags": [
160506
161628
  "onboarding"
160507
161629
  ],
160508
- "description": "Stores the selected segment, workspace profile, primary platforms, goals, and ad-spend band on the current user session.",
161630
+ "description": "Idempotently records onboarding completion time and optional wizard duration for the current user session.",
160509
161631
  "requestBody": {
160510
161632
  "required": true,
160511
161633
  "content": {
@@ -160514,63 +161636,10 @@
160514
161636
  "additionalProperties": false,
160515
161637
  "type": "object",
160516
161638
  "properties": {
160517
- "segment": {
160518
- "anyOf": [
160519
- {
160520
- "type": "string",
160521
- "enum": [
160522
- "agency"
160523
- ]
160524
- },
160525
- {
160526
- "type": "string",
160527
- "enum": [
160528
- "dtc"
160529
- ]
160530
- },
160531
- {
160532
- "type": "string",
160533
- "enum": [
160534
- "media_buyer"
160535
- ]
160536
- },
160537
- {
160538
- "type": "string",
160539
- "enum": [
160540
- "dropshipper"
160541
- ]
160542
- },
160543
- {
160544
- "type": "string",
160545
- "enum": [
160546
- "generic"
160547
- ]
160548
- }
160549
- ]
160550
- },
160551
- "workspace_profile": {
160552
- "maxLength": 40,
160553
- "type": "string"
160554
- },
160555
- "primary_platforms": {
160556
- "maxItems": 12,
160557
- "type": "array",
160558
- "items": {
160559
- "maxLength": 40,
160560
- "type": "string"
160561
- }
160562
- },
160563
- "primary_goals": {
160564
- "maxItems": 12,
160565
- "type": "array",
160566
- "items": {
160567
- "maxLength": 40,
160568
- "type": "string"
160569
- }
160570
- },
160571
- "monthly_ad_spend_band": {
160572
- "maxLength": 40,
160573
- "type": "string"
161639
+ "duration_sec": {
161640
+ "minimum": 0,
161641
+ "maximum": 604800,
161642
+ "type": "integer"
160574
161643
  }
160575
161644
  }
160576
161645
  }
@@ -160590,11 +161659,16 @@
160590
161659
  "schema": {
160591
161660
  "type": "object",
160592
161661
  "required": [
160593
- "ok"
161662
+ "already_completed",
161663
+ "completed_at"
160594
161664
  ],
160595
161665
  "properties": {
160596
- "ok": {
161666
+ "already_completed": {
160597
161667
  "type": "boolean"
161668
+ },
161669
+ "completed_at": {
161670
+ "format": "date-time",
161671
+ "type": "string"
160598
161672
  }
160599
161673
  }
160600
161674
  }
@@ -166342,12 +167416,14 @@
166342
167416
  "lost_customers",
166343
167417
  "maturing_commission_minor",
166344
167418
  "recurring_commission_minor",
167419
+ "recurring_commission_month",
166345
167420
  "not_counted_reasons",
166346
167421
  "not_counted_signups",
166347
167422
  "reversed_commission_minor",
166348
167423
  "signups",
166349
167424
  "trial_conversions",
166350
167425
  "trials",
167426
+ "visitors_unique",
166351
167427
  "window"
166352
167428
  ],
166353
167429
  "properties": {
@@ -166367,7 +167443,7 @@
166367
167443
  "type": "integer"
166368
167444
  },
166369
167445
  "clicks_unique": {
166370
- "description": "Click unici.",
167446
+ "description": "Somma dei click unici di OGNI link e di OGNI giorno della finestra. **Non è un numero di persone**: chi apre due varianti dello stesso partner nello stesso giorno conta due. Per i visitatori si legge `visitors_unique`.",
166371
167447
  "minimum": 0,
166372
167448
  "type": "integer"
166373
167449
  },
@@ -166404,6 +167480,20 @@
166404
167480
  "pattern": "^-?[0-9]+$",
166405
167481
  "type": "string"
166406
167482
  },
167483
+ "recurring_commission_month": {
167484
+ "description": "QUALE mese ha prodotto `recurring_commission_minor`: e’ l’ultimo mese di competenza chiuso CON righe, non necessariamente quello precedente. `null` quando non ce n’e’ nessuno. Senza questo campo la superficie non puo’ che scrivere «mese scorso» sotto un importo che puo’ essere di mesi prima.",
167485
+ "anyOf": [
167486
+ {
167487
+ "description": "Mese di competenza da cui viene l’importo, primo giorno.",
167488
+ "format": "date",
167489
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
167490
+ "type": "string"
167491
+ },
167492
+ {
167493
+ "type": "null"
167494
+ }
167495
+ ]
167496
+ },
166407
167497
  "not_counted_reasons": {
166408
167498
  "description": "Perché quelle iscrizioni non sono state contate, con il k-anonimato applicato: sotto la soglia il motivo confluisce in `altro`. Può essere vuoto anche con `not_counted_signups` > 0 — è il caso in cui nessun motivo raggiunge la soglia, e vuol dire «non te lo posso dire», non «non c’è motivo».",
166409
167499
  "type": "array",
@@ -166452,6 +167542,11 @@
166452
167542
  "minimum": 0,
166453
167543
  "type": "integer"
166454
167544
  },
167545
+ "visitors_unique": {
167546
+ "description": "Visitatori distinti di ogni giorno, sommati sulla finestra: due click della stessa persona nello stesso giorno sono una visita sola, qualunque sia il numero di varianti aperte. Chi torna il giorno dopo è una visita nuova, ed è una somma di giorni per costruzione: il distinto sul periodo non è un dato che esiste, perché il salt di `ip_hash` ruota ogni mese e la retention lo azzera a 90 giorni.",
167547
+ "minimum": 0,
167548
+ "type": "integer"
167549
+ },
166455
167550
  "window": {
166456
167551
  "description": "Finestra effettivamente applicata.",
166457
167552
  "anyOf": [
@@ -168872,6 +169967,41 @@
168872
169967
  }
168873
169968
  }
168874
169969
  },
169970
+ "422": {
169971
+ "description": "Errore standard del backend.",
169972
+ "content": {
169973
+ "application/json": {
169974
+ "schema": {
169975
+ "additionalProperties": false,
169976
+ "description": "Errore standard del backend.",
169977
+ "type": "object",
169978
+ "required": [
169979
+ "error",
169980
+ "message",
169981
+ "statusCode"
169982
+ ],
169983
+ "properties": {
169984
+ "code": {
169985
+ "description": "Codice macchina dell’errore, quando disponibile.",
169986
+ "type": "string"
169987
+ },
169988
+ "error": {
169989
+ "description": "Etichetta breve dell’errore.",
169990
+ "type": "string"
169991
+ },
169992
+ "message": {
169993
+ "description": "Messaggio leggibile.",
169994
+ "type": "string"
169995
+ },
169996
+ "statusCode": {
169997
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
169998
+ "type": "integer"
169999
+ }
170000
+ }
170001
+ }
170002
+ }
170003
+ }
170004
+ },
168875
170005
  "429": {
168876
170006
  "description": "Errore standard del backend.",
168877
170007
  "content": {