@brigadasos/nadeshiko-sdk 1.3.0 → 1.4.0-dev.2819d72

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 (69) hide show
  1. package/README.md +6 -0
  2. package/dist/client/client.gen.d.ts.map +1 -0
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/types.gen.d.ts.map +1 -0
  5. package/dist/client/utils.gen.d.ts.map +1 -0
  6. package/dist/client.gen.d.ts.map +1 -0
  7. package/dist/core/auth.gen.d.ts.map +1 -0
  8. package/dist/core/bodySerializer.gen.d.ts.map +1 -0
  9. package/dist/core/params.gen.d.ts.map +1 -0
  10. package/dist/core/pathSerializer.gen.d.ts.map +1 -0
  11. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -0
  12. package/dist/core/serverSentEvents.gen.d.ts.map +1 -0
  13. package/dist/core/types.gen.d.ts.map +1 -0
  14. package/dist/core/utils.gen.d.ts.map +1 -0
  15. package/dist/index.cjs +534 -45
  16. package/dist/index.cjs.map +5 -5
  17. package/dist/index.d.ts +6 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +541 -41
  20. package/dist/index.js.map +5 -5
  21. package/dist/internal/lists.gen.d.ts +2 -0
  22. package/dist/internal/lists.gen.d.ts.map +1 -0
  23. package/dist/internal/media.gen.d.ts +2 -0
  24. package/dist/internal/media.gen.d.ts.map +1 -0
  25. package/dist/internal/search.gen.d.ts +2 -0
  26. package/dist/internal/search.gen.d.ts.map +1 -0
  27. package/dist/internal.gen.d.ts +4 -0
  28. package/dist/internal.gen.d.ts.map +1 -0
  29. package/dist/nadeshiko.gen.d.ts +74 -0
  30. package/dist/nadeshiko.gen.d.ts.map +1 -0
  31. package/dist/sdk.gen.d.ts +641 -0
  32. package/dist/sdk.gen.d.ts.map +1 -0
  33. package/dist/types.gen.d.ts +4793 -0
  34. package/dist/types.gen.d.ts.map +1 -0
  35. package/package.json +4 -8
  36. package/dist/generated/client/client.gen.d.ts.map +0 -1
  37. package/dist/generated/client/index.d.ts.map +0 -1
  38. package/dist/generated/client/types.gen.d.ts.map +0 -1
  39. package/dist/generated/client/utils.gen.d.ts.map +0 -1
  40. package/dist/generated/client.gen.d.ts.map +0 -1
  41. package/dist/generated/core/auth.gen.d.ts.map +0 -1
  42. package/dist/generated/core/bodySerializer.gen.d.ts.map +0 -1
  43. package/dist/generated/core/params.gen.d.ts.map +0 -1
  44. package/dist/generated/core/pathSerializer.gen.d.ts.map +0 -1
  45. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +0 -1
  46. package/dist/generated/core/serverSentEvents.gen.d.ts.map +0 -1
  47. package/dist/generated/core/types.gen.d.ts.map +0 -1
  48. package/dist/generated/core/utils.gen.d.ts.map +0 -1
  49. package/dist/generated/index.d.ts +0 -6
  50. package/dist/generated/index.d.ts.map +0 -1
  51. package/dist/generated/nadeshiko.gen.d.ts +0 -27
  52. package/dist/generated/nadeshiko.gen.d.ts.map +0 -1
  53. package/dist/generated/sdk.gen.d.ts +0 -257
  54. package/dist/generated/sdk.gen.d.ts.map +0 -1
  55. package/dist/generated/types.gen.d.ts +0 -2001
  56. package/dist/generated/types.gen.d.ts.map +0 -1
  57. /package/dist/{generated/client → client}/client.gen.d.ts +0 -0
  58. /package/dist/{generated/client → client}/index.d.ts +0 -0
  59. /package/dist/{generated/client → client}/types.gen.d.ts +0 -0
  60. /package/dist/{generated/client → client}/utils.gen.d.ts +0 -0
  61. /package/dist/{generated/client.gen.d.ts → client.gen.d.ts} +0 -0
  62. /package/dist/{generated/core → core}/auth.gen.d.ts +0 -0
  63. /package/dist/{generated/core → core}/bodySerializer.gen.d.ts +0 -0
  64. /package/dist/{generated/core → core}/params.gen.d.ts +0 -0
  65. /package/dist/{generated/core → core}/pathSerializer.gen.d.ts +0 -0
  66. /package/dist/{generated/core → core}/queryKeySerializer.gen.d.ts +0 -0
  67. /package/dist/{generated/core → core}/serverSentEvents.gen.d.ts +0 -0
  68. /package/dist/{generated/core → core}/types.gen.d.ts +0 -0
  69. /package/dist/{generated/core → core}/utils.gen.d.ts +0 -0
