@brigadasos/nadeshiko-sdk 1.4.0-dev.9621982 → 1.4.2-dev.a13aba0

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.
@@ -1,204 +1,360 @@
1
1
  export type ClientOptions = {
2
2
  baseUrl: 'http://localhost:5000' | 'https://api.nadeshiko.co' | (string & {});
3
3
  };
4
+ /**
5
+ * A media filter entry with optional episode restriction
6
+ */
7
+ export type MediaFilterItem = {
8
+ /**
9
+ * Media ID to filter
10
+ */
11
+ mediaId: number;
12
+ /**
13
+ * Specific episodes (omit for all episodes)
14
+ */
15
+ episodes?: Array<number>;
16
+ };
4
17
  /**
5
18
  * Media category type
6
19
  */
7
20
  export type Category = 'ANIME' | 'JDRAMA';
8
21
  /**
9
- * Media information included in search results
22
+ * Content rating level for the segment
10
23
  */
11
- export type SearchResultMedia = {
24
+ export type ContentRating = 'SAFE' | 'SUGGESTIVE' | 'QUESTIONABLE' | 'EXPLICIT';
25
+ /**
26
+ * Search filters for narrowing segment results
27
+ */
28
+ export type SearchFilters = {
12
29
  /**
13
- * Unique identifier for the media
30
+ * Media inclusion/exclusion filters
14
31
  */
15
- mediaId: number;
32
+ media?: {
33
+ /**
34
+ * Include only segments from these media (with optional episode filter)
35
+ */
36
+ include?: Array<MediaFilterItem>;
37
+ /**
38
+ * Exclude segments from these media (with optional episode filter)
39
+ */
40
+ exclude?: Array<MediaFilterItem>;
41
+ };
16
42
  /**
17
- * Romaji transliteration of the media name
43
+ * Media category filter
18
44
  */
19
- nameRomaji: string;
45
+ category?: Array<Category>;
20
46
  /**
21
- * English name of the media
47
+ * Content ratings to include (omit for all ratings)
22
48
  */
23
- nameEn?: string;
49
+ contentRating?: Array<ContentRating>;
24
50
  /**
25
- * Original Japanese name of the media
51
+ * Segment status filter
26
52
  */
27
- nameJa?: string;
53
+ status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
28
54
  /**
29
- * URL to the cover image
55
+ * Content character count range filter
30
56
  */
31
- coverUrl?: string;
57
+ segmentLengthChars?: {
58
+ /**
59
+ * Minimum content length
60
+ */
61
+ min?: number;
62
+ /**
63
+ * Maximum content length
64
+ */
65
+ max?: number;
66
+ };
32
67
  /**
33
- * URL to the banner image
68
+ * Segment audio duration range filter (in milliseconds)
34
69
  */
35
- bannerUrl?: string;
36
- category: Category;
70
+ segmentDurationMs?: {
71
+ /**
72
+ * Minimum duration in ms
73
+ */
74
+ min?: number;
75
+ /**
76
+ * Maximum duration in ms
77
+ */
78
+ max?: number;
79
+ };
37
80
  };
38
81
  /**
39
- * Japanese content in search results with optional highlight
82
+ * Resource to expand in the response includes block
40
83
  */
41
- export type JapaneseSearchContent = {
84
+ export type IncludeExpansion = 'media';
85
+ export type SearchRequest = {
42
86
  /**
43
- * Original Japanese content of the segment
87
+ * What to search for (omit for queryless browse)
44
88
  */
45
- content: string;
89
+ query?: {
90
+ /**
91
+ * Search expression (supports boolean operators, wildcards, phrase matching)
92
+ */
93
+ search?: string;
94
+ /**
95
+ * Whether to use exact phrase matching
96
+ */
97
+ exactMatch?: boolean;
98
+ };
46
99
  /**
47
- * Japanese content with search terms highlighted
100
+ * Max amount of entries by response
48
101
  */
49
- highlight?: string;
50
- };
51
- /**
52
- * Translation content in search results with optional highlight
53
- */
54
- export type TranslationSearchContent = {
102
+ limit?: number;
55
103
  /**
56
- * Translated content
104
+ * Current page of search
57
105
  */
58
- content?: string;
106
+ cursor?: Array<number>;
59
107
  /**
60
- * Translated content with search terms highlighted
108
+ * Sort configuration
61
109
  */
62
- highlight?: string;
110
+ sort?: {
111
+ /**
112
+ * Sort mode
113
+ */
114
+ mode?: 'ASC' | 'DESC' | 'NONE' | 'TIME_ASC' | 'TIME_DESC' | 'RANDOM';
115
+ /**
116
+ * Non-negative integer seed for deterministic random sorting (only used when mode is RANDOM)
117
+ */
118
+ seed?: number;
119
+ };
120
+ filters?: SearchFilters;
63
121
  /**
64
- * Whether the translation was machine-translated
122
+ * Resources to expand in the response includes block
65
123
  */
66
- isMachineTranslated: boolean;
124
+ include?: Array<IncludeExpansion>;
67
125
  };
68
126
  /**
69
- * Morphological analysis token
127
+ * Segment with content, optional highlights, and media URLs
70
128
  */
71
- export type Morpheme = {
129
+ export type Segment = {
72
130
  /**
73
- * Surface form of the token as it appears in the text
131
+ * Unique identifier for the segment
74
132
  */
75
- surface: string;
133
+ uuid: string;
76
134
  /**
77
- * Reading in katakana
135
+ * Position of the segment within the episode
78
136
  */
79
- reading: string;
137
+ position: number;
80
138
  /**
81
- * Dictionary/base form of the word
139
+ * Segment status
82
140
  */
83
- baseform: string;
141
+ status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
84
142
  /**
85
- * Pronunciation in katakana
143
+ * Start time of the segment in milliseconds from the beginning of the episode
86
144
  */
87
- pronunciation: string;
145
+ startTimeMs: number;
88
146
  /**
89
- * Full part-of-speech tag array
147
+ * End time of the segment in milliseconds from the beginning of the episode
90
148
  */
91
- pos: Array<string>;
149
+ endTimeMs: number;
150
+ contentRating: ContentRating;
92
151
  /**
93
- * Short part-of-speech label (first element of pos array)
152
+ * Episode number this segment belongs to
94
153
  */
95
- posShort: string;
154
+ episode: number;
96
155
  /**
97
- * Character offset where the token begins in the original text
156
+ * Media ID this segment belongs to
98
157
  */
99
- begin: number;
158
+ mediaId: number;
159
+ textJa: {
160
+ /**
161
+ * Original Japanese content
162
+ */
163
+ content: string;
164
+ /**
165
+ * Japanese content with search terms highlighted
166
+ */
167
+ highlight?: string;
168
+ };
169
+ textEn: {
170
+ /**
171
+ * English translation
172
+ */
173
+ content: string;
174
+ /**
175
+ * Whether the translation was machine-translated
176
+ */
177
+ isMachineTranslated: boolean;
178
+ /**
179
+ * English content with search terms highlighted
180
+ */
181
+ highlight?: string;
182
+ };
183
+ textEs: {
184
+ /**
185
+ * Spanish translation
186
+ */
187
+ content: string;
188
+ /**
189
+ * Whether the translation was machine-translated
190
+ */
191
+ isMachineTranslated: boolean;
192
+ /**
193
+ * Spanish content with search terms highlighted
194
+ */
195
+ highlight?: string;
196
+ };
100
197
  /**
101
- * Character offset where the token ends in the original text
198
+ * URLs to media resources for this segment
102
199
  */
103
- end: number;
200
+ urls: {
201
+ /**
202
+ * URL to the subtitle image snapshot
203
+ */
204
+ imageUrl: string;
205
+ /**
206
+ * URL to the audio clip for this segment
207
+ */
208
+ audioUrl: string;
209
+ /**
210
+ * URL to the video clip for this segment
211
+ */
212
+ videoUrl: string;
213
+ };
214
+ };
215
+ /**
216
+ * Map of external IDs keyed by source. Only sources with values are included.
217
+ */
218
+ export type ExternalId = {
104
219
  /**
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
- *
220
+ * AniList ID
107
221
  */
108
- pitchAccentType: Array<number>;
222
+ anilist?: string;
109
223
  /**
110
- * Compound accent connection rule from UniDic feature[25]. Values like C1-C5, F1-F6, P1-P13. Null if not available.
111
- *
224
+ * IMDB ID
112
225
  */
113
- pitchCompoundRule: string;
226
+ imdb?: string;
114
227
  /**
115
- * Accent modification rule from UniDic feature[26]. Values like M1, M2, M4. Null if not available.
116
- *
228
+ * TVDB ID
117
229
  */
118
- pitchModificationRule: string;
230
+ tvdb?: string;
119
231
  };
120
232
  /**
121
- * Segment details in search results
233
+ * Japanese voice actor (seiyuu)
122
234
  */
123
- export type SearchResultSegment = {
235
+ export type Seiyuu = {
124
236
  /**
125
- * Segment status
237
+ * AniList staff ID
126
238
  */
127
- status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
239
+ id: number;
128
240
  /**
129
- * Unique identifier for the segment
241
+ * Japanese name of the voice actor
130
242
  */
131
- uuid: string;
243
+ nameJa: string;
132
244
  /**
133
- * Position of the segment within the episode
245
+ * English name of the voice actor
134
246
  */
135
- position: number;
247
+ nameEn: string;
248
+ /**
249
+ * Profile image URL
250
+ */
251
+ imageUrl: string;
252
+ };
253
+ /**
254
+ * Character appearing in a media with their voice actor and role
255
+ */
256
+ export type MediaCharacter = {
136
257
  /**
137
- * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
258
+ * AniList character ID
138
259
  */
139
- startTime: string;
260
+ id: number;
140
261
  /**
141
- * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
262
+ * Japanese name of the character
142
263
  */
143
- endTime: string;
264
+ nameJa: string;
144
265
  /**
145
- * Episode number where the segment appears
266
+ * English name of the character
146
267
  */
147
- episodeNumber: number;
148
- textJa: JapaneseSearchContent;
149
- textEn: TranslationSearchContent;
150
- textEs: TranslationSearchContent;
268
+ nameEn: string;
151
269
  /**
152
- * Whether the segment contains NSFW content
270
+ * Character image URL
153
271
  */
154
- isNsfw: boolean;
272
+ imageUrl: string;
273
+ seiyuu: Seiyuu;
155
274
  /**
156
- * Morphological analysis of the Japanese content
275
+ * Character's role in the media
157
276
  */
158
- morphemes?: Array<Morpheme>;
277
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
159
278
  };
160
279
  /**
161
- * URLs to media resources for a segment
280
+ * Media entry with full metadata
162
281
  */
163
- export type SearchResultUrls = {
282
+ export type Media = {
164
283
  /**
165
- * URL to the subtitle image snapshot
284
+ * Unique identifier for the media
166
285
  */
167
- imageUrl?: string;
286
+ id: number;
287
+ externalIds: ExternalId;
168
288
  /**
169
- * URL to the audio clip for this segment
289
+ * Original Japanese name of the media
170
290
  */
171
- audioUrl?: string;
291
+ nameJa: string;
172
292
  /**
173
- * URL to the video clip for this segment
293
+ * Romaji transliteration of the media name
174
294
  */
175
- videoUrl?: string;
176
- };
177
- /**
178
- * A complete search result combining media info, segment details, and URLs
179
- */
180
- export type SearchResult = {
295
+ nameRomaji: string;
296
+ /**
297
+ * English name of the media
298
+ */
299
+ nameEn: string;
300
+ /**
301
+ * Format of the media release (e.g., TV, OVA, Movie)
302
+ */
303
+ airingFormat: string;
304
+ /**
305
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
306
+ */
307
+ airingStatus: string;
308
+ /**
309
+ * List of genres associated with the media
310
+ */
311
+ genres: Array<string>;
312
+ /**
313
+ * Full URL to the cover image
314
+ */
315
+ coverUrl: string;
316
+ /**
317
+ * Full URL to the banner image
318
+ */
319
+ bannerUrl: string;
320
+ /**
321
+ * Start date of the media (first airing/release)
322
+ */
323
+ startDate: string;
324
+ /**
325
+ * End date of the media (last airing/release)
326
+ */
327
+ endDate?: string;
328
+ category: Category;
329
+ /**
330
+ * Total number of subtitle segments available
331
+ */
332
+ segmentCount: number;
181
333
  /**
182
- * Media information for this result
334
+ * Total number of episodes available
335
+ */
336
+ episodeCount: number;
337
+ /**
338
+ * Animation studio that produced the media
339
+ */
340
+ studio: string;
341
+ /**
342
+ * Airing season label for the media
183
343
  */
184
- media: SearchResultMedia;
344
+ seasonName: string;
185
345
  /**
186
- * Segment details including translations
346
+ * Airing year for the media
187
347
  */
188
- segment: SearchResultSegment;
348
+ seasonYear: number;
189
349
  /**
190
- * URLs to media resources (images, audio, video)
350
+ * Characters appearing in the media with their voice actors
191
351
  */
192
- urls: SearchResultUrls;
352
+ characters?: Array<MediaCharacter>;
193
353
  };
194
354
  /**
195
355
  * Pagination metadata for search results
196
356
  */
197
357
  export type PaginationInfo = {
198
- /**
199
- * Number of results returned in this page
200
- */
201
- pageSize?: number;
202
358
  /**
203
359
  * Whether there are more results after this page
204
360
  */
@@ -211,14 +367,57 @@ export type PaginationInfo = {
211
367
  * Whether estimatedTotalHits is exact or a lower bound
212
368
  */
213
369
  estimatedTotalHitsRelation?: 'EXACT' | 'LOWER_BOUND';
370
+ /**
371
+ * Cursor for fetching the next page (undefined when hasMore is false)
372
+ */
373
+ cursor?: Array<number>;
214
374
  };
215
- export type SearchHealthCheckResponse = {
216
- results?: Array<SearchResult>;
375
+ export type SearchResponse = {
376
+ segments?: Array<Segment>;
377
+ includes?: {
378
+ /**
379
+ * Media objects keyed by mediaId
380
+ */
381
+ media?: {
382
+ [key: string]: Media;
383
+ };
384
+ };
217
385
  pagination?: PaginationInfo;
386
+ };
387
+ /**
388
+ * Bad Request error response
389
+ */
390
+ export type Error400 = {
218
391
  /**
219
- * Cursor for pagination
392
+ * Specific error code for programmatic handling
220
393
  */
221
- cursor?: Array<number>;
394
+ code: 'VALIDATION_FAILED' | 'INVALID_JSON' | 'INVALID_REQUEST';
395
+ /**
396
+ * A short, human-readable summary of the problem
397
+ */
398
+ title: string;
399
+ /**
400
+ * A human-readable explanation specific to this occurrence
401
+ */
402
+ detail: string;
403
+ /**
404
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
405
+ */
406
+ type?: string;
407
+ /**
408
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
409
+ */
410
+ instance?: string;
411
+ /**
412
+ * The HTTP status code
413
+ */
414
+ status: 400;
415
+ /**
416
+ * Optional map of field names to their error messages (for validation errors)
417
+ */
418
+ errors?: {
419
+ [key: string]: string;
420
+ };
222
421
  };
223
422
  /**
224
423
  * Unauthorized error response
@@ -360,180 +559,42 @@ export type Error500 = {
360
559
  [key: string]: string;
361
560
  };
362
561
  };
363
- export type SearchRequest = {
364
- /**
365
- * Text or sentence to search (null to search without query)
366
- */
367
- query?: string;
562
+ export type SearchStatsRequest = {
368
563
  /**
369
- * Max amount of entries by response
564
+ * What to search for (omit for queryless stats)
370
565
  */
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;
566
+ query?: {
425
567
  /**
426
- * Array of episode numbers
568
+ * Search expression (supports boolean operators, wildcards, phrase matching)
427
569
  */
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;
570
+ search?: string;
571
+ /**
572
+ * Whether to use exact phrase matching
573
+ */
574
+ exactMatch?: boolean;
472
575
  };
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>;
576
+ filters?: SearchFilters;
503
577
  /**
504
- * Segment status filter
578
+ * Resources to expand in the response includes block
505
579
  */
506
- status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
580
+ include?: Array<IncludeExpansion>;
507
581
  };
508
582
  /**
509
- * Search result statistics grouped by media
583
+ * Search hit statistics for a single media
510
584
  */
511
585
  export type MediaSearchStats = {
512
586
  /**
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
587
+ * Media identifier (look up full details in includes.media)
527
588
  */
528
- nameJa?: string;
589
+ mediaId: number;
529
590
  /**
530
- * Total number of segments found for this media
591
+ * Number of matching segments found in this media
531
592
  */
532
- segmentCount?: number;
593
+ matchCount: number;
533
594
  /**
534
595
  * Mapping of episode numbers to segment hit counts
535
596
  */
536
- episodeHits?: {
597
+ episodeHits: {
537
598
  [key: string]: number;
538
599
  };
539
600
  };
@@ -550,41 +611,47 @@ export type CategoryCount = {
550
611
  export type SearchStatsResponse = {
551
612
  media?: Array<MediaSearchStats>;
552
613
  categories?: Array<CategoryCount>;
614
+ includes?: {
615
+ /**
616
+ * Media objects keyed by mediaId
617
+ */
618
+ media?: {
619
+ [key: string]: Media;
620
+ };
621
+ };
553
622
  };
554
623
  export type SearchMultipleRequest = {
555
624
  /**
556
- * List of words to search for
625
+ * What to search for
557
626
  */
558
- words: Array<string>;
627
+ query: {
628
+ /**
629
+ * List of words to search for
630
+ */
631
+ words: Array<string>;
632
+ /**
633
+ * Whether to use exact matching
634
+ */
635
+ exactMatch?: boolean;
636
+ };
637
+ filters?: SearchFilters;
559
638
  /**
560
- * Whether to use exact matching
639
+ * Resources to expand in the response includes block
561
640
  */
562
- exactMatch?: boolean;
641
+ include?: Array<IncludeExpansion>;
563
642
  };
564
643
  /**
565
- * Media entry containing word matches
644
+ * Media match count entry
566
645
  */
567
646
  export type WordMatchMedia = {
568
647
  /**
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
648
+ * Media identifier (look up full details in includes.media)
582
649
  */
583
- nameRomaji?: string;
650
+ mediaId: number;
584
651
  /**
585
652
  * Number of times the word appears in this media
586
653
  */
587
- matchCount?: number;
654
+ matchCount: number;
588
655
  };
589
656
  /**
590
657
  * Word matching result with occurrences across media
@@ -609,49 +676,40 @@ export type WordMatch = {
609
676
  };
610
677
  export type SearchMultipleResponse = {
611
678
  results?: Array<WordMatch>;
679
+ includes?: {
680
+ /**
681
+ * Media objects keyed by mediaId
682
+ */
683
+ media?: {
684
+ [key: string]: Media;
685
+ };
686
+ };
612
687
  };
613
688
  /**
614
- * Map of external IDs keyed by source. Only sources with values are included.
689
+ * Resource to expand in media responses
615
690
  */
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
- };
691
+ export type MediaIncludeExpansion = 'media' | 'media.characters';
630
692
  /**
631
- * Japanese voice actor (seiyuu)
693
+ * Cursor pagination metadata
632
694
  */
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;
695
+ export type CursorPagination = {
642
696
  /**
643
- * English name of the voice actor
697
+ * Whether more results are available
644
698
  */
645
- nameEn: string;
699
+ hasMore: boolean;
646
700
  /**
647
- * Profile image URL
701
+ * Cursor for the next page (`null` when `hasMore` is `false`)
648
702
  */
649
- imageUrl: string;
703
+ cursor: number;
704
+ };
705
+ export type MediaListResponse = {
706
+ media: Array<Media>;
707
+ pagination: CursorPagination;
650
708
  };
651
709
  /**
652
- * Anime character
710
+ * Character data for creating/updating media
653
711
  */
654
- export type Character = {
712
+ export type CharacterInput = {
655
713
  /**
656
714
  * AniList character ID
657
715
  */
@@ -668,51 +726,31 @@ export type Character = {
668
726
  * Character image URL
669
727
  */
670
728
  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
729
  /**
679
730
  * Character's role in the media
680
731
  */
681
732
  role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
682
- };
683
- /**
684
- * Media collection list
685
- */
686
- export type List = {
687
- /**
688
- * List ID
689
- */
690
- id: number;
691
733
  /**
692
- * Name of the list
734
+ * AniList staff ID for the Japanese voice actor
693
735
  */
694
- name: string;
736
+ seiyuuId: number;
695
737
  /**
696
- * Type of list
738
+ * Japanese name of the voice actor
697
739
  */
698
- type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
740
+ seiyuuNameJa: string;
699
741
  /**
700
- * User ID who owns the list (1 = admin)
742
+ * English name of the voice actor
701
743
  */
702
- userId: number;
744
+ seiyuuNameEn: string;
703
745
  /**
704
- * Visibility of the list
746
+ * Voice actor profile image URL
705
747
  */
706
- visibility: 'PUBLIC' | 'PRIVATE';
748
+ seiyuuImageUrl: string;
707
749
  };
708
750
  /**
709
- * Media entry with full metadata
751
+ * Request body for creating a new media entry
710
752
  */
711
- export type Media = {
712
- /**
713
- * Unique identifier for the media
714
- */
715
- id: number;
753
+ export type MediaCreateRequest = {
716
754
  externalIds?: ExternalId;
717
755
  /**
718
756
  * Original Japanese name of the media
@@ -739,13 +777,9 @@ export type Media = {
739
777
  */
740
778
  genres: Array<string>;
741
779
  /**
742
- * Full URL to the cover image
743
- */
744
- coverUrl: string;
745
- /**
746
- * Full URL to the banner image
780
+ * Storage backend for media assets
747
781
  */
748
- bannerUrl: string;
782
+ storage: 'LOCAL' | 'R2';
749
783
  /**
750
784
  * Start date of the media (first airing/release)
751
785
  */
@@ -754,19 +788,18 @@ export type Media = {
754
788
  * End date of the media (last airing/release)
755
789
  */
756
790
  endDate?: string;
757
- category: Category;
758
791
  /**
759
- * Total number of subtitle segments available
792
+ * Media category
760
793
  */
761
- segmentCount?: number;
794
+ category: 'ANIME' | 'JDRAMA';
762
795
  /**
763
- * Total number of episodes available
796
+ * Version of the media-sub-splitter used
764
797
  */
765
- episodeCount?: number;
798
+ version: string;
766
799
  /**
767
- * Version identifier for the media entry
800
+ * Hash salt used when generating the hash for the related media assets
768
801
  */
769
- version: string;
802
+ hashSalt: string;
770
803
  /**
771
804
  * Animation studio that produced the media
772
805
  */
@@ -784,181 +817,22 @@ export type Media = {
784
817
  */
785
818
  storageBasePath?: string;
786
819
  /**
787
- * Characters appearing in the media with their voice actors
788
- */
789
- characters?: Array<MediaCharacter>;
790
- /**
791
- * Lists that contain this media
792
- */
793
- lists?: Array<List>;
794
- };
795
- export type MediaListResponse = {
796
- data: Array<Media>;
797
- /**
798
- * Next cursor for pagination (undefined if no more results)
799
- */
800
- cursor?: number;
801
- /**
802
- * Whether more results are available
820
+ * List of characters appearing in the media with their voice actors
803
821
  */
804
- hasMoreResults: boolean;
822
+ characters?: Array<CharacterInput>;
805
823
  };
806
824
  /**
807
- * Character data for creating/updating media
825
+ * Conflict error response
808
826
  */
809
- export type CharacterInput = {
827
+ export type Error409 = {
810
828
  /**
811
- * AniList character ID
829
+ * Specific error code for programmatic handling
812
830
  */
813
- id: number;
831
+ code: 'ACCOUNT_CONFLICT' | 'DUPLICATE_KEY';
814
832
  /**
815
- * Japanese name of the character
833
+ * A short, human-readable summary of the problem
816
834
  */
817
- nameJa: string;
818
- /**
819
- * English name of the character
820
- */
821
- nameEn: string;
822
- /**
823
- * Character image URL
824
- */
825
- imageUrl: string;
826
- /**
827
- * Character's role in the media
828
- */
829
- role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
830
- /**
831
- * AniList staff ID for the Japanese voice actor
832
- */
833
- seiyuuId: number;
834
- /**
835
- * Japanese name of the voice actor
836
- */
837
- seiyuuNameJa: string;
838
- /**
839
- * English name of the voice actor
840
- */
841
- seiyuuNameEn: string;
842
- /**
843
- * Voice actor profile image URL
844
- */
845
- seiyuuImageUrl: string;
846
- };
847
- /**
848
- * List data for adding media to a list
849
- */
850
- export type ListInput = {
851
- /**
852
- * Existing list ID (if adding to existing list)
853
- */
854
- listId?: number;
855
- /**
856
- * Name for new list (if creating new list)
857
- */
858
- listName?: string;
859
- /**
860
- * Type of list (if creating new list)
861
- */
862
- listType?: 'SERIES' | 'CUSTOM';
863
- /**
864
- * Visibility of list (if creating new list)
865
- */
866
- listVisibility?: 'PUBLIC' | 'PRIVATE';
867
- /**
868
- * Position/order of media in the list (1-indexed)
869
- */
870
- position: number;
871
- };
872
- /**
873
- * Request body for creating a new media entry
874
- */
875
- export type MediaCreateRequest = {
876
- externalIds?: ExternalId;
877
- /**
878
- * Original Japanese name of the media
879
- */
880
- nameJa: string;
881
- /**
882
- * Romaji transliteration of the media name
883
- */
884
- nameRomaji: string;
885
- /**
886
- * English name of the media
887
- */
888
- nameEn: string;
889
- /**
890
- * Format of the media release (e.g., TV, OVA, Movie)
891
- */
892
- airingFormat: string;
893
- /**
894
- * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
895
- */
896
- airingStatus: string;
897
- /**
898
- * List of genres associated with the media
899
- */
900
- genres: Array<string>;
901
- /**
902
- * Storage backend for media assets
903
- */
904
- storage: 'LOCAL' | 'R2';
905
- /**
906
- * Start date of the media (first airing/release)
907
- */
908
- startDate: string;
909
- /**
910
- * End date of the media (last airing/release)
911
- */
912
- endDate?: string;
913
- /**
914
- * Media category
915
- */
916
- category: 'ANIME' | 'JDRAMA';
917
- /**
918
- * Version of the media-sub-splitter used
919
- */
920
- version: string;
921
- /**
922
- * Hash salt used when generating the hash for the related media assets
923
- */
924
- hashSalt: string;
925
- /**
926
- * Animation studio that produced the media
927
- */
928
- studio: string;
929
- /**
930
- * Airing season label for the media
931
- */
932
- seasonName: string;
933
- /**
934
- * Airing year for the media
935
- */
936
- seasonYear: number;
937
- /**
938
- * Base path for R2/CDN storage (e.g. "media/21459")
939
- */
940
- storageBasePath?: string;
941
- /**
942
- * List of characters appearing in the media with their voice actors
943
- */
944
- characters?: Array<CharacterInput>;
945
- /**
946
- * Lists to add this media to (e.g., series, franchise)
947
- */
948
- lists?: Array<ListInput>;
949
- };
950
- /**
951
- * Conflict error response
952
- */
953
- export type Error409 = {
954
- /**
955
- * Specific error code for programmatic handling
956
- */
957
- code: 'ACCOUNT_CONFLICT' | 'DUPLICATE_KEY';
958
- /**
959
- * A short, human-readable summary of the problem
960
- */
961
- title: string;
835
+ title: string;
962
836
  /**
963
837
  * A human-readable explanation specific to this occurrence
964
838
  */
@@ -1090,10 +964,6 @@ export type MediaUpdateRequest = {
1090
964
  * List of characters appearing in the media with their voice actors
1091
965
  */
1092
966
  characters?: Array<CharacterInput>;
1093
- /**
1094
- * Lists to add this media to (e.g., series, franchise)
1095
- */
1096
- lists?: Array<ListInput>;
1097
967
  /**
1098
968
  * Total number of subtitle segments available
1099
969
  */
@@ -1145,15 +1015,8 @@ export type EpisodeListResponse = {
1145
1015
  /**
1146
1016
  * Array of episode objects
1147
1017
  */
1148
- data: Array<Episode>;
1149
- /**
1150
- * Cursor for pagination (last episode number in current page)
1151
- */
1152
- cursor?: number;
1153
- /**
1154
- * Whether more results are available
1155
- */
1156
- hasMore: boolean;
1018
+ episodes: Array<Episode>;
1019
+ pagination: CursorPagination;
1157
1020
  };
1158
1021
  export type EpisodeCreateRequest = {
1159
1022
  /**
@@ -1222,111 +1085,6 @@ export type EpisodeUpdateRequest = {
1222
1085
  */
1223
1086
  thumbnailUrl?: string;
1224
1087
  };
1225
- /**
1226
- * Japanese content with optional character count
1227
- */
1228
- export type JapaneseContent = {
1229
- /**
1230
- * Original Japanese content
1231
- */
1232
- content: string;
1233
- /**
1234
- * Number of characters in the Japanese content
1235
- */
1236
- characterCount?: number;
1237
- };
1238
- /**
1239
- * Translation content for a language
1240
- */
1241
- export type TranslationContent = {
1242
- /**
1243
- * Translated content
1244
- */
1245
- content?: string;
1246
- /**
1247
- * Whether the translation was machine-translated
1248
- */
1249
- isMachineTranslated: boolean;
1250
- };
1251
- export type Segment = {
1252
- /**
1253
- * Auto-generated segment ID
1254
- */
1255
- id: number;
1256
- /**
1257
- * Unique identifier for the segment
1258
- */
1259
- uuid: string;
1260
- /**
1261
- * Position of the segment within the episode
1262
- */
1263
- position: number;
1264
- /**
1265
- * Segment status
1266
- */
1267
- status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1268
- /**
1269
- * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1270
- */
1271
- startTime: string;
1272
- /**
1273
- * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1274
- */
1275
- endTime: string;
1276
- textJa: JapaneseContent;
1277
- textEn: TranslationContent;
1278
- textEs: TranslationContent;
1279
- /**
1280
- * Whether the segment contains NSFW content
1281
- */
1282
- isNsfw: boolean;
1283
- /**
1284
- * URL to segment screenshot/image (generated from storage + hashedId)
1285
- */
1286
- imageUrl?: string;
1287
- /**
1288
- * URL to segment audio file (generated from storage + hashedId)
1289
- */
1290
- audioUrl?: string;
1291
- /**
1292
- * URL to segment video file (generated from storage + hashedId)
1293
- */
1294
- videoUrl?: string;
1295
- /**
1296
- * Episode number this segment belongs to
1297
- */
1298
- episode: number;
1299
- /**
1300
- * Media ID this segment belongs to
1301
- */
1302
- mediaId: number;
1303
- /**
1304
- * Storage backend for segment assets
1305
- */
1306
- storage: 'LOCAL' | 'R2';
1307
- /**
1308
- * Hash identifier for the segment
1309
- */
1310
- hashedId: string;
1311
- /**
1312
- * Morphological analysis of the Japanese content
1313
- */
1314
- morphemes?: Array<Morpheme>;
1315
- };
1316
- export type SegmentListResponse = {
1317
- /**
1318
- * Array of segment objects
1319
- */
1320
- data: Array<Segment>;
1321
- /**
1322
- * Cursor for pagination (last segment ID in current page)
1323
- */
1324
- cursor?: number;
1325
- /**
1326
- * Whether more results are available
1327
- */
1328
- hasMore: boolean;
1329
- };
1330
1088
  export type SegmentCreateRequest = {
1331
1089
  /**
1332
1090
  * Position of the segment within the episode
@@ -1337,13 +1095,13 @@ export type SegmentCreateRequest = {
1337
1095
  */
1338
1096
  status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1339
1097
  /**
1340
- * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1098
+ * Start time of the segment in milliseconds from the beginning of the episode
1341
1099
  */
1342
- startTime: string;
1100
+ startTimeMs: number;
1343
1101
  /**
1344
- * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1102
+ * End time of the segment in milliseconds from the beginning of the episode
1345
1103
  */
1346
- endTime: string;
1104
+ endTimeMs: number;
1347
1105
  textJa: {
1348
1106
  /**
1349
1107
  * Original Japanese content of the segment
@@ -1370,10 +1128,19 @@ export type SegmentCreateRequest = {
1370
1128
  */
1371
1129
  isMachineTranslated?: boolean;
1372
1130
  };
1131
+ contentRating?: ContentRating;
1373
1132
  /**
1374
- * Whether the segment contains NSFW content
1133
+ * Raw WD Tagger v3 classifier output used to derive content rating
1375
1134
  */
1376
- isNsfw?: boolean;
1135
+ ratingAnalysis?: {
1136
+ [key: string]: unknown;
1137
+ };
1138
+ /**
1139
+ * POS tokenization results keyed by engine (sudachi, unidic)
1140
+ */
1141
+ posAnalysis?: {
1142
+ [key: string]: unknown;
1143
+ };
1377
1144
  /**
1378
1145
  * Storage backend for segment assets
1379
1146
  */
@@ -1383,6 +1150,35 @@ export type SegmentCreateRequest = {
1383
1150
  */
1384
1151
  hashedId: string;
1385
1152
  };
1153
+ /**
1154
+ * Segment with internal fields (for internal API responses)
1155
+ */
1156
+ export type SegmentInternal = Segment & {
1157
+ /**
1158
+ * Storage backend for segment assets
1159
+ */
1160
+ storage?: 'LOCAL' | 'R2';
1161
+ /**
1162
+ * Hash identifier for the segment
1163
+ */
1164
+ hashedId?: string;
1165
+ /**
1166
+ * Base path in the storage backend
1167
+ */
1168
+ storageBasePath?: string;
1169
+ /**
1170
+ * Raw WD Tagger v3 classifier output used to derive content rating
1171
+ */
1172
+ ratingAnalysis?: {
1173
+ [key: string]: unknown;
1174
+ };
1175
+ /**
1176
+ * POS tokenization results keyed by engine (sudachi, unidic)
1177
+ */
1178
+ posAnalysis?: {
1179
+ [key: string]: unknown;
1180
+ };
1181
+ };
1386
1182
  /**
1387
1183
  * All fields are optional for partial updates
1388
1184
  */
@@ -1396,13 +1192,13 @@ export type SegmentUpdateRequest = {
1396
1192
  */
1397
1193
  status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1398
1194
  /**
1399
- * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1195
+ * Start time of the segment in milliseconds from the beginning of the episode
1400
1196
  */
1401
- startTime?: string;
1197
+ startTimeMs?: number;
1402
1198
  /**
1403
- * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1199
+ * End time of the segment in milliseconds from the beginning of the episode
1404
1200
  */
1405
- endTime?: string;
1201
+ endTimeMs?: number;
1406
1202
  textJa?: {
1407
1203
  /**
1408
1204
  * Original Japanese content of the segment
@@ -1429,10 +1225,19 @@ export type SegmentUpdateRequest = {
1429
1225
  */
1430
1226
  isMachineTranslated?: boolean;
1431
1227
  };
1228
+ contentRating?: ContentRating;
1229
+ /**
1230
+ * Raw WD Tagger v3 classifier output used to derive content rating
1231
+ */
1232
+ ratingAnalysis?: {
1233
+ [key: string]: unknown;
1234
+ };
1432
1235
  /**
1433
- * Whether the segment contains NSFW content
1236
+ * POS tokenization results keyed by engine (sudachi, unidic)
1434
1237
  */
1435
- isNsfw?: boolean;
1238
+ posAnalysis?: {
1239
+ [key: string]: unknown;
1240
+ };
1436
1241
  /**
1437
1242
  * Storage backend for segment assets
1438
1243
  */
@@ -1443,31 +1248,100 @@ export type SegmentUpdateRequest = {
1443
1248
  hashedId?: string;
1444
1249
  };
1445
1250
  export type SegmentContextResponse = {
1446
- segments: Array<SearchResult>;
1251
+ segments: Array<Segment>;
1252
+ includes?: {
1253
+ /**
1254
+ * Media objects keyed by mediaId
1255
+ */
1256
+ media?: {
1257
+ [key: string]: Media;
1258
+ };
1259
+ };
1447
1260
  };
1448
1261
  /**
1449
- * Character with all media appearances
1262
+ * Ordered media series grouping
1450
1263
  */
1451
- export type CharacterWithMedia = {
1264
+ export type Series = {
1452
1265
  /**
1453
- * AniList character ID
1266
+ * Series ID
1454
1267
  */
1455
1268
  id: number;
1456
1269
  /**
1457
- * Japanese name of the character
1270
+ * Japanese name of the series
1458
1271
  */
1459
1272
  nameJa: string;
1460
1273
  /**
1461
- * English name of the character
1274
+ * Romaji name of the series
1462
1275
  */
1463
- nameEn: string;
1276
+ nameRomaji: string;
1464
1277
  /**
1465
- * Character image URL
1278
+ * English name of the series
1466
1279
  */
1467
- imageUrl: string;
1468
- seiyuu: Seiyuu;
1469
- /**
1470
- * All media this character appears in
1280
+ nameEn: string;
1281
+ };
1282
+ export type SeriesListResponse = {
1283
+ series: Array<Series>;
1284
+ pagination: CursorPagination;
1285
+ };
1286
+ /**
1287
+ * Series with ordered media entries
1288
+ */
1289
+ export type SeriesWithMedia = {
1290
+ /**
1291
+ * Series ID
1292
+ */
1293
+ id: number;
1294
+ /**
1295
+ * Japanese name of the series
1296
+ */
1297
+ nameJa: string;
1298
+ /**
1299
+ * Romaji name of the series
1300
+ */
1301
+ nameRomaji: string;
1302
+ /**
1303
+ * English name of the series
1304
+ */
1305
+ nameEn: string;
1306
+ /**
1307
+ * All media in the series, sorted by position
1308
+ */
1309
+ media: Array<{
1310
+ /**
1311
+ * Position in the series (1-indexed)
1312
+ */
1313
+ position?: number;
1314
+ media?: Media;
1315
+ }>;
1316
+ };
1317
+ /**
1318
+ * Anime character
1319
+ */
1320
+ export type Character = {
1321
+ /**
1322
+ * AniList character ID
1323
+ */
1324
+ id: number;
1325
+ /**
1326
+ * Japanese name of the character
1327
+ */
1328
+ nameJa: string;
1329
+ /**
1330
+ * English name of the character
1331
+ */
1332
+ nameEn: string;
1333
+ /**
1334
+ * Character image URL
1335
+ */
1336
+ imageUrl: string;
1337
+ };
1338
+ /**
1339
+ * Character with voice actor and all media appearances
1340
+ */
1341
+ export type CharacterWithMedia = Character & {
1342
+ seiyuu: Seiyuu;
1343
+ /**
1344
+ * All media this character appears in
1471
1345
  */
1472
1346
  mediaAppearances: Array<{
1473
1347
  media?: Media;
@@ -1478,7 +1352,7 @@ export type CharacterWithMedia = {
1478
1352
  }>;
1479
1353
  };
1480
1354
  /**
1481
- * Seiyuu with all voice acting roles
1355
+ * Seiyuu details with optional character appearances
1482
1356
  */
1483
1357
  export type SeiyuuWithRoles = {
1484
1358
  /**
@@ -1498,15 +1372,14 @@ export type SeiyuuWithRoles = {
1498
1372
  */
1499
1373
  imageUrl: string;
1500
1374
  /**
1501
- * All characters voiced by this seiyuu with their media appearances
1375
+ * Characters voiced by this seiyuu with their media appearances
1502
1376
  */
1503
- roles: Array<{
1504
- character?: Character;
1505
- media?: Media;
1377
+ characters: Array<Character & {
1378
+ media: Media;
1506
1379
  /**
1507
1380
  * Character role in this media
1508
1381
  */
1509
- role?: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1382
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1510
1383
  }>;
1511
1384
  };
1512
1385
  export type UserQuotaResponse = {
@@ -1535,31 +1408,65 @@ export type UserQuotaResponse = {
1535
1408
  */
1536
1409
  periodEnd: string;
1537
1410
  };
1538
- export type Report = {
1411
+ export type ReportTargetMedia = {
1539
1412
  /**
1540
- * Report ID
1413
+ * Report target type
1541
1414
  */
1542
- id: number;
1415
+ type: 'MEDIA';
1543
1416
  /**
1544
- * Who created this report
1417
+ * Media ID this report targets
1545
1418
  */
1546
- source: 'USER' | 'AUTO';
1419
+ mediaId: number;
1420
+ };
1421
+ export type ReportTargetEpisode = {
1547
1422
  /**
1548
- * What level the report targets
1423
+ * Report target type
1549
1424
  */
1550
- targetType: 'SEGMENT' | 'EPISODE' | 'MEDIA';
1425
+ type: 'EPISODE';
1551
1426
  /**
1552
1427
  * Media ID this report targets
1553
1428
  */
1554
- targetMediaId: number;
1429
+ mediaId: number;
1555
1430
  /**
1556
- * Episode number (for EPISODE/SEGMENT targets)
1431
+ * Episode number this report targets
1557
1432
  */
1558
- targetEpisodeNumber?: number;
1433
+ episodeNumber: number;
1434
+ };
1435
+ export type ReportTargetSegment = {
1436
+ /**
1437
+ * Report target type
1438
+ */
1439
+ type: 'SEGMENT';
1440
+ /**
1441
+ * Media ID this report targets
1442
+ */
1443
+ mediaId: number;
1444
+ /**
1445
+ * Episode number containing the segment
1446
+ */
1447
+ episodeNumber?: number;
1448
+ /**
1449
+ * Segment UUID this report targets
1450
+ */
1451
+ segmentUuid: string;
1452
+ };
1453
+ export type ReportTarget = ({
1454
+ type: 'MEDIA';
1455
+ } & ReportTargetMedia) | ({
1456
+ type: 'EPISODE';
1457
+ } & ReportTargetEpisode) | ({
1458
+ type: 'SEGMENT';
1459
+ } & ReportTargetSegment);
1460
+ export type Report = {
1461
+ /**
1462
+ * Report ID
1463
+ */
1464
+ id: number;
1559
1465
  /**
1560
- * Segment UUID (for SEGMENT targets)
1466
+ * Who created this report
1561
1467
  */
1562
- targetSegmentUuid?: string;
1468
+ source: 'USER' | 'AUTO';
1469
+ target: ReportTarget;
1563
1470
  /**
1564
1471
  * ID of the auto-check run that created this report (AUTO only)
1565
1472
  */
@@ -1600,29 +1507,16 @@ export type Report = {
1600
1507
  updatedAt?: string;
1601
1508
  };
1602
1509
  export type ReportListResponse = {
1603
- data: Array<Report>;
1604
- /**
1605
- * Whether more results are available
1606
- */
1607
- hasMore: boolean;
1608
- /**
1609
- * Cursor for next page
1610
- */
1611
- cursor?: number;
1612
- };
1510
+ reports: Array<Report>;
1511
+ pagination: CursorPagination;
1512
+ };
1513
+ export type UserReportTarget = ({
1514
+ type: 'MEDIA';
1515
+ } & ReportTargetMedia) | ({
1516
+ type: 'SEGMENT';
1517
+ } & ReportTargetSegment);
1613
1518
  export type CreateReportRequest = {
1614
- /**
1615
- * Type of the entity being reported
1616
- */
1617
- targetType: 'SEGMENT' | 'MEDIA';
1618
- /**
1619
- * Media ID of the reported entity
1620
- */
1621
- targetMediaId: number;
1622
- /**
1623
- * Segment UUID (required when targetType is SEGMENT)
1624
- */
1625
- targetSegmentUuid?: string;
1519
+ target: UserReportTarget;
1626
1520
  /**
1627
1521
  * Reason for the report
1628
1522
  */
@@ -1643,12 +1537,44 @@ export type UserPreferences = {
1643
1537
  * Preferred language for media names display
1644
1538
  */
1645
1539
  mediaNameLanguage?: 'english' | 'japanese' | 'romaji';
1540
+ /**
1541
+ * Per-category content rating display preferences
1542
+ */
1543
+ contentRatingPreferences?: {
1544
+ suggestive?: 'show' | 'blur' | 'hide';
1545
+ explicit?: 'show' | 'blur' | 'hide';
1546
+ };
1646
1547
  searchHistory?: {
1647
1548
  /**
1648
1549
  * Whether activity tracking is enabled (default true)
1649
1550
  */
1650
1551
  enabled?: boolean;
1651
1552
  };
1553
+ /**
1554
+ * ISO timestamp of when the user last visited the blog page
1555
+ */
1556
+ blogLastVisited?: string;
1557
+ ankiProfiles?: Array<{
1558
+ id: string;
1559
+ name: string;
1560
+ deck?: string;
1561
+ model?: string;
1562
+ fields?: Array<{
1563
+ key: string;
1564
+ value: string;
1565
+ }>;
1566
+ key?: string;
1567
+ serverAddress: string;
1568
+ }>;
1569
+ /**
1570
+ * Media hidden from search results by the user
1571
+ */
1572
+ hiddenMedia?: Array<{
1573
+ mediaId: number;
1574
+ nameEn?: string;
1575
+ nameJa?: string;
1576
+ nameRomaji?: string;
1577
+ }>;
1652
1578
  };
1653
1579
  /**
1654
1580
  * Type of user activity
@@ -1662,102 +1588,108 @@ export type UserActivity = {
1662
1588
  searchQuery?: string;
1663
1589
  createdAt: string;
1664
1590
  };
1665
- export type LabFeature = {
1591
+ /**
1592
+ * User segment collection
1593
+ */
1594
+ export type Collection = {
1666
1595
  /**
1667
- * Unique identifier for the lab feature
1596
+ * Collection ID
1668
1597
  */
1669
- key: string;
1598
+ id: number;
1670
1599
  /**
1671
- * Human-readable feature name
1600
+ * Name of the collection
1672
1601
  */
1673
1602
  name: string;
1674
1603
  /**
1675
- * Description of what the feature does
1604
+ * User ID who owns the collection
1676
1605
  */
1677
- description: string;
1606
+ userId: number;
1678
1607
  /**
1679
- * Whether the feature is globally available
1608
+ * Visibility of the collection
1680
1609
  */
1681
- enabled: boolean;
1610
+ visibility: 'PUBLIC' | 'PRIVATE';
1611
+ };
1612
+ export type UserExportCollection = Collection & {
1613
+ /**
1614
+ * Segment UUIDs in saved order
1615
+ */
1616
+ segmentUuids: Array<string>;
1682
1617
  };
1683
1618
  /**
1684
- * Request body for creating a new standalone list
1619
+ * User data export payload (identifier-oriented references)
1685
1620
  */
1686
- export type ListCreateRequest = {
1621
+ export type UserExportResponse = {
1622
+ profile: {
1623
+ id: number;
1624
+ username: string;
1625
+ email: string;
1626
+ createdAt: string;
1627
+ };
1628
+ preferences: UserPreferences;
1629
+ activity: Array<UserActivity>;
1630
+ collections: Array<UserExportCollection>;
1631
+ reports: Array<Report>;
1632
+ };
1633
+ export type UserLabFeature = {
1634
+ /**
1635
+ * Unique identifier for the lab feature
1636
+ */
1637
+ key: string;
1687
1638
  /**
1688
- * Name of the list
1639
+ * Human-readable feature name
1689
1640
  */
1690
1641
  name: string;
1691
1642
  /**
1692
- * Type of list
1643
+ * Description of what the feature does
1693
1644
  */
1694
- type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1645
+ description: string;
1695
1646
  /**
1696
- * User ID who owns the list (1 = admin)
1647
+ * Whether the feature is globally available
1697
1648
  */
1698
- userId?: number;
1649
+ enabled: boolean;
1699
1650
  /**
1700
- * Visibility of the list
1651
+ * Whether the user has opted in to this feature
1701
1652
  */
1702
- visibility?: 'PUBLIC' | 'PRIVATE';
1653
+ userEnabled: boolean;
1703
1654
  };
1704
1655
  /**
1705
- * List with all media in order
1656
+ * Paginated collection list response
1706
1657
  */
1707
- export type ListWithMedia = {
1708
- /**
1709
- * List ID
1710
- */
1711
- id: number;
1658
+ export type CollectionListResponse = {
1659
+ collections: Array<Collection>;
1660
+ pagination: CursorPagination;
1661
+ };
1662
+ /**
1663
+ * Request body for creating a new collection
1664
+ */
1665
+ export type CollectionRequests = {
1712
1666
  /**
1713
- * Name of the list
1667
+ * Name of the collection
1714
1668
  */
1715
1669
  name: string;
1716
1670
  /**
1717
- * Type of list
1718
- */
1719
- type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1720
- /**
1721
- * User ID who owns the list (1 = admin)
1671
+ * Visibility of the collection
1722
1672
  */
1723
- userId: number;
1724
- /**
1725
- * Visibility of the list
1726
- */
1727
- visibility: 'PUBLIC' | 'PRIVATE';
1728
- /**
1729
- * All media in the list, sorted by position
1730
- */
1731
- media: Array<{
1732
- /**
1733
- * Position in the list (1-indexed)
1734
- */
1735
- position?: number;
1736
- media?: Media;
1737
- }>;
1673
+ visibility?: 'PUBLIC' | 'PRIVATE';
1738
1674
  };
1739
1675
  /**
1740
- * List with saved segments (search result format)
1676
+ * Collection with saved segments (search result format)
1741
1677
  */
1742
- export type ListWithSegments = {
1678
+ export type CollectionWithSegments = {
1743
1679
  /**
1744
- * List ID
1680
+ * Collection ID
1745
1681
  */
1746
1682
  id: number;
1747
1683
  /**
1748
- * Name of the list
1684
+ * Name of the collection
1749
1685
  */
1750
1686
  name: string;
1751
1687
  /**
1752
- * Type of list
1753
- */
1754
- type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1755
- /**
1756
- * User ID who owns the list
1688
+ * User ID who owns the collection
1757
1689
  */
1758
1690
  userId: number;
1759
1691
  /**
1760
- * Visibility of the list
1692
+ * Visibility of the collection
1761
1693
  */
1762
1694
  visibility: 'PUBLIC' | 'PRIVATE';
1763
1695
  /**
@@ -1765,19 +1697,28 @@ export type ListWithSegments = {
1765
1697
  */
1766
1698
  segments: Array<{
1767
1699
  /**
1768
- * Position in the list
1700
+ * Position in the collection
1769
1701
  */
1770
1702
  position?: number;
1771
1703
  /**
1772
1704
  * User annotation
1773
1705
  */
1774
1706
  note?: string;
1775
- result?: SearchResult;
1707
+ result?: Segment;
1776
1708
  }>;
1709
+ includes?: {
1710
+ /**
1711
+ * Media objects keyed by mediaId
1712
+ */
1713
+ media?: {
1714
+ [key: string]: Media;
1715
+ };
1716
+ };
1777
1717
  /**
1778
- * Total number of segments in the list
1718
+ * Total number of segments in the collection
1779
1719
  */
1780
1720
  totalCount: number;
1721
+ pagination: CursorPagination;
1781
1722
  };
1782
1723
  /**
1783
1724
  * Request to reindex segments from the database into Elasticsearch
@@ -1858,15 +1799,8 @@ export type AdminReport = Report & {
1858
1799
  reporterName: string;
1859
1800
  };
1860
1801
  export type AdminReportListResponse = {
1861
- data: Array<AdminReport>;
1862
- /**
1863
- * Whether more results are available
1864
- */
1865
- hasMore: boolean;
1866
- /**
1867
- * Cursor for next page
1868
- */
1869
- cursor?: number;
1802
+ reports: Array<AdminReport>;
1803
+ pagination: CursorPagination;
1870
1804
  };
1871
1805
  export type UpdateReportRequest = {
1872
1806
  /**
@@ -2013,13 +1947,322 @@ export type ReviewAllowlist = {
2013
1947
  */
2014
1948
  createdAt: string;
2015
1949
  };
2016
- export type HealthCheckData = {
2017
- body?: never;
2018
- path?: never;
1950
+ export type SearchData = {
1951
+ body?: SearchRequest;
1952
+ path?: never;
1953
+ query?: never;
1954
+ url: '/v1/search';
1955
+ };
1956
+ export type SearchErrors = {
1957
+ /**
1958
+ * Bad Request
1959
+ */
1960
+ 400: Error400;
1961
+ /**
1962
+ * Unauthorized
1963
+ */
1964
+ 401: Error401;
1965
+ /**
1966
+ * Forbidden
1967
+ */
1968
+ 403: Error403;
1969
+ /**
1970
+ * Too Many Requests
1971
+ */
1972
+ 429: Error429;
1973
+ /**
1974
+ * Internal Server Error
1975
+ */
1976
+ 500: Error500;
1977
+ };
1978
+ export type SearchError = SearchErrors[keyof SearchErrors];
1979
+ export type SearchResponses = {
1980
+ /**
1981
+ * OK
1982
+ */
1983
+ 200: SearchResponse;
1984
+ };
1985
+ export type SearchResponse2 = SearchResponses[keyof SearchResponses];
1986
+ export type GetSearchStatsData = {
1987
+ body?: SearchStatsRequest;
1988
+ path?: never;
1989
+ query?: never;
1990
+ url: '/v1/search/stats';
1991
+ };
1992
+ export type GetSearchStatsErrors = {
1993
+ /**
1994
+ * Bad Request
1995
+ */
1996
+ 400: Error400;
1997
+ /**
1998
+ * Unauthorized
1999
+ */
2000
+ 401: Error401;
2001
+ /**
2002
+ * Forbidden
2003
+ */
2004
+ 403: Error403;
2005
+ /**
2006
+ * Too Many Requests
2007
+ */
2008
+ 429: Error429;
2009
+ /**
2010
+ * Internal Server Error
2011
+ */
2012
+ 500: Error500;
2013
+ };
2014
+ export type GetSearchStatsError = GetSearchStatsErrors[keyof GetSearchStatsErrors];
2015
+ export type GetSearchStatsResponses = {
2016
+ /**
2017
+ * OK
2018
+ */
2019
+ 200: SearchStatsResponse;
2020
+ };
2021
+ export type GetSearchStatsResponse = GetSearchStatsResponses[keyof GetSearchStatsResponses];
2022
+ export type SearchWordsData = {
2023
+ body: SearchMultipleRequest;
2024
+ path?: never;
2025
+ query?: never;
2026
+ url: '/v1/search/words';
2027
+ };
2028
+ export type SearchWordsErrors = {
2029
+ /**
2030
+ * Bad Request
2031
+ */
2032
+ 400: Error400;
2033
+ /**
2034
+ * Unauthorized
2035
+ */
2036
+ 401: Error401;
2037
+ /**
2038
+ * Forbidden
2039
+ */
2040
+ 403: Error403;
2041
+ /**
2042
+ * Too Many Requests
2043
+ */
2044
+ 429: Error429;
2045
+ /**
2046
+ * Internal Server Error
2047
+ */
2048
+ 500: Error500;
2049
+ };
2050
+ export type SearchWordsError = SearchWordsErrors[keyof SearchWordsErrors];
2051
+ export type SearchWordsResponses = {
2052
+ /**
2053
+ * OK
2054
+ */
2055
+ 200: SearchMultipleResponse;
2056
+ };
2057
+ export type SearchWordsResponse = SearchWordsResponses[keyof SearchWordsResponses];
2058
+ export type ListMediaData = {
2059
+ body?: never;
2060
+ path?: never;
2061
+ query?: {
2062
+ /**
2063
+ * Number of results per page
2064
+ */
2065
+ limit?: number;
2066
+ /**
2067
+ * Pagination cursor offset
2068
+ */
2069
+ cursor?: number;
2070
+ /**
2071
+ * Filter by media category
2072
+ */
2073
+ category?: 'ANIME' | 'JDRAMA';
2074
+ /**
2075
+ * Search query for filtering media by name
2076
+ */
2077
+ query?: string;
2078
+ /**
2079
+ * Resources to expand in the media response (`media.characters` implies `media`)
2080
+ */
2081
+ include?: Array<MediaIncludeExpansion>;
2082
+ };
2083
+ url: '/v1/media';
2084
+ };
2085
+ export type ListMediaErrors = {
2086
+ /**
2087
+ * Bad Request
2088
+ */
2089
+ 400: Error400;
2090
+ /**
2091
+ * Unauthorized
2092
+ */
2093
+ 401: Error401;
2094
+ /**
2095
+ * Forbidden
2096
+ */
2097
+ 403: Error403;
2098
+ /**
2099
+ * Too Many Requests
2100
+ */
2101
+ 429: Error429;
2102
+ /**
2103
+ * Internal Server Error
2104
+ */
2105
+ 500: Error500;
2106
+ };
2107
+ export type ListMediaError = ListMediaErrors[keyof ListMediaErrors];
2108
+ export type ListMediaResponses = {
2109
+ /**
2110
+ * OK
2111
+ */
2112
+ 200: MediaListResponse;
2113
+ };
2114
+ export type ListMediaResponse = ListMediaResponses[keyof ListMediaResponses];
2115
+ export type CreateMediaData = {
2116
+ body: MediaCreateRequest;
2117
+ path?: never;
2118
+ query?: never;
2119
+ url: '/v1/media';
2120
+ };
2121
+ export type CreateMediaErrors = {
2122
+ /**
2123
+ * Bad Request
2124
+ */
2125
+ 400: Error400;
2126
+ /**
2127
+ * Unauthorized
2128
+ */
2129
+ 401: Error401;
2130
+ /**
2131
+ * Forbidden
2132
+ */
2133
+ 403: Error403;
2134
+ /**
2135
+ * Conflict
2136
+ */
2137
+ 409: Error409;
2138
+ /**
2139
+ * Too Many Requests
2140
+ */
2141
+ 429: Error429;
2142
+ /**
2143
+ * Internal Server Error
2144
+ */
2145
+ 500: Error500;
2146
+ };
2147
+ export type CreateMediaError = CreateMediaErrors[keyof CreateMediaErrors];
2148
+ export type CreateMediaResponses = {
2149
+ /**
2150
+ * Created
2151
+ */
2152
+ 201: Media;
2153
+ };
2154
+ export type CreateMediaResponse = CreateMediaResponses[keyof CreateMediaResponses];
2155
+ export type DeleteMediaData = {
2156
+ body?: never;
2157
+ path: {
2158
+ /**
2159
+ * Media ID
2160
+ */
2161
+ id: number;
2162
+ };
2163
+ query?: never;
2164
+ url: '/v1/media/{id}';
2165
+ };
2166
+ export type DeleteMediaErrors = {
2167
+ /**
2168
+ * Bad Request
2169
+ */
2170
+ 400: Error400;
2171
+ /**
2172
+ * Unauthorized
2173
+ */
2174
+ 401: Error401;
2175
+ /**
2176
+ * Forbidden
2177
+ */
2178
+ 403: Error403;
2179
+ /**
2180
+ * Not Found
2181
+ */
2182
+ 404: Error404;
2183
+ /**
2184
+ * Too Many Requests
2185
+ */
2186
+ 429: Error429;
2187
+ /**
2188
+ * Internal Server Error
2189
+ */
2190
+ 500: Error500;
2191
+ };
2192
+ export type DeleteMediaError = DeleteMediaErrors[keyof DeleteMediaErrors];
2193
+ export type DeleteMediaResponses = {
2194
+ /**
2195
+ * No Content
2196
+ */
2197
+ 204: void;
2198
+ };
2199
+ export type DeleteMediaResponse = DeleteMediaResponses[keyof DeleteMediaResponses];
2200
+ export type GetMediaData = {
2201
+ body?: never;
2202
+ path: {
2203
+ /**
2204
+ * Media ID
2205
+ */
2206
+ id: number;
2207
+ };
2208
+ query?: {
2209
+ /**
2210
+ * Resources to expand in the media response (`media.characters` implies `media`)
2211
+ */
2212
+ include?: Array<MediaIncludeExpansion>;
2213
+ };
2214
+ url: '/v1/media/{id}';
2215
+ };
2216
+ export type GetMediaErrors = {
2217
+ /**
2218
+ * Bad Request
2219
+ */
2220
+ 400: Error400;
2221
+ /**
2222
+ * Unauthorized
2223
+ */
2224
+ 401: Error401;
2225
+ /**
2226
+ * Forbidden
2227
+ */
2228
+ 403: Error403;
2229
+ /**
2230
+ * Not Found
2231
+ */
2232
+ 404: Error404;
2233
+ /**
2234
+ * Too Many Requests
2235
+ */
2236
+ 429: Error429;
2237
+ /**
2238
+ * Internal Server Error
2239
+ */
2240
+ 500: Error500;
2241
+ };
2242
+ export type GetMediaError = GetMediaErrors[keyof GetMediaErrors];
2243
+ export type GetMediaResponses = {
2244
+ /**
2245
+ * OK
2246
+ */
2247
+ 200: Media;
2248
+ };
2249
+ export type GetMediaResponse = GetMediaResponses[keyof GetMediaResponses];
2250
+ export type UpdateMediaData = {
2251
+ body: MediaUpdateRequest;
2252
+ path: {
2253
+ /**
2254
+ * Media ID
2255
+ */
2256
+ id: number;
2257
+ };
2019
2258
  query?: never;
2020
- url: '/v1/health';
2259
+ url: '/v1/media/{id}';
2021
2260
  };
2022
- export type HealthCheckErrors = {
2261
+ export type UpdateMediaErrors = {
2262
+ /**
2263
+ * Bad Request
2264
+ */
2265
+ 400: Error400;
2023
2266
  /**
2024
2267
  * Unauthorized
2025
2268
  */
@@ -2028,6 +2271,10 @@ export type HealthCheckErrors = {
2028
2271
  * Forbidden
2029
2272
  */
2030
2273
  403: Error403;
2274
+ /**
2275
+ * Not Found
2276
+ */
2277
+ 404: Error404;
2031
2278
  /**
2032
2279
  * Too Many Requests
2033
2280
  */
@@ -2037,21 +2284,35 @@ export type HealthCheckErrors = {
2037
2284
  */
2038
2285
  500: Error500;
2039
2286
  };
2040
- export type HealthCheckError = HealthCheckErrors[keyof HealthCheckErrors];
2041
- export type HealthCheckResponses = {
2287
+ export type UpdateMediaError = UpdateMediaErrors[keyof UpdateMediaErrors];
2288
+ export type UpdateMediaResponses = {
2042
2289
  /**
2043
2290
  * OK
2044
2291
  */
2045
- 200: SearchHealthCheckResponse;
2292
+ 200: Media;
2046
2293
  };
2047
- export type HealthCheckResponse = HealthCheckResponses[keyof HealthCheckResponses];
2048
- export type SearchIndexData = {
2049
- body?: SearchRequest;
2050
- path?: never;
2051
- query?: never;
2052
- url: '/v1/search';
2294
+ export type UpdateMediaResponse = UpdateMediaResponses[keyof UpdateMediaResponses];
2295
+ export type ListEpisodesData = {
2296
+ body?: never;
2297
+ path: {
2298
+ /**
2299
+ * ID of the media
2300
+ */
2301
+ mediaId: number;
2302
+ };
2303
+ query?: {
2304
+ /**
2305
+ * Maximum number of episodes to return
2306
+ */
2307
+ limit?: number;
2308
+ /**
2309
+ * Episode number to start from (for pagination)
2310
+ */
2311
+ cursor?: number;
2312
+ };
2313
+ url: '/v1/media/{mediaId}/episodes';
2053
2314
  };
2054
- export type SearchIndexErrors = {
2315
+ export type ListEpisodesErrors = {
2055
2316
  /**
2056
2317
  * Bad Request
2057
2318
  */
@@ -2064,6 +2325,10 @@ export type SearchIndexErrors = {
2064
2325
  * Forbidden
2065
2326
  */
2066
2327
  403: Error403;
2328
+ /**
2329
+ * Not Found
2330
+ */
2331
+ 404: Error404;
2067
2332
  /**
2068
2333
  * Too Many Requests
2069
2334
  */
@@ -2073,21 +2338,26 @@ export type SearchIndexErrors = {
2073
2338
  */
2074
2339
  500: Error500;
2075
2340
  };
2076
- export type SearchIndexError = SearchIndexErrors[keyof SearchIndexErrors];
2077
- export type SearchIndexResponses = {
2341
+ export type ListEpisodesError = ListEpisodesErrors[keyof ListEpisodesErrors];
2342
+ export type ListEpisodesResponses = {
2078
2343
  /**
2079
- * OK
2344
+ * Paginated list of episodes
2080
2345
  */
2081
- 200: SearchResponse;
2346
+ 200: EpisodeListResponse;
2082
2347
  };
2083
- export type SearchIndexResponse = SearchIndexResponses[keyof SearchIndexResponses];
2084
- export type SearchStatsData = {
2085
- body?: SearchStatsRequest;
2086
- path?: never;
2348
+ export type ListEpisodesResponse = ListEpisodesResponses[keyof ListEpisodesResponses];
2349
+ export type CreateEpisodeData = {
2350
+ body: EpisodeCreateRequest;
2351
+ path: {
2352
+ /**
2353
+ * ID of the media
2354
+ */
2355
+ mediaId: number;
2356
+ };
2087
2357
  query?: never;
2088
- url: '/v1/search/stats';
2358
+ url: '/v1/media/{mediaId}/episodes';
2089
2359
  };
2090
- export type SearchStatsErrors = {
2360
+ export type CreateEpisodeErrors = {
2091
2361
  /**
2092
2362
  * Bad Request
2093
2363
  */
@@ -2100,6 +2370,14 @@ export type SearchStatsErrors = {
2100
2370
  * Forbidden
2101
2371
  */
2102
2372
  403: Error403;
2373
+ /**
2374
+ * Not Found
2375
+ */
2376
+ 404: Error404;
2377
+ /**
2378
+ * Conflict
2379
+ */
2380
+ 409: Error409;
2103
2381
  /**
2104
2382
  * Too Many Requests
2105
2383
  */
@@ -2109,21 +2387,30 @@ export type SearchStatsErrors = {
2109
2387
  */
2110
2388
  500: Error500;
2111
2389
  };
2112
- export type SearchStatsError = SearchStatsErrors[keyof SearchStatsErrors];
2113
- export type SearchStatsResponses = {
2390
+ export type CreateEpisodeError = CreateEpisodeErrors[keyof CreateEpisodeErrors];
2391
+ export type CreateEpisodeResponses = {
2114
2392
  /**
2115
- * OK
2393
+ * Single episode response
2116
2394
  */
2117
- 200: SearchStatsResponse;
2395
+ 201: Episode;
2118
2396
  };
2119
- export type SearchStatsResponse2 = SearchStatsResponses[keyof SearchStatsResponses];
2120
- export type SearchWordsData = {
2121
- body: SearchMultipleRequest;
2122
- path?: never;
2397
+ export type CreateEpisodeResponse = CreateEpisodeResponses[keyof CreateEpisodeResponses];
2398
+ export type DeleteEpisodeData = {
2399
+ body?: never;
2400
+ path: {
2401
+ /**
2402
+ * ID of the media
2403
+ */
2404
+ mediaId: number;
2405
+ /**
2406
+ * Episode number
2407
+ */
2408
+ episodeNumber: number;
2409
+ };
2123
2410
  query?: never;
2124
- url: '/v1/search/words';
2411
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2125
2412
  };
2126
- export type SearchWordsErrors = {
2413
+ export type DeleteEpisodeErrors = {
2127
2414
  /**
2128
2415
  * Bad Request
2129
2416
  */
@@ -2136,6 +2423,10 @@ export type SearchWordsErrors = {
2136
2423
  * Forbidden
2137
2424
  */
2138
2425
  403: Error403;
2426
+ /**
2427
+ * Not Found
2428
+ */
2429
+ 404: Error404;
2139
2430
  /**
2140
2431
  * Too Many Requests
2141
2432
  */
@@ -2145,38 +2436,30 @@ export type SearchWordsErrors = {
2145
2436
  */
2146
2437
  500: Error500;
2147
2438
  };
2148
- export type SearchWordsError = SearchWordsErrors[keyof SearchWordsErrors];
2149
- export type SearchWordsResponses = {
2439
+ export type DeleteEpisodeError = DeleteEpisodeErrors[keyof DeleteEpisodeErrors];
2440
+ export type DeleteEpisodeResponses = {
2150
2441
  /**
2151
- * OK
2442
+ * Episode successfully deleted
2152
2443
  */
2153
- 200: SearchMultipleResponse;
2444
+ 204: void;
2154
2445
  };
2155
- export type SearchWordsResponse = SearchWordsResponses[keyof SearchWordsResponses];
2156
- export type MediaIndexData = {
2446
+ export type DeleteEpisodeResponse = DeleteEpisodeResponses[keyof DeleteEpisodeResponses];
2447
+ export type GetEpisodeData = {
2157
2448
  body?: never;
2158
- path?: never;
2159
- query?: {
2160
- /**
2161
- * Number of results per page
2162
- */
2163
- limit?: number;
2164
- /**
2165
- * Pagination cursor offset
2166
- */
2167
- cursor?: number;
2449
+ path: {
2168
2450
  /**
2169
- * Filter by media category
2451
+ * ID of the media
2170
2452
  */
2171
- category?: 'ANIME' | 'JDRAMA';
2453
+ mediaId: number;
2172
2454
  /**
2173
- * Search query for filtering media by name
2455
+ * Episode number
2174
2456
  */
2175
- query?: string;
2457
+ episodeNumber: number;
2176
2458
  };
2177
- url: '/v1/media';
2459
+ query?: never;
2460
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2178
2461
  };
2179
- export type MediaIndexErrors = {
2462
+ export type GetEpisodeErrors = {
2180
2463
  /**
2181
2464
  * Bad Request
2182
2465
  */
@@ -2189,6 +2472,10 @@ export type MediaIndexErrors = {
2189
2472
  * Forbidden
2190
2473
  */
2191
2474
  403: Error403;
2475
+ /**
2476
+ * Not Found
2477
+ */
2478
+ 404: Error404;
2192
2479
  /**
2193
2480
  * Too Many Requests
2194
2481
  */
@@ -2198,21 +2485,30 @@ export type MediaIndexErrors = {
2198
2485
  */
2199
2486
  500: Error500;
2200
2487
  };
2201
- export type MediaIndexError = MediaIndexErrors[keyof MediaIndexErrors];
2202
- export type MediaIndexResponses = {
2488
+ export type GetEpisodeError = GetEpisodeErrors[keyof GetEpisodeErrors];
2489
+ export type GetEpisodeResponses = {
2203
2490
  /**
2204
- * OK
2491
+ * Single episode response
2205
2492
  */
2206
- 200: MediaListResponse;
2493
+ 200: Episode;
2207
2494
  };
2208
- export type MediaIndexResponse = MediaIndexResponses[keyof MediaIndexResponses];
2209
- export type MediaCreateData = {
2210
- body: MediaCreateRequest;
2211
- path?: never;
2495
+ export type GetEpisodeResponse = GetEpisodeResponses[keyof GetEpisodeResponses];
2496
+ export type UpdateEpisodeData = {
2497
+ body: EpisodeUpdateRequest;
2498
+ path: {
2499
+ /**
2500
+ * ID of the media
2501
+ */
2502
+ mediaId: number;
2503
+ /**
2504
+ * Episode number
2505
+ */
2506
+ episodeNumber: number;
2507
+ };
2212
2508
  query?: never;
2213
- url: '/v1/media';
2509
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2214
2510
  };
2215
- export type MediaCreateErrors = {
2511
+ export type UpdateEpisodeErrors = {
2216
2512
  /**
2217
2513
  * Bad Request
2218
2514
  */
@@ -2226,9 +2522,9 @@ export type MediaCreateErrors = {
2226
2522
  */
2227
2523
  403: Error403;
2228
2524
  /**
2229
- * Conflict
2525
+ * Not Found
2230
2526
  */
2231
- 409: Error409;
2527
+ 404: Error404;
2232
2528
  /**
2233
2529
  * Too Many Requests
2234
2530
  */
@@ -2238,26 +2534,39 @@ export type MediaCreateErrors = {
2238
2534
  */
2239
2535
  500: Error500;
2240
2536
  };
2241
- export type MediaCreateError = MediaCreateErrors[keyof MediaCreateErrors];
2242
- export type MediaCreateResponses = {
2537
+ export type UpdateEpisodeError = UpdateEpisodeErrors[keyof UpdateEpisodeErrors];
2538
+ export type UpdateEpisodeResponses = {
2243
2539
  /**
2244
- * Created
2540
+ * Single episode response
2245
2541
  */
2246
- 201: Media;
2542
+ 200: Episode;
2247
2543
  };
2248
- export type MediaCreateResponse = MediaCreateResponses[keyof MediaCreateResponses];
2249
- export type MediaDestroyData = {
2544
+ export type UpdateEpisodeResponse = UpdateEpisodeResponses[keyof UpdateEpisodeResponses];
2545
+ export type ListSegmentsData = {
2250
2546
  body?: never;
2251
2547
  path: {
2252
2548
  /**
2253
- * Media ID
2549
+ * ID of the media
2254
2550
  */
2255
- id: number;
2551
+ mediaId: number;
2552
+ /**
2553
+ * Episode number
2554
+ */
2555
+ episodeNumber: number;
2256
2556
  };
2257
- query?: never;
2258
- url: '/v1/media/{id}';
2557
+ query?: {
2558
+ /**
2559
+ * Maximum number of segments to return
2560
+ */
2561
+ limit?: number;
2562
+ /**
2563
+ * Segment ID to start from (for pagination)
2564
+ */
2565
+ cursor?: number;
2566
+ };
2567
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2259
2568
  };
2260
- export type MediaDestroyErrors = {
2569
+ export type ListSegmentsErrors = {
2261
2570
  /**
2262
2571
  * Bad Request
2263
2572
  */
@@ -2283,29 +2592,36 @@ export type MediaDestroyErrors = {
2283
2592
  */
2284
2593
  500: Error500;
2285
2594
  };
2286
- export type MediaDestroyError = MediaDestroyErrors[keyof MediaDestroyErrors];
2287
- export type MediaDestroyResponses = {
2595
+ export type ListSegmentsError = ListSegmentsErrors[keyof ListSegmentsErrors];
2596
+ export type ListSegmentsResponses = {
2288
2597
  /**
2289
- * OK
2598
+ * Paginated segment list response
2290
2599
  */
2291
2600
  200: {
2292
- message?: string;
2293
- id?: number;
2601
+ /**
2602
+ * Array of segment objects
2603
+ */
2604
+ segments: Array<Segment>;
2605
+ pagination: CursorPagination;
2294
2606
  };
2295
2607
  };
2296
- export type MediaDestroyResponse = MediaDestroyResponses[keyof MediaDestroyResponses];
2297
- export type MediaShowData = {
2298
- body?: never;
2608
+ export type ListSegmentsResponse = ListSegmentsResponses[keyof ListSegmentsResponses];
2609
+ export type CreateSegmentData = {
2610
+ body: SegmentCreateRequest;
2299
2611
  path: {
2300
2612
  /**
2301
- * Media ID
2613
+ * ID of the media
2302
2614
  */
2303
- id: number;
2615
+ mediaId: number;
2616
+ /**
2617
+ * Episode number
2618
+ */
2619
+ episodeNumber: number;
2304
2620
  };
2305
2621
  query?: never;
2306
- url: '/v1/media/{id}';
2622
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2307
2623
  };
2308
- export type MediaShowErrors = {
2624
+ export type CreateSegmentErrors = {
2309
2625
  /**
2310
2626
  * Bad Request
2311
2627
  */
@@ -2322,6 +2638,10 @@ export type MediaShowErrors = {
2322
2638
  * Not Found
2323
2639
  */
2324
2640
  404: Error404;
2641
+ /**
2642
+ * Conflict
2643
+ */
2644
+ 409: Error409;
2325
2645
  /**
2326
2646
  * Too Many Requests
2327
2647
  */
@@ -2331,26 +2651,34 @@ export type MediaShowErrors = {
2331
2651
  */
2332
2652
  500: Error500;
2333
2653
  };
2334
- export type MediaShowError = MediaShowErrors[keyof MediaShowErrors];
2335
- export type MediaShowResponses = {
2654
+ export type CreateSegmentError = CreateSegmentErrors[keyof CreateSegmentErrors];
2655
+ export type CreateSegmentResponses = {
2336
2656
  /**
2337
- * OK
2657
+ * Single segment response with internal fields
2338
2658
  */
2339
- 200: Media;
2659
+ 201: SegmentInternal;
2340
2660
  };
2341
- export type MediaShowResponse = MediaShowResponses[keyof MediaShowResponses];
2342
- export type MediaUpdateData = {
2343
- body: MediaUpdateRequest;
2661
+ export type CreateSegmentResponse = CreateSegmentResponses[keyof CreateSegmentResponses];
2662
+ export type DeleteSegmentData = {
2663
+ body?: never;
2344
2664
  path: {
2345
2665
  /**
2346
- * Media ID
2666
+ * ID of the media
2667
+ */
2668
+ mediaId: number;
2669
+ /**
2670
+ * Episode number
2671
+ */
2672
+ episodeNumber: number;
2673
+ /**
2674
+ * Segment ID
2347
2675
  */
2348
2676
  id: number;
2349
2677
  };
2350
2678
  query?: never;
2351
- url: '/v1/media/{id}';
2679
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2352
2680
  };
2353
- export type MediaUpdateErrors = {
2681
+ export type DeleteSegmentErrors = {
2354
2682
  /**
2355
2683
  * Bad Request
2356
2684
  */
@@ -2376,35 +2704,34 @@ export type MediaUpdateErrors = {
2376
2704
  */
2377
2705
  500: Error500;
2378
2706
  };
2379
- export type MediaUpdateError = MediaUpdateErrors[keyof MediaUpdateErrors];
2380
- export type MediaUpdateResponses = {
2707
+ export type DeleteSegmentError = DeleteSegmentErrors[keyof DeleteSegmentErrors];
2708
+ export type DeleteSegmentResponses = {
2381
2709
  /**
2382
- * OK
2710
+ * Segment successfully deleted
2383
2711
  */
2384
- 200: Media;
2712
+ 204: void;
2385
2713
  };
2386
- export type MediaUpdateResponse = MediaUpdateResponses[keyof MediaUpdateResponses];
2387
- export type EpisodeIndexData = {
2714
+ export type DeleteSegmentResponse = DeleteSegmentResponses[keyof DeleteSegmentResponses];
2715
+ export type GetSegmentData = {
2388
2716
  body?: never;
2389
2717
  path: {
2390
2718
  /**
2391
2719
  * ID of the media
2392
2720
  */
2393
2721
  mediaId: number;
2394
- };
2395
- query?: {
2396
2722
  /**
2397
- * Maximum number of episodes to return
2723
+ * Episode number
2398
2724
  */
2399
- size?: number;
2725
+ episodeNumber: number;
2400
2726
  /**
2401
- * Episode number to start from (for pagination)
2727
+ * Segment ID
2402
2728
  */
2403
- cursor?: number;
2729
+ id: number;
2404
2730
  };
2405
- url: '/v1/media/{mediaId}/episodes';
2731
+ query?: never;
2732
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2406
2733
  };
2407
- export type EpisodeIndexErrors = {
2734
+ export type GetSegmentErrors = {
2408
2735
  /**
2409
2736
  * Bad Request
2410
2737
  */
@@ -2430,26 +2757,34 @@ export type EpisodeIndexErrors = {
2430
2757
  */
2431
2758
  500: Error500;
2432
2759
  };
2433
- export type EpisodeIndexError = EpisodeIndexErrors[keyof EpisodeIndexErrors];
2434
- export type EpisodeIndexResponses = {
2760
+ export type GetSegmentError = GetSegmentErrors[keyof GetSegmentErrors];
2761
+ export type GetSegmentResponses = {
2435
2762
  /**
2436
- * Paginated list of episodes
2763
+ * Single segment response
2437
2764
  */
2438
- 200: EpisodeListResponse;
2765
+ 200: Segment;
2439
2766
  };
2440
- export type EpisodeIndexResponse = EpisodeIndexResponses[keyof EpisodeIndexResponses];
2441
- export type EpisodeCreateData = {
2442
- body: EpisodeCreateRequest;
2767
+ export type GetSegmentResponse = GetSegmentResponses[keyof GetSegmentResponses];
2768
+ export type UpdateSegmentData = {
2769
+ body: SegmentUpdateRequest;
2443
2770
  path: {
2444
2771
  /**
2445
2772
  * ID of the media
2446
2773
  */
2447
2774
  mediaId: number;
2775
+ /**
2776
+ * Episode number
2777
+ */
2778
+ episodeNumber: number;
2779
+ /**
2780
+ * Segment ID
2781
+ */
2782
+ id: number;
2448
2783
  };
2449
2784
  query?: never;
2450
- url: '/v1/media/{mediaId}/episodes';
2785
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2451
2786
  };
2452
- export type EpisodeCreateErrors = {
2787
+ export type UpdateSegmentErrors = {
2453
2788
  /**
2454
2789
  * Bad Request
2455
2790
  */
@@ -2466,10 +2801,6 @@ export type EpisodeCreateErrors = {
2466
2801
  * Not Found
2467
2802
  */
2468
2803
  404: Error404;
2469
- /**
2470
- * Conflict
2471
- */
2472
- 409: Error409;
2473
2804
  /**
2474
2805
  * Too Many Requests
2475
2806
  */
@@ -2479,30 +2810,26 @@ export type EpisodeCreateErrors = {
2479
2810
  */
2480
2811
  500: Error500;
2481
2812
  };
2482
- export type EpisodeCreateError = EpisodeCreateErrors[keyof EpisodeCreateErrors];
2483
- export type EpisodeCreateResponses = {
2813
+ export type UpdateSegmentError = UpdateSegmentErrors[keyof UpdateSegmentErrors];
2814
+ export type UpdateSegmentResponses = {
2484
2815
  /**
2485
- * Single episode response
2816
+ * Single segment response with internal fields
2486
2817
  */
2487
- 201: Episode;
2818
+ 200: SegmentInternal;
2488
2819
  };
2489
- export type EpisodeCreateResponse = EpisodeCreateResponses[keyof EpisodeCreateResponses];
2490
- export type EpisodeDestroyData = {
2491
- body?: never;
2492
- path: {
2493
- /**
2494
- * ID of the media
2495
- */
2496
- mediaId: number;
2820
+ export type UpdateSegmentResponse = UpdateSegmentResponses[keyof UpdateSegmentResponses];
2821
+ export type GetSegmentByUuidData = {
2822
+ body?: never;
2823
+ path: {
2497
2824
  /**
2498
- * Episode number
2825
+ * Segment UUID
2499
2826
  */
2500
- episodeNumber: number;
2827
+ uuid: string;
2501
2828
  };
2502
2829
  query?: never;
2503
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2830
+ url: '/v1/media/segments/{uuid}';
2504
2831
  };
2505
- export type EpisodeDestroyErrors = {
2832
+ export type GetSegmentByUuidErrors = {
2506
2833
  /**
2507
2834
  * Bad Request
2508
2835
  */
@@ -2528,30 +2855,36 @@ export type EpisodeDestroyErrors = {
2528
2855
  */
2529
2856
  500: Error500;
2530
2857
  };
2531
- export type EpisodeDestroyError = EpisodeDestroyErrors[keyof EpisodeDestroyErrors];
2532
- export type EpisodeDestroyResponses = {
2533
- /**
2534
- * Episode successfully deleted
2535
- */
2536
- 204: void;
2858
+ export type GetSegmentByUuidError = GetSegmentByUuidErrors[keyof GetSegmentByUuidErrors];
2859
+ export type GetSegmentByUuidResponses = {
2860
+ 200: Segment;
2537
2861
  };
2538
- export type EpisodeDestroyResponse = EpisodeDestroyResponses[keyof EpisodeDestroyResponses];
2539
- export type EpisodeShowData = {
2862
+ export type GetSegmentByUuidResponse = GetSegmentByUuidResponses[keyof GetSegmentByUuidResponses];
2863
+ export type GetSegmentContextData = {
2540
2864
  body?: never;
2541
2865
  path: {
2542
2866
  /**
2543
- * ID of the media
2867
+ * Segment UUID
2544
2868
  */
2545
- mediaId: number;
2869
+ uuid: string;
2870
+ };
2871
+ query?: {
2546
2872
  /**
2547
- * Episode number
2873
+ * Number of segments to return before and after the target
2548
2874
  */
2549
- episodeNumber: number;
2875
+ limit?: number;
2876
+ /**
2877
+ * Content ratings to include (omit for all ratings)
2878
+ */
2879
+ contentRating?: Array<ContentRating>;
2880
+ /**
2881
+ * Resources to expand in the response includes block
2882
+ */
2883
+ include?: Array<IncludeExpansion>;
2550
2884
  };
2551
- query?: never;
2552
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2885
+ url: '/v1/media/segments/{uuid}/context';
2553
2886
  };
2554
- export type EpisodeShowErrors = {
2887
+ export type GetSegmentContextErrors = {
2555
2888
  /**
2556
2889
  * Bad Request
2557
2890
  */
@@ -2577,30 +2910,34 @@ export type EpisodeShowErrors = {
2577
2910
  */
2578
2911
  500: Error500;
2579
2912
  };
2580
- export type EpisodeShowError = EpisodeShowErrors[keyof EpisodeShowErrors];
2581
- export type EpisodeShowResponses = {
2913
+ export type GetSegmentContextError = GetSegmentContextErrors[keyof GetSegmentContextErrors];
2914
+ export type GetSegmentContextResponses = {
2582
2915
  /**
2583
- * Single episode response
2916
+ * OK
2584
2917
  */
2585
- 200: Episode;
2918
+ 200: SegmentContextResponse;
2586
2919
  };
2587
- export type EpisodeShowResponse = EpisodeShowResponses[keyof EpisodeShowResponses];
2588
- export type EpisodeUpdateData = {
2589
- body: EpisodeUpdateRequest;
2590
- path: {
2920
+ export type GetSegmentContextResponse = GetSegmentContextResponses[keyof GetSegmentContextResponses];
2921
+ export type ListSeriesData = {
2922
+ body?: never;
2923
+ path?: never;
2924
+ query?: {
2591
2925
  /**
2592
- * ID of the media
2926
+ * Number of results per page
2593
2927
  */
2594
- mediaId: number;
2928
+ limit?: number;
2595
2929
  /**
2596
- * Episode number
2930
+ * Pagination cursor offset
2597
2931
  */
2598
- episodeNumber: number;
2932
+ cursor?: number;
2933
+ /**
2934
+ * Case-insensitive search across English, Japanese, and Romaji names
2935
+ */
2936
+ query?: string;
2599
2937
  };
2600
- query?: never;
2601
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2938
+ url: '/v1/media/series';
2602
2939
  };
2603
- export type EpisodeUpdateErrors = {
2940
+ export type ListSeriesErrors = {
2604
2941
  /**
2605
2942
  * Bad Request
2606
2943
  */
@@ -2613,10 +2950,6 @@ export type EpisodeUpdateErrors = {
2613
2950
  * Forbidden
2614
2951
  */
2615
2952
  403: Error403;
2616
- /**
2617
- * Not Found
2618
- */
2619
- 404: Error404;
2620
2953
  /**
2621
2954
  * Too Many Requests
2622
2955
  */
@@ -2626,39 +2959,34 @@ export type EpisodeUpdateErrors = {
2626
2959
  */
2627
2960
  500: Error500;
2628
2961
  };
2629
- export type EpisodeUpdateError = EpisodeUpdateErrors[keyof EpisodeUpdateErrors];
2630
- export type EpisodeUpdateResponses = {
2962
+ export type ListSeriesError = ListSeriesErrors[keyof ListSeriesErrors];
2963
+ export type ListSeriesResponses = {
2631
2964
  /**
2632
- * Single episode response
2965
+ * OK
2633
2966
  */
2634
- 200: Episode;
2967
+ 200: SeriesListResponse;
2635
2968
  };
2636
- export type EpisodeUpdateResponse = EpisodeUpdateResponses[keyof EpisodeUpdateResponses];
2637
- export type SegmentIndexData = {
2638
- body?: never;
2639
- path: {
2640
- /**
2641
- * ID of the media
2642
- */
2643
- mediaId: number;
2969
+ export type ListSeriesResponse = ListSeriesResponses[keyof ListSeriesResponses];
2970
+ export type CreateSeriesData = {
2971
+ body: {
2644
2972
  /**
2645
- * Episode number
2973
+ * Japanese name of the series
2646
2974
  */
2647
- episodeNumber: number;
2648
- };
2649
- query?: {
2975
+ nameJa: string;
2650
2976
  /**
2651
- * Maximum number of segments to return
2977
+ * Romaji name of the series
2652
2978
  */
2653
- size?: number;
2979
+ nameRomaji: string;
2654
2980
  /**
2655
- * Segment ID to start from (for pagination)
2981
+ * English name of the series
2656
2982
  */
2657
- cursor?: number;
2983
+ nameEn: string;
2658
2984
  };
2659
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2985
+ path?: never;
2986
+ query?: never;
2987
+ url: '/v1/media/series';
2660
2988
  };
2661
- export type SegmentIndexErrors = {
2989
+ export type CreateSeriesErrors = {
2662
2990
  /**
2663
2991
  * Bad Request
2664
2992
  */
@@ -2671,10 +2999,6 @@ export type SegmentIndexErrors = {
2671
2999
  * Forbidden
2672
3000
  */
2673
3001
  403: Error403;
2674
- /**
2675
- * Not Found
2676
- */
2677
- 404: Error404;
2678
3002
  /**
2679
3003
  * Too Many Requests
2680
3004
  */
@@ -2684,30 +3008,26 @@ export type SegmentIndexErrors = {
2684
3008
  */
2685
3009
  500: Error500;
2686
3010
  };
2687
- export type SegmentIndexError = SegmentIndexErrors[keyof SegmentIndexErrors];
2688
- export type SegmentIndexResponses = {
3011
+ export type CreateSeriesError = CreateSeriesErrors[keyof CreateSeriesErrors];
3012
+ export type CreateSeriesResponses = {
2689
3013
  /**
2690
- * Paginated list of segments
3014
+ * Created
2691
3015
  */
2692
- 200: SegmentListResponse;
3016
+ 201: Series;
2693
3017
  };
2694
- export type SegmentIndexResponse = SegmentIndexResponses[keyof SegmentIndexResponses];
2695
- export type SegmentCreateData = {
2696
- body: SegmentCreateRequest;
3018
+ export type CreateSeriesResponse = CreateSeriesResponses[keyof CreateSeriesResponses];
3019
+ export type DeleteSeriesData = {
3020
+ body?: never;
2697
3021
  path: {
2698
3022
  /**
2699
- * ID of the media
2700
- */
2701
- mediaId: number;
2702
- /**
2703
- * Episode number
3023
+ * Series ID
2704
3024
  */
2705
- episodeNumber: number;
3025
+ id: number;
2706
3026
  };
2707
3027
  query?: never;
2708
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
3028
+ url: '/v1/media/series/{id}';
2709
3029
  };
2710
- export type SegmentCreateErrors = {
3030
+ export type DeleteSeriesErrors = {
2711
3031
  /**
2712
3032
  * Bad Request
2713
3033
  */
@@ -2724,10 +3044,6 @@ export type SegmentCreateErrors = {
2724
3044
  * Not Found
2725
3045
  */
2726
3046
  404: Error404;
2727
- /**
2728
- * Conflict
2729
- */
2730
- 409: Error409;
2731
3047
  /**
2732
3048
  * Too Many Requests
2733
3049
  */
@@ -2737,34 +3053,31 @@ export type SegmentCreateErrors = {
2737
3053
  */
2738
3054
  500: Error500;
2739
3055
  };
2740
- export type SegmentCreateError = SegmentCreateErrors[keyof SegmentCreateErrors];
2741
- export type SegmentCreateResponses = {
3056
+ export type DeleteSeriesError = DeleteSeriesErrors[keyof DeleteSeriesErrors];
3057
+ export type DeleteSeriesResponses = {
2742
3058
  /**
2743
- * Single segment response
3059
+ * No Content
2744
3060
  */
2745
- 201: Segment;
3061
+ 204: void;
2746
3062
  };
2747
- export type SegmentCreateResponse = SegmentCreateResponses[keyof SegmentCreateResponses];
2748
- export type SegmentDestroyData = {
3063
+ export type DeleteSeriesResponse = DeleteSeriesResponses[keyof DeleteSeriesResponses];
3064
+ export type GetSeriesData = {
2749
3065
  body?: never;
2750
3066
  path: {
2751
3067
  /**
2752
- * ID of the media
2753
- */
2754
- mediaId: number;
2755
- /**
2756
- * Episode number
3068
+ * Series ID
2757
3069
  */
2758
- episodeNumber: number;
3070
+ id: number;
3071
+ };
3072
+ query?: {
2759
3073
  /**
2760
- * Segment ID
3074
+ * Resources to expand in the series response (`media.characters` implies `media`)
2761
3075
  */
2762
- id: number;
3076
+ include?: Array<MediaIncludeExpansion>;
2763
3077
  };
2764
- query?: never;
2765
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
3078
+ url: '/v1/media/series/{id}';
2766
3079
  };
2767
- export type SegmentDestroyErrors = {
3080
+ export type GetSeriesErrors = {
2768
3081
  /**
2769
3082
  * Bad Request
2770
3083
  */
@@ -2790,34 +3103,39 @@ export type SegmentDestroyErrors = {
2790
3103
  */
2791
3104
  500: Error500;
2792
3105
  };
2793
- export type SegmentDestroyError = SegmentDestroyErrors[keyof SegmentDestroyErrors];
2794
- export type SegmentDestroyResponses = {
3106
+ export type GetSeriesError = GetSeriesErrors[keyof GetSeriesErrors];
3107
+ export type GetSeriesResponses = {
2795
3108
  /**
2796
- * Segment successfully deleted
3109
+ * OK
2797
3110
  */
2798
- 204: void;
3111
+ 200: SeriesWithMedia;
2799
3112
  };
2800
- export type SegmentDestroyResponse = SegmentDestroyResponses[keyof SegmentDestroyResponses];
2801
- export type SegmentShowData = {
2802
- body?: never;
2803
- path: {
3113
+ export type GetSeriesResponse = GetSeriesResponses[keyof GetSeriesResponses];
3114
+ export type UpdateSeriesData = {
3115
+ body: {
2804
3116
  /**
2805
- * ID of the media
3117
+ * Updated Japanese name
2806
3118
  */
2807
- mediaId: number;
3119
+ nameJa?: string;
2808
3120
  /**
2809
- * Episode number
3121
+ * Updated Romaji name
2810
3122
  */
2811
- episodeNumber: number;
3123
+ nameRomaji?: string;
2812
3124
  /**
2813
- * Segment ID
3125
+ * Updated English name
3126
+ */
3127
+ nameEn?: string;
3128
+ };
3129
+ path: {
3130
+ /**
3131
+ * Series ID
2814
3132
  */
2815
3133
  id: number;
2816
3134
  };
2817
3135
  query?: never;
2818
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
3136
+ url: '/v1/media/series/{id}';
2819
3137
  };
2820
- export type SegmentShowErrors = {
3138
+ export type UpdateSeriesErrors = {
2821
3139
  /**
2822
3140
  * Bad Request
2823
3141
  */
@@ -2843,34 +3161,35 @@ export type SegmentShowErrors = {
2843
3161
  */
2844
3162
  500: Error500;
2845
3163
  };
2846
- export type SegmentShowError = SegmentShowErrors[keyof SegmentShowErrors];
2847
- export type SegmentShowResponses = {
3164
+ export type UpdateSeriesError = UpdateSeriesErrors[keyof UpdateSeriesErrors];
3165
+ export type UpdateSeriesResponses = {
2848
3166
  /**
2849
- * Single segment response
3167
+ * OK
2850
3168
  */
2851
- 200: Segment;
3169
+ 200: Series;
2852
3170
  };
2853
- export type SegmentShowResponse = SegmentShowResponses[keyof SegmentShowResponses];
2854
- export type SegmentUpdateData = {
2855
- body: SegmentUpdateRequest;
2856
- path: {
3171
+ export type UpdateSeriesResponse = UpdateSeriesResponses[keyof UpdateSeriesResponses];
3172
+ export type AddMediaToSeriesData = {
3173
+ body: {
2857
3174
  /**
2858
- * ID of the media
3175
+ * Media ID to add
2859
3176
  */
2860
3177
  mediaId: number;
2861
3178
  /**
2862
- * Episode number
3179
+ * Position in the series (1-indexed)
2863
3180
  */
2864
- episodeNumber: number;
3181
+ position: number;
3182
+ };
3183
+ path: {
2865
3184
  /**
2866
- * Segment ID
3185
+ * Series ID
2867
3186
  */
2868
3187
  id: number;
2869
3188
  };
2870
3189
  query?: never;
2871
- url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
3190
+ url: '/v1/media/series/{id}/media';
2872
3191
  };
2873
- export type SegmentUpdateErrors = {
3192
+ export type AddMediaToSeriesErrors = {
2874
3193
  /**
2875
3194
  * Bad Request
2876
3195
  */
@@ -2896,26 +3215,30 @@ export type SegmentUpdateErrors = {
2896
3215
  */
2897
3216
  500: Error500;
2898
3217
  };
2899
- export type SegmentUpdateError = SegmentUpdateErrors[keyof SegmentUpdateErrors];
2900
- export type SegmentUpdateResponses = {
3218
+ export type AddMediaToSeriesError = AddMediaToSeriesErrors[keyof AddMediaToSeriesErrors];
3219
+ export type AddMediaToSeriesResponses = {
2901
3220
  /**
2902
- * Single segment response
3221
+ * No Content
2903
3222
  */
2904
- 200: Segment;
3223
+ 204: void;
2905
3224
  };
2906
- export type SegmentUpdateResponse = SegmentUpdateResponses[keyof SegmentUpdateResponses];
2907
- export type SegmentShowByUuidData = {
3225
+ export type AddMediaToSeriesResponse = AddMediaToSeriesResponses[keyof AddMediaToSeriesResponses];
3226
+ export type RemoveMediaFromSeriesData = {
2908
3227
  body?: never;
2909
3228
  path: {
2910
3229
  /**
2911
- * Segment UUID
3230
+ * Series ID
2912
3231
  */
2913
- uuid: string;
3232
+ id: number;
3233
+ /**
3234
+ * Media ID
3235
+ */
3236
+ mediaId: number;
2914
3237
  };
2915
3238
  query?: never;
2916
- url: '/v1/media/segments/{uuid}';
3239
+ url: '/v1/media/series/{id}/media/{mediaId}';
2917
3240
  };
2918
- export type SegmentShowByUuidErrors = {
3241
+ export type RemoveMediaFromSeriesErrors = {
2919
3242
  /**
2920
3243
  * Bad Request
2921
3244
  */
@@ -2941,28 +3264,35 @@ export type SegmentShowByUuidErrors = {
2941
3264
  */
2942
3265
  500: Error500;
2943
3266
  };
2944
- export type SegmentShowByUuidError = SegmentShowByUuidErrors[keyof SegmentShowByUuidErrors];
2945
- export type SegmentShowByUuidResponses = {
2946
- 200: Segment;
3267
+ export type RemoveMediaFromSeriesError = RemoveMediaFromSeriesErrors[keyof RemoveMediaFromSeriesErrors];
3268
+ export type RemoveMediaFromSeriesResponses = {
3269
+ /**
3270
+ * No Content
3271
+ */
3272
+ 204: void;
2947
3273
  };
2948
- export type SegmentShowByUuidResponse = SegmentShowByUuidResponses[keyof SegmentShowByUuidResponses];
2949
- export type SegmentContextShowData = {
2950
- body?: never;
2951
- path: {
3274
+ export type RemoveMediaFromSeriesResponse = RemoveMediaFromSeriesResponses[keyof RemoveMediaFromSeriesResponses];
3275
+ export type UpdateSeriesMediaData = {
3276
+ body: {
2952
3277
  /**
2953
- * Segment UUID
3278
+ * New position in the series (1-indexed)
2954
3279
  */
2955
- uuid: string;
3280
+ position: number;
2956
3281
  };
2957
- query?: {
3282
+ path: {
2958
3283
  /**
2959
- * Number of segments to return before and after the target
3284
+ * Series ID
2960
3285
  */
2961
- limit?: number;
3286
+ id: number;
3287
+ /**
3288
+ * Media ID
3289
+ */
3290
+ mediaId: number;
2962
3291
  };
2963
- url: '/v1/media/segments/{uuid}/context';
3292
+ query?: never;
3293
+ url: '/v1/media/series/{id}/media/{mediaId}';
2964
3294
  };
2965
- export type SegmentContextShowErrors = {
3295
+ export type UpdateSeriesMediaErrors = {
2966
3296
  /**
2967
3297
  * Bad Request
2968
3298
  */
@@ -2988,15 +3318,15 @@ export type SegmentContextShowErrors = {
2988
3318
  */
2989
3319
  500: Error500;
2990
3320
  };
2991
- export type SegmentContextShowError = SegmentContextShowErrors[keyof SegmentContextShowErrors];
2992
- export type SegmentContextShowResponses = {
3321
+ export type UpdateSeriesMediaError = UpdateSeriesMediaErrors[keyof UpdateSeriesMediaErrors];
3322
+ export type UpdateSeriesMediaResponses = {
2993
3323
  /**
2994
- * OK
3324
+ * No Content
2995
3325
  */
2996
- 200: SegmentContextResponse;
3326
+ 204: void;
2997
3327
  };
2998
- export type SegmentContextShowResponse = SegmentContextShowResponses[keyof SegmentContextShowResponses];
2999
- export type CharacterShowData = {
3328
+ export type UpdateSeriesMediaResponse = UpdateSeriesMediaResponses[keyof UpdateSeriesMediaResponses];
3329
+ export type GetCharacterData = {
3000
3330
  body?: never;
3001
3331
  path: {
3002
3332
  /**
@@ -3007,7 +3337,7 @@ export type CharacterShowData = {
3007
3337
  query?: never;
3008
3338
  url: '/v1/media/characters/{id}';
3009
3339
  };
3010
- export type CharacterShowErrors = {
3340
+ export type GetCharacterErrors = {
3011
3341
  /**
3012
3342
  * Bad Request
3013
3343
  */
@@ -3033,15 +3363,15 @@ export type CharacterShowErrors = {
3033
3363
  */
3034
3364
  500: Error500;
3035
3365
  };
3036
- export type CharacterShowError = CharacterShowErrors[keyof CharacterShowErrors];
3037
- export type CharacterShowResponses = {
3366
+ export type GetCharacterError = GetCharacterErrors[keyof GetCharacterErrors];
3367
+ export type GetCharacterResponses = {
3038
3368
  /**
3039
3369
  * OK
3040
3370
  */
3041
3371
  200: CharacterWithMedia;
3042
3372
  };
3043
- export type CharacterShowResponse = CharacterShowResponses[keyof CharacterShowResponses];
3044
- export type SeiyuuShowData = {
3373
+ export type GetCharacterResponse = GetCharacterResponses[keyof GetCharacterResponses];
3374
+ export type GetSeiyuuData = {
3045
3375
  body?: never;
3046
3376
  path: {
3047
3377
  /**
@@ -3049,10 +3379,15 @@ export type SeiyuuShowData = {
3049
3379
  */
3050
3380
  id: number;
3051
3381
  };
3052
- query?: never;
3382
+ query?: {
3383
+ /**
3384
+ * Resources to expand in the response (`character` is included by default)
3385
+ */
3386
+ include?: Array<'character'>;
3387
+ };
3053
3388
  url: '/v1/media/seiyuu/{id}';
3054
3389
  };
3055
- export type SeiyuuShowErrors = {
3390
+ export type GetSeiyuuErrors = {
3056
3391
  /**
3057
3392
  * Bad Request
3058
3393
  */
@@ -3078,39 +3413,43 @@ export type SeiyuuShowErrors = {
3078
3413
  */
3079
3414
  500: Error500;
3080
3415
  };
3081
- export type SeiyuuShowError = SeiyuuShowErrors[keyof SeiyuuShowErrors];
3082
- export type SeiyuuShowResponses = {
3416
+ export type GetSeiyuuError = GetSeiyuuErrors[keyof GetSeiyuuErrors];
3417
+ export type GetSeiyuuResponses = {
3083
3418
  /**
3084
3419
  * OK
3085
3420
  */
3086
3421
  200: SeiyuuWithRoles;
3087
3422
  };
3088
- export type SeiyuuShowResponse = SeiyuuShowResponses[keyof SeiyuuShowResponses];
3089
- export type UserQuotaShowData = {
3423
+ export type GetSeiyuuResponse = GetSeiyuuResponses[keyof GetSeiyuuResponses];
3424
+ export type GetQuotaData = {
3090
3425
  body?: never;
3091
3426
  path?: never;
3092
3427
  query?: never;
3093
3428
  url: '/v1/user/quota';
3094
3429
  };
3095
- export type UserQuotaShowErrors = {
3430
+ export type GetQuotaErrors = {
3096
3431
  /**
3097
3432
  * Unauthorized
3098
3433
  */
3099
3434
  401: Error401;
3435
+ /**
3436
+ * Too Many Requests
3437
+ */
3438
+ 429: Error429;
3100
3439
  /**
3101
3440
  * Internal Server Error
3102
3441
  */
3103
3442
  500: Error500;
3104
3443
  };
3105
- export type UserQuotaShowError = UserQuotaShowErrors[keyof UserQuotaShowErrors];
3106
- export type UserQuotaShowResponses = {
3444
+ export type GetQuotaError = GetQuotaErrors[keyof GetQuotaErrors];
3445
+ export type GetQuotaResponses = {
3107
3446
  /**
3108
3447
  * OK
3109
3448
  */
3110
3449
  200: UserQuotaResponse;
3111
3450
  };
3112
- export type UserQuotaShowResponse = UserQuotaShowResponses[keyof UserQuotaShowResponses];
3113
- export type UserReportIndexData = {
3451
+ export type GetQuotaResponse = GetQuotaResponses[keyof GetQuotaResponses];
3452
+ export type ListReportsData = {
3114
3453
  body?: never;
3115
3454
  path?: never;
3116
3455
  query?: {
@@ -3121,7 +3460,7 @@ export type UserReportIndexData = {
3121
3460
  /**
3122
3461
  * Number of results per page
3123
3462
  */
3124
- size?: number;
3463
+ limit?: number;
3125
3464
  /**
3126
3465
  * Filter by report status
3127
3466
  */
@@ -3129,7 +3468,7 @@ export type UserReportIndexData = {
3129
3468
  };
3130
3469
  url: '/v1/user/reports';
3131
3470
  };
3132
- export type UserReportIndexErrors = {
3471
+ export type ListReportsErrors = {
3133
3472
  /**
3134
3473
  * Unauthorized
3135
3474
  */
@@ -3139,21 +3478,21 @@ export type UserReportIndexErrors = {
3139
3478
  */
3140
3479
  500: Error500;
3141
3480
  };
3142
- export type UserReportIndexError = UserReportIndexErrors[keyof UserReportIndexErrors];
3143
- export type UserReportIndexResponses = {
3481
+ export type ListReportsError = ListReportsErrors[keyof ListReportsErrors];
3482
+ export type ListReportsResponses = {
3144
3483
  /**
3145
3484
  * OK
3146
3485
  */
3147
3486
  200: ReportListResponse;
3148
3487
  };
3149
- export type UserReportIndexResponse = UserReportIndexResponses[keyof UserReportIndexResponses];
3150
- export type UserReportCreateData = {
3488
+ export type ListReportsResponse = ListReportsResponses[keyof ListReportsResponses];
3489
+ export type CreateReportData = {
3151
3490
  body: CreateReportRequest;
3152
3491
  path?: never;
3153
3492
  query?: never;
3154
3493
  url: '/v1/user/reports';
3155
3494
  };
3156
- export type UserReportCreateErrors = {
3495
+ export type CreateReportErrors = {
3157
3496
  /**
3158
3497
  * Bad Request
3159
3498
  */
@@ -3171,21 +3510,21 @@ export type UserReportCreateErrors = {
3171
3510
  */
3172
3511
  500: Error500;
3173
3512
  };
3174
- export type UserReportCreateError = UserReportCreateErrors[keyof UserReportCreateErrors];
3175
- export type UserReportCreateResponses = {
3513
+ export type CreateReportError = CreateReportErrors[keyof CreateReportErrors];
3514
+ export type CreateReportResponses = {
3176
3515
  /**
3177
3516
  * Report created successfully
3178
3517
  */
3179
3518
  201: Report;
3180
3519
  };
3181
- export type UserReportCreateResponse = UserReportCreateResponses[keyof UserReportCreateResponses];
3182
- export type UserPreferencesShowData = {
3520
+ export type CreateReportResponse = CreateReportResponses[keyof CreateReportResponses];
3521
+ export type GetPreferencesData = {
3183
3522
  body?: never;
3184
3523
  path?: never;
3185
3524
  query?: never;
3186
3525
  url: '/v1/user/preferences';
3187
3526
  };
3188
- export type UserPreferencesShowErrors = {
3527
+ export type GetPreferencesErrors = {
3189
3528
  /**
3190
3529
  * Unauthorized
3191
3530
  */
@@ -3195,21 +3534,21 @@ export type UserPreferencesShowErrors = {
3195
3534
  */
3196
3535
  500: Error500;
3197
3536
  };
3198
- export type UserPreferencesShowError = UserPreferencesShowErrors[keyof UserPreferencesShowErrors];
3199
- export type UserPreferencesShowResponses = {
3537
+ export type GetPreferencesError = GetPreferencesErrors[keyof GetPreferencesErrors];
3538
+ export type GetPreferencesResponses = {
3200
3539
  /**
3201
3540
  * OK
3202
3541
  */
3203
3542
  200: UserPreferences;
3204
3543
  };
3205
- export type UserPreferencesShowResponse = UserPreferencesShowResponses[keyof UserPreferencesShowResponses];
3206
- export type UserPreferencesUpdateData = {
3544
+ export type GetPreferencesResponse = GetPreferencesResponses[keyof GetPreferencesResponses];
3545
+ export type UpdatePreferencesData = {
3207
3546
  body: UserPreferences;
3208
3547
  path?: never;
3209
3548
  query?: never;
3210
3549
  url: '/v1/user/preferences';
3211
3550
  };
3212
- export type UserPreferencesUpdateErrors = {
3551
+ export type UpdatePreferencesErrors = {
3213
3552
  /**
3214
3553
  * Unauthorized
3215
3554
  */
@@ -3219,15 +3558,15 @@ export type UserPreferencesUpdateErrors = {
3219
3558
  */
3220
3559
  500: Error500;
3221
3560
  };
3222
- export type UserPreferencesUpdateError = UserPreferencesUpdateErrors[keyof UserPreferencesUpdateErrors];
3223
- export type UserPreferencesUpdateResponses = {
3561
+ export type UpdatePreferencesError = UpdatePreferencesErrors[keyof UpdatePreferencesErrors];
3562
+ export type UpdatePreferencesResponses = {
3224
3563
  /**
3225
3564
  * OK
3226
3565
  */
3227
3566
  200: UserPreferences;
3228
3567
  };
3229
- export type UserPreferencesUpdateResponse = UserPreferencesUpdateResponses[keyof UserPreferencesUpdateResponses];
3230
- export type UserActivityDestroyData = {
3568
+ export type UpdatePreferencesResponse = UpdatePreferencesResponses[keyof UpdatePreferencesResponses];
3569
+ export type DeleteActivityData = {
3231
3570
  body?: never;
3232
3571
  path?: never;
3233
3572
  query?: {
@@ -3238,7 +3577,7 @@ export type UserActivityDestroyData = {
3238
3577
  };
3239
3578
  url: '/v1/user/activity';
3240
3579
  };
3241
- export type UserActivityDestroyErrors = {
3580
+ export type DeleteActivityErrors = {
3242
3581
  /**
3243
3582
  * Unauthorized
3244
3583
  */
@@ -3248,8 +3587,8 @@ export type UserActivityDestroyErrors = {
3248
3587
  */
3249
3588
  500: Error500;
3250
3589
  };
3251
- export type UserActivityDestroyError = UserActivityDestroyErrors[keyof UserActivityDestroyErrors];
3252
- export type UserActivityDestroyResponses = {
3590
+ export type DeleteActivityError = DeleteActivityErrors[keyof DeleteActivityErrors];
3591
+ export type DeleteActivityResponses = {
3253
3592
  /**
3254
3593
  * OK
3255
3594
  */
@@ -3258,8 +3597,8 @@ export type UserActivityDestroyResponses = {
3258
3597
  deletedCount: number;
3259
3598
  };
3260
3599
  };
3261
- export type UserActivityDestroyResponse = UserActivityDestroyResponses[keyof UserActivityDestroyResponses];
3262
- export type UserActivityIndexData = {
3600
+ export type DeleteActivityResponse = DeleteActivityResponses[keyof DeleteActivityResponses];
3601
+ export type ListActivityData = {
3263
3602
  body?: never;
3264
3603
  path?: never;
3265
3604
  query?: {
@@ -3270,15 +3609,19 @@ export type UserActivityIndexData = {
3270
3609
  /**
3271
3610
  * Number of results per page
3272
3611
  */
3273
- size?: number;
3612
+ limit?: number;
3274
3613
  /**
3275
3614
  * Filter by activity type
3276
3615
  */
3277
3616
  activityType?: ActivityType;
3617
+ /**
3618
+ * Filter activities to a specific date (YYYY-MM-DD)
3619
+ */
3620
+ date?: string;
3278
3621
  };
3279
3622
  url: '/v1/user/activity';
3280
3623
  };
3281
- export type UserActivityIndexErrors = {
3624
+ export type ListActivityErrors = {
3282
3625
  /**
3283
3626
  * Unauthorized
3284
3627
  */
@@ -3288,25 +3631,33 @@ export type UserActivityIndexErrors = {
3288
3631
  */
3289
3632
  500: Error500;
3290
3633
  };
3291
- export type UserActivityIndexError = UserActivityIndexErrors[keyof UserActivityIndexErrors];
3292
- export type UserActivityIndexResponses = {
3634
+ export type ListActivityError = ListActivityErrors[keyof ListActivityErrors];
3635
+ export type ListActivityResponses = {
3293
3636
  /**
3294
3637
  * OK
3295
3638
  */
3296
3639
  200: {
3297
- data: Array<UserActivity>;
3298
- hasMore: boolean;
3299
- cursor?: number;
3640
+ activities: Array<UserActivity>;
3641
+ pagination: CursorPagination;
3300
3642
  };
3301
3643
  };
3302
- export type UserActivityIndexResponse = UserActivityIndexResponses[keyof UserActivityIndexResponses];
3303
- export type UserActivityStatsShowData = {
3644
+ export type ListActivityResponse = ListActivityResponses[keyof ListActivityResponses];
3645
+ export type GetActivityHeatmapData = {
3304
3646
  body?: never;
3305
3647
  path?: never;
3306
- query?: never;
3307
- url: '/v1/user/activity/stats';
3648
+ query?: {
3649
+ /**
3650
+ * Number of days to include in the heatmap
3651
+ */
3652
+ days?: number;
3653
+ /**
3654
+ * Filter by activity type
3655
+ */
3656
+ activityType?: ActivityType;
3657
+ };
3658
+ url: '/v1/user/activity/heatmap';
3308
3659
  };
3309
- export type UserActivityStatsShowErrors = {
3660
+ export type GetActivityHeatmapErrors = {
3310
3661
  /**
3311
3662
  * Unauthorized
3312
3663
  */
@@ -3316,34 +3667,33 @@ export type UserActivityStatsShowErrors = {
3316
3667
  */
3317
3668
  500: Error500;
3318
3669
  };
3319
- export type UserActivityStatsShowError = UserActivityStatsShowErrors[keyof UserActivityStatsShowErrors];
3320
- export type UserActivityStatsShowResponses = {
3670
+ export type GetActivityHeatmapError = GetActivityHeatmapErrors[keyof GetActivityHeatmapErrors];
3671
+ export type GetActivityHeatmapResponses = {
3321
3672
  /**
3322
3673
  * OK
3323
3674
  */
3324
3675
  200: {
3325
- totalSearches: number;
3326
- totalExports: number;
3327
- totalPlays: number;
3328
- totalListAdds: number;
3329
3676
  /**
3330
- * Consecutive days with at least one activity
3677
+ * Map of YYYY-MM-DD date strings to activity counts
3331
3678
  */
3332
- streakDays: number;
3333
- topMedia: Array<{
3334
- mediaId: number;
3335
- count: number;
3336
- }>;
3679
+ counts: {
3680
+ [key: string]: number;
3681
+ };
3337
3682
  };
3338
3683
  };
3339
- export type UserActivityStatsShowResponse = UserActivityStatsShowResponses[keyof UserActivityStatsShowResponses];
3340
- export type UserExportShowData = {
3684
+ export type GetActivityHeatmapResponse = GetActivityHeatmapResponses[keyof GetActivityHeatmapResponses];
3685
+ export type GetActivityStatsData = {
3341
3686
  body?: never;
3342
3687
  path?: never;
3343
- query?: never;
3344
- url: '/v1/user/export';
3688
+ query?: {
3689
+ /**
3690
+ * Only count activities from this date onward (YYYY-MM-DD)
3691
+ */
3692
+ since?: string;
3693
+ };
3694
+ url: '/v1/user/activity/stats';
3345
3695
  };
3346
- export type UserExportShowErrors = {
3696
+ export type GetActivityStatsErrors = {
3347
3697
  /**
3348
3698
  * Unauthorized
3349
3699
  */
@@ -3353,150 +3703,101 @@ export type UserExportShowErrors = {
3353
3703
  */
3354
3704
  500: Error500;
3355
3705
  };
3356
- export type UserExportShowError = UserExportShowErrors[keyof UserExportShowErrors];
3357
- export type UserExportShowResponses = {
3706
+ export type GetActivityStatsError = GetActivityStatsErrors[keyof GetActivityStatsErrors];
3707
+ export type GetActivityStatsResponses = {
3358
3708
  /**
3359
3709
  * OK
3360
3710
  */
3361
3711
  200: {
3362
- profile: {
3363
- id?: number;
3364
- username?: string;
3365
- email?: string;
3366
- createdAt?: string;
3367
- };
3368
- preferences: UserPreferences;
3369
- activity: Array<UserActivity>;
3370
- lists: Array<{
3371
- [key: string]: unknown;
3372
- }>;
3373
- reports: Array<{
3374
- [key: string]: unknown;
3712
+ totalSearches: number;
3713
+ totalExports: number;
3714
+ totalPlays: number;
3715
+ totalListAdds: number;
3716
+ /**
3717
+ * Consecutive days with at least one activity
3718
+ */
3719
+ streakDays: number;
3720
+ topMedia: Array<{
3721
+ mediaId: number;
3722
+ count: number;
3375
3723
  }>;
3376
3724
  };
3377
3725
  };
3378
- export type UserExportShowResponse = UserExportShowResponses[keyof UserExportShowResponses];
3379
- export type LabIndexData = {
3726
+ export type GetActivityStatsResponse = GetActivityStatsResponses[keyof GetActivityStatsResponses];
3727
+ export type ExportDataData = {
3380
3728
  body?: never;
3381
3729
  path?: never;
3382
3730
  query?: never;
3383
- url: '/v1/labs';
3384
- };
3385
- export type LabIndexErrors = {
3386
- /**
3387
- * Internal Server Error
3388
- */
3389
- 500: Error500;
3390
- };
3391
- export type LabIndexError = LabIndexErrors[keyof LabIndexErrors];
3392
- export type LabIndexResponses = {
3393
- /**
3394
- * OK
3395
- */
3396
- 200: Array<LabFeature>;
3397
- };
3398
- export type LabIndexResponse = LabIndexResponses[keyof LabIndexResponses];
3399
- export type ListIndexData = {
3400
- body?: never;
3401
- path?: never;
3402
- query?: {
3403
- /**
3404
- * Filter by visibility
3405
- */
3406
- visibility?: 'public' | 'private';
3407
- /**
3408
- * Filter by list type
3409
- */
3410
- type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
3411
- /**
3412
- * Filter by list owner user ID
3413
- */
3414
- userId?: number;
3415
- /**
3416
- * Filter lists containing this media ID
3417
- */
3418
- mediaId?: number;
3419
- };
3420
- url: '/v1/lists';
3731
+ url: '/v1/user/export';
3421
3732
  };
3422
- export type ListIndexErrors = {
3423
- /**
3424
- * Bad Request
3425
- */
3426
- 400: Error400;
3733
+ export type ExportDataErrors = {
3427
3734
  /**
3428
3735
  * Unauthorized
3429
3736
  */
3430
3737
  401: Error401;
3431
- /**
3432
- * Forbidden
3433
- */
3434
- 403: Error403;
3435
- /**
3436
- * Too Many Requests
3437
- */
3438
- 429: Error429;
3439
3738
  /**
3440
3739
  * Internal Server Error
3441
3740
  */
3442
3741
  500: Error500;
3443
3742
  };
3444
- export type ListIndexError = ListIndexErrors[keyof ListIndexErrors];
3445
- export type ListIndexResponses = {
3743
+ export type ExportDataError = ExportDataErrors[keyof ExportDataErrors];
3744
+ export type ExportDataResponses = {
3446
3745
  /**
3447
3746
  * OK
3448
3747
  */
3449
- 200: Array<List>;
3748
+ 200: UserExportResponse;
3450
3749
  };
3451
- export type ListIndexResponse = ListIndexResponses[keyof ListIndexResponses];
3452
- export type ListCreateData = {
3453
- body: ListCreateRequest;
3750
+ export type ExportDataResponse = ExportDataResponses[keyof ExportDataResponses];
3751
+ export type ListLabsData = {
3752
+ body?: never;
3454
3753
  path?: never;
3455
3754
  query?: never;
3456
- url: '/v1/lists';
3755
+ url: '/v1/user/labs';
3457
3756
  };
3458
- export type ListCreateErrors = {
3459
- /**
3460
- * Bad Request
3461
- */
3462
- 400: Error400;
3757
+ export type ListLabsErrors = {
3463
3758
  /**
3464
3759
  * Unauthorized
3465
3760
  */
3466
3761
  401: Error401;
3467
- /**
3468
- * Forbidden
3469
- */
3470
- 403: Error403;
3471
- /**
3472
- * Too Many Requests
3473
- */
3474
- 429: Error429;
3475
3762
  /**
3476
3763
  * Internal Server Error
3477
3764
  */
3478
3765
  500: Error500;
3479
3766
  };
3480
- export type ListCreateError = ListCreateErrors[keyof ListCreateErrors];
3481
- export type ListCreateResponses = {
3767
+ export type ListLabsError = ListLabsErrors[keyof ListLabsErrors];
3768
+ export type ListLabsResponses = {
3482
3769
  /**
3483
- * Created
3770
+ * OK
3484
3771
  */
3485
- 201: List;
3772
+ 200: Array<UserLabFeature>;
3486
3773
  };
3487
- export type ListCreateResponse = ListCreateResponses[keyof ListCreateResponses];
3488
- export type ListDestroyData = {
3774
+ export type ListLabsResponse = ListLabsResponses[keyof ListLabsResponses];
3775
+ export type ListCollectionsData = {
3489
3776
  body?: never;
3490
- path: {
3777
+ path?: never;
3778
+ query?: {
3779
+ /**
3780
+ * Filter by visibility
3781
+ */
3782
+ visibility?: 'public' | 'private';
3491
3783
  /**
3492
- * List ID
3784
+ * Cursor offset for pagination
3493
3785
  */
3494
- id: number;
3786
+ cursor?: number;
3787
+ /**
3788
+ * Page number (1-indexed)
3789
+ *
3790
+ * @deprecated
3791
+ */
3792
+ page?: number;
3793
+ /**
3794
+ * Items per page
3795
+ */
3796
+ limit?: number;
3495
3797
  };
3496
- query?: never;
3497
- url: '/v1/lists/{id}';
3798
+ url: '/v1/collections';
3498
3799
  };
3499
- export type ListDestroyErrors = {
3800
+ export type ListCollectionsErrors = {
3500
3801
  /**
3501
3802
  * Bad Request
3502
3803
  */
@@ -3509,10 +3810,6 @@ export type ListDestroyErrors = {
3509
3810
  * Forbidden
3510
3811
  */
3511
3812
  403: Error403;
3512
- /**
3513
- * Not Found
3514
- */
3515
- 404: Error404;
3516
3813
  /**
3517
3814
  * Too Many Requests
3518
3815
  */
@@ -3522,29 +3819,21 @@ export type ListDestroyErrors = {
3522
3819
  */
3523
3820
  500: Error500;
3524
3821
  };
3525
- export type ListDestroyError = ListDestroyErrors[keyof ListDestroyErrors];
3526
- export type ListDestroyResponses = {
3822
+ export type ListCollectionsError = ListCollectionsErrors[keyof ListCollectionsErrors];
3823
+ export type ListCollectionsResponses = {
3527
3824
  /**
3528
3825
  * OK
3529
3826
  */
3530
- 200: {
3531
- message?: string;
3532
- id?: number;
3533
- };
3827
+ 200: CollectionListResponse;
3534
3828
  };
3535
- export type ListDestroyResponse = ListDestroyResponses[keyof ListDestroyResponses];
3536
- export type ListShowData = {
3537
- body?: never;
3538
- path: {
3539
- /**
3540
- * List ID
3541
- */
3542
- id: number;
3543
- };
3829
+ export type ListCollectionsResponse = ListCollectionsResponses[keyof ListCollectionsResponses];
3830
+ export type CreateCollectionData = {
3831
+ body: CollectionRequests;
3832
+ path?: never;
3544
3833
  query?: never;
3545
- url: '/v1/lists/{id}';
3834
+ url: '/v1/collections';
3546
3835
  };
3547
- export type ListShowErrors = {
3836
+ export type CreateCollectionErrors = {
3548
3837
  /**
3549
3838
  * Bad Request
3550
3839
  */
@@ -3557,10 +3846,6 @@ export type ListShowErrors = {
3557
3846
  * Forbidden
3558
3847
  */
3559
3848
  403: Error403;
3560
- /**
3561
- * Not Found
3562
- */
3563
- 404: Error404;
3564
3849
  /**
3565
3850
  * Too Many Requests
3566
3851
  */
@@ -3570,29 +3855,26 @@ export type ListShowErrors = {
3570
3855
  */
3571
3856
  500: Error500;
3572
3857
  };
3573
- export type ListShowError = ListShowErrors[keyof ListShowErrors];
3574
- export type ListShowResponses = {
3858
+ export type CreateCollectionError = CreateCollectionErrors[keyof CreateCollectionErrors];
3859
+ export type CreateCollectionResponses = {
3575
3860
  /**
3576
- * OK
3861
+ * Created
3577
3862
  */
3578
- 200: ListWithMedia;
3863
+ 201: Collection;
3579
3864
  };
3580
- export type ListShowResponse = ListShowResponses[keyof ListShowResponses];
3581
- export type ListUpdateData = {
3582
- body: {
3583
- name?: string;
3584
- visibility?: 'PUBLIC' | 'PRIVATE';
3585
- };
3865
+ export type CreateCollectionResponse = CreateCollectionResponses[keyof CreateCollectionResponses];
3866
+ export type DeleteCollectionData = {
3867
+ body?: never;
3586
3868
  path: {
3587
3869
  /**
3588
- * List ID
3870
+ * Collection ID
3589
3871
  */
3590
3872
  id: number;
3591
3873
  };
3592
3874
  query?: never;
3593
- url: '/v1/lists/{id}';
3875
+ url: '/v1/collections/{id}';
3594
3876
  };
3595
- export type ListUpdateErrors = {
3877
+ export type DeleteCollectionErrors = {
3596
3878
  /**
3597
3879
  * Bad Request
3598
3880
  */
@@ -3618,32 +3900,41 @@ export type ListUpdateErrors = {
3618
3900
  */
3619
3901
  500: Error500;
3620
3902
  };
3621
- export type ListUpdateError = ListUpdateErrors[keyof ListUpdateErrors];
3622
- export type ListUpdateResponses = {
3903
+ export type DeleteCollectionError = DeleteCollectionErrors[keyof DeleteCollectionErrors];
3904
+ export type DeleteCollectionResponses = {
3623
3905
  /**
3624
- * OK
3906
+ * No Content
3625
3907
  */
3626
- 200: List;
3908
+ 204: void;
3627
3909
  };
3628
- export type ListUpdateResponse = ListUpdateResponses[keyof ListUpdateResponses];
3629
- export type ListAddItemData = {
3630
- body: {
3631
- mediaId: number;
3910
+ export type DeleteCollectionResponse = DeleteCollectionResponses[keyof DeleteCollectionResponses];
3911
+ export type GetCollectionData = {
3912
+ body?: never;
3913
+ path: {
3632
3914
  /**
3633
- * Position in the list (1-indexed)
3915
+ * Collection ID
3634
3916
  */
3635
- position: number;
3917
+ id: number;
3636
3918
  };
3637
- path: {
3919
+ query?: {
3638
3920
  /**
3639
- * List ID
3921
+ * Cursor offset for paginated segments
3640
3922
  */
3641
- id: number;
3923
+ cursor?: number;
3924
+ /**
3925
+ * Page number (1-indexed)
3926
+ *
3927
+ * @deprecated
3928
+ */
3929
+ page?: number;
3930
+ /**
3931
+ * Items per page
3932
+ */
3933
+ limit?: number;
3642
3934
  };
3643
- query?: never;
3644
- url: '/v1/lists/{id}/items';
3935
+ url: '/v1/collections/{id}';
3645
3936
  };
3646
- export type ListAddItemErrors = {
3937
+ export type GetCollectionErrors = {
3647
3938
  /**
3648
3939
  * Bad Request
3649
3940
  */
@@ -3660,10 +3951,6 @@ export type ListAddItemErrors = {
3660
3951
  * Not Found
3661
3952
  */
3662
3953
  404: Error404;
3663
- /**
3664
- * Conflict
3665
- */
3666
- 409: Error409;
3667
3954
  /**
3668
3955
  * Too Many Requests
3669
3956
  */
@@ -3673,32 +3960,29 @@ export type ListAddItemErrors = {
3673
3960
  */
3674
3961
  500: Error500;
3675
3962
  };
3676
- export type ListAddItemError = ListAddItemErrors[keyof ListAddItemErrors];
3677
- export type ListAddItemResponses = {
3963
+ export type GetCollectionError = GetCollectionErrors[keyof GetCollectionErrors];
3964
+ export type GetCollectionResponses = {
3678
3965
  /**
3679
- * Created
3966
+ * OK
3680
3967
  */
3681
- 201: {
3682
- message?: string;
3683
- };
3968
+ 200: CollectionWithSegments;
3684
3969
  };
3685
- export type ListAddItemResponse = ListAddItemResponses[keyof ListAddItemResponses];
3686
- export type ListRemoveItemData = {
3687
- body?: never;
3970
+ export type GetCollectionResponse = GetCollectionResponses[keyof GetCollectionResponses];
3971
+ export type UpdateCollectionData = {
3972
+ body: {
3973
+ name?: string;
3974
+ visibility?: 'PUBLIC' | 'PRIVATE';
3975
+ };
3688
3976
  path: {
3689
3977
  /**
3690
- * List ID
3978
+ * Collection ID
3691
3979
  */
3692
3980
  id: number;
3693
- /**
3694
- * Media ID
3695
- */
3696
- mediaId: number;
3697
3981
  };
3698
3982
  query?: never;
3699
- url: '/v1/lists/{id}/items/{mediaId}';
3983
+ url: '/v1/collections/{id}';
3700
3984
  };
3701
- export type ListRemoveItemErrors = {
3985
+ export type UpdateCollectionErrors = {
3702
3986
  /**
3703
3987
  * Bad Request
3704
3988
  */
@@ -3724,37 +4008,35 @@ export type ListRemoveItemErrors = {
3724
4008
  */
3725
4009
  500: Error500;
3726
4010
  };
3727
- export type ListRemoveItemError = ListRemoveItemErrors[keyof ListRemoveItemErrors];
3728
- export type ListRemoveItemResponses = {
4011
+ export type UpdateCollectionError = UpdateCollectionErrors[keyof UpdateCollectionErrors];
4012
+ export type UpdateCollectionResponses = {
3729
4013
  /**
3730
4014
  * OK
3731
4015
  */
3732
- 200: {
3733
- message?: string;
3734
- };
4016
+ 200: Collection;
3735
4017
  };
3736
- export type ListRemoveItemResponse = ListRemoveItemResponses[keyof ListRemoveItemResponses];
3737
- export type ListUpdateItemData = {
4018
+ export type UpdateCollectionResponse = UpdateCollectionResponses[keyof UpdateCollectionResponses];
4019
+ export type AddSegmentToCollectionData = {
3738
4020
  body: {
3739
4021
  /**
3740
- * New position in the list (1-indexed)
4022
+ * UUID of the segment to add
3741
4023
  */
3742
- position: number;
4024
+ segmentUuid: string;
4025
+ /**
4026
+ * Optional annotation
4027
+ */
4028
+ note?: string;
3743
4029
  };
3744
4030
  path: {
3745
4031
  /**
3746
- * List ID
4032
+ * Collection ID
3747
4033
  */
3748
4034
  id: number;
3749
- /**
3750
- * Media ID
3751
- */
3752
- mediaId: number;
3753
4035
  };
3754
4036
  query?: never;
3755
- url: '/v1/lists/{id}/items/{mediaId}';
4037
+ url: '/v1/collections/{id}/segments';
3756
4038
  };
3757
- export type ListUpdateItemErrors = {
4039
+ export type AddSegmentToCollectionErrors = {
3758
4040
  /**
3759
4041
  * Bad Request
3760
4042
  */
@@ -3780,37 +4062,30 @@ export type ListUpdateItemErrors = {
3780
4062
  */
3781
4063
  500: Error500;
3782
4064
  };
3783
- export type ListUpdateItemError = ListUpdateItemErrors[keyof ListUpdateItemErrors];
3784
- export type ListUpdateItemResponses = {
4065
+ export type AddSegmentToCollectionError = AddSegmentToCollectionErrors[keyof AddSegmentToCollectionErrors];
4066
+ export type AddSegmentToCollectionResponses = {
3785
4067
  /**
3786
- * OK
4068
+ * No Content
3787
4069
  */
3788
- 200: {
3789
- message?: string;
3790
- };
4070
+ 204: void;
3791
4071
  };
3792
- export type ListUpdateItemResponse = ListUpdateItemResponses[keyof ListUpdateItemResponses];
3793
- export type ListGetSegmentsData = {
4072
+ export type AddSegmentToCollectionResponse = AddSegmentToCollectionResponses[keyof AddSegmentToCollectionResponses];
4073
+ export type RemoveSegmentFromCollectionData = {
3794
4074
  body?: never;
3795
4075
  path: {
3796
4076
  /**
3797
- * List ID
4077
+ * Collection ID
3798
4078
  */
3799
4079
  id: number;
3800
- };
3801
- query?: {
3802
- /**
3803
- * Page number (1-indexed)
3804
- */
3805
- page?: number;
3806
4080
  /**
3807
- * Items per page
4081
+ * Segment UUID
3808
4082
  */
3809
- limit?: number;
4083
+ uuid: string;
3810
4084
  };
3811
- url: '/v1/lists/{id}/segments';
4085
+ query?: never;
4086
+ url: '/v1/collections/{id}/segments/{uuid}';
3812
4087
  };
3813
- export type ListGetSegmentsErrors = {
4088
+ export type RemoveSegmentFromCollectionErrors = {
3814
4089
  /**
3815
4090
  * Bad Request
3816
4091
  */
@@ -3836,35 +4111,39 @@ export type ListGetSegmentsErrors = {
3836
4111
  */
3837
4112
  500: Error500;
3838
4113
  };
3839
- export type ListGetSegmentsError = ListGetSegmentsErrors[keyof ListGetSegmentsErrors];
3840
- export type ListGetSegmentsResponses = {
4114
+ export type RemoveSegmentFromCollectionError = RemoveSegmentFromCollectionErrors[keyof RemoveSegmentFromCollectionErrors];
4115
+ export type RemoveSegmentFromCollectionResponses = {
3841
4116
  /**
3842
- * OK
4117
+ * No Content
3843
4118
  */
3844
- 200: ListWithSegments;
4119
+ 204: void;
3845
4120
  };
3846
- export type ListGetSegmentsResponse = ListGetSegmentsResponses[keyof ListGetSegmentsResponses];
3847
- export type ListAddSegmentData = {
4121
+ export type RemoveSegmentFromCollectionResponse = RemoveSegmentFromCollectionResponses[keyof RemoveSegmentFromCollectionResponses];
4122
+ export type UpdateCollectionSegmentData = {
3848
4123
  body: {
3849
4124
  /**
3850
- * UUID of the segment to add
4125
+ * New position in the collection
3851
4126
  */
3852
- segmentUuid: string;
4127
+ position?: number;
3853
4128
  /**
3854
- * Optional annotation
4129
+ * Updated annotation
3855
4130
  */
3856
4131
  note?: string;
3857
4132
  };
3858
4133
  path: {
3859
4134
  /**
3860
- * List ID
4135
+ * Collection ID
3861
4136
  */
3862
4137
  id: number;
4138
+ /**
4139
+ * Segment UUID
4140
+ */
4141
+ uuid: string;
3863
4142
  };
3864
4143
  query?: never;
3865
- url: '/v1/lists/{id}/segments';
4144
+ url: '/v1/collections/{id}/segments/{uuid}';
3866
4145
  };
3867
- export type ListAddSegmentErrors = {
4146
+ export type UpdateCollectionSegmentErrors = {
3868
4147
  /**
3869
4148
  * Bad Request
3870
4149
  */
@@ -3881,10 +4160,6 @@ export type ListAddSegmentErrors = {
3881
4160
  * Not Found
3882
4161
  */
3883
4162
  404: Error404;
3884
- /**
3885
- * Conflict
3886
- */
3887
- 409: Error409;
3888
4163
  /**
3889
4164
  * Too Many Requests
3890
4165
  */
@@ -3894,36 +4169,21 @@ export type ListAddSegmentErrors = {
3894
4169
  */
3895
4170
  500: Error500;
3896
4171
  };
3897
- export type ListAddSegmentError = ListAddSegmentErrors[keyof ListAddSegmentErrors];
3898
- export type ListAddSegmentResponses = {
4172
+ export type UpdateCollectionSegmentError = UpdateCollectionSegmentErrors[keyof UpdateCollectionSegmentErrors];
4173
+ export type UpdateCollectionSegmentResponses = {
3899
4174
  /**
3900
- * Created
4175
+ * No Content
3901
4176
  */
3902
- 201: {
3903
- message?: string;
3904
- };
4177
+ 204: void;
3905
4178
  };
3906
- export type ListAddSegmentResponse = ListAddSegmentResponses[keyof ListAddSegmentResponses];
3907
- export type ListRemoveSegmentData = {
4179
+ export type UpdateCollectionSegmentResponse = UpdateCollectionSegmentResponses[keyof UpdateCollectionSegmentResponses];
4180
+ export type GetAdminDashboardData = {
3908
4181
  body?: never;
3909
- path: {
3910
- /**
3911
- * List ID
3912
- */
3913
- id: number;
3914
- /**
3915
- * Segment UUID
3916
- */
3917
- uuid: string;
3918
- };
4182
+ path?: never;
3919
4183
  query?: never;
3920
- url: '/v1/lists/{id}/segments/{uuid}';
4184
+ url: '/v1/admin/dashboard';
3921
4185
  };
3922
- export type ListRemoveSegmentErrors = {
3923
- /**
3924
- * Bad Request
3925
- */
3926
- 400: Error400;
4186
+ export type GetAdminDashboardErrors = {
3927
4187
  /**
3928
4188
  * Unauthorized
3929
4189
  */
@@ -3932,10 +4192,6 @@ export type ListRemoveSegmentErrors = {
3932
4192
  * Forbidden
3933
4193
  */
3934
4194
  403: Error403;
3935
- /**
3936
- * Not Found
3937
- */
3938
- 404: Error404;
3939
4195
  /**
3940
4196
  * Too Many Requests
3941
4197
  */
@@ -3945,45 +4201,81 @@ export type ListRemoveSegmentErrors = {
3945
4201
  */
3946
4202
  500: Error500;
3947
4203
  };
3948
- export type ListRemoveSegmentError = ListRemoveSegmentErrors[keyof ListRemoveSegmentErrors];
3949
- export type ListRemoveSegmentResponses = {
4204
+ export type GetAdminDashboardError = GetAdminDashboardErrors[keyof GetAdminDashboardErrors];
4205
+ export type GetAdminDashboardResponses = {
3950
4206
  /**
3951
4207
  * OK
3952
4208
  */
3953
4209
  200: {
3954
- message?: string;
4210
+ media: {
4211
+ totalMedia: number;
4212
+ totalEpisodes: number;
4213
+ totalSegments: number;
4214
+ totalCharacters: number;
4215
+ totalSeiyuu: number;
4216
+ };
4217
+ users: {
4218
+ totalUsers: number;
4219
+ /**
4220
+ * Users registered in the last 30 days
4221
+ */
4222
+ recentlyRegisteredCount: number;
4223
+ /**
4224
+ * Users active in the last 30 days
4225
+ */
4226
+ recentlyActiveCount: number;
4227
+ };
4228
+ activity: {
4229
+ totalSearches: number;
4230
+ totalExports: number;
4231
+ totalPlays: number;
4232
+ totalCollectionAdds: number;
4233
+ /**
4234
+ * Unique users who searched in the last 7 days
4235
+ */
4236
+ activeSearchers7d: number;
4237
+ topQueries7d: Array<{
4238
+ query: string;
4239
+ count: number;
4240
+ }>;
4241
+ dailyActivity30d: Array<{
4242
+ date: string;
4243
+ count: number;
4244
+ }>;
4245
+ };
4246
+ system: {
4247
+ status: 'healthy' | 'degraded';
4248
+ app: {
4249
+ version: string;
4250
+ };
4251
+ elasticsearch: {
4252
+ status: 'connected' | 'disconnected';
4253
+ version?: string;
4254
+ clusterName?: string;
4255
+ clusterStatus?: string;
4256
+ indexName?: string;
4257
+ documentCount?: number;
4258
+ };
4259
+ database: {
4260
+ status: 'connected' | 'disconnected';
4261
+ version?: string;
4262
+ };
4263
+ queues: Array<{
4264
+ queue: string;
4265
+ stuckCount: number;
4266
+ failedCount: number;
4267
+ }>;
4268
+ };
3955
4269
  };
3956
4270
  };
3957
- export type ListRemoveSegmentResponse = ListRemoveSegmentResponses[keyof ListRemoveSegmentResponses];
3958
- export type ListUpdateSegmentData = {
3959
- body: {
3960
- /**
3961
- * New position in the list
3962
- */
3963
- position?: number;
3964
- /**
3965
- * Updated annotation
3966
- */
3967
- note?: string;
3968
- };
3969
- path: {
3970
- /**
3971
- * List ID
3972
- */
3973
- id: number;
3974
- /**
3975
- * Segment UUID
3976
- */
3977
- uuid: string;
3978
- };
4271
+ export type GetAdminDashboardResponse = GetAdminDashboardResponses[keyof GetAdminDashboardResponses];
4272
+ export type GetAdminHealthData = {
4273
+ body?: never;
4274
+ path?: never;
3979
4275
  query?: never;
3980
- url: '/v1/lists/{id}/segments/{uuid}';
4276
+ url: '/v1/admin/health';
3981
4277
  };
3982
- export type ListUpdateSegmentErrors = {
3983
- /**
3984
- * Bad Request
3985
- */
3986
- 400: Error400;
4278
+ export type GetAdminHealthErrors = {
3987
4279
  /**
3988
4280
  * Unauthorized
3989
4281
  */
@@ -3992,10 +4284,6 @@ export type ListUpdateSegmentErrors = {
3992
4284
  * Forbidden
3993
4285
  */
3994
4286
  403: Error403;
3995
- /**
3996
- * Not Found
3997
- */
3998
- 404: Error404;
3999
4287
  /**
4000
4288
  * Too Many Requests
4001
4289
  */
@@ -4005,23 +4293,47 @@ export type ListUpdateSegmentErrors = {
4005
4293
  */
4006
4294
  500: Error500;
4007
4295
  };
4008
- export type ListUpdateSegmentError = ListUpdateSegmentErrors[keyof ListUpdateSegmentErrors];
4009
- export type ListUpdateSegmentResponses = {
4296
+ export type GetAdminHealthError = GetAdminHealthErrors[keyof GetAdminHealthErrors];
4297
+ export type GetAdminHealthResponses = {
4010
4298
  /**
4011
4299
  * OK
4012
4300
  */
4013
4301
  200: {
4014
- message?: string;
4302
+ /**
4303
+ * Overall system status
4304
+ */
4305
+ status: 'healthy' | 'degraded';
4306
+ app: {
4307
+ /**
4308
+ * API version from OpenAPI spec
4309
+ */
4310
+ version: string;
4311
+ };
4312
+ elasticsearch: {
4313
+ status: 'connected' | 'disconnected';
4314
+ version?: string;
4315
+ clusterName?: string;
4316
+ /**
4317
+ * ES cluster health (green, yellow, red)
4318
+ */
4319
+ clusterStatus?: string;
4320
+ indexName?: string;
4321
+ documentCount?: number;
4322
+ };
4323
+ database: {
4324
+ status: 'connected' | 'disconnected';
4325
+ version?: string;
4326
+ };
4015
4327
  };
4016
4328
  };
4017
- export type ListUpdateSegmentResponse = ListUpdateSegmentResponses[keyof ListUpdateSegmentResponses];
4018
- export type AdminReindexCreateData = {
4329
+ export type GetAdminHealthResponse = GetAdminHealthResponses[keyof GetAdminHealthResponses];
4330
+ export type TriggerReindexData = {
4019
4331
  body?: ReindexRequest;
4020
4332
  path?: never;
4021
4333
  query?: never;
4022
4334
  url: '/v1/admin/reindex';
4023
4335
  };
4024
- export type AdminReindexCreateErrors = {
4336
+ export type TriggerReindexErrors = {
4025
4337
  /**
4026
4338
  * Bad Request
4027
4339
  */
@@ -4043,21 +4355,21 @@ export type AdminReindexCreateErrors = {
4043
4355
  */
4044
4356
  500: Error500;
4045
4357
  };
4046
- export type AdminReindexCreateError = AdminReindexCreateErrors[keyof AdminReindexCreateErrors];
4047
- export type AdminReindexCreateResponses = {
4358
+ export type TriggerReindexError = TriggerReindexErrors[keyof TriggerReindexErrors];
4359
+ export type TriggerReindexResponses = {
4048
4360
  /**
4049
4361
  * Reindex operation completed
4050
4362
  */
4051
4363
  200: ReindexResponse;
4052
4364
  };
4053
- export type AdminReindexCreateResponse = AdminReindexCreateResponses[keyof AdminReindexCreateResponses];
4054
- export type AdminQueueStatsIndexData = {
4365
+ export type TriggerReindexResponse = TriggerReindexResponses[keyof TriggerReindexResponses];
4366
+ export type ListAdminQueueStatsData = {
4055
4367
  body?: never;
4056
4368
  path?: never;
4057
4369
  query?: never;
4058
4370
  url: '/v1/admin/queues/stats';
4059
4371
  };
4060
- export type AdminQueueStatsIndexErrors = {
4372
+ export type ListAdminQueueStatsErrors = {
4061
4373
  /**
4062
4374
  * Bad Request
4063
4375
  */
@@ -4079,8 +4391,8 @@ export type AdminQueueStatsIndexErrors = {
4079
4391
  */
4080
4392
  500: Error500;
4081
4393
  };
4082
- export type AdminQueueStatsIndexError = AdminQueueStatsIndexErrors[keyof AdminQueueStatsIndexErrors];
4083
- export type AdminQueueStatsIndexResponses = {
4394
+ export type ListAdminQueueStatsError = ListAdminQueueStatsErrors[keyof ListAdminQueueStatsErrors];
4395
+ export type ListAdminQueueStatsResponses = {
4084
4396
  /**
4085
4397
  * Queue statistics retrieved successfully
4086
4398
  */
@@ -4096,8 +4408,8 @@ export type AdminQueueStatsIndexResponses = {
4096
4408
  failedCount?: number;
4097
4409
  }>;
4098
4410
  };
4099
- export type AdminQueueStatsIndexResponse = AdminQueueStatsIndexResponses[keyof AdminQueueStatsIndexResponses];
4100
- export type AdminQueueShowData = {
4411
+ export type ListAdminQueueStatsResponse = ListAdminQueueStatsResponses[keyof ListAdminQueueStatsResponses];
4412
+ export type GetAdminQueueData = {
4101
4413
  body?: never;
4102
4414
  path: {
4103
4415
  /**
@@ -4108,7 +4420,7 @@ export type AdminQueueShowData = {
4108
4420
  query?: never;
4109
4421
  url: '/v1/admin/queues/{queueName}';
4110
4422
  };
4111
- export type AdminQueueShowErrors = {
4423
+ export type GetAdminQueueErrors = {
4112
4424
  /**
4113
4425
  * Bad Request
4114
4426
  */
@@ -4134,41 +4446,55 @@ export type AdminQueueShowErrors = {
4134
4446
  */
4135
4447
  500: Error500;
4136
4448
  };
4137
- export type AdminQueueShowError = AdminQueueShowErrors[keyof AdminQueueShowErrors];
4138
- export type AdminQueueShowResponses = {
4449
+ export type GetAdminQueueError = GetAdminQueueErrors[keyof GetAdminQueueErrors];
4450
+ export type GetAdminQueueResponses = {
4139
4451
  /**
4140
4452
  * Queue details retrieved successfully
4141
4453
  */
4142
4454
  200: {
4143
- queue?: string;
4144
- /**
4145
- * Current queue size (pending jobs)
4146
- */
4147
- size?: number;
4148
- /**
4149
- * Total jobs created
4150
- */
4151
- created?: number;
4152
- /**
4153
- * Total failed jobs
4154
- */
4155
- failed?: number;
4156
- /**
4157
- * Total completed jobs
4158
- */
4159
- complete?: number;
4160
- /**
4161
- * Total expired jobs
4162
- */
4163
- expired?: number;
4164
- /**
4165
- * Total cancelled jobs
4166
- */
4167
- cancelled?: number;
4455
+ queue: string;
4456
+ stats: {
4457
+ /**
4458
+ * Jobs scheduled for future execution (`start_after > now()`)
4459
+ */
4460
+ deferred: number;
4461
+ /**
4462
+ * Jobs currently queued and waiting to be processed
4463
+ */
4464
+ queued: number;
4465
+ /**
4466
+ * Jobs currently being processed
4467
+ */
4468
+ active: number;
4469
+ /**
4470
+ * Total jobs currently stored in the queue table
4471
+ */
4472
+ total: number;
4473
+ };
4474
+ metadata: {
4475
+ policy: string;
4476
+ partition: boolean;
4477
+ deadLetter?: string;
4478
+ warningQueueSize?: number;
4479
+ retryLimit?: number;
4480
+ /**
4481
+ * Initial retry delay in seconds
4482
+ */
4483
+ retryDelay?: number;
4484
+ retryBackoff?: boolean;
4485
+ retryDelayMax?: number;
4486
+ expireInSeconds?: number;
4487
+ retentionSeconds?: number;
4488
+ deleteAfterSeconds?: number;
4489
+ createdOn: string;
4490
+ updatedOn: string;
4491
+ singletonsActive: Array<string>;
4492
+ table: string;
4493
+ };
4168
4494
  };
4169
4495
  };
4170
- export type AdminQueueShowResponse = AdminQueueShowResponses[keyof AdminQueueShowResponses];
4171
- export type AdminQueueFailedIndexData = {
4496
+ export type GetAdminQueueResponse = GetAdminQueueResponses[keyof GetAdminQueueResponses];
4497
+ export type ListAdminQueueFailedData = {
4172
4498
  body?: never;
4173
4499
  path: {
4174
4500
  /**
@@ -4179,7 +4505,7 @@ export type AdminQueueFailedIndexData = {
4179
4505
  query?: never;
4180
4506
  url: '/v1/admin/queues/{queueName}/failed';
4181
4507
  };
4182
- export type AdminQueueFailedIndexErrors = {
4508
+ export type ListAdminQueueFailedErrors = {
4183
4509
  /**
4184
4510
  * Bad Request
4185
4511
  */
@@ -4201,8 +4527,8 @@ export type AdminQueueFailedIndexErrors = {
4201
4527
  */
4202
4528
  500: Error500;
4203
4529
  };
4204
- export type AdminQueueFailedIndexError = AdminQueueFailedIndexErrors[keyof AdminQueueFailedIndexErrors];
4205
- export type AdminQueueFailedIndexResponses = {
4530
+ export type ListAdminQueueFailedError = ListAdminQueueFailedErrors[keyof ListAdminQueueFailedErrors];
4531
+ export type ListAdminQueueFailedResponses = {
4206
4532
  /**
4207
4533
  * Failed jobs retrieved successfully
4208
4534
  */
@@ -4225,8 +4551,8 @@ export type AdminQueueFailedIndexResponses = {
4225
4551
  createdOn?: string;
4226
4552
  }>;
4227
4553
  };
4228
- export type AdminQueueFailedIndexResponse = AdminQueueFailedIndexResponses[keyof AdminQueueFailedIndexResponses];
4229
- export type AdminQueueRetryCreateData = {
4554
+ export type ListAdminQueueFailedResponse = ListAdminQueueFailedResponses[keyof ListAdminQueueFailedResponses];
4555
+ export type RetryAdminQueueFailedData = {
4230
4556
  body?: never;
4231
4557
  path: {
4232
4558
  /**
@@ -4237,7 +4563,7 @@ export type AdminQueueRetryCreateData = {
4237
4563
  query?: never;
4238
4564
  url: '/v1/admin/queues/{queueName}/retry';
4239
4565
  };
4240
- export type AdminQueueRetryCreateErrors = {
4566
+ export type RetryAdminQueueFailedErrors = {
4241
4567
  /**
4242
4568
  * Bad Request
4243
4569
  */
@@ -4259,8 +4585,8 @@ export type AdminQueueRetryCreateErrors = {
4259
4585
  */
4260
4586
  500: Error500;
4261
4587
  };
4262
- export type AdminQueueRetryCreateError = AdminQueueRetryCreateErrors[keyof AdminQueueRetryCreateErrors];
4263
- export type AdminQueueRetryCreateResponses = {
4588
+ export type RetryAdminQueueFailedError = RetryAdminQueueFailedErrors[keyof RetryAdminQueueFailedErrors];
4589
+ export type RetryAdminQueueFailedResponses = {
4264
4590
  /**
4265
4591
  * Jobs queued for retry
4266
4592
  */
@@ -4273,8 +4599,8 @@ export type AdminQueueRetryCreateResponses = {
4273
4599
  message?: string;
4274
4600
  };
4275
4601
  };
4276
- export type AdminQueueRetryCreateResponse = AdminQueueRetryCreateResponses[keyof AdminQueueRetryCreateResponses];
4277
- export type AdminQueueFailedDestroyData = {
4602
+ export type RetryAdminQueueFailedResponse = RetryAdminQueueFailedResponses[keyof RetryAdminQueueFailedResponses];
4603
+ export type PurgeAdminQueueFailedData = {
4278
4604
  body?: never;
4279
4605
  path: {
4280
4606
  /**
@@ -4285,7 +4611,7 @@ export type AdminQueueFailedDestroyData = {
4285
4611
  query?: never;
4286
4612
  url: '/v1/admin/queues/{queueName}/purge';
4287
4613
  };
4288
- export type AdminQueueFailedDestroyErrors = {
4614
+ export type PurgeAdminQueueFailedErrors = {
4289
4615
  /**
4290
4616
  * Bad Request
4291
4617
  */
@@ -4307,8 +4633,8 @@ export type AdminQueueFailedDestroyErrors = {
4307
4633
  */
4308
4634
  500: Error500;
4309
4635
  };
4310
- export type AdminQueueFailedDestroyError = AdminQueueFailedDestroyErrors[keyof AdminQueueFailedDestroyErrors];
4311
- export type AdminQueueFailedDestroyResponses = {
4636
+ export type PurgeAdminQueueFailedError = PurgeAdminQueueFailedErrors[keyof PurgeAdminQueueFailedErrors];
4637
+ export type PurgeAdminQueueFailedResponses = {
4312
4638
  /**
4313
4639
  * Failed jobs purged successfully
4314
4640
  */
@@ -4321,29 +4647,8 @@ export type AdminQueueFailedDestroyResponses = {
4321
4647
  message?: string;
4322
4648
  };
4323
4649
  };
4324
- export type AdminQueueFailedDestroyResponse = AdminQueueFailedDestroyResponses[keyof AdminQueueFailedDestroyResponses];
4325
- export type AdminMorphemeBackfillCreateData = {
4326
- body?: never;
4327
- path?: never;
4328
- query?: never;
4329
- url: '/v1/admin/morpheme-backfill';
4330
- };
4331
- export type AdminMorphemeBackfillCreateResponses = {
4332
- /**
4333
- * Backfill completed
4334
- */
4335
- 200: {
4336
- success: boolean;
4337
- message: string;
4338
- stats: {
4339
- totalSegments: number;
4340
- successfulAnalyses: number;
4341
- failedAnalyses: number;
4342
- };
4343
- };
4344
- };
4345
- export type AdminMorphemeBackfillCreateResponse = AdminMorphemeBackfillCreateResponses[keyof AdminMorphemeBackfillCreateResponses];
4346
- export type AdminReportIndexData = {
4650
+ export type PurgeAdminQueueFailedResponse = PurgeAdminQueueFailedResponses[keyof PurgeAdminQueueFailedResponses];
4651
+ export type ListAdminReportsData = {
4347
4652
  body?: never;
4348
4653
  path?: never;
4349
4654
  query?: {
@@ -4354,7 +4659,7 @@ export type AdminReportIndexData = {
4354
4659
  /**
4355
4660
  * Number of results per page
4356
4661
  */
4357
- size?: number;
4662
+ limit?: number;
4358
4663
  /**
4359
4664
  * Filter by report status
4360
4665
  */
@@ -4366,11 +4671,19 @@ export type AdminReportIndexData = {
4366
4671
  /**
4367
4672
  * Filter by target type
4368
4673
  */
4369
- targetType?: 'SEGMENT' | 'EPISODE' | 'MEDIA';
4674
+ 'target.type'?: 'SEGMENT' | 'EPISODE' | 'MEDIA';
4370
4675
  /**
4371
4676
  * Filter by target media ID
4372
4677
  */
4373
- targetMediaId?: number;
4678
+ 'target.mediaId'?: number;
4679
+ /**
4680
+ * Filter by target episode number
4681
+ */
4682
+ 'target.episodeNumber'?: number;
4683
+ /**
4684
+ * Filter by target segment UUID
4685
+ */
4686
+ 'target.segmentUuid'?: string;
4374
4687
  /**
4375
4688
  * Filter by review check run ID
4376
4689
  */
@@ -4378,7 +4691,7 @@ export type AdminReportIndexData = {
4378
4691
  };
4379
4692
  url: '/v1/admin/reports';
4380
4693
  };
4381
- export type AdminReportIndexErrors = {
4694
+ export type ListAdminReportsErrors = {
4382
4695
  /**
4383
4696
  * Unauthorized
4384
4697
  */
@@ -4396,15 +4709,15 @@ export type AdminReportIndexErrors = {
4396
4709
  */
4397
4710
  500: Error500;
4398
4711
  };
4399
- export type AdminReportIndexError = AdminReportIndexErrors[keyof AdminReportIndexErrors];
4400
- export type AdminReportIndexResponses = {
4712
+ export type ListAdminReportsError = ListAdminReportsErrors[keyof ListAdminReportsErrors];
4713
+ export type ListAdminReportsResponses = {
4401
4714
  /**
4402
4715
  * OK
4403
4716
  */
4404
4717
  200: AdminReportListResponse;
4405
4718
  };
4406
- export type AdminReportIndexResponse = AdminReportIndexResponses[keyof AdminReportIndexResponses];
4407
- export type AdminReportUpdateData = {
4719
+ export type ListAdminReportsResponse = ListAdminReportsResponses[keyof ListAdminReportsResponses];
4720
+ export type UpdateAdminReportData = {
4408
4721
  body: UpdateReportRequest;
4409
4722
  path: {
4410
4723
  /**
@@ -4415,7 +4728,7 @@ export type AdminReportUpdateData = {
4415
4728
  query?: never;
4416
4729
  url: '/v1/admin/reports/{id}';
4417
4730
  };
4418
- export type AdminReportUpdateErrors = {
4731
+ export type UpdateAdminReportErrors = {
4419
4732
  /**
4420
4733
  * Bad Request
4421
4734
  */
@@ -4441,15 +4754,15 @@ export type AdminReportUpdateErrors = {
4441
4754
  */
4442
4755
  500: Error500;
4443
4756
  };
4444
- export type AdminReportUpdateError = AdminReportUpdateErrors[keyof AdminReportUpdateErrors];
4445
- export type AdminReportUpdateResponses = {
4757
+ export type UpdateAdminReportError = UpdateAdminReportErrors[keyof UpdateAdminReportErrors];
4758
+ export type UpdateAdminReportResponses = {
4446
4759
  /**
4447
4760
  * Report updated successfully
4448
4761
  */
4449
4762
  200: Report;
4450
4763
  };
4451
- export type AdminReportUpdateResponse = AdminReportUpdateResponses[keyof AdminReportUpdateResponses];
4452
- export type AdminReviewRunCreateData = {
4764
+ export type UpdateAdminReportResponse = UpdateAdminReportResponses[keyof UpdateAdminReportResponses];
4765
+ export type RunAdminReviewData = {
4453
4766
  body?: never;
4454
4767
  path?: never;
4455
4768
  query?: {
@@ -4457,10 +4770,14 @@ export type AdminReviewRunCreateData = {
4457
4770
  * Optional category filter
4458
4771
  */
4459
4772
  category?: 'ANIME' | 'JDRAMA';
4773
+ /**
4774
+ * Optional check name to run a single check instead of all
4775
+ */
4776
+ checkName?: string;
4460
4777
  };
4461
4778
  url: '/v1/admin/review/run';
4462
4779
  };
4463
- export type AdminReviewRunCreateErrors = {
4780
+ export type RunAdminReviewErrors = {
4464
4781
  /**
4465
4782
  * Unauthorized
4466
4783
  */
@@ -4478,21 +4795,21 @@ export type AdminReviewRunCreateErrors = {
4478
4795
  */
4479
4796
  500: Error500;
4480
4797
  };
4481
- export type AdminReviewRunCreateError = AdminReviewRunCreateErrors[keyof AdminReviewRunCreateErrors];
4482
- export type AdminReviewRunCreateResponses = {
4798
+ export type RunAdminReviewError = RunAdminReviewErrors[keyof RunAdminReviewErrors];
4799
+ export type RunAdminReviewResponses = {
4483
4800
  /**
4484
4801
  * Check run completed
4485
4802
  */
4486
4803
  200: RunReviewResponse;
4487
4804
  };
4488
- export type AdminReviewRunCreateResponse = AdminReviewRunCreateResponses[keyof AdminReviewRunCreateResponses];
4489
- export type AdminReviewCheckIndexData = {
4805
+ export type RunAdminReviewResponse = RunAdminReviewResponses[keyof RunAdminReviewResponses];
4806
+ export type ListAdminReviewChecksData = {
4490
4807
  body?: never;
4491
4808
  path?: never;
4492
4809
  query?: never;
4493
4810
  url: '/v1/admin/review/checks';
4494
4811
  };
4495
- export type AdminReviewCheckIndexErrors = {
4812
+ export type ListAdminReviewChecksErrors = {
4496
4813
  /**
4497
4814
  * Unauthorized
4498
4815
  */
@@ -4510,15 +4827,15 @@ export type AdminReviewCheckIndexErrors = {
4510
4827
  */
4511
4828
  500: Error500;
4512
4829
  };
4513
- export type AdminReviewCheckIndexError = AdminReviewCheckIndexErrors[keyof AdminReviewCheckIndexErrors];
4514
- export type AdminReviewCheckIndexResponses = {
4830
+ export type ListAdminReviewChecksError = ListAdminReviewChecksErrors[keyof ListAdminReviewChecksErrors];
4831
+ export type ListAdminReviewChecksResponses = {
4515
4832
  /**
4516
4833
  * OK
4517
4834
  */
4518
4835
  200: Array<ReviewCheck>;
4519
4836
  };
4520
- export type AdminReviewCheckIndexResponse = AdminReviewCheckIndexResponses[keyof AdminReviewCheckIndexResponses];
4521
- export type AdminReviewCheckUpdateData = {
4837
+ export type ListAdminReviewChecksResponse = ListAdminReviewChecksResponses[keyof ListAdminReviewChecksResponses];
4838
+ export type UpdateAdminReviewCheckData = {
4522
4839
  body: {
4523
4840
  /**
4524
4841
  * New threshold values
@@ -4540,7 +4857,7 @@ export type AdminReviewCheckUpdateData = {
4540
4857
  query?: never;
4541
4858
  url: '/v1/admin/review/checks/{name}';
4542
4859
  };
4543
- export type AdminReviewCheckUpdateErrors = {
4860
+ export type UpdateAdminReviewCheckErrors = {
4544
4861
  /**
4545
4862
  * Bad Request
4546
4863
  */
@@ -4566,15 +4883,15 @@ export type AdminReviewCheckUpdateErrors = {
4566
4883
  */
4567
4884
  500: Error500;
4568
4885
  };
4569
- export type AdminReviewCheckUpdateError = AdminReviewCheckUpdateErrors[keyof AdminReviewCheckUpdateErrors];
4570
- export type AdminReviewCheckUpdateResponses = {
4886
+ export type UpdateAdminReviewCheckError = UpdateAdminReviewCheckErrors[keyof UpdateAdminReviewCheckErrors];
4887
+ export type UpdateAdminReviewCheckResponses = {
4571
4888
  /**
4572
4889
  * Check updated successfully
4573
4890
  */
4574
4891
  200: ReviewCheck;
4575
4892
  };
4576
- export type AdminReviewCheckUpdateResponse = AdminReviewCheckUpdateResponses[keyof AdminReviewCheckUpdateResponses];
4577
- export type AdminReviewRunIndexData = {
4893
+ export type UpdateAdminReviewCheckResponse = UpdateAdminReviewCheckResponses[keyof UpdateAdminReviewCheckResponses];
4894
+ export type ListAdminReviewRunsData = {
4578
4895
  body?: never;
4579
4896
  path?: never;
4580
4897
  query?: {
@@ -4589,11 +4906,11 @@ export type AdminReviewRunIndexData = {
4589
4906
  /**
4590
4907
  * Number of results per page
4591
4908
  */
4592
- size?: number;
4909
+ limit?: number;
4593
4910
  };
4594
4911
  url: '/v1/admin/review/runs';
4595
4912
  };
4596
- export type AdminReviewRunIndexErrors = {
4913
+ export type ListAdminReviewRunsErrors = {
4597
4914
  /**
4598
4915
  * Unauthorized
4599
4916
  */
@@ -4611,19 +4928,18 @@ export type AdminReviewRunIndexErrors = {
4611
4928
  */
4612
4929
  500: Error500;
4613
4930
  };
4614
- export type AdminReviewRunIndexError = AdminReviewRunIndexErrors[keyof AdminReviewRunIndexErrors];
4615
- export type AdminReviewRunIndexResponses = {
4931
+ export type ListAdminReviewRunsError = ListAdminReviewRunsErrors[keyof ListAdminReviewRunsErrors];
4932
+ export type ListAdminReviewRunsResponses = {
4616
4933
  /**
4617
4934
  * OK
4618
4935
  */
4619
4936
  200: {
4620
- data: Array<ReviewCheckRun>;
4621
- hasMore: boolean;
4622
- cursor?: number;
4937
+ runs: Array<ReviewCheckRun>;
4938
+ pagination: CursorPagination;
4623
4939
  };
4624
4940
  };
4625
- export type AdminReviewRunIndexResponse = AdminReviewRunIndexResponses[keyof AdminReviewRunIndexResponses];
4626
- export type AdminReviewRunShowData = {
4941
+ export type ListAdminReviewRunsResponse = ListAdminReviewRunsResponses[keyof ListAdminReviewRunsResponses];
4942
+ export type GetAdminReviewRunData = {
4627
4943
  body?: never;
4628
4944
  path: {
4629
4945
  /**
@@ -4634,7 +4950,7 @@ export type AdminReviewRunShowData = {
4634
4950
  query?: never;
4635
4951
  url: '/v1/admin/review/runs/{id}';
4636
4952
  };
4637
- export type AdminReviewRunShowErrors = {
4953
+ export type GetAdminReviewRunErrors = {
4638
4954
  /**
4639
4955
  * Unauthorized
4640
4956
  */
@@ -4656,8 +4972,8 @@ export type AdminReviewRunShowErrors = {
4656
4972
  */
4657
4973
  500: Error500;
4658
4974
  };
4659
- export type AdminReviewRunShowError = AdminReviewRunShowErrors[keyof AdminReviewRunShowErrors];
4660
- export type AdminReviewRunShowResponses = {
4975
+ export type GetAdminReviewRunError = GetAdminReviewRunErrors[keyof GetAdminReviewRunErrors];
4976
+ export type GetAdminReviewRunResponses = {
4661
4977
  /**
4662
4978
  * OK
4663
4979
  */
@@ -4666,8 +4982,8 @@ export type AdminReviewRunShowResponses = {
4666
4982
  reports: Array<Report>;
4667
4983
  };
4668
4984
  };
4669
- export type AdminReviewRunShowResponse = AdminReviewRunShowResponses[keyof AdminReviewRunShowResponses];
4670
- export type AdminReviewAllowlistIndexData = {
4985
+ export type GetAdminReviewRunResponse = GetAdminReviewRunResponses[keyof GetAdminReviewRunResponses];
4986
+ export type ListAdminReviewAllowlistData = {
4671
4987
  body?: never;
4672
4988
  path?: never;
4673
4989
  query?: {
@@ -4678,7 +4994,7 @@ export type AdminReviewAllowlistIndexData = {
4678
4994
  };
4679
4995
  url: '/v1/admin/review/allowlist';
4680
4996
  };
4681
- export type AdminReviewAllowlistIndexErrors = {
4997
+ export type ListAdminReviewAllowlistErrors = {
4682
4998
  /**
4683
4999
  * Unauthorized
4684
5000
  */
@@ -4696,15 +5012,15 @@ export type AdminReviewAllowlistIndexErrors = {
4696
5012
  */
4697
5013
  500: Error500;
4698
5014
  };
4699
- export type AdminReviewAllowlistIndexError = AdminReviewAllowlistIndexErrors[keyof AdminReviewAllowlistIndexErrors];
4700
- export type AdminReviewAllowlistIndexResponses = {
5015
+ export type ListAdminReviewAllowlistError = ListAdminReviewAllowlistErrors[keyof ListAdminReviewAllowlistErrors];
5016
+ export type ListAdminReviewAllowlistResponses = {
4701
5017
  /**
4702
5018
  * OK
4703
5019
  */
4704
5020
  200: Array<ReviewAllowlist>;
4705
5021
  };
4706
- export type AdminReviewAllowlistIndexResponse = AdminReviewAllowlistIndexResponses[keyof AdminReviewAllowlistIndexResponses];
4707
- export type AdminReviewAllowlistCreateData = {
5022
+ export type ListAdminReviewAllowlistResponse = ListAdminReviewAllowlistResponses[keyof ListAdminReviewAllowlistResponses];
5023
+ export type CreateAdminReviewAllowlistEntryData = {
4708
5024
  body: {
4709
5025
  /**
4710
5026
  * Check name to allowlist for
@@ -4727,7 +5043,7 @@ export type AdminReviewAllowlistCreateData = {
4727
5043
  query?: never;
4728
5044
  url: '/v1/admin/review/allowlist';
4729
5045
  };
4730
- export type AdminReviewAllowlistCreateErrors = {
5046
+ export type CreateAdminReviewAllowlistEntryErrors = {
4731
5047
  /**
4732
5048
  * Bad Request
4733
5049
  */
@@ -4753,15 +5069,15 @@ export type AdminReviewAllowlistCreateErrors = {
4753
5069
  */
4754
5070
  500: Error500;
4755
5071
  };
4756
- export type AdminReviewAllowlistCreateError = AdminReviewAllowlistCreateErrors[keyof AdminReviewAllowlistCreateErrors];
4757
- export type AdminReviewAllowlistCreateResponses = {
5072
+ export type CreateAdminReviewAllowlistEntryError = CreateAdminReviewAllowlistEntryErrors[keyof CreateAdminReviewAllowlistEntryErrors];
5073
+ export type CreateAdminReviewAllowlistEntryResponses = {
4758
5074
  /**
4759
5075
  * Added to allowlist
4760
5076
  */
4761
5077
  201: ReviewAllowlist;
4762
5078
  };
4763
- export type AdminReviewAllowlistCreateResponse = AdminReviewAllowlistCreateResponses[keyof AdminReviewAllowlistCreateResponses];
4764
- export type AdminReviewAllowlistDestroyData = {
5079
+ export type CreateAdminReviewAllowlistEntryResponse = CreateAdminReviewAllowlistEntryResponses[keyof CreateAdminReviewAllowlistEntryResponses];
5080
+ export type DeleteAdminReviewAllowlistEntryData = {
4765
5081
  body?: never;
4766
5082
  path: {
4767
5083
  /**
@@ -4772,7 +5088,7 @@ export type AdminReviewAllowlistDestroyData = {
4772
5088
  query?: never;
4773
5089
  url: '/v1/admin/review/allowlist/{id}';
4774
5090
  };
4775
- export type AdminReviewAllowlistDestroyErrors = {
5091
+ export type DeleteAdminReviewAllowlistEntryErrors = {
4776
5092
  /**
4777
5093
  * Unauthorized
4778
5094
  */
@@ -4794,12 +5110,12 @@ export type AdminReviewAllowlistDestroyErrors = {
4794
5110
  */
4795
5111
  500: Error500;
4796
5112
  };
4797
- export type AdminReviewAllowlistDestroyError = AdminReviewAllowlistDestroyErrors[keyof AdminReviewAllowlistDestroyErrors];
4798
- export type AdminReviewAllowlistDestroyResponses = {
5113
+ export type DeleteAdminReviewAllowlistEntryError = DeleteAdminReviewAllowlistEntryErrors[keyof DeleteAdminReviewAllowlistEntryErrors];
5114
+ export type DeleteAdminReviewAllowlistEntryResponses = {
4799
5115
  /**
4800
5116
  * Removed from allowlist
4801
5117
  */
4802
5118
  204: void;
4803
5119
  };
4804
- export type AdminReviewAllowlistDestroyResponse = AdminReviewAllowlistDestroyResponses[keyof AdminReviewAllowlistDestroyResponses];
5120
+ export type DeleteAdminReviewAllowlistEntryResponse = DeleteAdminReviewAllowlistEntryResponses[keyof DeleteAdminReviewAllowlistEntryResponses];
4805
5121
  //# sourceMappingURL=types.gen.d.ts.map