@@ -0,0 +1,4793 @@
1
+ export type ClientOptions = {
2
+ baseUrl: 'http://localhost:5000' | 'https://api.nadeshiko.co' | (string & {});
3
+ };
4
+ /**
5
+ * Media category type
6
+ */
7
+ export type Category = 'ANIME' | 'JDRAMA';
8
+ /**
9
+ * Media information included in search results
10
+ */
11
+ export type SearchResultMedia = {
12
+ /**
13
+ * Unique identifier for the media
14
+ */
15
+ mediaId: number;
16
+ /**
17
+ * Romaji transliteration of the media name
18
+ */
19
+ nameRomaji: string;
20
+ /**
21
+ * English name of the media
22
+ */
23
+ nameEn?: string;
24
+ /**
25
+ * Original Japanese name of the media
26
+ */
27
+ nameJa?: string;
28
+ /**
29
+ * URL to the cover image
30
+ */
31
+ coverUrl?: string;
32
+ /**
33
+ * URL to the banner image
34
+ */
35
+ bannerUrl?: string;
36
+ category: Category;
37
+ };
38
+ /**
39
+ * Japanese content in search results with optional highlight
40
+ */
41
+ export type JapaneseSearchContent = {
42
+ /**
43
+ * Original Japanese content of the segment
44
+ */
45
+ content: string;
46
+ /**
47
+ * Japanese content with search terms highlighted
48
+ */
49
+ highlight?: string;
50
+ };
51
+ /**
52
+ * Translation content in search results with optional highlight
53
+ */
54
+ export type TranslationSearchContent = {
55
+ /**
56
+ * Translated content
57
+ */
58
+ content?: string;
59
+ /**
60
+ * Translated content with search terms highlighted
61
+ */
62
+ highlight?: string;
63
+ /**
64
+ * Whether the translation was machine-translated
65
+ */
66
+ isMachineTranslated: boolean;
67
+ };
68
+ /**
69
+ * Morphological analysis token
70
+ */
71
+ export type Morpheme = {
72
+ /**
73
+ * Surface form of the token as it appears in the text
74
+ */
75
+ surface: string;
76
+ /**
77
+ * Reading in katakana
78
+ */
79
+ reading: string;
80
+ /**
81
+ * Dictionary/base form of the word
82
+ */
83
+ baseform: string;
84
+ /**
85
+ * Pronunciation in katakana
86
+ */
87
+ pronunciation: string;
88
+ /**
89
+ * Full part-of-speech tag array
90
+ */
91
+ pos: Array<string>;
92
+ /**
93
+ * Short part-of-speech label (first element of pos array)
94
+ */
95
+ posShort: string;
96
+ /**
97
+ * Character offset where the token begins in the original text
98
+ */
99
+ begin: number;
100
+ /**
101
+ * Character offset where the token ends in the original text
102
+ */
103
+ end: number;
104
+ /**
105
+ * Pitch accent type — mora position(s) where the pitch drops. 0 = heiban (flat), 1 = atamadaka, 2+ = nakadaka/odaka. Comma-separated in UniDic feature[24]. Null if not available.
106
+ *
107
+ */
108
+ pitchAccentType: Array<number>;
109
+ /**
110
+ * Compound accent connection rule from UniDic feature[25]. Values like C1-C5, F1-F6, P1-P13. Null if not available.
111
+ *
112
+ */
113
+ pitchCompoundRule: string;
114
+ /**
115
+ * Accent modification rule from UniDic feature[26]. Values like M1, M2, M4. Null if not available.
116
+ *
117
+ */
118
+ pitchModificationRule: string;
119
+ };
120
+ /**
121
+ * Segment details in search results
122
+ */
123
+ export type SearchResultSegment = {
124
+ /**
125
+ * Segment status
126
+ */
127
+ status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
128
+ /**
129
+ * Unique identifier for the segment
130
+ */
131
+ uuid: string;
132
+ /**
133
+ * Position of the segment within the episode
134
+ */
135
+ position: number;
136
+ /**
137
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
138
+ */
139
+ startTime: string;
140
+ /**
141
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
142
+ */
143
+ endTime: string;
144
+ /**
145
+ * Episode number where the segment appears
146
+ */
147
+ episodeNumber: number;
148
+ ja: JapaneseSearchContent;
149
+ en: TranslationSearchContent;
150
+ es: TranslationSearchContent;
151
+ /**
152
+ * Whether the segment contains NSFW content
153
+ */
154
+ isNsfw: boolean;
155
+ /**
156
+ * Morphological analysis of the Japanese content
157
+ */
158
+ morphemes?: Array<Morpheme>;
159
+ };
160
+ /**
161
+ * URLs to media resources for a segment
162
+ */
163
+ export type SearchResultUrls = {
164
+ /**
165
+ * URL to the subtitle image snapshot
166
+ */
167
+ imageUrl?: string;
168
+ /**
169
+ * URL to the audio clip for this segment
170
+ */
171
+ audioUrl?: string;
172
+ /**
173
+ * URL to the video clip for this segment
174
+ */
175
+ videoUrl?: string;
176
+ };
177
+ /**
178
+ * A complete search result combining media info, segment details, and URLs
179
+ */
180
+ export type SearchResult = {
181
+ /**
182
+ * Media information for this result
183
+ */
184
+ media: SearchResultMedia;
185
+ /**
186
+ * Segment details including translations
187
+ */
188
+ segment: SearchResultSegment;
189
+ /**
190
+ * URLs to media resources (images, audio, video)
191
+ */
192
+ urls: SearchResultUrls;
193
+ };
194
+ /**
195
+ * Pagination metadata for search results
196
+ */
197
+ export type PaginationInfo = {
198
+ /**
199
+ * Number of results returned in this page
200
+ */
201
+ pageSize?: number;
202
+ /**
203
+ * Whether there are more results after this page
204
+ */
205
+ hasMore?: boolean;
206
+ /**
207
+ * Estimated total number of matching segments
208
+ */
209
+ estimatedTotalHits?: number;
210
+ /**
211
+ * Whether estimatedTotalHits is exact or a lower bound
212
+ */
213
+ estimatedTotalHitsRelation?: 'EXACT' | 'LOWER_BOUND';
214
+ };
215
+ export type SearchHealthCheckResponse = {
216
+ results?: Array<SearchResult>;
217
+ pagination?: PaginationInfo;
218
+ /**
219
+ * Cursor for pagination
220
+ */
221
+ cursor?: Array<number>;
222
+ };
223
+ /**
224
+ * Unauthorized error response
225
+ */
226
+ export type Error401 = {
227
+ /**
228
+ * Specific error code for programmatic handling
229
+ */
230
+ code: 'AUTH_CREDENTIALS_REQUIRED' | 'AUTH_CREDENTIALS_INVALID' | 'AUTH_CREDENTIALS_EXPIRED' | 'EMAIL_NOT_VERIFIED';
231
+ /**
232
+ * A short, human-readable summary of the problem
233
+ */
234
+ title: string;
235
+ /**
236
+ * A human-readable explanation specific to this occurrence
237
+ */
238
+ detail: string;
239
+ /**
240
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
241
+ */
242
+ type?: string;
243
+ /**
244
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
245
+ */
246
+ instance?: string;
247
+ /**
248
+ * The HTTP status code
249
+ */
250
+ status: 401;
251
+ /**
252
+ * Optional map of field names to their error messages (for validation errors)
253
+ */
254
+ errors?: {
255
+ [key: string]: string;
256
+ };
257
+ };
258
+ /**
259
+ * Forbidden error response
260
+ */
261
+ export type Error403 = {
262
+ /**
263
+ * Specific error code for programmatic handling
264
+ */
265
+ code: 'ACCESS_DENIED' | 'INSUFFICIENT_PERMISSIONS';
266
+ /**
267
+ * A short, human-readable summary of the problem
268
+ */
269
+ title: string;
270
+ /**
271
+ * A human-readable explanation specific to this occurrence
272
+ */
273
+ detail: string;
274
+ /**
275
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
276
+ */
277
+ type?: string;
278
+ /**
279
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
280
+ */
281
+ instance?: string;
282
+ /**
283
+ * The HTTP status code
284
+ */
285
+ status: 403;
286
+ /**
287
+ * Optional map of field names to their error messages (for validation errors)
288
+ */
289
+ errors?: {
290
+ [key: string]: string;
291
+ };
292
+ };
293
+ /**
294
+ * Too Many Requests error response
295
+ */
296
+ export type Error429 = {
297
+ /**
298
+ * Specific error code for programmatic handling
299
+ */
300
+ code: 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED';
301
+ /**
302
+ * A short, human-readable summary of the problem
303
+ */
304
+ title: string;
305
+ /**
306
+ * A human-readable explanation specific to this occurrence
307
+ */
308
+ detail: string;
309
+ /**
310
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
311
+ */
312
+ type?: string;
313
+ /**
314
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
315
+ */
316
+ instance?: string;
317
+ /**
318
+ * The HTTP status code
319
+ */
320
+ status: 429;
321
+ /**
322
+ * Optional map of field names to their error messages (for validation errors)
323
+ */
324
+ errors?: {
325
+ [key: string]: string;
326
+ };
327
+ };
328
+ /**
329
+ * Internal Server Error response
330
+ */
331
+ export type Error500 = {
332
+ /**
333
+ * Specific error code for programmatic handling
334
+ */
335
+ code: 'INTERNAL_SERVER_EXCEPTION';
336
+ /**
337
+ * A short, human-readable summary of the problem
338
+ */
339
+ title: string;
340
+ /**
341
+ * A human-readable explanation specific to this occurrence
342
+ */
343
+ detail: string;
344
+ /**
345
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
346
+ */
347
+ type?: string;
348
+ /**
349
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
350
+ */
351
+ instance?: string;
352
+ /**
353
+ * The HTTP status code
354
+ */
355
+ status: 500;
356
+ /**
357
+ * Optional map of field names to their error messages (for validation errors)
358
+ */
359
+ errors?: {
360
+ [key: string]: string;
361
+ };
362
+ };
363
+ export type SearchRequest = {
364
+ /**
365
+ * Text or sentence to search (null to search without query)
366
+ */
367
+ query?: string;
368
+ /**
369
+ * Max amount of entries by response
370
+ */
371
+ limit?: number;
372
+ /**
373
+ * Unique ID from segment (Useful to get a specific segment)
374
+ */
375
+ uuid?: string;
376
+ /**
377
+ * Media category filter
378
+ */
379
+ category?: Array<Category>;
380
+ /**
381
+ * Unique ID from media
382
+ */
383
+ mediaId?: number;
384
+ /**
385
+ * Array of episodes to get
386
+ */
387
+ episode?: Array<number>;
388
+ /**
389
+ * Non-negative integer seed for deterministic random sorting
390
+ */
391
+ randomSeed?: number;
392
+ /**
393
+ * Order by amount of characters
394
+ */
395
+ contentSort?: 'ASC' | 'DESC' | 'NONE' | 'TIME_ASC' | 'TIME_DESC' | 'RANDOM';
396
+ /**
397
+ * Current page of search
398
+ */
399
+ cursor?: Array<number>;
400
+ /**
401
+ * Whether to use exact phrase matching
402
+ */
403
+ exactMatch?: boolean;
404
+ /**
405
+ * Minimum content length
406
+ */
407
+ minLength?: number;
408
+ /**
409
+ * Maximum content length
410
+ */
411
+ maxLength?: number;
412
+ /**
413
+ * Media IDs to exclude from results
414
+ */
415
+ excludedMediaIds?: Array<number>;
416
+ /**
417
+ * Segment status filter
418
+ */
419
+ status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
420
+ /**
421
+ * Media filter with episodes
422
+ */
423
+ media?: Array<{
424
+ mediaId: number;
425
+ /**
426
+ * Array of episode numbers
427
+ */
428
+ episodes: Array<number>;
429
+ }>;
430
+ };
431
+ export type SearchResponse = {
432
+ results?: Array<SearchResult>;
433
+ pagination?: PaginationInfo;
434
+ /**
435
+ * Cursor for pagination
436
+ */
437
+ cursor?: Array<number>;
438
+ };
439
+ /**
440
+ * Bad Request error response
441
+ */
442
+ export type Error400 = {
443
+ /**
444
+ * Specific error code for programmatic handling
445
+ */
446
+ code: 'VALIDATION_FAILED' | 'INVALID_JSON' | 'INVALID_REQUEST';
447
+ /**
448
+ * A short, human-readable summary of the problem
449
+ */
450
+ title: string;
451
+ /**
452
+ * A human-readable explanation specific to this occurrence
453
+ */
454
+ detail: string;
455
+ /**
456
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
457
+ */
458
+ type?: string;
459
+ /**
460
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
461
+ */
462
+ instance?: string;
463
+ /**
464
+ * The HTTP status code
465
+ */
466
+ status: 400;
467
+ /**
468
+ * Optional map of field names to their error messages (for validation errors)
469
+ */
470
+ errors?: {
471
+ [key: string]: string;
472
+ };
473
+ };
474
+ export type SearchStatsRequest = {
475
+ /**
476
+ * Text or sentence to search
477
+ */
478
+ query?: string;
479
+ /**
480
+ * Media category filter
481
+ */
482
+ category?: Array<Category>;
483
+ /**
484
+ * Whether to use exact phrase matching
485
+ */
486
+ exactMatch?: boolean;
487
+ /**
488
+ * Minimum content length
489
+ */
490
+ minLength?: number;
491
+ /**
492
+ * Maximum content length
493
+ */
494
+ maxLength?: number;
495
+ /**
496
+ * Media IDs to exclude from results
497
+ */
498
+ excludedMediaIds?: Array<number>;
499
+ /**
500
+ * Restrict stats to these media IDs (for list-scoped stats)
501
+ */
502
+ mediaIds?: Array<number>;
503
+ /**
504
+ * Segment status filter
505
+ */
506
+ status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
507
+ };
508
+ /**
509
+ * Search result statistics grouped by media
510
+ */
511
+ export type MediaSearchStats = {
512
+ /**
513
+ * Unique identifier for the media
514
+ */
515
+ mediaId?: number;
516
+ category?: Category;
517
+ /**
518
+ * Romaji transliteration of the media name
519
+ */
520
+ nameRomaji?: string;
521
+ /**
522
+ * English name of the media
523
+ */
524
+ nameEn?: string;
525
+ /**
526
+ * Original Japanese name of the media
527
+ */
528
+ nameJa?: string;
529
+ /**
530
+ * Total number of segments found for this media
531
+ */
532
+ segmentCount?: number;
533
+ /**
534
+ * Mapping of episode numbers to segment hit counts
535
+ */
536
+ episodeHits?: {
537
+ [key: string]: number;
538
+ };
539
+ };
540
+ /**
541
+ * Count of entries grouped by media category
542
+ */
543
+ export type CategoryCount = {
544
+ category?: Category;
545
+ /**
546
+ * Number of entries in this category
547
+ */
548
+ count?: number;
549
+ };
550
+ export type SearchStatsResponse = {
551
+ media?: Array<MediaSearchStats>;
552
+ categories?: Array<CategoryCount>;
553
+ };
554
+ export type SearchMultipleRequest = {
555
+ /**
556
+ * List of words to search for
557
+ */
558
+ words: Array<string>;
559
+ /**
560
+ * Whether to use exact matching
561
+ */
562
+ exactMatch?: boolean;
563
+ };
564
+ /**
565
+ * Media entry containing word matches
566
+ */
567
+ export type WordMatchMedia = {
568
+ /**
569
+ * Unique identifier for the media
570
+ */
571
+ mediaId?: number;
572
+ /**
573
+ * English name of the media
574
+ */
575
+ nameEn?: string;
576
+ /**
577
+ * Original Japanese name of the media
578
+ */
579
+ nameJa?: string;
580
+ /**
581
+ * Romaji transliteration of the media name
582
+ */
583
+ nameRomaji?: string;
584
+ /**
585
+ * Number of times the word appears in this media
586
+ */
587
+ matchCount?: number;
588
+ };
589
+ /**
590
+ * Word matching result with occurrences across media
591
+ */
592
+ export type WordMatch = {
593
+ /**
594
+ * The word that was searched for
595
+ */
596
+ word?: string;
597
+ /**
598
+ * Indicates whether the word was found in any segment
599
+ */
600
+ isMatch?: boolean;
601
+ /**
602
+ * Total number of times this word appears across all media
603
+ */
604
+ matchCount?: number;
605
+ /**
606
+ * List of media containing this word
607
+ */
608
+ media?: Array<WordMatchMedia>;
609
+ };
610
+ export type SearchMultipleResponse = {
611
+ results?: Array<WordMatch>;
612
+ };
613
+ /**
614
+ * Map of external IDs keyed by source. Only sources with values are included.
615
+ */
616
+ export type ExternalId = {
617
+ /**
618
+ * AniList ID
619
+ */
620
+ anilist?: string;
621
+ /**
622
+ * IMDB ID
623
+ */
624
+ imdb?: string;
625
+ /**
626
+ * TVDB ID
627
+ */
628
+ tvdb?: string;
629
+ };
630
+ /**
631
+ * Japanese voice actor (seiyuu)
632
+ */
633
+ export type Seiyuu = {
634
+ /**
635
+ * AniList staff ID
636
+ */
637
+ id: number;
638
+ /**
639
+ * Japanese name of the voice actor
640
+ */
641
+ nameJa: string;
642
+ /**
643
+ * English name of the voice actor
644
+ */
645
+ nameEn: string;
646
+ /**
647
+ * Profile image URL
648
+ */
649
+ imageUrl: string;
650
+ };
651
+ /**
652
+ * Anime character
653
+ */
654
+ export type Character = {
655
+ /**
656
+ * AniList character ID
657
+ */
658
+ id: number;
659
+ /**
660
+ * Japanese name of the character
661
+ */
662
+ nameJa: string;
663
+ /**
664
+ * English name of the character
665
+ */
666
+ nameEn: string;
667
+ /**
668
+ * Character image URL
669
+ */
670
+ imageUrl: string;
671
+ seiyuu: Seiyuu;
672
+ };
673
+ /**
674
+ * Character appearing in a media with their role
675
+ */
676
+ export type MediaCharacter = {
677
+ character: Character;
678
+ /**
679
+ * Character's role in the media
680
+ */
681
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
682
+ };
683
+ /**
684
+ * Media collection list
685
+ */
686
+ export type List = {
687
+ /**
688
+ * List ID
689
+ */
690
+ id: number;
691
+ /**
692
+ * Name of the list
693
+ */
694
+ name: string;
695
+ /**
696
+ * Type of list
697
+ */
698
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
699
+ /**
700
+ * User ID who owns the list (1 = admin)
701
+ */
702
+ userId: number;
703
+ /**
704
+ * Visibility of the list
705
+ */
706
+ visibility: 'PUBLIC' | 'PRIVATE';
707
+ };
708
+ /**
709
+ * Media entry with full metadata
710
+ */
711
+ export type Media = {
712
+ /**
713
+ * Unique identifier for the media
714
+ */
715
+ id: number;
716
+ externalIds?: ExternalId;
717
+ /**
718
+ * Original Japanese name of the media
719
+ */
720
+ nameJa: string;
721
+ /**
722
+ * Romaji transliteration of the media name
723
+ */
724
+ nameRomaji: string;
725
+ /**
726
+ * English name of the media
727
+ */
728
+ nameEn: string;
729
+ /**
730
+ * Format of the media release (e.g., TV, OVA, Movie)
731
+ */
732
+ airingFormat: string;
733
+ /**
734
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
735
+ */
736
+ airingStatus: string;
737
+ /**
738
+ * List of genres associated with the media
739
+ */
740
+ genres: Array<string>;
741
+ /**
742
+ * Full URL to the cover image
743
+ */
744
+ coverUrl: string;
745
+ /**
746
+ * Full URL to the banner image
747
+ */
748
+ bannerUrl: string;
749
+ /**
750
+ * Start date of the media (first airing/release)
751
+ */
752
+ startDate: string;
753
+ /**
754
+ * End date of the media (last airing/release)
755
+ */
756
+ endDate?: string;
757
+ category: Category;
758
+ /**
759
+ * Total number of subtitle segments available
760
+ */
761
+ segmentCount?: number;
762
+ /**
763
+ * Total number of episodes available
764
+ */
765
+ episodeCount?: number;
766
+ /**
767
+ * Version identifier for the media entry
768
+ */
769
+ version: string;
770
+ /**
771
+ * Animation studio that produced the media
772
+ */
773
+ studio: string;
774
+ /**
775
+ * Airing season label for the media
776
+ */
777
+ seasonName: string;
778
+ /**
779
+ * Airing year for the media
780
+ */
781
+ seasonYear: number;
782
+ /**
783
+ * Characters appearing in the media with their voice actors
784
+ */
785
+ characters?: Array<MediaCharacter>;
786
+ /**
787
+ * Lists that contain this media
788
+ */
789
+ lists?: Array<List>;
790
+ };
791
+ export type MediaListResponse = {
792
+ data: Array<Media>;
793
+ /**
794
+ * Next cursor for pagination (undefined if no more results)
795
+ */
796
+ cursor?: number;
797
+ /**
798
+ * Whether more results are available
799
+ */
800
+ hasMoreResults: boolean;
801
+ };
802
+ /**
803
+ * Character data for creating/updating media
804
+ */
805
+ export type CharacterInput = {
806
+ /**
807
+ * AniList character ID
808
+ */
809
+ id: number;
810
+ /**
811
+ * Japanese name of the character
812
+ */
813
+ nameJa: string;
814
+ /**
815
+ * English name of the character
816
+ */
817
+ nameEn: string;
818
+ /**
819
+ * Character image URL
820
+ */
821
+ imageUrl: string;
822
+ /**
823
+ * Character's role in the media
824
+ */
825
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
826
+ /**
827
+ * AniList staff ID for the Japanese voice actor
828
+ */
829
+ seiyuuId: number;
830
+ /**
831
+ * Japanese name of the voice actor
832
+ */
833
+ seiyuuNameJa: string;
834
+ /**
835
+ * English name of the voice actor
836
+ */
837
+ seiyuuNameEn: string;
838
+ /**
839
+ * Voice actor profile image URL
840
+ */
841
+ seiyuuImageUrl: string;
842
+ };
843
+ /**
844
+ * List data for adding media to a list
845
+ */
846
+ export type ListInput = {
847
+ /**
848
+ * Existing list ID (if adding to existing list)
849
+ */
850
+ listId?: number;
851
+ /**
852
+ * Name for new list (if creating new list)
853
+ */
854
+ listName?: string;
855
+ /**
856
+ * Type of list (if creating new list)
857
+ */
858
+ listType?: 'SERIES' | 'CUSTOM';
859
+ /**
860
+ * Visibility of list (if creating new list)
861
+ */
862
+ listVisibility?: 'PUBLIC' | 'PRIVATE';
863
+ /**
864
+ * Position/order of media in the list (1-indexed)
865
+ */
866
+ position: number;
867
+ };
868
+ /**
869
+ * Request body for creating a new media entry
870
+ */
871
+ export type MediaCreateRequest = {
872
+ externalIds?: ExternalId;
873
+ /**
874
+ * Original Japanese name of the media
875
+ */
876
+ nameJa: string;
877
+ /**
878
+ * Romaji transliteration of the media name
879
+ */
880
+ nameRomaji: string;
881
+ /**
882
+ * English name of the media
883
+ */
884
+ nameEn: string;
885
+ /**
886
+ * Format of the media release (e.g., TV, OVA, Movie)
887
+ */
888
+ airingFormat: string;
889
+ /**
890
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
891
+ */
892
+ airingStatus: string;
893
+ /**
894
+ * List of genres associated with the media
895
+ */
896
+ genres: Array<string>;
897
+ /**
898
+ * Storage backend for media assets
899
+ */
900
+ storage: 'LOCAL' | 'R2';
901
+ /**
902
+ * Start date of the media (first airing/release)
903
+ */
904
+ startDate: string;
905
+ /**
906
+ * End date of the media (last airing/release)
907
+ */
908
+ endDate?: string;
909
+ /**
910
+ * Media category
911
+ */
912
+ category: 'ANIME' | 'JDRAMA';
913
+ /**
914
+ * Version of the media-sub-splitter used
915
+ */
916
+ version: string;
917
+ /**
918
+ * Hash salt used when generating the hash for the related media assets
919
+ */
920
+ hashSalt: string;
921
+ /**
922
+ * Animation studio that produced the media
923
+ */
924
+ studio: string;
925
+ /**
926
+ * Airing season label for the media
927
+ */
928
+ seasonName: string;
929
+ /**
930
+ * Airing year for the media
931
+ */
932
+ seasonYear: number;
933
+ /**
934
+ * List of characters appearing in the media with their voice actors
935
+ */
936
+ characters?: Array<CharacterInput>;
937
+ /**
938
+ * Lists to add this media to (e.g., series, franchise)
939
+ */
940
+ lists?: Array<ListInput>;
941
+ };
942
+ /**
943
+ * Conflict error response
944
+ */
945
+ export type Error409 = {
946
+ /**
947
+ * Specific error code for programmatic handling
948
+ */
949
+ code: 'ACCOUNT_CONFLICT' | 'DUPLICATE_KEY';
950
+ /**
951
+ * A short, human-readable summary of the problem
952
+ */
953
+ title: string;
954
+ /**
955
+ * A human-readable explanation specific to this occurrence
956
+ */
957
+ detail: string;
958
+ /**
959
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
960
+ */
961
+ type?: string;
962
+ /**
963
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
964
+ */
965
+ instance?: string;
966
+ /**
967
+ * The HTTP status code
968
+ */
969
+ status: 409;
970
+ /**
971
+ * Optional map of field names to their error messages (for validation errors)
972
+ */
973
+ errors?: {
974
+ [key: string]: string;
975
+ };
976
+ };
977
+ /**
978
+ * Not Found error response
979
+ */
980
+ export type Error404 = {
981
+ /**
982
+ * Specific error code for programmatic handling
983
+ */
984
+ code: 'NOT_FOUND';
985
+ /**
986
+ * A short, human-readable summary of the problem
987
+ */
988
+ title: string;
989
+ /**
990
+ * A human-readable explanation specific to this occurrence
991
+ */
992
+ detail: string;
993
+ /**
994
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
995
+ */
996
+ type?: string;
997
+ /**
998
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
999
+ */
1000
+ instance?: string;
1001
+ /**
1002
+ * The HTTP status code
1003
+ */
1004
+ status: 404;
1005
+ /**
1006
+ * Optional map of field names to their error messages (for validation errors)
1007
+ */
1008
+ errors?: {
1009
+ [key: string]: string;
1010
+ };
1011
+ };
1012
+ /**
1013
+ * Request body for updating an existing media entry (all fields optional)
1014
+ */
1015
+ export type MediaUpdateRequest = {
1016
+ externalIds?: ExternalId;
1017
+ /**
1018
+ * Original Japanese name of the media
1019
+ */
1020
+ nameJa?: string;
1021
+ /**
1022
+ * Romaji transliteration of the media name
1023
+ */
1024
+ nameRomaji?: string;
1025
+ /**
1026
+ * English name of the media
1027
+ */
1028
+ nameEn?: string;
1029
+ /**
1030
+ * Format of the media release (e.g., TV, OVA, Movie)
1031
+ */
1032
+ airingFormat?: string;
1033
+ /**
1034
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
1035
+ */
1036
+ airingStatus?: string;
1037
+ /**
1038
+ * List of genres associated with the media
1039
+ */
1040
+ genres?: Array<string>;
1041
+ /**
1042
+ * Storage backend for media assets
1043
+ */
1044
+ storage?: 'LOCAL' | 'R2';
1045
+ /**
1046
+ * Start date of the media (first airing/release)
1047
+ */
1048
+ startDate?: string;
1049
+ /**
1050
+ * End date of the media (last airing/release)
1051
+ */
1052
+ endDate?: string;
1053
+ /**
1054
+ * Media category
1055
+ */
1056
+ category?: 'ANIME' | 'JDRAMA';
1057
+ /**
1058
+ * Version of the media-sub-splitter used
1059
+ */
1060
+ version?: string;
1061
+ /**
1062
+ * Hash salt used when generating the hash for the related media assets
1063
+ */
1064
+ hashSalt?: string;
1065
+ /**
1066
+ * Animation studio that produced the media
1067
+ */
1068
+ studio?: string;
1069
+ /**
1070
+ * Airing season label for the media
1071
+ */
1072
+ seasonName?: string;
1073
+ /**
1074
+ * Airing year for the media
1075
+ */
1076
+ seasonYear?: number;
1077
+ /**
1078
+ * List of characters appearing in the media with their voice actors
1079
+ */
1080
+ characters?: Array<CharacterInput>;
1081
+ /**
1082
+ * Lists to add this media to (e.g., series, franchise)
1083
+ */
1084
+ lists?: Array<ListInput>;
1085
+ /**
1086
+ * Total number of subtitle segments available
1087
+ */
1088
+ segmentCount?: number;
1089
+ };
1090
+ export type Episode = {
1091
+ /**
1092
+ * ID of the media this episode belongs to
1093
+ */
1094
+ mediaId: number;
1095
+ /**
1096
+ * Episode number within the media
1097
+ */
1098
+ episodeNumber: number;
1099
+ /**
1100
+ * English title of the episode
1101
+ */
1102
+ titleEn?: string;
1103
+ /**
1104
+ * Romanized title of the episode
1105
+ */
1106
+ titleRomaji?: string;
1107
+ /**
1108
+ * Japanese title of the episode
1109
+ */
1110
+ titleJa?: string;
1111
+ /**
1112
+ * Episode description or synopsis
1113
+ */
1114
+ description?: string;
1115
+ /**
1116
+ * When the episode originally aired
1117
+ */
1118
+ airedAt?: string;
1119
+ /**
1120
+ * Episode duration in seconds
1121
+ */
1122
+ lengthSeconds?: number;
1123
+ /**
1124
+ * URL to episode thumbnail image
1125
+ */
1126
+ thumbnailUrl?: string;
1127
+ /**
1128
+ * Number of segments in this episode
1129
+ */
1130
+ segmentCount: number;
1131
+ };
1132
+ export type EpisodeListResponse = {
1133
+ /**
1134
+ * Array of episode objects
1135
+ */
1136
+ data: Array<Episode>;
1137
+ /**
1138
+ * Cursor for pagination (last episode number in current page)
1139
+ */
1140
+ cursor?: number;
1141
+ /**
1142
+ * Whether more results are available
1143
+ */
1144
+ hasMore: boolean;
1145
+ };
1146
+ export type EpisodeCreateRequest = {
1147
+ /**
1148
+ * English title of the episode
1149
+ */
1150
+ titleEn?: string;
1151
+ /**
1152
+ * Romanized title of the episode
1153
+ */
1154
+ titleRomaji?: string;
1155
+ /**
1156
+ * Japanese title of the episode
1157
+ */
1158
+ titleJa?: string;
1159
+ /**
1160
+ * Episode description or synopsis
1161
+ */
1162
+ description?: string;
1163
+ /**
1164
+ * When the episode originally aired
1165
+ */
1166
+ airedAt?: string;
1167
+ /**
1168
+ * Episode duration in seconds
1169
+ */
1170
+ lengthSeconds?: number;
1171
+ /**
1172
+ * URL to episode thumbnail image
1173
+ */
1174
+ thumbnailUrl?: string;
1175
+ /**
1176
+ * Episode number within the media (must be unique for this media)
1177
+ */
1178
+ episodeNumber: number;
1179
+ };
1180
+ /**
1181
+ * All fields are optional for partial updates
1182
+ */
1183
+ export type EpisodeUpdateRequest = {
1184
+ /**
1185
+ * English title of the episode
1186
+ */
1187
+ titleEn?: string;
1188
+ /**
1189
+ * Romanized title of the episode
1190
+ */
1191
+ titleRomaji?: string;
1192
+ /**
1193
+ * Japanese title of the episode
1194
+ */
1195
+ titleJa?: string;
1196
+ /**
1197
+ * Episode description or synopsis
1198
+ */
1199
+ description?: string;
1200
+ /**
1201
+ * When the episode originally aired
1202
+ */
1203
+ airedAt?: string;
1204
+ /**
1205
+ * Episode duration in seconds
1206
+ */
1207
+ lengthSeconds?: number;
1208
+ /**
1209
+ * URL to episode thumbnail image
1210
+ */
1211
+ thumbnailUrl?: string;
1212
+ };
1213
+ /**
1214
+ * Japanese content with optional character count
1215
+ */
1216
+ export type JapaneseContent = {
1217
+ /**
1218
+ * Original Japanese content
1219
+ */
1220
+ content: string;
1221
+ /**
1222
+ * Number of characters in the Japanese content
1223
+ */
1224
+ characterCount?: number;
1225
+ };
1226
+ /**
1227
+ * Translation content for a language
1228
+ */
1229
+ export type TranslationContent = {
1230
+ /**
1231
+ * Translated content
1232
+ */
1233
+ content?: string;
1234
+ /**
1235
+ * Whether the translation was machine-translated
1236
+ */
1237
+ isMachineTranslated: boolean;
1238
+ };
1239
+ export type Segment = {
1240
+ /**
1241
+ * Auto-generated segment ID
1242
+ */
1243
+ id: number;
1244
+ /**
1245
+ * Unique identifier for the segment
1246
+ */
1247
+ uuid: string;
1248
+ /**
1249
+ * Position of the segment within the episode
1250
+ */
1251
+ position: number;
1252
+ /**
1253
+ * Segment status
1254
+ */
1255
+ status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1256
+ /**
1257
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1258
+ */
1259
+ startTime: string;
1260
+ /**
1261
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1262
+ */
1263
+ endTime: string;
1264
+ ja: JapaneseContent;
1265
+ en: TranslationContent;
1266
+ es: TranslationContent;
1267
+ /**
1268
+ * Whether the segment contains NSFW content
1269
+ */
1270
+ isNsfw: boolean;
1271
+ /**
1272
+ * URL to segment screenshot/image (generated from storage + hashedId)
1273
+ */
1274
+ imageUrl?: string;
1275
+ /**
1276
+ * URL to segment audio file (generated from storage + hashedId)
1277
+ */
1278
+ audioUrl?: string;
1279
+ /**
1280
+ * URL to segment video file (generated from storage + hashedId)
1281
+ */
1282
+ videoUrl?: string;
1283
+ /**
1284
+ * Episode number this segment belongs to
1285
+ */
1286
+ episode: number;
1287
+ /**
1288
+ * Media ID this segment belongs to
1289
+ */
1290
+ mediaId: number;
1291
+ /**
1292
+ * Storage backend for segment assets
1293
+ */
1294
+ storage: 'LOCAL' | 'R2';
1295
+ /**
1296
+ * Hash identifier for the segment
1297
+ */
1298
+ hashedId: string;
1299
+ /**
1300
+ * Morphological analysis of the Japanese content
1301
+ */
1302
+ morphemes?: Array<Morpheme>;
1303
+ };
1304
+ export type SegmentListResponse = {
1305
+ /**
1306
+ * Array of segment objects
1307
+ */
1308
+ data: Array<Segment>;
1309
+ /**
1310
+ * Cursor for pagination (last segment ID in current page)
1311
+ */
1312
+ cursor?: number;
1313
+ /**
1314
+ * Whether more results are available
1315
+ */
1316
+ hasMore: boolean;
1317
+ };
1318
+ export type SegmentCreateRequest = {
1319
+ /**
1320
+ * Position of the segment within the episode
1321
+ */
1322
+ position: number;
1323
+ /**
1324
+ * Segment status
1325
+ */
1326
+ status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1327
+ /**
1328
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1329
+ */
1330
+ startTime: string;
1331
+ /**
1332
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1333
+ */
1334
+ endTime: string;
1335
+ ja: {
1336
+ /**
1337
+ * Original Japanese content of the segment
1338
+ */
1339
+ content?: string;
1340
+ };
1341
+ es?: {
1342
+ /**
1343
+ * Spanish translation of the segment content
1344
+ */
1345
+ content?: string;
1346
+ /**
1347
+ * Whether the Spanish translation was machine-translated
1348
+ */
1349
+ isMachineTranslated?: boolean;
1350
+ };
1351
+ en?: {
1352
+ /**
1353
+ * English translation of the segment content
1354
+ */
1355
+ content?: string;
1356
+ /**
1357
+ * Whether the English translation was machine-translated
1358
+ */
1359
+ isMachineTranslated?: boolean;
1360
+ };
1361
+ /**
1362
+ * Whether the segment contains NSFW content
1363
+ */
1364
+ isNsfw?: boolean;
1365
+ /**
1366
+ * Storage backend for segment assets
1367
+ */
1368
+ storage: 'LOCAL' | 'R2';
1369
+ /**
1370
+ * Hash identifier for the segment (from segment JSON)
1371
+ */
1372
+ hashedId: string;
1373
+ };
1374
+ /**
1375
+ * All fields are optional for partial updates
1376
+ */
1377
+ export type SegmentUpdateRequest = {
1378
+ /**
1379
+ * Position of the segment within the episode
1380
+ */
1381
+ position?: number;
1382
+ /**
1383
+ * Segment status
1384
+ */
1385
+ status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1386
+ /**
1387
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1388
+ */
1389
+ startTime?: string;
1390
+ /**
1391
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1392
+ */
1393
+ endTime?: string;
1394
+ ja?: {
1395
+ /**
1396
+ * Original Japanese content of the segment
1397
+ */
1398
+ content?: string;
1399
+ };
1400
+ es?: {
1401
+ /**
1402
+ * Spanish translation of the segment content
1403
+ */
1404
+ content?: string;
1405
+ /**
1406
+ * Whether the Spanish translation was machine-translated
1407
+ */
1408
+ isMachineTranslated?: boolean;
1409
+ };
1410
+ en?: {
1411
+ /**
1412
+ * English translation of the segment content
1413
+ */
1414
+ content?: string;
1415
+ /**
1416
+ * Whether the English translation was machine-translated
1417
+ */
1418
+ isMachineTranslated?: boolean;
1419
+ };
1420
+ /**
1421
+ * Whether the segment contains NSFW content
1422
+ */
1423
+ isNsfw?: boolean;
1424
+ /**
1425
+ * Storage backend for segment assets
1426
+ */
1427
+ storage?: 'LOCAL' | 'R2';
1428
+ /**
1429
+ * Hash identifier for the segment (from segment JSON)
1430
+ */
1431
+ hashedId?: string;
1432
+ };
1433
+ export type SegmentContextResponse = {
1434
+ segments: Array<SearchResult>;
1435
+ };
1436
+ /**
1437
+ * Character with all media appearances
1438
+ */
1439
+ export type CharacterWithMedia = {
1440
+ /**
1441
+ * AniList character ID
1442
+ */
1443
+ id: number;
1444
+ /**
1445
+ * Japanese name of the character
1446
+ */
1447
+ nameJa: string;
1448
+ /**
1449
+ * English name of the character
1450
+ */
1451
+ nameEn: string;
1452
+ /**
1453
+ * Character image URL
1454
+ */
1455
+ imageUrl: string;
1456
+ seiyuu: Seiyuu;
1457
+ /**
1458
+ * All media this character appears in
1459
+ */
1460
+ mediaAppearances: Array<{
1461
+ media?: Media;
1462
+ /**
1463
+ * Character role in this media
1464
+ */
1465
+ role?: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1466
+ }>;
1467
+ };
1468
+ /**
1469
+ * Seiyuu with all voice acting roles
1470
+ */
1471
+ export type SeiyuuWithRoles = {
1472
+ /**
1473
+ * AniList staff ID
1474
+ */
1475
+ id: number;
1476
+ /**
1477
+ * Japanese name of the voice actor
1478
+ */
1479
+ nameJa: string;
1480
+ /**
1481
+ * English name of the voice actor
1482
+ */
1483
+ nameEn: string;
1484
+ /**
1485
+ * Profile image URL
1486
+ */
1487
+ imageUrl: string;
1488
+ /**
1489
+ * All characters voiced by this seiyuu with their media appearances
1490
+ */
1491
+ roles: Array<{
1492
+ character?: Character;
1493
+ media?: Media;
1494
+ /**
1495
+ * Character role in this media
1496
+ */
1497
+ role?: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1498
+ }>;
1499
+ };
1500
+ export type UserQuotaResponse = {
1501
+ /**
1502
+ * Number of API requests used in the current billing period.
1503
+ */
1504
+ quotaUsed: number;
1505
+ /**
1506
+ * Maximum number of API requests allowed in the current billing period.
1507
+ */
1508
+ quotaLimit: number;
1509
+ /**
1510
+ * Number of API requests remaining in the current billing period.
1511
+ */
1512
+ quotaRemaining: number;
1513
+ /**
1514
+ * Current billing period in YYYYMM format.
1515
+ */
1516
+ periodYyyymm: number;
1517
+ /**
1518
+ * Start of the current billing period (UTC).
1519
+ */
1520
+ periodStart: string;
1521
+ /**
1522
+ * End of the current billing period (UTC).
1523
+ */
1524
+ periodEnd: string;
1525
+ };
1526
+ export type Report = {
1527
+ /**
1528
+ * Report ID
1529
+ */
1530
+ id: number;
1531
+ /**
1532
+ * Who created this report
1533
+ */
1534
+ source: 'USER' | 'AUTO';
1535
+ /**
1536
+ * What level the report targets
1537
+ */
1538
+ targetType: 'SEGMENT' | 'EPISODE' | 'MEDIA';
1539
+ /**
1540
+ * Media ID this report targets
1541
+ */
1542
+ targetMediaId: number;
1543
+ /**
1544
+ * Episode number (for EPISODE/SEGMENT targets)
1545
+ */
1546
+ targetEpisodeNumber?: number;
1547
+ /**
1548
+ * Segment UUID (for SEGMENT targets)
1549
+ */
1550
+ targetSegmentUuid?: string;
1551
+ /**
1552
+ * ID of the auto-check run that created this report (AUTO only)
1553
+ */
1554
+ reviewCheckRunId?: number;
1555
+ /**
1556
+ * Reason for the report
1557
+ */
1558
+ reason: 'WRONG_TRANSLATION' | 'WRONG_TIMING' | 'WRONG_AUDIO' | 'NSFW_NOT_TAGGED' | 'DUPLICATE_SEGMENT' | 'WRONG_METADATA' | 'MISSING_EPISODES' | 'WRONG_COVER_IMAGE' | 'INAPPROPRIATE_CONTENT' | 'OTHER' | 'LOW_SEGMENT_MEDIA' | 'EMPTY_EPISODES' | 'MISSING_EPISODES_AUTO' | 'BAD_SEGMENT_RATIO' | 'MEDIA_WITH_NO_EPISODES' | 'MISSING_TRANSLATIONS' | 'DB_ES_SYNC_ISSUES' | 'HIGH_REPORT_DENSITY';
1559
+ /**
1560
+ * Optional description with additional details
1561
+ */
1562
+ description?: string;
1563
+ /**
1564
+ * Check-specific metrics (AUTO reports) or null (USER reports)
1565
+ */
1566
+ data?: {
1567
+ [key: string]: unknown;
1568
+ };
1569
+ /**
1570
+ * Current status of the report
1571
+ */
1572
+ status: 'PENDING' | 'CONCERN' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED' | 'IGNORED';
1573
+ /**
1574
+ * Notes from the admin who reviewed the report
1575
+ */
1576
+ adminNotes?: string;
1577
+ /**
1578
+ * ID of the user who submitted the report (USER reports only)
1579
+ */
1580
+ userId?: number;
1581
+ /**
1582
+ * When the report was created
1583
+ */
1584
+ createdAt: string;
1585
+ /**
1586
+ * When the report was last updated
1587
+ */
1588
+ updatedAt?: string;
1589
+ };
1590
+ export type ReportListResponse = {
1591
+ data: Array<Report>;
1592
+ /**
1593
+ * Whether more results are available
1594
+ */
1595
+ hasMore: boolean;
1596
+ /**
1597
+ * Cursor for next page
1598
+ */
1599
+ cursor?: number;
1600
+ };
1601
+ export type CreateReportRequest = {
1602
+ /**
1603
+ * Type of the entity being reported
1604
+ */
1605
+ targetType: 'SEGMENT' | 'MEDIA';
1606
+ /**
1607
+ * Media ID of the reported entity
1608
+ */
1609
+ targetMediaId: number;
1610
+ /**
1611
+ * Segment UUID (required when targetType is SEGMENT)
1612
+ */
1613
+ targetSegmentUuid?: string;
1614
+ /**
1615
+ * Reason for the report
1616
+ */
1617
+ reason: 'WRONG_TRANSLATION' | 'WRONG_TIMING' | 'WRONG_AUDIO' | 'NSFW_NOT_TAGGED' | 'DUPLICATE_SEGMENT' | 'WRONG_METADATA' | 'MISSING_EPISODES' | 'WRONG_COVER_IMAGE' | 'INAPPROPRIATE_CONTENT' | 'OTHER';
1618
+ /**
1619
+ * Optional description with additional details
1620
+ */
1621
+ description?: string;
1622
+ };
1623
+ export type UserPreferences = {
1624
+ /**
1625
+ * Lab feature opt-in flags keyed by feature key
1626
+ */
1627
+ labs?: {
1628
+ [key: string]: boolean;
1629
+ };
1630
+ /**
1631
+ * Preferred language for media names display
1632
+ */
1633
+ mediaNameLanguage?: 'english' | 'japanese' | 'romaji';
1634
+ searchHistory?: {
1635
+ /**
1636
+ * Whether activity tracking is enabled (default true)
1637
+ */
1638
+ enabled?: boolean;
1639
+ };
1640
+ };
1641
+ /**
1642
+ * Type of user activity
1643
+ */
1644
+ export type ActivityType = 'SEARCH' | 'ANKI_EXPORT' | 'SEGMENT_PLAY' | 'LIST_ADD_SEGMENT';
1645
+ export type UserActivity = {
1646
+ id: number;
1647
+ activityType: ActivityType;
1648
+ segmentUuid?: string;
1649
+ mediaId?: number;
1650
+ searchQuery?: string;
1651
+ createdAt: string;
1652
+ };
1653
+ export type LabFeature = {
1654
+ /**
1655
+ * Unique identifier for the lab feature
1656
+ */
1657
+ key: string;
1658
+ /**
1659
+ * Human-readable feature name
1660
+ */
1661
+ name: string;
1662
+ /**
1663
+ * Description of what the feature does
1664
+ */
1665
+ description: string;
1666
+ /**
1667
+ * Whether the feature is globally available
1668
+ */
1669
+ enabled: boolean;
1670
+ };
1671
+ /**
1672
+ * Request body for creating a new standalone list
1673
+ */
1674
+ export type ListCreateRequest = {
1675
+ /**
1676
+ * Name of the list
1677
+ */
1678
+ name: string;
1679
+ /**
1680
+ * Type of list
1681
+ */
1682
+ type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1683
+ /**
1684
+ * User ID who owns the list (1 = admin)
1685
+ */
1686
+ userId?: number;
1687
+ /**
1688
+ * Visibility of the list
1689
+ */
1690
+ visibility?: 'PUBLIC' | 'PRIVATE';
1691
+ };
1692
+ /**
1693
+ * List with all media in order
1694
+ */
1695
+ export type ListWithMedia = {
1696
+ /**
1697
+ * List ID
1698
+ */
1699
+ id: number;
1700
+ /**
1701
+ * Name of the list
1702
+ */
1703
+ name: string;
1704
+ /**
1705
+ * Type of list
1706
+ */
1707
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1708
+ /**
1709
+ * User ID who owns the list (1 = admin)
1710
+ */
1711
+ userId: number;
1712
+ /**
1713
+ * Visibility of the list
1714
+ */
1715
+ visibility: 'PUBLIC' | 'PRIVATE';
1716
+ /**
1717
+ * All media in the list, sorted by position
1718
+ */
1719
+ media: Array<{
1720
+ /**
1721
+ * Position in the list (1-indexed)
1722
+ */
1723
+ position?: number;
1724
+ media?: Media;
1725
+ }>;
1726
+ };
1727
+ /**
1728
+ * List with saved segments (search result format)
1729
+ */
1730
+ export type ListWithSegments = {
1731
+ /**
1732
+ * List ID
1733
+ */
1734
+ id: number;
1735
+ /**
1736
+ * Name of the list
1737
+ */
1738
+ name: string;
1739
+ /**
1740
+ * Type of list
1741
+ */
1742
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1743
+ /**
1744
+ * User ID who owns the list
1745
+ */
1746
+ userId: number;
1747
+ /**
1748
+ * Visibility of the list
1749
+ */
1750
+ visibility: 'PUBLIC' | 'PRIVATE';
1751
+ /**
1752
+ * Saved segments with their search result data
1753
+ */
1754
+ segments: Array<{
1755
+ /**
1756
+ * Position in the list
1757
+ */
1758
+ position?: number;
1759
+ /**
1760
+ * User annotation
1761
+ */
1762
+ note?: string;
1763
+ result?: SearchResult;
1764
+ }>;
1765
+ /**
1766
+ * Total number of segments in the list
1767
+ */
1768
+ totalCount: number;
1769
+ };
1770
+ /**
1771
+ * Request to reindex segments from the database into Elasticsearch
1772
+ */
1773
+ export type ReindexRequest = {
1774
+ /**
1775
+ * Array of media to reindex. If not provided, all media will be reindexed.
1776
+ * Each media can optionally specify which episodes to reindex.
1777
+ * If episodes are not specified for a media, all episodes will be reindexed.
1778
+ */
1779
+ media?: Array<{
1780
+ /**
1781
+ * The ID of the media
1782
+ */
1783
+ mediaId: number;
1784
+ /**
1785
+ * Optional array of episode numbers to reindex.
1786
+ * If not provided, all episodes for this media will be reindexed.
1787
+ */
1788
+ episodes?: Array<number>;
1789
+ }>;
1790
+ };
1791
+ /**
1792
+ * Response from the reindex operation
1793
+ */
1794
+ export type ReindexResponse = {
1795
+ /**
1796
+ * Whether the reindex operation completed successfully
1797
+ */
1798
+ success?: boolean;
1799
+ /**
1800
+ * Human-readable message about the reindex operation
1801
+ */
1802
+ message?: string;
1803
+ /**
1804
+ * Statistics about the reindex operation
1805
+ */
1806
+ stats?: {
1807
+ /**
1808
+ * Total number of segments processed
1809
+ */
1810
+ totalSegments?: number;
1811
+ /**
1812
+ * Number of segments successfully indexed
1813
+ */
1814
+ successfulIndexes?: number;
1815
+ /**
1816
+ * Number of segments that failed to index
1817
+ */
1818
+ failedIndexes?: number;
1819
+ /**
1820
+ * Number of media items processed
1821
+ */
1822
+ mediaProcessed?: number;
1823
+ };
1824
+ /**
1825
+ * Array of errors that occurred during reindexing (if any)
1826
+ */
1827
+ errors?: Array<{
1828
+ /**
1829
+ * ID of the segment that failed
1830
+ */
1831
+ segmentId?: number;
1832
+ /**
1833
+ * Error message
1834
+ */
1835
+ error?: string;
1836
+ }>;
1837
+ };
1838
+ export type AdminReport = Report & {
1839
+ /**
1840
+ * Number of reports for the same target
1841
+ */
1842
+ reportCount: number;
1843
+ /**
1844
+ * Name of the user who submitted this report
1845
+ */
1846
+ reporterName: string;
1847
+ };
1848
+ export type AdminReportListResponse = {
1849
+ data: Array<AdminReport>;
1850
+ /**
1851
+ * Whether more results are available
1852
+ */
1853
+ hasMore: boolean;
1854
+ /**
1855
+ * Cursor for next page
1856
+ */
1857
+ cursor?: number;
1858
+ };
1859
+ export type UpdateReportRequest = {
1860
+ /**
1861
+ * New status for the report
1862
+ */
1863
+ status?: 'PENDING' | 'CONCERN' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED' | 'IGNORED';
1864
+ /**
1865
+ * Admin notes about the report
1866
+ */
1867
+ adminNotes?: string;
1868
+ };
1869
+ export type RunReviewResponse = {
1870
+ /**
1871
+ * Category filter used
1872
+ */
1873
+ category: string;
1874
+ checksRun: Array<{
1875
+ /**
1876
+ * Check identifier
1877
+ */
1878
+ checkName: string;
1879
+ /**
1880
+ * Human-readable check name
1881
+ */
1882
+ label: string;
1883
+ /**
1884
+ * Number of reports created
1885
+ */
1886
+ resultCount: number;
1887
+ /**
1888
+ * ID of the created run record
1889
+ */
1890
+ runId: number;
1891
+ }>;
1892
+ /**
1893
+ * Total reports created across all checks
1894
+ */
1895
+ totalReports: number;
1896
+ };
1897
+ export type ReviewCheck = {
1898
+ /**
1899
+ * Check ID
1900
+ */
1901
+ id: number;
1902
+ /**
1903
+ * Unique check identifier
1904
+ */
1905
+ name: string;
1906
+ /**
1907
+ * Human-readable label
1908
+ */
1909
+ label: string;
1910
+ /**
1911
+ * What this check does
1912
+ */
1913
+ description: string;
1914
+ /**
1915
+ * What level this check operates on
1916
+ */
1917
+ targetType: 'MEDIA' | 'EPISODE';
1918
+ /**
1919
+ * Current threshold configuration
1920
+ */
1921
+ threshold: {
1922
+ [key: string]: unknown;
1923
+ };
1924
+ /**
1925
+ * Whether this check is active
1926
+ */
1927
+ enabled: boolean;
1928
+ /**
1929
+ * Schema for threshold fields (from registry)
1930
+ */
1931
+ thresholdSchema?: Array<{
1932
+ key?: string;
1933
+ label?: string;
1934
+ type?: 'number' | 'boolean';
1935
+ default?: number | boolean;
1936
+ min?: number;
1937
+ max?: number;
1938
+ }>;
1939
+ /**
1940
+ * Latest run info for this check
1941
+ */
1942
+ latestRun?: {
1943
+ id?: number;
1944
+ resultCount?: number;
1945
+ createdAt?: string;
1946
+ };
1947
+ createdAt?: string;
1948
+ updatedAt?: string;
1949
+ };
1950
+ export type ReviewCheckRun = {
1951
+ /**
1952
+ * Run ID
1953
+ */
1954
+ id: number;
1955
+ /**
1956
+ * Name of the check that was run
1957
+ */
1958
+ checkName: string;
1959
+ /**
1960
+ * Category filter used (ANIME/JDRAMA) or null for all
1961
+ */
1962
+ category?: string;
1963
+ /**
1964
+ * Number of reports created in this run
1965
+ */
1966
+ resultCount: number;
1967
+ /**
1968
+ * Snapshot of threshold at run time
1969
+ */
1970
+ thresholdUsed: {
1971
+ [key: string]: unknown;
1972
+ };
1973
+ /**
1974
+ * When this run was executed
1975
+ */
1976
+ createdAt: string;
1977
+ };
1978
+ export type ReviewAllowlist = {
1979
+ /**
1980
+ * Allowlist entry ID
1981
+ */
1982
+ id: number;
1983
+ /**
1984
+ * Name of the check this entry applies to
1985
+ */
1986
+ checkName: string;
1987
+ /**
1988
+ * Media ID to exclude
1989
+ */
1990
+ mediaId: number;
1991
+ /**
1992
+ * Episode number to exclude (null for media-level checks)
1993
+ */
1994
+ episodeNumber?: number;
1995
+ /**
1996
+ * Why this was allowlisted
1997
+ */
1998
+ reason?: string;
1999
+ /**
2000
+ * When this entry was created
2001
+ */
2002
+ createdAt: string;
2003
+ };
2004
+ export type HealthCheckData = {
2005
+ body?: never;
2006
+ path?: never;
2007
+ query?: never;
2008
+ url: '/v1/health';
2009
+ };
2010
+ export type HealthCheckErrors = {
2011
+ /**
2012
+ * Unauthorized
2013
+ */
2014
+ 401: Error401;
2015
+ /**
2016
+ * Forbidden
2017
+ */
2018
+ 403: Error403;
2019
+ /**
2020
+ * Too Many Requests
2021
+ */
2022
+ 429: Error429;
2023
+ /**
2024
+ * Internal Server Error
2025
+ */
2026
+ 500: Error500;
2027
+ };
2028
+ export type HealthCheckError = HealthCheckErrors[keyof HealthCheckErrors];
2029
+ export type HealthCheckResponses = {
2030
+ /**
2031
+ * OK
2032
+ */
2033
+ 200: SearchHealthCheckResponse;
2034
+ };
2035
+ export type HealthCheckResponse = HealthCheckResponses[keyof HealthCheckResponses];
2036
+ export type SearchIndexData = {
2037
+ body?: SearchRequest;
2038
+ path?: never;
2039
+ query?: never;
2040
+ url: '/v1/search';
2041
+ };
2042
+ export type SearchIndexErrors = {
2043
+ /**
2044
+ * Bad Request
2045
+ */
2046
+ 400: Error400;
2047
+ /**
2048
+ * Unauthorized
2049
+ */
2050
+ 401: Error401;
2051
+ /**
2052
+ * Forbidden
2053
+ */
2054
+ 403: Error403;
2055
+ /**
2056
+ * Too Many Requests
2057
+ */
2058
+ 429: Error429;
2059
+ /**
2060
+ * Internal Server Error
2061
+ */
2062
+ 500: Error500;
2063
+ };
2064
+ export type SearchIndexError = SearchIndexErrors[keyof SearchIndexErrors];
2065
+ export type SearchIndexResponses = {
2066
+ /**
2067
+ * OK
2068
+ */
2069
+ 200: SearchResponse;
2070
+ };
2071
+ export type SearchIndexResponse = SearchIndexResponses[keyof SearchIndexResponses];
2072
+ export type SearchStatsData = {
2073
+ body?: SearchStatsRequest;
2074
+ path?: never;
2075
+ query?: never;
2076
+ url: '/v1/search/stats';
2077
+ };
2078
+ export type SearchStatsErrors = {
2079
+ /**
2080
+ * Bad Request
2081
+ */
2082
+ 400: Error400;
2083
+ /**
2084
+ * Unauthorized
2085
+ */
2086
+ 401: Error401;
2087
+ /**
2088
+ * Forbidden
2089
+ */
2090
+ 403: Error403;
2091
+ /**
2092
+ * Too Many Requests
2093
+ */
2094
+ 429: Error429;
2095
+ /**
2096
+ * Internal Server Error
2097
+ */
2098
+ 500: Error500;
2099
+ };
2100
+ export type SearchStatsError = SearchStatsErrors[keyof SearchStatsErrors];
2101
+ export type SearchStatsResponses = {
2102
+ /**
2103
+ * OK
2104
+ */
2105
+ 200: SearchStatsResponse;
2106
+ };
2107
+ export type SearchStatsResponse2 = SearchStatsResponses[keyof SearchStatsResponses];
2108
+ export type SearchWordsData = {
2109
+ body: SearchMultipleRequest;
2110
+ path?: never;
2111
+ query?: never;
2112
+ url: '/v1/search/words';
2113
+ };
2114
+ export type SearchWordsErrors = {
2115
+ /**
2116
+ * Bad Request
2117
+ */
2118
+ 400: Error400;
2119
+ /**
2120
+ * Unauthorized
2121
+ */
2122
+ 401: Error401;
2123
+ /**
2124
+ * Forbidden
2125
+ */
2126
+ 403: Error403;
2127
+ /**
2128
+ * Too Many Requests
2129
+ */
2130
+ 429: Error429;
2131
+ /**
2132
+ * Internal Server Error
2133
+ */
2134
+ 500: Error500;
2135
+ };
2136
+ export type SearchWordsError = SearchWordsErrors[keyof SearchWordsErrors];
2137
+ export type SearchWordsResponses = {
2138
+ /**
2139
+ * OK
2140
+ */
2141
+ 200: SearchMultipleResponse;
2142
+ };
2143
+ export type SearchWordsResponse = SearchWordsResponses[keyof SearchWordsResponses];
2144
+ export type MediaIndexData = {
2145
+ body?: never;
2146
+ path?: never;
2147
+ query?: {
2148
+ /**
2149
+ * Number of results per page
2150
+ */
2151
+ limit?: number;
2152
+ /**
2153
+ * Pagination cursor offset
2154
+ */
2155
+ cursor?: number;
2156
+ /**
2157
+ * Filter by media category
2158
+ */
2159
+ category?: 'ANIME' | 'JDRAMA';
2160
+ /**
2161
+ * Search query for filtering media by name
2162
+ */
2163
+ query?: string;
2164
+ };
2165
+ url: '/v1/media';
2166
+ };
2167
+ export type MediaIndexErrors = {
2168
+ /**
2169
+ * Bad Request
2170
+ */
2171
+ 400: Error400;
2172
+ /**
2173
+ * Unauthorized
2174
+ */
2175
+ 401: Error401;
2176
+ /**
2177
+ * Forbidden
2178
+ */
2179
+ 403: Error403;
2180
+ /**
2181
+ * Too Many Requests
2182
+ */
2183
+ 429: Error429;
2184
+ /**
2185
+ * Internal Server Error
2186
+ */
2187
+ 500: Error500;
2188
+ };
2189
+ export type MediaIndexError = MediaIndexErrors[keyof MediaIndexErrors];
2190
+ export type MediaIndexResponses = {
2191
+ /**
2192
+ * OK
2193
+ */
2194
+ 200: MediaListResponse;
2195
+ };
2196
+ export type MediaIndexResponse = MediaIndexResponses[keyof MediaIndexResponses];
2197
+ export type MediaCreateData = {
2198
+ body: MediaCreateRequest;
2199
+ path?: never;
2200
+ query?: never;
2201
+ url: '/v1/media';
2202
+ };
2203
+ export type MediaCreateErrors = {
2204
+ /**
2205
+ * Bad Request
2206
+ */
2207
+ 400: Error400;
2208
+ /**
2209
+ * Unauthorized
2210
+ */
2211
+ 401: Error401;
2212
+ /**
2213
+ * Forbidden
2214
+ */
2215
+ 403: Error403;
2216
+ /**
2217
+ * Conflict
2218
+ */
2219
+ 409: Error409;
2220
+ /**
2221
+ * Too Many Requests
2222
+ */
2223
+ 429: Error429;
2224
+ /**
2225
+ * Internal Server Error
2226
+ */
2227
+ 500: Error500;
2228
+ };
2229
+ export type MediaCreateError = MediaCreateErrors[keyof MediaCreateErrors];
2230
+ export type MediaCreateResponses = {
2231
+ /**
2232
+ * Created
2233
+ */
2234
+ 201: Media;
2235
+ };
2236
+ export type MediaCreateResponse = MediaCreateResponses[keyof MediaCreateResponses];
2237
+ export type MediaDestroyData = {
2238
+ body?: never;
2239
+ path: {
2240
+ /**
2241
+ * Media ID
2242
+ */
2243
+ id: number;
2244
+ };
2245
+ query?: never;
2246
+ url: '/v1/media/{id}';
2247
+ };
2248
+ export type MediaDestroyErrors = {
2249
+ /**
2250
+ * Bad Request
2251
+ */
2252
+ 400: Error400;
2253
+ /**
2254
+ * Unauthorized
2255
+ */
2256
+ 401: Error401;
2257
+ /**
2258
+ * Forbidden
2259
+ */
2260
+ 403: Error403;
2261
+ /**
2262
+ * Not Found
2263
+ */
2264
+ 404: Error404;
2265
+ /**
2266
+ * Too Many Requests
2267
+ */
2268
+ 429: Error429;
2269
+ /**
2270
+ * Internal Server Error
2271
+ */
2272
+ 500: Error500;
2273
+ };
2274
+ export type MediaDestroyError = MediaDestroyErrors[keyof MediaDestroyErrors];
2275
+ export type MediaDestroyResponses = {
2276
+ /**
2277
+ * OK
2278
+ */
2279
+ 200: {
2280
+ message?: string;
2281
+ id?: number;
2282
+ };
2283
+ };
2284
+ export type MediaDestroyResponse = MediaDestroyResponses[keyof MediaDestroyResponses];
2285
+ export type MediaShowData = {
2286
+ body?: never;
2287
+ path: {
2288
+ /**
2289
+ * Media ID
2290
+ */
2291
+ id: number;
2292
+ };
2293
+ query?: never;
2294
+ url: '/v1/media/{id}';
2295
+ };
2296
+ export type MediaShowErrors = {
2297
+ /**
2298
+ * Bad Request
2299
+ */
2300
+ 400: Error400;
2301
+ /**
2302
+ * Unauthorized
2303
+ */
2304
+ 401: Error401;
2305
+ /**
2306
+ * Forbidden
2307
+ */
2308
+ 403: Error403;
2309
+ /**
2310
+ * Not Found
2311
+ */
2312
+ 404: Error404;
2313
+ /**
2314
+ * Too Many Requests
2315
+ */
2316
+ 429: Error429;
2317
+ /**
2318
+ * Internal Server Error
2319
+ */
2320
+ 500: Error500;
2321
+ };
2322
+ export type MediaShowError = MediaShowErrors[keyof MediaShowErrors];
2323
+ export type MediaShowResponses = {
2324
+ /**
2325
+ * OK
2326
+ */
2327
+ 200: Media;
2328
+ };
2329
+ export type MediaShowResponse = MediaShowResponses[keyof MediaShowResponses];
2330
+ export type MediaUpdateData = {
2331
+ body: MediaUpdateRequest;
2332
+ path: {
2333
+ /**
2334
+ * Media ID
2335
+ */
2336
+ id: number;
2337
+ };
2338
+ query?: never;
2339
+ url: '/v1/media/{id}';
2340
+ };
2341
+ export type MediaUpdateErrors = {
2342
+ /**
2343
+ * Bad Request
2344
+ */
2345
+ 400: Error400;
2346
+ /**
2347
+ * Unauthorized
2348
+ */
2349
+ 401: Error401;
2350
+ /**
2351
+ * Forbidden
2352
+ */
2353
+ 403: Error403;
2354
+ /**
2355
+ * Not Found
2356
+ */
2357
+ 404: Error404;
2358
+ /**
2359
+ * Too Many Requests
2360
+ */
2361
+ 429: Error429;
2362
+ /**
2363
+ * Internal Server Error
2364
+ */
2365
+ 500: Error500;
2366
+ };
2367
+ export type MediaUpdateError = MediaUpdateErrors[keyof MediaUpdateErrors];
2368
+ export type MediaUpdateResponses = {
2369
+ /**
2370
+ * OK
2371
+ */
2372
+ 200: Media;
2373
+ };
2374
+ export type MediaUpdateResponse = MediaUpdateResponses[keyof MediaUpdateResponses];
2375
+ export type EpisodeIndexData = {
2376
+ body?: never;
2377
+ path: {
2378
+ /**
2379
+ * ID of the media
2380
+ */
2381
+ mediaId: number;
2382
+ };
2383
+ query?: {
2384
+ /**
2385
+ * Maximum number of episodes to return
2386
+ */
2387
+ size?: number;
2388
+ /**
2389
+ * Episode number to start from (for pagination)
2390
+ */
2391
+ cursor?: number;
2392
+ };
2393
+ url: '/v1/media/{mediaId}/episodes';
2394
+ };
2395
+ export type EpisodeIndexErrors = {
2396
+ /**
2397
+ * Bad Request
2398
+ */
2399
+ 400: Error400;
2400
+ /**
2401
+ * Unauthorized
2402
+ */
2403
+ 401: Error401;
2404
+ /**
2405
+ * Forbidden
2406
+ */
2407
+ 403: Error403;
2408
+ /**
2409
+ * Not Found
2410
+ */
2411
+ 404: Error404;
2412
+ /**
2413
+ * Too Many Requests
2414
+ */
2415
+ 429: Error429;
2416
+ /**
2417
+ * Internal Server Error
2418
+ */
2419
+ 500: Error500;
2420
+ };
2421
+ export type EpisodeIndexError = EpisodeIndexErrors[keyof EpisodeIndexErrors];
2422
+ export type EpisodeIndexResponses = {
2423
+ /**
2424
+ * Paginated list of episodes
2425
+ */
2426
+ 200: EpisodeListResponse;
2427
+ };
2428
+ export type EpisodeIndexResponse = EpisodeIndexResponses[keyof EpisodeIndexResponses];
2429
+ export type EpisodeCreateData = {
2430
+ body: EpisodeCreateRequest;
2431
+ path: {
2432
+ /**
2433
+ * ID of the media
2434
+ */
2435
+ mediaId: number;
2436
+ };
2437
+ query?: never;
2438
+ url: '/v1/media/{mediaId}/episodes';
2439
+ };
2440
+ export type EpisodeCreateErrors = {
2441
+ /**
2442
+ * Bad Request
2443
+ */
2444
+ 400: Error400;
2445
+ /**
2446
+ * Unauthorized
2447
+ */
2448
+ 401: Error401;
2449
+ /**
2450
+ * Forbidden
2451
+ */
2452
+ 403: Error403;
2453
+ /**
2454
+ * Not Found
2455
+ */
2456
+ 404: Error404;
2457
+ /**
2458
+ * Conflict
2459
+ */
2460
+ 409: Error409;
2461
+ /**
2462
+ * Too Many Requests
2463
+ */
2464
+ 429: Error429;
2465
+ /**
2466
+ * Internal Server Error
2467
+ */
2468
+ 500: Error500;
2469
+ };
2470
+ export type EpisodeCreateError = EpisodeCreateErrors[keyof EpisodeCreateErrors];
2471
+ export type EpisodeCreateResponses = {
2472
+ /**
2473
+ * Single episode response
2474
+ */
2475
+ 201: Episode;
2476
+ };
2477
+ export type EpisodeCreateResponse = EpisodeCreateResponses[keyof EpisodeCreateResponses];
2478
+ export type EpisodeDestroyData = {
2479
+ body?: never;
2480
+ path: {
2481
+ /**
2482
+ * ID of the media
2483
+ */
2484
+ mediaId: number;
2485
+ /**
2486
+ * Episode number
2487
+ */
2488
+ episodeNumber: number;
2489
+ };
2490
+ query?: never;
2491
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2492
+ };
2493
+ export type EpisodeDestroyErrors = {
2494
+ /**
2495
+ * Bad Request
2496
+ */
2497
+ 400: Error400;
2498
+ /**
2499
+ * Unauthorized
2500
+ */
2501
+ 401: Error401;
2502
+ /**
2503
+ * Forbidden
2504
+ */
2505
+ 403: Error403;
2506
+ /**
2507
+ * Not Found
2508
+ */
2509
+ 404: Error404;
2510
+ /**
2511
+ * Too Many Requests
2512
+ */
2513
+ 429: Error429;
2514
+ /**
2515
+ * Internal Server Error
2516
+ */
2517
+ 500: Error500;
2518
+ };
2519
+ export type EpisodeDestroyError = EpisodeDestroyErrors[keyof EpisodeDestroyErrors];
2520
+ export type EpisodeDestroyResponses = {
2521
+ /**
2522
+ * Episode successfully deleted
2523
+ */
2524
+ 204: void;
2525
+ };
2526
+ export type EpisodeDestroyResponse = EpisodeDestroyResponses[keyof EpisodeDestroyResponses];
2527
+ export type EpisodeShowData = {
2528
+ body?: never;
2529
+ path: {
2530
+ /**
2531
+ * ID of the media
2532
+ */
2533
+ mediaId: number;
2534
+ /**
2535
+ * Episode number
2536
+ */
2537
+ episodeNumber: number;
2538
+ };
2539
+ query?: never;
2540
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2541
+ };
2542
+ export type EpisodeShowErrors = {
2543
+ /**
2544
+ * Bad Request
2545
+ */
2546
+ 400: Error400;
2547
+ /**
2548
+ * Unauthorized
2549
+ */
2550
+ 401: Error401;
2551
+ /**
2552
+ * Forbidden
2553
+ */
2554
+ 403: Error403;
2555
+ /**
2556
+ * Not Found
2557
+ */
2558
+ 404: Error404;
2559
+ /**
2560
+ * Too Many Requests
2561
+ */
2562
+ 429: Error429;
2563
+ /**
2564
+ * Internal Server Error
2565
+ */
2566
+ 500: Error500;
2567
+ };
2568
+ export type EpisodeShowError = EpisodeShowErrors[keyof EpisodeShowErrors];
2569
+ export type EpisodeShowResponses = {
2570
+ /**
2571
+ * Single episode response
2572
+ */
2573
+ 200: Episode;
2574
+ };
2575
+ export type EpisodeShowResponse = EpisodeShowResponses[keyof EpisodeShowResponses];
2576
+ export type EpisodeUpdateData = {
2577
+ body: EpisodeUpdateRequest;
2578
+ path: {
2579
+ /**
2580
+ * ID of the media
2581
+ */
2582
+ mediaId: number;
2583
+ /**
2584
+ * Episode number
2585
+ */
2586
+ episodeNumber: number;
2587
+ };
2588
+ query?: never;
2589
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2590
+ };
2591
+ export type EpisodeUpdateErrors = {
2592
+ /**
2593
+ * Bad Request
2594
+ */
2595
+ 400: Error400;
2596
+ /**
2597
+ * Unauthorized
2598
+ */
2599
+ 401: Error401;
2600
+ /**
2601
+ * Forbidden
2602
+ */
2603
+ 403: Error403;
2604
+ /**
2605
+ * Not Found
2606
+ */
2607
+ 404: Error404;
2608
+ /**
2609
+ * Too Many Requests
2610
+ */
2611
+ 429: Error429;
2612
+ /**
2613
+ * Internal Server Error
2614
+ */
2615
+ 500: Error500;
2616
+ };
2617
+ export type EpisodeUpdateError = EpisodeUpdateErrors[keyof EpisodeUpdateErrors];
2618
+ export type EpisodeUpdateResponses = {
2619
+ /**
2620
+ * Single episode response
2621
+ */
2622
+ 200: Episode;
2623
+ };
2624
+ export type EpisodeUpdateResponse = EpisodeUpdateResponses[keyof EpisodeUpdateResponses];
2625
+ export type SegmentIndexData = {
2626
+ body?: never;
2627
+ path: {
2628
+ /**
2629
+ * ID of the media
2630
+ */
2631
+ mediaId: number;
2632
+ /**
2633
+ * Episode number
2634
+ */
2635
+ episodeNumber: number;
2636
+ };
2637
+ query?: {
2638
+ /**
2639
+ * Maximum number of segments to return
2640
+ */
2641
+ size?: number;
2642
+ /**
2643
+ * Segment ID to start from (for pagination)
2644
+ */
2645
+ cursor?: number;
2646
+ };
2647
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2648
+ };
2649
+ export type SegmentIndexErrors = {
2650
+ /**
2651
+ * Bad Request
2652
+ */
2653
+ 400: Error400;
2654
+ /**
2655
+ * Unauthorized
2656
+ */
2657
+ 401: Error401;
2658
+ /**
2659
+ * Forbidden
2660
+ */
2661
+ 403: Error403;
2662
+ /**
2663
+ * Not Found
2664
+ */
2665
+ 404: Error404;
2666
+ /**
2667
+ * Too Many Requests
2668
+ */
2669
+ 429: Error429;
2670
+ /**
2671
+ * Internal Server Error
2672
+ */
2673
+ 500: Error500;
2674
+ };
2675
+ export type SegmentIndexError = SegmentIndexErrors[keyof SegmentIndexErrors];
2676
+ export type SegmentIndexResponses = {
2677
+ /**
2678
+ * Paginated list of segments
2679
+ */
2680
+ 200: SegmentListResponse;
2681
+ };
2682
+ export type SegmentIndexResponse = SegmentIndexResponses[keyof SegmentIndexResponses];
2683
+ export type SegmentCreateData = {
2684
+ body: SegmentCreateRequest;
2685
+ path: {
2686
+ /**
2687
+ * ID of the media
2688
+ */
2689
+ mediaId: number;
2690
+ /**
2691
+ * Episode number
2692
+ */
2693
+ episodeNumber: number;
2694
+ };
2695
+ query?: never;
2696
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2697
+ };
2698
+ export type SegmentCreateErrors = {
2699
+ /**
2700
+ * Bad Request
2701
+ */
2702
+ 400: Error400;
2703
+ /**
2704
+ * Unauthorized
2705
+ */
2706
+ 401: Error401;
2707
+ /**
2708
+ * Forbidden
2709
+ */
2710
+ 403: Error403;
2711
+ /**
2712
+ * Not Found
2713
+ */
2714
+ 404: Error404;
2715
+ /**
2716
+ * Conflict
2717
+ */
2718
+ 409: Error409;
2719
+ /**
2720
+ * Too Many Requests
2721
+ */
2722
+ 429: Error429;
2723
+ /**
2724
+ * Internal Server Error
2725
+ */
2726
+ 500: Error500;
2727
+ };
2728
+ export type SegmentCreateError = SegmentCreateErrors[keyof SegmentCreateErrors];
2729
+ export type SegmentCreateResponses = {
2730
+ /**
2731
+ * Single segment response
2732
+ */
2733
+ 201: Segment;
2734
+ };
2735
+ export type SegmentCreateResponse = SegmentCreateResponses[keyof SegmentCreateResponses];
2736
+ export type SegmentDestroyData = {
2737
+ body?: never;
2738
+ path: {
2739
+ /**
2740
+ * ID of the media
2741
+ */
2742
+ mediaId: number;
2743
+ /**
2744
+ * Episode number
2745
+ */
2746
+ episodeNumber: number;
2747
+ /**
2748
+ * Segment ID
2749
+ */
2750
+ id: number;
2751
+ };
2752
+ query?: never;
2753
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2754
+ };
2755
+ export type SegmentDestroyErrors = {
2756
+ /**
2757
+ * Bad Request
2758
+ */
2759
+ 400: Error400;
2760
+ /**
2761
+ * Unauthorized
2762
+ */
2763
+ 401: Error401;
2764
+ /**
2765
+ * Forbidden
2766
+ */
2767
+ 403: Error403;
2768
+ /**
2769
+ * Not Found
2770
+ */
2771
+ 404: Error404;
2772
+ /**
2773
+ * Too Many Requests
2774
+ */
2775
+ 429: Error429;
2776
+ /**
2777
+ * Internal Server Error
2778
+ */
2779
+ 500: Error500;
2780
+ };
2781
+ export type SegmentDestroyError = SegmentDestroyErrors[keyof SegmentDestroyErrors];
2782
+ export type SegmentDestroyResponses = {
2783
+ /**
2784
+ * Segment successfully deleted
2785
+ */
2786
+ 204: void;
2787
+ };
2788
+ export type SegmentDestroyResponse = SegmentDestroyResponses[keyof SegmentDestroyResponses];
2789
+ export type SegmentShowData = {
2790
+ body?: never;
2791
+ path: {
2792
+ /**
2793
+ * ID of the media
2794
+ */
2795
+ mediaId: number;
2796
+ /**
2797
+ * Episode number
2798
+ */
2799
+ episodeNumber: number;
2800
+ /**
2801
+ * Segment ID
2802
+ */
2803
+ id: number;
2804
+ };
2805
+ query?: never;
2806
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2807
+ };
2808
+ export type SegmentShowErrors = {
2809
+ /**
2810
+ * Bad Request
2811
+ */
2812
+ 400: Error400;
2813
+ /**
2814
+ * Unauthorized
2815
+ */
2816
+ 401: Error401;
2817
+ /**
2818
+ * Forbidden
2819
+ */
2820
+ 403: Error403;
2821
+ /**
2822
+ * Not Found
2823
+ */
2824
+ 404: Error404;
2825
+ /**
2826
+ * Too Many Requests
2827
+ */
2828
+ 429: Error429;
2829
+ /**
2830
+ * Internal Server Error
2831
+ */
2832
+ 500: Error500;
2833
+ };
2834
+ export type SegmentShowError = SegmentShowErrors[keyof SegmentShowErrors];
2835
+ export type SegmentShowResponses = {
2836
+ /**
2837
+ * Single segment response
2838
+ */
2839
+ 200: Segment;
2840
+ };
2841
+ export type SegmentShowResponse = SegmentShowResponses[keyof SegmentShowResponses];
2842
+ export type SegmentUpdateData = {
2843
+ body: SegmentUpdateRequest;
2844
+ path: {
2845
+ /**
2846
+ * ID of the media
2847
+ */
2848
+ mediaId: number;
2849
+ /**
2850
+ * Episode number
2851
+ */
2852
+ episodeNumber: number;
2853
+ /**
2854
+ * Segment ID
2855
+ */
2856
+ id: number;
2857
+ };
2858
+ query?: never;
2859
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2860
+ };
2861
+ export type SegmentUpdateErrors = {
2862
+ /**
2863
+ * Bad Request
2864
+ */
2865
+ 400: Error400;
2866
+ /**
2867
+ * Unauthorized
2868
+ */
2869
+ 401: Error401;
2870
+ /**
2871
+ * Forbidden
2872
+ */
2873
+ 403: Error403;
2874
+ /**
2875
+ * Not Found
2876
+ */
2877
+ 404: Error404;
2878
+ /**
2879
+ * Too Many Requests
2880
+ */
2881
+ 429: Error429;
2882
+ /**
2883
+ * Internal Server Error
2884
+ */
2885
+ 500: Error500;
2886
+ };
2887
+ export type SegmentUpdateError = SegmentUpdateErrors[keyof SegmentUpdateErrors];
2888
+ export type SegmentUpdateResponses = {
2889
+ /**
2890
+ * Single segment response
2891
+ */
2892
+ 200: Segment;
2893
+ };
2894
+ export type SegmentUpdateResponse = SegmentUpdateResponses[keyof SegmentUpdateResponses];
2895
+ export type SegmentShowByUuidData = {
2896
+ body?: never;
2897
+ path: {
2898
+ /**
2899
+ * Segment UUID
2900
+ */
2901
+ uuid: string;
2902
+ };
2903
+ query?: never;
2904
+ url: '/v1/media/segments/{uuid}';
2905
+ };
2906
+ export type SegmentShowByUuidErrors = {
2907
+ /**
2908
+ * Bad Request
2909
+ */
2910
+ 400: Error400;
2911
+ /**
2912
+ * Unauthorized
2913
+ */
2914
+ 401: Error401;
2915
+ /**
2916
+ * Forbidden
2917
+ */
2918
+ 403: Error403;
2919
+ /**
2920
+ * Not Found
2921
+ */
2922
+ 404: Error404;
2923
+ /**
2924
+ * Too Many Requests
2925
+ */
2926
+ 429: Error429;
2927
+ /**
2928
+ * Internal Server Error
2929
+ */
2930
+ 500: Error500;
2931
+ };
2932
+ export type SegmentShowByUuidError = SegmentShowByUuidErrors[keyof SegmentShowByUuidErrors];
2933
+ export type SegmentShowByUuidResponses = {
2934
+ 200: Segment;
2935
+ };
2936
+ export type SegmentShowByUuidResponse = SegmentShowByUuidResponses[keyof SegmentShowByUuidResponses];
2937
+ export type SegmentContextShowData = {
2938
+ body?: never;
2939
+ path: {
2940
+ /**
2941
+ * Segment UUID
2942
+ */
2943
+ uuid: string;
2944
+ };
2945
+ query?: {
2946
+ /**
2947
+ * Number of segments to return before and after the target
2948
+ */
2949
+ limit?: number;
2950
+ };
2951
+ url: '/v1/media/segments/{uuid}/context';
2952
+ };
2953
+ export type SegmentContextShowErrors = {
2954
+ /**
2955
+ * Bad Request
2956
+ */
2957
+ 400: Error400;
2958
+ /**
2959
+ * Unauthorized
2960
+ */
2961
+ 401: Error401;
2962
+ /**
2963
+ * Forbidden
2964
+ */
2965
+ 403: Error403;
2966
+ /**
2967
+ * Not Found
2968
+ */
2969
+ 404: Error404;
2970
+ /**
2971
+ * Too Many Requests
2972
+ */
2973
+ 429: Error429;
2974
+ /**
2975
+ * Internal Server Error
2976
+ */
2977
+ 500: Error500;
2978
+ };
2979
+ export type SegmentContextShowError = SegmentContextShowErrors[keyof SegmentContextShowErrors];
2980
+ export type SegmentContextShowResponses = {
2981
+ /**
2982
+ * OK
2983
+ */
2984
+ 200: SegmentContextResponse;
2985
+ };
2986
+ export type SegmentContextShowResponse = SegmentContextShowResponses[keyof SegmentContextShowResponses];
2987
+ export type CharacterShowData = {
2988
+ body?: never;
2989
+ path: {
2990
+ /**
2991
+ * AniList character ID
2992
+ */
2993
+ id: number;
2994
+ };
2995
+ query?: never;
2996
+ url: '/v1/media/characters/{id}';
2997
+ };
2998
+ export type CharacterShowErrors = {
2999
+ /**
3000
+ * Bad Request
3001
+ */
3002
+ 400: Error400;
3003
+ /**
3004
+ * Unauthorized
3005
+ */
3006
+ 401: Error401;
3007
+ /**
3008
+ * Forbidden
3009
+ */
3010
+ 403: Error403;
3011
+ /**
3012
+ * Not Found
3013
+ */
3014
+ 404: Error404;
3015
+ /**
3016
+ * Too Many Requests
3017
+ */
3018
+ 429: Error429;
3019
+ /**
3020
+ * Internal Server Error
3021
+ */
3022
+ 500: Error500;
3023
+ };
3024
+ export type CharacterShowError = CharacterShowErrors[keyof CharacterShowErrors];
3025
+ export type CharacterShowResponses = {
3026
+ /**
3027
+ * OK
3028
+ */
3029
+ 200: CharacterWithMedia;
3030
+ };
3031
+ export type CharacterShowResponse = CharacterShowResponses[keyof CharacterShowResponses];
3032
+ export type SeiyuuShowData = {
3033
+ body?: never;
3034
+ path: {
3035
+ /**
3036
+ * AniList staff ID
3037
+ */
3038
+ id: number;
3039
+ };
3040
+ query?: never;
3041
+ url: '/v1/media/seiyuu/{id}';
3042
+ };
3043
+ export type SeiyuuShowErrors = {
3044
+ /**
3045
+ * Bad Request
3046
+ */
3047
+ 400: Error400;
3048
+ /**
3049
+ * Unauthorized
3050
+ */
3051
+ 401: Error401;
3052
+ /**
3053
+ * Forbidden
3054
+ */
3055
+ 403: Error403;
3056
+ /**
3057
+ * Not Found
3058
+ */
3059
+ 404: Error404;
3060
+ /**
3061
+ * Too Many Requests
3062
+ */
3063
+ 429: Error429;
3064
+ /**
3065
+ * Internal Server Error
3066
+ */
3067
+ 500: Error500;
3068
+ };
3069
+ export type SeiyuuShowError = SeiyuuShowErrors[keyof SeiyuuShowErrors];
3070
+ export type SeiyuuShowResponses = {
3071
+ /**
3072
+ * OK
3073
+ */
3074
+ 200: SeiyuuWithRoles;
3075
+ };
3076
+ export type SeiyuuShowResponse = SeiyuuShowResponses[keyof SeiyuuShowResponses];
3077
+ export type UserQuotaShowData = {
3078
+ body?: never;
3079
+ path?: never;
3080
+ query?: never;
3081
+ url: '/v1/user/quota';
3082
+ };
3083
+ export type UserQuotaShowErrors = {
3084
+ /**
3085
+ * Unauthorized
3086
+ */
3087
+ 401: Error401;
3088
+ /**
3089
+ * Internal Server Error
3090
+ */
3091
+ 500: Error500;
3092
+ };
3093
+ export type UserQuotaShowError = UserQuotaShowErrors[keyof UserQuotaShowErrors];
3094
+ export type UserQuotaShowResponses = {
3095
+ /**
3096
+ * OK
3097
+ */
3098
+ 200: UserQuotaResponse;
3099
+ };
3100
+ export type UserQuotaShowResponse = UserQuotaShowResponses[keyof UserQuotaShowResponses];
3101
+ export type UserReportIndexData = {
3102
+ body?: never;
3103
+ path?: never;
3104
+ query?: {
3105
+ /**
3106
+ * Cursor for pagination (report ID to start after)
3107
+ */
3108
+ cursor?: number;
3109
+ /**
3110
+ * Number of results per page
3111
+ */
3112
+ size?: number;
3113
+ /**
3114
+ * Filter by report status
3115
+ */
3116
+ status?: 'PENDING' | 'CONCERN' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED' | 'IGNORED';
3117
+ };
3118
+ url: '/v1/user/reports';
3119
+ };
3120
+ export type UserReportIndexErrors = {
3121
+ /**
3122
+ * Unauthorized
3123
+ */
3124
+ 401: Error401;
3125
+ /**
3126
+ * Internal Server Error
3127
+ */
3128
+ 500: Error500;
3129
+ };
3130
+ export type UserReportIndexError = UserReportIndexErrors[keyof UserReportIndexErrors];
3131
+ export type UserReportIndexResponses = {
3132
+ /**
3133
+ * OK
3134
+ */
3135
+ 200: ReportListResponse;
3136
+ };
3137
+ export type UserReportIndexResponse = UserReportIndexResponses[keyof UserReportIndexResponses];
3138
+ export type UserReportCreateData = {
3139
+ body: CreateReportRequest;
3140
+ path?: never;
3141
+ query?: never;
3142
+ url: '/v1/user/reports';
3143
+ };
3144
+ export type UserReportCreateErrors = {
3145
+ /**
3146
+ * Bad Request
3147
+ */
3148
+ 400: Error400;
3149
+ /**
3150
+ * Unauthorized
3151
+ */
3152
+ 401: Error401;
3153
+ /**
3154
+ * Not Found
3155
+ */
3156
+ 404: Error404;
3157
+ /**
3158
+ * Internal Server Error
3159
+ */
3160
+ 500: Error500;
3161
+ };
3162
+ export type UserReportCreateError = UserReportCreateErrors[keyof UserReportCreateErrors];
3163
+ export type UserReportCreateResponses = {
3164
+ /**
3165
+ * Report created successfully
3166
+ */
3167
+ 201: Report;
3168
+ };
3169
+ export type UserReportCreateResponse = UserReportCreateResponses[keyof UserReportCreateResponses];
3170
+ export type UserPreferencesShowData = {
3171
+ body?: never;
3172
+ path?: never;
3173
+ query?: never;
3174
+ url: '/v1/user/preferences';
3175
+ };
3176
+ export type UserPreferencesShowErrors = {
3177
+ /**
3178
+ * Unauthorized
3179
+ */
3180
+ 401: Error401;
3181
+ /**
3182
+ * Internal Server Error
3183
+ */
3184
+ 500: Error500;
3185
+ };
3186
+ export type UserPreferencesShowError = UserPreferencesShowErrors[keyof UserPreferencesShowErrors];
3187
+ export type UserPreferencesShowResponses = {
3188
+ /**
3189
+ * OK
3190
+ */
3191
+ 200: UserPreferences;
3192
+ };
3193
+ export type UserPreferencesShowResponse = UserPreferencesShowResponses[keyof UserPreferencesShowResponses];
3194
+ export type UserPreferencesUpdateData = {
3195
+ body: UserPreferences;
3196
+ path?: never;
3197
+ query?: never;
3198
+ url: '/v1/user/preferences';
3199
+ };
3200
+ export type UserPreferencesUpdateErrors = {
3201
+ /**
3202
+ * Unauthorized
3203
+ */
3204
+ 401: Error401;
3205
+ /**
3206
+ * Internal Server Error
3207
+ */
3208
+ 500: Error500;
3209
+ };
3210
+ export type UserPreferencesUpdateError = UserPreferencesUpdateErrors[keyof UserPreferencesUpdateErrors];
3211
+ export type UserPreferencesUpdateResponses = {
3212
+ /**
3213
+ * OK
3214
+ */
3215
+ 200: UserPreferences;
3216
+ };
3217
+ export type UserPreferencesUpdateResponse = UserPreferencesUpdateResponses[keyof UserPreferencesUpdateResponses];
3218
+ export type UserActivityDestroyData = {
3219
+ body?: never;
3220
+ path?: never;
3221
+ query?: {
3222
+ /**
3223
+ * Only clear activities of this type
3224
+ */
3225
+ activityType?: ActivityType;
3226
+ };
3227
+ url: '/v1/user/activity';
3228
+ };
3229
+ export type UserActivityDestroyErrors = {
3230
+ /**
3231
+ * Unauthorized
3232
+ */
3233
+ 401: Error401;
3234
+ /**
3235
+ * Internal Server Error
3236
+ */
3237
+ 500: Error500;
3238
+ };
3239
+ export type UserActivityDestroyError = UserActivityDestroyErrors[keyof UserActivityDestroyErrors];
3240
+ export type UserActivityDestroyResponses = {
3241
+ /**
3242
+ * OK
3243
+ */
3244
+ 200: {
3245
+ message: string;
3246
+ deletedCount: number;
3247
+ };
3248
+ };
3249
+ export type UserActivityDestroyResponse = UserActivityDestroyResponses[keyof UserActivityDestroyResponses];
3250
+ export type UserActivityIndexData = {
3251
+ body?: never;
3252
+ path?: never;
3253
+ query?: {
3254
+ /**
3255
+ * Cursor for pagination (activity ID to start after)
3256
+ */
3257
+ cursor?: number;
3258
+ /**
3259
+ * Number of results per page
3260
+ */
3261
+ size?: number;
3262
+ /**
3263
+ * Filter by activity type
3264
+ */
3265
+ activityType?: ActivityType;
3266
+ };
3267
+ url: '/v1/user/activity';
3268
+ };
3269
+ export type UserActivityIndexErrors = {
3270
+ /**
3271
+ * Unauthorized
3272
+ */
3273
+ 401: Error401;
3274
+ /**
3275
+ * Internal Server Error
3276
+ */
3277
+ 500: Error500;
3278
+ };
3279
+ export type UserActivityIndexError = UserActivityIndexErrors[keyof UserActivityIndexErrors];
3280
+ export type UserActivityIndexResponses = {
3281
+ /**
3282
+ * OK
3283
+ */
3284
+ 200: {
3285
+ data: Array<UserActivity>;
3286
+ hasMore: boolean;
3287
+ cursor?: number;
3288
+ };
3289
+ };
3290
+ export type UserActivityIndexResponse = UserActivityIndexResponses[keyof UserActivityIndexResponses];
3291
+ export type UserActivityStatsShowData = {
3292
+ body?: never;
3293
+ path?: never;
3294
+ query?: never;
3295
+ url: '/v1/user/activity/stats';
3296
+ };
3297
+ export type UserActivityStatsShowErrors = {
3298
+ /**
3299
+ * Unauthorized
3300
+ */
3301
+ 401: Error401;
3302
+ /**
3303
+ * Internal Server Error
3304
+ */
3305
+ 500: Error500;
3306
+ };
3307
+ export type UserActivityStatsShowError = UserActivityStatsShowErrors[keyof UserActivityStatsShowErrors];
3308
+ export type UserActivityStatsShowResponses = {
3309
+ /**
3310
+ * OK
3311
+ */
3312
+ 200: {
3313
+ totalSearches: number;
3314
+ totalExports: number;
3315
+ totalPlays: number;
3316
+ totalListAdds: number;
3317
+ /**
3318
+ * Consecutive days with at least one activity
3319
+ */
3320
+ streakDays: number;
3321
+ topMedia: Array<{
3322
+ mediaId: number;
3323
+ count: number;
3324
+ }>;
3325
+ };
3326
+ };
3327
+ export type UserActivityStatsShowResponse = UserActivityStatsShowResponses[keyof UserActivityStatsShowResponses];
3328
+ export type UserExportShowData = {
3329
+ body?: never;
3330
+ path?: never;
3331
+ query?: never;
3332
+ url: '/v1/user/export';
3333
+ };
3334
+ export type UserExportShowErrors = {
3335
+ /**
3336
+ * Unauthorized
3337
+ */
3338
+ 401: Error401;
3339
+ /**
3340
+ * Internal Server Error
3341
+ */
3342
+ 500: Error500;
3343
+ };
3344
+ export type UserExportShowError = UserExportShowErrors[keyof UserExportShowErrors];
3345
+ export type UserExportShowResponses = {
3346
+ /**
3347
+ * OK
3348
+ */
3349
+ 200: {
3350
+ profile: {
3351
+ id?: number;
3352
+ username?: string;
3353
+ email?: string;
3354
+ createdAt?: string;
3355
+ };
3356
+ preferences: UserPreferences;
3357
+ activity: Array<UserActivity>;
3358
+ lists: Array<{
3359
+ [key: string]: unknown;
3360
+ }>;
3361
+ reports: Array<{
3362
+ [key: string]: unknown;
3363
+ }>;
3364
+ };
3365
+ };
3366
+ export type UserExportShowResponse = UserExportShowResponses[keyof UserExportShowResponses];
3367
+ export type LabIndexData = {
3368
+ body?: never;
3369
+ path?: never;
3370
+ query?: never;
3371
+ url: '/v1/labs';
3372
+ };
3373
+ export type LabIndexErrors = {
3374
+ /**
3375
+ * Internal Server Error
3376
+ */
3377
+ 500: Error500;
3378
+ };
3379
+ export type LabIndexError = LabIndexErrors[keyof LabIndexErrors];
3380
+ export type LabIndexResponses = {
3381
+ /**
3382
+ * OK
3383
+ */
3384
+ 200: Array<LabFeature>;
3385
+ };
3386
+ export type LabIndexResponse = LabIndexResponses[keyof LabIndexResponses];
3387
+ export type ListIndexData = {
3388
+ body?: never;
3389
+ path?: never;
3390
+ query?: {
3391
+ /**
3392
+ * Filter by visibility
3393
+ */
3394
+ visibility?: 'public' | 'private';
3395
+ /**
3396
+ * Filter by list type
3397
+ */
3398
+ type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
3399
+ /**
3400
+ * Filter by list owner user ID
3401
+ */
3402
+ userId?: number;
3403
+ /**
3404
+ * Filter lists containing this media ID
3405
+ */
3406
+ mediaId?: number;
3407
+ };
3408
+ url: '/v1/lists';
3409
+ };
3410
+ export type ListIndexErrors = {
3411
+ /**
3412
+ * Bad Request
3413
+ */
3414
+ 400: Error400;
3415
+ /**
3416
+ * Unauthorized
3417
+ */
3418
+ 401: Error401;
3419
+ /**
3420
+ * Forbidden
3421
+ */
3422
+ 403: Error403;
3423
+ /**
3424
+ * Too Many Requests
3425
+ */
3426
+ 429: Error429;
3427
+ /**
3428
+ * Internal Server Error
3429
+ */
3430
+ 500: Error500;
3431
+ };
3432
+ export type ListIndexError = ListIndexErrors[keyof ListIndexErrors];
3433
+ export type ListIndexResponses = {
3434
+ /**
3435
+ * OK
3436
+ */
3437
+ 200: Array<List>;
3438
+ };
3439
+ export type ListIndexResponse = ListIndexResponses[keyof ListIndexResponses];
3440
+ export type ListCreateData = {
3441
+ body: ListCreateRequest;
3442
+ path?: never;
3443
+ query?: never;
3444
+ url: '/v1/lists';
3445
+ };
3446
+ export type ListCreateErrors = {
3447
+ /**
3448
+ * Bad Request
3449
+ */
3450
+ 400: Error400;
3451
+ /**
3452
+ * Unauthorized
3453
+ */
3454
+ 401: Error401;
3455
+ /**
3456
+ * Forbidden
3457
+ */
3458
+ 403: Error403;
3459
+ /**
3460
+ * Too Many Requests
3461
+ */
3462
+ 429: Error429;
3463
+ /**
3464
+ * Internal Server Error
3465
+ */
3466
+ 500: Error500;
3467
+ };
3468
+ export type ListCreateError = ListCreateErrors[keyof ListCreateErrors];
3469
+ export type ListCreateResponses = {
3470
+ /**
3471
+ * Created
3472
+ */
3473
+ 201: List;
3474
+ };
3475
+ export type ListCreateResponse = ListCreateResponses[keyof ListCreateResponses];
3476
+ export type ListDestroyData = {
3477
+ body?: never;
3478
+ path: {
3479
+ /**
3480
+ * List ID
3481
+ */
3482
+ id: number;
3483
+ };
3484
+ query?: never;
3485
+ url: '/v1/lists/{id}';
3486
+ };
3487
+ export type ListDestroyErrors = {
3488
+ /**
3489
+ * Bad Request
3490
+ */
3491
+ 400: Error400;
3492
+ /**
3493
+ * Unauthorized
3494
+ */
3495
+ 401: Error401;
3496
+ /**
3497
+ * Forbidden
3498
+ */
3499
+ 403: Error403;
3500
+ /**
3501
+ * Not Found
3502
+ */
3503
+ 404: Error404;
3504
+ /**
3505
+ * Too Many Requests
3506
+ */
3507
+ 429: Error429;
3508
+ /**
3509
+ * Internal Server Error
3510
+ */
3511
+ 500: Error500;
3512
+ };
3513
+ export type ListDestroyError = ListDestroyErrors[keyof ListDestroyErrors];
3514
+ export type ListDestroyResponses = {
3515
+ /**
3516
+ * OK
3517
+ */
3518
+ 200: {
3519
+ message?: string;
3520
+ id?: number;
3521
+ };
3522
+ };
3523
+ export type ListDestroyResponse = ListDestroyResponses[keyof ListDestroyResponses];
3524
+ export type ListShowData = {
3525
+ body?: never;
3526
+ path: {
3527
+ /**
3528
+ * List ID
3529
+ */
3530
+ id: number;
3531
+ };
3532
+ query?: never;
3533
+ url: '/v1/lists/{id}';
3534
+ };
3535
+ export type ListShowErrors = {
3536
+ /**
3537
+ * Bad Request
3538
+ */
3539
+ 400: Error400;
3540
+ /**
3541
+ * Unauthorized
3542
+ */
3543
+ 401: Error401;
3544
+ /**
3545
+ * Forbidden
3546
+ */
3547
+ 403: Error403;
3548
+ /**
3549
+ * Not Found
3550
+ */
3551
+ 404: Error404;
3552
+ /**
3553
+ * Too Many Requests
3554
+ */
3555
+ 429: Error429;
3556
+ /**
3557
+ * Internal Server Error
3558
+ */
3559
+ 500: Error500;
3560
+ };
3561
+ export type ListShowError = ListShowErrors[keyof ListShowErrors];
3562
+ export type ListShowResponses = {
3563
+ /**
3564
+ * OK
3565
+ */
3566
+ 200: ListWithMedia;
3567
+ };
3568
+ export type ListShowResponse = ListShowResponses[keyof ListShowResponses];
3569
+ export type ListUpdateData = {
3570
+ body: {
3571
+ name?: string;
3572
+ visibility?: 'PUBLIC' | 'PRIVATE';
3573
+ };
3574
+ path: {
3575
+ /**
3576
+ * List ID
3577
+ */
3578
+ id: number;
3579
+ };
3580
+ query?: never;
3581
+ url: '/v1/lists/{id}';
3582
+ };
3583
+ export type ListUpdateErrors = {
3584
+ /**
3585
+ * Bad Request
3586
+ */
3587
+ 400: Error400;
3588
+ /**
3589
+ * Unauthorized
3590
+ */
3591
+ 401: Error401;
3592
+ /**
3593
+ * Forbidden
3594
+ */
3595
+ 403: Error403;
3596
+ /**
3597
+ * Not Found
3598
+ */
3599
+ 404: Error404;
3600
+ /**
3601
+ * Too Many Requests
3602
+ */
3603
+ 429: Error429;
3604
+ /**
3605
+ * Internal Server Error
3606
+ */
3607
+ 500: Error500;
3608
+ };
3609
+ export type ListUpdateError = ListUpdateErrors[keyof ListUpdateErrors];
3610
+ export type ListUpdateResponses = {
3611
+ /**
3612
+ * OK
3613
+ */
3614
+ 200: List;
3615
+ };
3616
+ export type ListUpdateResponse = ListUpdateResponses[keyof ListUpdateResponses];
3617
+ export type ListAddItemData = {
3618
+ body: {
3619
+ mediaId: number;
3620
+ /**
3621
+ * Position in the list (1-indexed)
3622
+ */
3623
+ position: number;
3624
+ };
3625
+ path: {
3626
+ /**
3627
+ * List ID
3628
+ */
3629
+ id: number;
3630
+ };
3631
+ query?: never;
3632
+ url: '/v1/lists/{id}/items';
3633
+ };
3634
+ export type ListAddItemErrors = {
3635
+ /**
3636
+ * Bad Request
3637
+ */
3638
+ 400: Error400;
3639
+ /**
3640
+ * Unauthorized
3641
+ */
3642
+ 401: Error401;
3643
+ /**
3644
+ * Forbidden
3645
+ */
3646
+ 403: Error403;
3647
+ /**
3648
+ * Not Found
3649
+ */
3650
+ 404: Error404;
3651
+ /**
3652
+ * Conflict
3653
+ */
3654
+ 409: Error409;
3655
+ /**
3656
+ * Too Many Requests
3657
+ */
3658
+ 429: Error429;
3659
+ /**
3660
+ * Internal Server Error
3661
+ */
3662
+ 500: Error500;
3663
+ };
3664
+ export type ListAddItemError = ListAddItemErrors[keyof ListAddItemErrors];
3665
+ export type ListAddItemResponses = {
3666
+ /**
3667
+ * Created
3668
+ */
3669
+ 201: {
3670
+ message?: string;
3671
+ };
3672
+ };
3673
+ export type ListAddItemResponse = ListAddItemResponses[keyof ListAddItemResponses];
3674
+ export type ListRemoveItemData = {
3675
+ body?: never;
3676
+ path: {
3677
+ /**
3678
+ * List ID
3679
+ */
3680
+ id: number;
3681
+ /**
3682
+ * Media ID
3683
+ */
3684
+ mediaId: number;
3685
+ };
3686
+ query?: never;
3687
+ url: '/v1/lists/{id}/items/{mediaId}';
3688
+ };
3689
+ export type ListRemoveItemErrors = {
3690
+ /**
3691
+ * Bad Request
3692
+ */
3693
+ 400: Error400;
3694
+ /**
3695
+ * Unauthorized
3696
+ */
3697
+ 401: Error401;
3698
+ /**
3699
+ * Forbidden
3700
+ */
3701
+ 403: Error403;
3702
+ /**
3703
+ * Not Found
3704
+ */
3705
+ 404: Error404;
3706
+ /**
3707
+ * Too Many Requests
3708
+ */
3709
+ 429: Error429;
3710
+ /**
3711
+ * Internal Server Error
3712
+ */
3713
+ 500: Error500;
3714
+ };
3715
+ export type ListRemoveItemError = ListRemoveItemErrors[keyof ListRemoveItemErrors];
3716
+ export type ListRemoveItemResponses = {
3717
+ /**
3718
+ * OK
3719
+ */
3720
+ 200: {
3721
+ message?: string;
3722
+ };
3723
+ };
3724
+ export type ListRemoveItemResponse = ListRemoveItemResponses[keyof ListRemoveItemResponses];
3725
+ export type ListUpdateItemData = {
3726
+ body: {
3727
+ /**
3728
+ * New position in the list (1-indexed)
3729
+ */
3730
+ position: number;
3731
+ };
3732
+ path: {
3733
+ /**
3734
+ * List ID
3735
+ */
3736
+ id: number;
3737
+ /**
3738
+ * Media ID
3739
+ */
3740
+ mediaId: number;
3741
+ };
3742
+ query?: never;
3743
+ url: '/v1/lists/{id}/items/{mediaId}';
3744
+ };
3745
+ export type ListUpdateItemErrors = {
3746
+ /**
3747
+ * Bad Request
3748
+ */
3749
+ 400: Error400;
3750
+ /**
3751
+ * Unauthorized
3752
+ */
3753
+ 401: Error401;
3754
+ /**
3755
+ * Forbidden
3756
+ */
3757
+ 403: Error403;
3758
+ /**
3759
+ * Not Found
3760
+ */
3761
+ 404: Error404;
3762
+ /**
3763
+ * Too Many Requests
3764
+ */
3765
+ 429: Error429;
3766
+ /**
3767
+ * Internal Server Error
3768
+ */
3769
+ 500: Error500;
3770
+ };
3771
+ export type ListUpdateItemError = ListUpdateItemErrors[keyof ListUpdateItemErrors];
3772
+ export type ListUpdateItemResponses = {
3773
+ /**
3774
+ * OK
3775
+ */
3776
+ 200: {
3777
+ message?: string;
3778
+ };
3779
+ };
3780
+ export type ListUpdateItemResponse = ListUpdateItemResponses[keyof ListUpdateItemResponses];
3781
+ export type ListGetSegmentsData = {
3782
+ body?: never;
3783
+ path: {
3784
+ /**
3785
+ * List ID
3786
+ */
3787
+ id: number;
3788
+ };
3789
+ query?: {
3790
+ /**
3791
+ * Page number (1-indexed)
3792
+ */
3793
+ page?: number;
3794
+ /**
3795
+ * Items per page
3796
+ */
3797
+ limit?: number;
3798
+ };
3799
+ url: '/v1/lists/{id}/segments';
3800
+ };
3801
+ export type ListGetSegmentsErrors = {
3802
+ /**
3803
+ * Bad Request
3804
+ */
3805
+ 400: Error400;
3806
+ /**
3807
+ * Unauthorized
3808
+ */
3809
+ 401: Error401;
3810
+ /**
3811
+ * Forbidden
3812
+ */
3813
+ 403: Error403;
3814
+ /**
3815
+ * Not Found
3816
+ */
3817
+ 404: Error404;
3818
+ /**
3819
+ * Too Many Requests
3820
+ */
3821
+ 429: Error429;
3822
+ /**
3823
+ * Internal Server Error
3824
+ */
3825
+ 500: Error500;
3826
+ };
3827
+ export type ListGetSegmentsError = ListGetSegmentsErrors[keyof ListGetSegmentsErrors];
3828
+ export type ListGetSegmentsResponses = {
3829
+ /**
3830
+ * OK
3831
+ */
3832
+ 200: ListWithSegments;
3833
+ };
3834
+ export type ListGetSegmentsResponse = ListGetSegmentsResponses[keyof ListGetSegmentsResponses];
3835
+ export type ListAddSegmentData = {
3836
+ body: {
3837
+ /**
3838
+ * UUID of the segment to add
3839
+ */
3840
+ segmentUuid: string;
3841
+ /**
3842
+ * Optional annotation
3843
+ */
3844
+ note?: string;
3845
+ };
3846
+ path: {
3847
+ /**
3848
+ * List ID
3849
+ */
3850
+ id: number;
3851
+ };
3852
+ query?: never;
3853
+ url: '/v1/lists/{id}/segments';
3854
+ };
3855
+ export type ListAddSegmentErrors = {
3856
+ /**
3857
+ * Bad Request
3858
+ */
3859
+ 400: Error400;
3860
+ /**
3861
+ * Unauthorized
3862
+ */
3863
+ 401: Error401;
3864
+ /**
3865
+ * Forbidden
3866
+ */
3867
+ 403: Error403;
3868
+ /**
3869
+ * Not Found
3870
+ */
3871
+ 404: Error404;
3872
+ /**
3873
+ * Conflict
3874
+ */
3875
+ 409: Error409;
3876
+ /**
3877
+ * Too Many Requests
3878
+ */
3879
+ 429: Error429;
3880
+ /**
3881
+ * Internal Server Error
3882
+ */
3883
+ 500: Error500;
3884
+ };
3885
+ export type ListAddSegmentError = ListAddSegmentErrors[keyof ListAddSegmentErrors];
3886
+ export type ListAddSegmentResponses = {
3887
+ /**
3888
+ * Created
3889
+ */
3890
+ 201: {
3891
+ message?: string;
3892
+ };
3893
+ };
3894
+ export type ListAddSegmentResponse = ListAddSegmentResponses[keyof ListAddSegmentResponses];
3895
+ export type ListRemoveSegmentData = {
3896
+ body?: never;
3897
+ path: {
3898
+ /**
3899
+ * List ID
3900
+ */
3901
+ id: number;
3902
+ /**
3903
+ * Segment UUID
3904
+ */
3905
+ uuid: string;
3906
+ };
3907
+ query?: never;
3908
+ url: '/v1/lists/{id}/segments/{uuid}';
3909
+ };
3910
+ export type ListRemoveSegmentErrors = {
3911
+ /**
3912
+ * Bad Request
3913
+ */
3914
+ 400: Error400;
3915
+ /**
3916
+ * Unauthorized
3917
+ */
3918
+ 401: Error401;
3919
+ /**
3920
+ * Forbidden
3921
+ */
3922
+ 403: Error403;
3923
+ /**
3924
+ * Not Found
3925
+ */
3926
+ 404: Error404;
3927
+ /**
3928
+ * Too Many Requests
3929
+ */
3930
+ 429: Error429;
3931
+ /**
3932
+ * Internal Server Error
3933
+ */
3934
+ 500: Error500;
3935
+ };
3936
+ export type ListRemoveSegmentError = ListRemoveSegmentErrors[keyof ListRemoveSegmentErrors];
3937
+ export type ListRemoveSegmentResponses = {
3938
+ /**
3939
+ * OK
3940
+ */
3941
+ 200: {
3942
+ message?: string;
3943
+ };
3944
+ };
3945
+ export type ListRemoveSegmentResponse = ListRemoveSegmentResponses[keyof ListRemoveSegmentResponses];
3946
+ export type ListUpdateSegmentData = {
3947
+ body: {
3948
+ /**
3949
+ * New position in the list
3950
+ */
3951
+ position?: number;
3952
+ /**
3953
+ * Updated annotation
3954
+ */
3955
+ note?: string;
3956
+ };
3957
+ path: {
3958
+ /**
3959
+ * List ID
3960
+ */
3961
+ id: number;
3962
+ /**
3963
+ * Segment UUID
3964
+ */
3965
+ uuid: string;
3966
+ };
3967
+ query?: never;
3968
+ url: '/v1/lists/{id}/segments/{uuid}';
3969
+ };
3970
+ export type ListUpdateSegmentErrors = {
3971
+ /**
3972
+ * Bad Request
3973
+ */
3974
+ 400: Error400;
3975
+ /**
3976
+ * Unauthorized
3977
+ */
3978
+ 401: Error401;
3979
+ /**
3980
+ * Forbidden
3981
+ */
3982
+ 403: Error403;
3983
+ /**
3984
+ * Not Found
3985
+ */
3986
+ 404: Error404;
3987
+ /**
3988
+ * Too Many Requests
3989
+ */
3990
+ 429: Error429;
3991
+ /**
3992
+ * Internal Server Error
3993
+ */
3994
+ 500: Error500;
3995
+ };
3996
+ export type ListUpdateSegmentError = ListUpdateSegmentErrors[keyof ListUpdateSegmentErrors];
3997
+ export type ListUpdateSegmentResponses = {
3998
+ /**
3999
+ * OK
4000
+ */
4001
+ 200: {
4002
+ message?: string;
4003
+ };
4004
+ };
4005
+ export type ListUpdateSegmentResponse = ListUpdateSegmentResponses[keyof ListUpdateSegmentResponses];
4006
+ export type AdminReindexCreateData = {
4007
+ body?: ReindexRequest;
4008
+ path?: never;
4009
+ query?: never;
4010
+ url: '/v1/admin/reindex';
4011
+ };
4012
+ export type AdminReindexCreateErrors = {
4013
+ /**
4014
+ * Bad Request
4015
+ */
4016
+ 400: Error400;
4017
+ /**
4018
+ * Unauthorized
4019
+ */
4020
+ 401: Error401;
4021
+ /**
4022
+ * Forbidden
4023
+ */
4024
+ 403: Error403;
4025
+ /**
4026
+ * Too Many Requests
4027
+ */
4028
+ 429: Error429;
4029
+ /**
4030
+ * Internal Server Error
4031
+ */
4032
+ 500: Error500;
4033
+ };
4034
+ export type AdminReindexCreateError = AdminReindexCreateErrors[keyof AdminReindexCreateErrors];
4035
+ export type AdminReindexCreateResponses = {
4036
+ /**
4037
+ * Reindex operation completed
4038
+ */
4039
+ 200: ReindexResponse;
4040
+ };
4041
+ export type AdminReindexCreateResponse = AdminReindexCreateResponses[keyof AdminReindexCreateResponses];
4042
+ export type AdminQueueStatsIndexData = {
4043
+ body?: never;
4044
+ path?: never;
4045
+ query?: never;
4046
+ url: '/v1/admin/queues/stats';
4047
+ };
4048
+ export type AdminQueueStatsIndexErrors = {
4049
+ /**
4050
+ * Bad Request
4051
+ */
4052
+ 400: Error400;
4053
+ /**
4054
+ * Unauthorized
4055
+ */
4056
+ 401: Error401;
4057
+ /**
4058
+ * Forbidden
4059
+ */
4060
+ 403: Error403;
4061
+ /**
4062
+ * Too Many Requests
4063
+ */
4064
+ 429: Error429;
4065
+ /**
4066
+ * Internal Server Error
4067
+ */
4068
+ 500: Error500;
4069
+ };
4070
+ export type AdminQueueStatsIndexError = AdminQueueStatsIndexErrors[keyof AdminQueueStatsIndexErrors];
4071
+ export type AdminQueueStatsIndexResponses = {
4072
+ /**
4073
+ * Queue statistics retrieved successfully
4074
+ */
4075
+ 200: Array<{
4076
+ queue?: string;
4077
+ /**
4078
+ * Number of jobs currently pending/active
4079
+ */
4080
+ stuckCount?: number;
4081
+ /**
4082
+ * Number of failed jobs
4083
+ */
4084
+ failedCount?: number;
4085
+ }>;
4086
+ };
4087
+ export type AdminQueueStatsIndexResponse = AdminQueueStatsIndexResponses[keyof AdminQueueStatsIndexResponses];
4088
+ export type AdminQueueShowData = {
4089
+ body?: never;
4090
+ path: {
4091
+ /**
4092
+ * The name of the queue
4093
+ */
4094
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
4095
+ };
4096
+ query?: never;
4097
+ url: '/v1/admin/queues/{queueName}';
4098
+ };
4099
+ export type AdminQueueShowErrors = {
4100
+ /**
4101
+ * Bad Request
4102
+ */
4103
+ 400: Error400;
4104
+ /**
4105
+ * Unauthorized
4106
+ */
4107
+ 401: Error401;
4108
+ /**
4109
+ * Forbidden
4110
+ */
4111
+ 403: Error403;
4112
+ /**
4113
+ * Not Found
4114
+ */
4115
+ 404: Error404;
4116
+ /**
4117
+ * Too Many Requests
4118
+ */
4119
+ 429: Error429;
4120
+ /**
4121
+ * Internal Server Error
4122
+ */
4123
+ 500: Error500;
4124
+ };
4125
+ export type AdminQueueShowError = AdminQueueShowErrors[keyof AdminQueueShowErrors];
4126
+ export type AdminQueueShowResponses = {
4127
+ /**
4128
+ * Queue details retrieved successfully
4129
+ */
4130
+ 200: {
4131
+ queue?: string;
4132
+ /**
4133
+ * Current queue size (pending jobs)
4134
+ */
4135
+ size?: number;
4136
+ /**
4137
+ * Total jobs created
4138
+ */
4139
+ created?: number;
4140
+ /**
4141
+ * Total failed jobs
4142
+ */
4143
+ failed?: number;
4144
+ /**
4145
+ * Total completed jobs
4146
+ */
4147
+ complete?: number;
4148
+ /**
4149
+ * Total expired jobs
4150
+ */
4151
+ expired?: number;
4152
+ /**
4153
+ * Total cancelled jobs
4154
+ */
4155
+ cancelled?: number;
4156
+ };
4157
+ };
4158
+ export type AdminQueueShowResponse = AdminQueueShowResponses[keyof AdminQueueShowResponses];
4159
+ export type AdminQueueFailedIndexData = {
4160
+ body?: never;
4161
+ path: {
4162
+ /**
4163
+ * The name of the queue
4164
+ */
4165
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
4166
+ };
4167
+ query?: never;
4168
+ url: '/v1/admin/queues/{queueName}/failed';
4169
+ };
4170
+ export type AdminQueueFailedIndexErrors = {
4171
+ /**
4172
+ * Bad Request
4173
+ */
4174
+ 400: Error400;
4175
+ /**
4176
+ * Unauthorized
4177
+ */
4178
+ 401: Error401;
4179
+ /**
4180
+ * Forbidden
4181
+ */
4182
+ 403: Error403;
4183
+ /**
4184
+ * Too Many Requests
4185
+ */
4186
+ 429: Error429;
4187
+ /**
4188
+ * Internal Server Error
4189
+ */
4190
+ 500: Error500;
4191
+ };
4192
+ export type AdminQueueFailedIndexError = AdminQueueFailedIndexErrors[keyof AdminQueueFailedIndexErrors];
4193
+ export type AdminQueueFailedIndexResponses = {
4194
+ /**
4195
+ * Failed jobs retrieved successfully
4196
+ */
4197
+ 200: Array<{
4198
+ /**
4199
+ * Job ID
4200
+ */
4201
+ id?: string;
4202
+ /**
4203
+ * The segment ID that failed to sync
4204
+ */
4205
+ segmentId?: number;
4206
+ /**
4207
+ * Error message from the last attempt
4208
+ */
4209
+ error?: string;
4210
+ /**
4211
+ * When the job was created
4212
+ */
4213
+ createdOn?: string;
4214
+ }>;
4215
+ };
4216
+ export type AdminQueueFailedIndexResponse = AdminQueueFailedIndexResponses[keyof AdminQueueFailedIndexResponses];
4217
+ export type AdminQueueRetryCreateData = {
4218
+ body?: never;
4219
+ path: {
4220
+ /**
4221
+ * The name of the queue
4222
+ */
4223
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
4224
+ };
4225
+ query?: never;
4226
+ url: '/v1/admin/queues/{queueName}/retry';
4227
+ };
4228
+ export type AdminQueueRetryCreateErrors = {
4229
+ /**
4230
+ * Bad Request
4231
+ */
4232
+ 400: Error400;
4233
+ /**
4234
+ * Unauthorized
4235
+ */
4236
+ 401: Error401;
4237
+ /**
4238
+ * Forbidden
4239
+ */
4240
+ 403: Error403;
4241
+ /**
4242
+ * Too Many Requests
4243
+ */
4244
+ 429: Error429;
4245
+ /**
4246
+ * Internal Server Error
4247
+ */
4248
+ 500: Error500;
4249
+ };
4250
+ export type AdminQueueRetryCreateError = AdminQueueRetryCreateErrors[keyof AdminQueueRetryCreateErrors];
4251
+ export type AdminQueueRetryCreateResponses = {
4252
+ /**
4253
+ * Jobs queued for retry
4254
+ */
4255
+ 200: {
4256
+ success?: boolean;
4257
+ /**
4258
+ * Number of jobs queued for retry
4259
+ */
4260
+ retriedCount?: number;
4261
+ message?: string;
4262
+ };
4263
+ };
4264
+ export type AdminQueueRetryCreateResponse = AdminQueueRetryCreateResponses[keyof AdminQueueRetryCreateResponses];
4265
+ export type AdminQueueFailedDestroyData = {
4266
+ body?: never;
4267
+ path: {
4268
+ /**
4269
+ * The name of the queue
4270
+ */
4271
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
4272
+ };
4273
+ query?: never;
4274
+ url: '/v1/admin/queues/{queueName}/purge';
4275
+ };
4276
+ export type AdminQueueFailedDestroyErrors = {
4277
+ /**
4278
+ * Bad Request
4279
+ */
4280
+ 400: Error400;
4281
+ /**
4282
+ * Unauthorized
4283
+ */
4284
+ 401: Error401;
4285
+ /**
4286
+ * Forbidden
4287
+ */
4288
+ 403: Error403;
4289
+ /**
4290
+ * Too Many Requests
4291
+ */
4292
+ 429: Error429;
4293
+ /**
4294
+ * Internal Server Error
4295
+ */
4296
+ 500: Error500;
4297
+ };
4298
+ export type AdminQueueFailedDestroyError = AdminQueueFailedDestroyErrors[keyof AdminQueueFailedDestroyErrors];
4299
+ export type AdminQueueFailedDestroyResponses = {
4300
+ /**
4301
+ * Failed jobs purged successfully
4302
+ */
4303
+ 200: {
4304
+ success?: boolean;
4305
+ /**
4306
+ * Number of failed jobs deleted
4307
+ */
4308
+ purgedCount?: number;
4309
+ message?: string;
4310
+ };
4311
+ };
4312
+ export type AdminQueueFailedDestroyResponse = AdminQueueFailedDestroyResponses[keyof AdminQueueFailedDestroyResponses];
4313
+ export type AdminMorphemeBackfillCreateData = {
4314
+ body?: never;
4315
+ path?: never;
4316
+ query?: never;
4317
+ url: '/v1/admin/morpheme-backfill';
4318
+ };
4319
+ export type AdminMorphemeBackfillCreateResponses = {
4320
+ /**
4321
+ * Backfill completed
4322
+ */
4323
+ 200: {
4324
+ success: boolean;
4325
+ message: string;
4326
+ stats: {
4327
+ totalSegments: number;
4328
+ successfulAnalyses: number;
4329
+ failedAnalyses: number;
4330
+ };
4331
+ };
4332
+ };
4333
+ export type AdminMorphemeBackfillCreateResponse = AdminMorphemeBackfillCreateResponses[keyof AdminMorphemeBackfillCreateResponses];
4334
+ export type AdminReportIndexData = {
4335
+ body?: never;
4336
+ path?: never;
4337
+ query?: {
4338
+ /**
4339
+ * Cursor for pagination (report ID to start after)
4340
+ */
4341
+ cursor?: number;
4342
+ /**
4343
+ * Number of results per page
4344
+ */
4345
+ size?: number;
4346
+ /**
4347
+ * Filter by report status
4348
+ */
4349
+ status?: 'PENDING' | 'CONCERN' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED' | 'IGNORED';
4350
+ /**
4351
+ * Filter by report source
4352
+ */
4353
+ source?: 'USER' | 'AUTO';
4354
+ /**
4355
+ * Filter by target type
4356
+ */
4357
+ targetType?: 'SEGMENT' | 'EPISODE' | 'MEDIA';
4358
+ /**
4359
+ * Filter by target media ID
4360
+ */
4361
+ targetMediaId?: number;
4362
+ /**
4363
+ * Filter by review check run ID
4364
+ */
4365
+ reviewCheckRunId?: number;
4366
+ };
4367
+ url: '/v1/admin/reports';
4368
+ };
4369
+ export type AdminReportIndexErrors = {
4370
+ /**
4371
+ * Unauthorized
4372
+ */
4373
+ 401: Error401;
4374
+ /**
4375
+ * Forbidden
4376
+ */
4377
+ 403: Error403;
4378
+ /**
4379
+ * Too Many Requests
4380
+ */
4381
+ 429: Error429;
4382
+ /**
4383
+ * Internal Server Error
4384
+ */
4385
+ 500: Error500;
4386
+ };
4387
+ export type AdminReportIndexError = AdminReportIndexErrors[keyof AdminReportIndexErrors];
4388
+ export type AdminReportIndexResponses = {
4389
+ /**
4390
+ * OK
4391
+ */
4392
+ 200: AdminReportListResponse;
4393
+ };
4394
+ export type AdminReportIndexResponse = AdminReportIndexResponses[keyof AdminReportIndexResponses];
4395
+ export type AdminReportUpdateData = {
4396
+ body: UpdateReportRequest;
4397
+ path: {
4398
+ /**
4399
+ * Report ID
4400
+ */
4401
+ id: number;
4402
+ };
4403
+ query?: never;
4404
+ url: '/v1/admin/reports/{id}';
4405
+ };
4406
+ export type AdminReportUpdateErrors = {
4407
+ /**
4408
+ * Bad Request
4409
+ */
4410
+ 400: Error400;
4411
+ /**
4412
+ * Unauthorized
4413
+ */
4414
+ 401: Error401;
4415
+ /**
4416
+ * Forbidden
4417
+ */
4418
+ 403: Error403;
4419
+ /**
4420
+ * Not Found
4421
+ */
4422
+ 404: Error404;
4423
+ /**
4424
+ * Too Many Requests
4425
+ */
4426
+ 429: Error429;
4427
+ /**
4428
+ * Internal Server Error
4429
+ */
4430
+ 500: Error500;
4431
+ };
4432
+ export type AdminReportUpdateError = AdminReportUpdateErrors[keyof AdminReportUpdateErrors];
4433
+ export type AdminReportUpdateResponses = {
4434
+ /**
4435
+ * Report updated successfully
4436
+ */
4437
+ 200: Report;
4438
+ };
4439
+ export type AdminReportUpdateResponse = AdminReportUpdateResponses[keyof AdminReportUpdateResponses];
4440
+ export type AdminReviewRunCreateData = {
4441
+ body?: never;
4442
+ path?: never;
4443
+ query?: {
4444
+ /**
4445
+ * Optional category filter
4446
+ */
4447
+ category?: 'ANIME' | 'JDRAMA';
4448
+ };
4449
+ url: '/v1/admin/review/run';
4450
+ };
4451
+ export type AdminReviewRunCreateErrors = {
4452
+ /**
4453
+ * Unauthorized
4454
+ */
4455
+ 401: Error401;
4456
+ /**
4457
+ * Forbidden
4458
+ */
4459
+ 403: Error403;
4460
+ /**
4461
+ * Too Many Requests
4462
+ */
4463
+ 429: Error429;
4464
+ /**
4465
+ * Internal Server Error
4466
+ */
4467
+ 500: Error500;
4468
+ };
4469
+ export type AdminReviewRunCreateError = AdminReviewRunCreateErrors[keyof AdminReviewRunCreateErrors];
4470
+ export type AdminReviewRunCreateResponses = {
4471
+ /**
4472
+ * Check run completed
4473
+ */
4474
+ 200: RunReviewResponse;
4475
+ };
4476
+ export type AdminReviewRunCreateResponse = AdminReviewRunCreateResponses[keyof AdminReviewRunCreateResponses];
4477
+ export type AdminReviewCheckIndexData = {
4478
+ body?: never;
4479
+ path?: never;
4480
+ query?: never;
4481
+ url: '/v1/admin/review/checks';
4482
+ };
4483
+ export type AdminReviewCheckIndexErrors = {
4484
+ /**
4485
+ * Unauthorized
4486
+ */
4487
+ 401: Error401;
4488
+ /**
4489
+ * Forbidden
4490
+ */
4491
+ 403: Error403;
4492
+ /**
4493
+ * Too Many Requests
4494
+ */
4495
+ 429: Error429;
4496
+ /**
4497
+ * Internal Server Error
4498
+ */
4499
+ 500: Error500;
4500
+ };
4501
+ export type AdminReviewCheckIndexError = AdminReviewCheckIndexErrors[keyof AdminReviewCheckIndexErrors];
4502
+ export type AdminReviewCheckIndexResponses = {
4503
+ /**
4504
+ * OK
4505
+ */
4506
+ 200: Array<ReviewCheck>;
4507
+ };
4508
+ export type AdminReviewCheckIndexResponse = AdminReviewCheckIndexResponses[keyof AdminReviewCheckIndexResponses];
4509
+ export type AdminReviewCheckUpdateData = {
4510
+ body: {
4511
+ /**
4512
+ * New threshold values
4513
+ */
4514
+ threshold?: {
4515
+ [key: string]: unknown;
4516
+ };
4517
+ /**
4518
+ * Enable or disable this check
4519
+ */
4520
+ enabled?: boolean;
4521
+ };
4522
+ path: {
4523
+ /**
4524
+ * Check name identifier
4525
+ */
4526
+ name: string;
4527
+ };
4528
+ query?: never;
4529
+ url: '/v1/admin/review/checks/{name}';
4530
+ };
4531
+ export type AdminReviewCheckUpdateErrors = {
4532
+ /**
4533
+ * Bad Request
4534
+ */
4535
+ 400: Error400;
4536
+ /**
4537
+ * Unauthorized
4538
+ */
4539
+ 401: Error401;
4540
+ /**
4541
+ * Forbidden
4542
+ */
4543
+ 403: Error403;
4544
+ /**
4545
+ * Not Found
4546
+ */
4547
+ 404: Error404;
4548
+ /**
4549
+ * Too Many Requests
4550
+ */
4551
+ 429: Error429;
4552
+ /**
4553
+ * Internal Server Error
4554
+ */
4555
+ 500: Error500;
4556
+ };
4557
+ export type AdminReviewCheckUpdateError = AdminReviewCheckUpdateErrors[keyof AdminReviewCheckUpdateErrors];
4558
+ export type AdminReviewCheckUpdateResponses = {
4559
+ /**
4560
+ * Check updated successfully
4561
+ */
4562
+ 200: ReviewCheck;
4563
+ };
4564
+ export type AdminReviewCheckUpdateResponse = AdminReviewCheckUpdateResponses[keyof AdminReviewCheckUpdateResponses];
4565
+ export type AdminReviewRunIndexData = {
4566
+ body?: never;
4567
+ path?: never;
4568
+ query?: {
4569
+ /**
4570
+ * Filter by check name
4571
+ */
4572
+ checkName?: string;
4573
+ /**
4574
+ * Cursor for pagination
4575
+ */
4576
+ cursor?: number;
4577
+ /**
4578
+ * Number of results per page
4579
+ */
4580
+ size?: number;
4581
+ };
4582
+ url: '/v1/admin/review/runs';
4583
+ };
4584
+ export type AdminReviewRunIndexErrors = {
4585
+ /**
4586
+ * Unauthorized
4587
+ */
4588
+ 401: Error401;
4589
+ /**
4590
+ * Forbidden
4591
+ */
4592
+ 403: Error403;
4593
+ /**
4594
+ * Too Many Requests
4595
+ */
4596
+ 429: Error429;
4597
+ /**
4598
+ * Internal Server Error
4599
+ */
4600
+ 500: Error500;
4601
+ };
4602
+ export type AdminReviewRunIndexError = AdminReviewRunIndexErrors[keyof AdminReviewRunIndexErrors];
4603
+ export type AdminReviewRunIndexResponses = {
4604
+ /**
4605
+ * OK
4606
+ */
4607
+ 200: {
4608
+ data: Array<ReviewCheckRun>;
4609
+ hasMore: boolean;
4610
+ cursor?: number;
4611
+ };
4612
+ };
4613
+ export type AdminReviewRunIndexResponse = AdminReviewRunIndexResponses[keyof AdminReviewRunIndexResponses];
4614
+ export type AdminReviewRunShowData = {
4615
+ body?: never;
4616
+ path: {
4617
+ /**
4618
+ * Run ID
4619
+ */
4620
+ id: number;
4621
+ };
4622
+ query?: never;
4623
+ url: '/v1/admin/review/runs/{id}';
4624
+ };
4625
+ export type AdminReviewRunShowErrors = {
4626
+ /**
4627
+ * Unauthorized
4628
+ */
4629
+ 401: Error401;
4630
+ /**
4631
+ * Forbidden
4632
+ */
4633
+ 403: Error403;
4634
+ /**
4635
+ * Not Found
4636
+ */
4637
+ 404: Error404;
4638
+ /**
4639
+ * Too Many Requests
4640
+ */
4641
+ 429: Error429;
4642
+ /**
4643
+ * Internal Server Error
4644
+ */
4645
+ 500: Error500;
4646
+ };
4647
+ export type AdminReviewRunShowError = AdminReviewRunShowErrors[keyof AdminReviewRunShowErrors];
4648
+ export type AdminReviewRunShowResponses = {
4649
+ /**
4650
+ * OK
4651
+ */
4652
+ 200: {
4653
+ run: ReviewCheckRun;
4654
+ reports: Array<Report>;
4655
+ };
4656
+ };
4657
+ export type AdminReviewRunShowResponse = AdminReviewRunShowResponses[keyof AdminReviewRunShowResponses];
4658
+ export type AdminReviewAllowlistIndexData = {
4659
+ body?: never;
4660
+ path?: never;
4661
+ query?: {
4662
+ /**
4663
+ * Filter by check name
4664
+ */
4665
+ checkName?: string;
4666
+ };
4667
+ url: '/v1/admin/review/allowlist';
4668
+ };
4669
+ export type AdminReviewAllowlistIndexErrors = {
4670
+ /**
4671
+ * Unauthorized
4672
+ */
4673
+ 401: Error401;
4674
+ /**
4675
+ * Forbidden
4676
+ */
4677
+ 403: Error403;
4678
+ /**
4679
+ * Too Many Requests
4680
+ */
4681
+ 429: Error429;
4682
+ /**
4683
+ * Internal Server Error
4684
+ */
4685
+ 500: Error500;
4686
+ };
4687
+ export type AdminReviewAllowlistIndexError = AdminReviewAllowlistIndexErrors[keyof AdminReviewAllowlistIndexErrors];
4688
+ export type AdminReviewAllowlistIndexResponses = {
4689
+ /**
4690
+ * OK
4691
+ */
4692
+ 200: Array<ReviewAllowlist>;
4693
+ };
4694
+ export type AdminReviewAllowlistIndexResponse = AdminReviewAllowlistIndexResponses[keyof AdminReviewAllowlistIndexResponses];
4695
+ export type AdminReviewAllowlistCreateData = {
4696
+ body: {
4697
+ /**
4698
+ * Check name to allowlist for
4699
+ */
4700
+ checkName: string;
4701
+ /**
4702
+ * Media ID to allowlist
4703
+ */
4704
+ mediaId: number;
4705
+ /**
4706
+ * Episode number (for episode-level checks)
4707
+ */
4708
+ episodeNumber?: number;
4709
+ /**
4710
+ * Reason for allowlisting
4711
+ */
4712
+ reason?: string;
4713
+ };
4714
+ path?: never;
4715
+ query?: never;
4716
+ url: '/v1/admin/review/allowlist';
4717
+ };
4718
+ export type AdminReviewAllowlistCreateErrors = {
4719
+ /**
4720
+ * Bad Request
4721
+ */
4722
+ 400: Error400;
4723
+ /**
4724
+ * Unauthorized
4725
+ */
4726
+ 401: Error401;
4727
+ /**
4728
+ * Forbidden
4729
+ */
4730
+ 403: Error403;
4731
+ /**
4732
+ * Conflict
4733
+ */
4734
+ 409: Error409;
4735
+ /**
4736
+ * Too Many Requests
4737
+ */
4738
+ 429: Error429;
4739
+ /**
4740
+ * Internal Server Error
4741
+ */
4742
+ 500: Error500;
4743
+ };
4744
+ export type AdminReviewAllowlistCreateError = AdminReviewAllowlistCreateErrors[keyof AdminReviewAllowlistCreateErrors];
4745
+ export type AdminReviewAllowlistCreateResponses = {
4746
+ /**
4747
+ * Added to allowlist
4748
+ */
4749
+ 201: ReviewAllowlist;
4750
+ };
4751
+ export type AdminReviewAllowlistCreateResponse = AdminReviewAllowlistCreateResponses[keyof AdminReviewAllowlistCreateResponses];
4752
+ export type AdminReviewAllowlistDestroyData = {
4753
+ body?: never;
4754
+ path: {
4755
+ /**
4756
+ * Allowlist entry ID
4757
+ */
4758
+ id: number;
4759
+ };
4760
+ query?: never;
4761
+ url: '/v1/admin/review/allowlist/{id}';
4762
+ };
4763
+ export type AdminReviewAllowlistDestroyErrors = {
4764
+ /**
4765
+ * Unauthorized
4766
+ */
4767
+ 401: Error401;
4768
+ /**
4769
+ * Forbidden
4770
+ */
4771
+ 403: Error403;
4772
+ /**
4773
+ * Not Found
4774
+ */
4775
+ 404: Error404;
4776
+ /**
4777
+ * Too Many Requests
4778
+ */
4779
+ 429: Error429;
4780
+ /**
4781
+ * Internal Server Error
4782
+ */
4783
+ 500: Error500;
4784
+ };
4785
+ export type AdminReviewAllowlistDestroyError = AdminReviewAllowlistDestroyErrors[keyof AdminReviewAllowlistDestroyErrors];
4786
+ export type AdminReviewAllowlistDestroyResponses = {
4787
+ /**
4788
+ * Removed from allowlist
4789
+ */
4790
+ 204: void;
4791
+ };
4792
+ export type AdminReviewAllowlistDestroyResponse = AdminReviewAllowlistDestroyResponses[keyof AdminReviewAllowlistDestroyResponses];
4793
+ //# sourceMappingURL=types.gen.d.ts.map