import * as v from "valibot";

//#region src/v20170710/base.d.ts
/**
 * All known WaniKani API revisions, created when breaking changes are introduced to the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#revisions-aka-versioning}
 * @category Base
 */
type ApiRevision = "20170710";
declare const ApiRevision: v.LiteralSchema<"20170710", undefined>;
/**
 * A constant representing the WaniKani API revision. This will match the revision module being imported from, or the
 * latest revision when importing from the root module.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#revisions-aka-versioning}
 * @category Base
 */
declare const API_REVISION: ApiRevision;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Base
 * @category Type Guards
 */
declare function isApiRevision(value: unknown): value is ApiRevision;
/**
 * Items with this type will have their number validated as a safe integer >= 0.
 *
 * @category Base
 */
type SafeInteger = number & {};
declare const SafeInteger: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
/**
 * A `string` sent to/returned from the WaniKani API that can be converted into a JavaScript `Date` object.
 *
 * @category Base
 */
type DatableString = v.Brand<"DatableString"> & string;
declare const DatableString: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Base
 * @category Type Guards
 */
declare function isDatableString(value: unknown): value is DatableString;
/**
 * The minimum level provided by WaniKani; exported for use in lieu of a Magic Number.
 *
 * @category Base
 */
declare const MIN_LEVEL = 1;
/**
 * The maximum level provided by WaniKani; exported for use in lieu of a Magic Number.
 *
 * @category Base
 */
declare const MAX_LEVEL = 60;
/**
 * A number representing a level in WaniKani, from `1` to `60`.
 *
 * @category Base
 */
type Level = number & {};
declare const Level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Base
 * @category Type Guards
 */
declare function isLevel(value: unknown): value is Level;
/**
 * The common properties across all Resources from the WaniKani API.
 *
 * @remarks This is a partial interface; most use cases involve using a reource that extends it.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#response-structure}
 *
 * @category Base
 * @category Resources
 */
interface BaseResource {
  /**
   * For a resource, this is the last time that particular resource was updated.
   */
  data_updated_at: DatableString;
  /**
   * The URL of the requested resource.
   */
  url: string;
}
declare const BaseResource: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
}, undefined>;
/**
 * The common properties across all Collection items from the WaniKani API.
 *
 * @remarks This is a partial interface; most use cases involve using a reource that extends it.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#response-structure}
 * @category Base
 * @category Collections
 */
interface BaseCollection {
  /**
   * For collections, this is the timestamp of the most recently updated resource in the specified scope and is not
   * limited by pagination. If no items were returned for the specified scope, then this will be `null`.
   */
  data_updated_at: DatableString | null;
  /**
   * The kind of object returned.
   */
  object: "collection";
  /**
   * Pagination Info for the collection.
   */
  pages: {
    /**
     * The URL of the next page of results. If there are no more results, the value is `null`.
     */
    next_url: string | null;
    /**
     * Maximum number of items delivered per page for this collection.
     */
    per_page: number;
    /**
     * The URL of the previous page of results. If there are no results at all or no previous page to go to, the value
     * is `null`.
     */
    previous_url: string | null;
  };
  /**
   * The total number of items in the collection.
   */
  total_count: number;
  /**
   * The URL of the request. For collections, that will contain all the filters and options you've passed to the API.
   */
  url: string;
}
declare const BaseCollection: v.ObjectSchema<{
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly url: v.StringSchema<undefined>;
}, undefined>;
/**
 * Query string parameters that can be sent to any WaniKani API collection endpoint.
 *
 * @see {@link stringifyParameters}
 * @category Base
 * @category Parameters
 */
interface CollectionParameters {
  /**
   * Only resources where `data.id` matches one of the array values are returned.
   */
  ids?: SafeInteger[];
  /**
   * Get a collection's next page containing `pages.per_page` resources after the given ID.
   *
   * This will take precedence over `page_before_id` if both are specified.
   */
  page_after_id?: SafeInteger;
  /**
   * Get a collection's previous page containing `pages.per_page` resources before the given ID.
   *
   * The `page_after_id` parameter takes precedence over this if it is specified alongside this parameter.
   */
  page_before_id?: SafeInteger;
  /**
   * Only resources updated after this time are returned.
   */
  updated_after?: DatableString | Date;
}
declare const CollectionParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
}, undefined>;
/**
 * Parses a parameter object, for use with the WaniKani API.
 *
 * @param params -- An object containing the query string parameters to parse.
 * @returns A query string of all the parameters, which can be added to a base URL.
 * @throws A `TypeError` if a non-object is passed to the function.
 * @category Base
 */
declare function stringifyParameters(params: CollectionParameters): string;
/**
 * The common properties across all Reports from the WaniKani API
 *
 * @remarks This is a partial interface; most use cases involve using a reource that extends it.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#response-structure}
 *
 * @category Base
 * @category Reports
 */
interface BaseReport {
  /**
   * The last time the report was updated.
   */
  data_updated_at: DatableString;
  /**
   * The kind of object returned.
   */
  object: "report";
  /**
   * The URL of the requested report.
   */
  url: string;
}
declare const BaseReport: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly object: v.LiteralSchema<"report", undefined>;
  readonly url: v.StringSchema<undefined>;
}, undefined>;
/**
 * An error response returned by the WaniKani API.
 *
 * @category Base
 */
interface ApiError {
  /**
   * An HTTP status code indicating the type of error.
   */
  code: number;
  /**
   * A message string that describes the error.
   */
  error: string;
}
declare const ApiError: v.ObjectSchema<{
  readonly code: v.NumberSchema<undefined>;
  readonly error: v.StringSchema<undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Base
 * @category Type Guards
 */
declare function isApiError(value: unknown): value is ApiError;
//#endregion
//#region src/v20170710/subjects.d.ts
/**
 * The types of subjects used on WaniKani and its API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
type SubjectType = "kana_vocabulary" | "kanji" | "radical" | "vocabulary";
declare const SubjectType: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Subjects
 * @category Type Guards
 */
declare function isSubjectType(value: unknown): value is SubjectType;
/**
 * A non-empty array of WaniKani subject types.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
type SubjectTuple = [first: SubjectType, ...rest: SubjectType[]];
declare const SubjectTuple: v.SchemaWithPipe<readonly [v.TupleWithRestSchema<[v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>], v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>, undefined>, v.NonEmptyAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], undefined>, v.CheckItemsAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], "Duplicate Subject Type detected in Subject Tuple">]>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Subjects
 * @category Type Guards
 */
declare function isSubjectTuple(value: unknown): value is SubjectTuple;
/**
 * A subject's auxilliary meanings.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface SubjectAuxiliaryMeaning {
  /**
   * A singular subject meaning.
   */
  meaning: string;
  /**
   * Either `whitelist` or `blacklist`. When evaluating user input, whitelisted meanings are used to match for
   * correctness. Blacklisted meanings are used to match for incorrectness.
   */
  type: "blacklist" | "whitelist";
}
declare const SubjectAuxiliaryMeaning: v.ObjectSchema<{
  readonly meaning: v.StringSchema<undefined>;
  readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
}, undefined>;
/**
 * Information pertaining to a subject's meaning.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface SubjectMeaning {
  /**
   * Indicates if the meaning is used to evaluate user input for correctness.
   */
  accepted_answer: boolean;
  /**
   * A singular subject meaning.
   */
  meaning: string;
  /**
   * Indicates priority in the WaniKani system.
   */
  primary: boolean;
}
declare const SubjectMeaning: v.ObjectSchema<{
  readonly accepted_answer: v.BooleanSchema<undefined>;
  readonly meaning: v.StringSchema<undefined>;
  readonly primary: v.BooleanSchema<undefined>;
}, undefined>;
/**
 * The common properties of all subjects on WaniKani.
 *
 * @remarks
 * This only represents a partial structure of a subject, and it's highly recommended to use one of the child type
 * definitions that extend this type definition.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface SubjectBaseData {
  /**
   * Collection of auxiliary meanings.
   */
  auxiliary_meanings: SubjectAuxiliaryMeaning[];
  /**
   * Timestamp when the subject was created.
   */
  created_at: DatableString;
  /**
   * A URL pointing to the page on wanikani.com that provides detailed information about this subject.
   */
  document_url: string;
  /**
   * Timestamp when the subject was hidden, indicating associated assignments will no longer appear in lessons or
   * reviews and that the subject page is no longer visible on wanikani.com.
   */
  hidden_at: DatableString | null;
  /**
   * The position that the subject appears in lessons. Note that the value is scoped to the level of the subject, so
   * there are duplicate values across levels.
   */
  lesson_position: number;
  /**
   * The level of the subject, from `1` to `60`.
   */
  level: Level;
  /**
   * The subject's meaning mnemonic.
   */
  meaning_mnemonic: string;
  /**
   * The subject meanings.
   */
  meanings: SubjectMeaning[];
  /**
   * The string that is used when generating the document URL for the subject. Radicals use their meaning, downcased.
   * Kanji and vocabulary use their characters.
   */
  slug: string;
  /**
   * Unique identifier of the associated Spaced Repetition System.
   */
  spaced_repetition_system_id: number;
}
declare const SubjectBaseData: v.ObjectSchema<{
  readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
    readonly meaning: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
  }, undefined>, undefined>;
  readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly document_url: v.StringSchema<undefined>;
  readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly lesson_position: v.NumberSchema<undefined>;
  readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  readonly meaning_mnemonic: v.StringSchema<undefined>;
  readonly meanings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly meaning: v.StringSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
  }, undefined>, undefined>;
  readonly slug: v.StringSchema<undefined>;
  readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
}, undefined>;
/**
 * An image representing a radical subject.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
type RadicalCharacterImage = {
  /**
   * The location of the image.
   */
  url: string;
} & ({
  /**
   * The content type of the image.
   */
  content_type: "image/png";
  /**
   * Details about the image. Each `content_type` returns a uniquely structured object.
   */
  metadata: {
    /**
     * Color of the asset in hexadecimal
     */
    color: string;
    /**
     * Dimension of the asset in pixels
     */
    dimensions: string;
    /**
     * A name descriptor
     */
    style_name: string;
  };
} | {
  /**
   * The content type of the image.
   */
  content_type: "image/svg+xml";
  /**
   * Details about the image. Each `content_type` returns a uniquely structured object.
   */
  metadata: {
    /**
     * The SVG asset contains built-in CSS styling.
     */
    inline_styles: boolean;
  };
});
declare const RadicalCharacterImage: v.IntersectSchema<[v.ObjectSchema<{
  readonly url: v.StringSchema<undefined>;
}, undefined>, v.VariantSchema<"content_type", [v.ObjectSchema<{
  readonly content_type: v.LiteralSchema<"image/svg+xml", undefined>;
  readonly metadata: v.ObjectSchema<{
    readonly inline_styles: v.BooleanSchema<undefined>;
  }, undefined>;
}, undefined>, v.ObjectSchema<{
  readonly content_type: v.LiteralSchema<"image/png", undefined>;
  readonly metadata: v.ObjectSchema<{
    readonly color: v.StringSchema<undefined>;
    readonly dimensions: v.StringSchema<undefined>;
    readonly style_name: v.StringSchema<undefined>;
  }, undefined>;
}, undefined>], undefined>], undefined>;
/**
 * Data returned only for radical subjects.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface RadicalData extends SubjectBaseData {
  /**
   * An array of numeric identifiers for the kanji that have the radical as a component.
   */
  amalgamation_subject_ids: number[];
  /**
   * A collection of images of the radical.
   */
  character_images: RadicalCharacterImage[];
  /**
   * Unlike kanji and vocabulary, radicals can have a null value for characters. Not all radicals have a UTF entry, so
   * the radical must be visually represented with an image instead.
   */
  characters: string | null;
}
declare const RadicalData: v.ObjectSchema<{
  readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
  readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
    readonly meaning: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
  }, undefined>, undefined>;
  readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly meanings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly meaning: v.StringSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
  }, undefined>, undefined>;
  readonly document_url: v.StringSchema<undefined>;
  readonly lesson_position: v.NumberSchema<undefined>;
  readonly meaning_mnemonic: v.StringSchema<undefined>;
  readonly slug: v.StringSchema<undefined>;
  readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
  readonly character_images: v.ArraySchema<v.IntersectSchema<[v.ObjectSchema<{
    readonly url: v.StringSchema<undefined>;
  }, undefined>, v.VariantSchema<"content_type", [v.ObjectSchema<{
    readonly content_type: v.LiteralSchema<"image/svg+xml", undefined>;
    readonly metadata: v.ObjectSchema<{
      readonly inline_styles: v.BooleanSchema<undefined>;
    }, undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly content_type: v.LiteralSchema<"image/png", undefined>;
    readonly metadata: v.ObjectSchema<{
      readonly color: v.StringSchema<undefined>;
      readonly dimensions: v.StringSchema<undefined>;
      readonly style_name: v.StringSchema<undefined>;
    }, undefined>;
  }, undefined>], undefined>], undefined>, undefined>;
  readonly characters: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
}, undefined>;
/**
 * Information pertaining to a reading of a kanji subject.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface KanjiReading {
  /**
   * Indicates if the reading is used to evaluate user input for correctness.
   */
  accepted_answer: boolean;
  /**
   * Indicates priority in the WaniKani system.
   */
  primary: boolean;
  /**
   * A singular subject reading.
   */
  reading: string;
  /**
   * The kanji reading's classfication: `kunyomi`, `nanori`, or `onyomi`.
   */
  type: "kunyomi" | "nanori" | "onyomi";
}
declare const KanjiReading: v.ObjectSchema<{
  readonly accepted_answer: v.BooleanSchema<undefined>;
  readonly primary: v.BooleanSchema<undefined>;
  readonly reading: v.StringSchema<undefined>;
  readonly type: v.PicklistSchema<["kunyomi", "nanori", "onyomi"], undefined>;
}, undefined>;
/**
 * Data returned only for kanji subjects.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface KanjiData extends SubjectBaseData {
  /**
   * An array of numeric identifiers for the vocabulary that have the kanji as a component.
   */
  amalgamation_subject_ids: number[];
  /**
   * The UTF-8 characters for the subject, including kanji and hiragana.
   */
  characters: string;
  /**
   * An array of numeric identifiers for the radicals that make up this kanji. Note that these are the subjects that
   * must have passed assignments in order to unlock this subject's assignment.
   */
  component_subject_ids: number[];
  /**
   * Meaning hint for the kanji.
   */
  meaning_hint: string | null;
  /**
   * Reading hint for the kanji.
   */
  reading_hint: string | null;
  /**
   * The kanji's reading mnemonic.
   */
  reading_mnemonic: string;
  /**
   * Selected readings for the kanji.
   */
  readings: KanjiReading[];
  /**
   * An array of numeric identifiers for kanji which are visually similar to the kanji in question.
   */
  visually_similar_subject_ids: number[];
}
declare const KanjiData: v.ObjectSchema<{
  readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
  readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
    readonly meaning: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
  }, undefined>, undefined>;
  readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly meanings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly meaning: v.StringSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
  }, undefined>, undefined>;
  readonly document_url: v.StringSchema<undefined>;
  readonly lesson_position: v.NumberSchema<undefined>;
  readonly meaning_mnemonic: v.StringSchema<undefined>;
  readonly slug: v.StringSchema<undefined>;
  readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
  readonly characters: v.StringSchema<undefined>;
  readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
  readonly meaning_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  readonly reading_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  readonly reading_mnemonic: v.StringSchema<undefined>;
  readonly readings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
    readonly reading: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["kunyomi", "nanori", "onyomi"], undefined>;
  }, undefined>, undefined>;
  readonly visually_similar_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
}, undefined>;
/**
 * Japanese context sentences for vocabulary, with a corresponding English translation.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface VocabularyContextSentence {
  /**
   * English translation of the sentence.
   */
  en: string;
  /**
   * Japanese context sentence.
   */
  ja: string;
}
declare const VocabularyContextSentence: v.ObjectSchema<{
  readonly en: v.StringSchema<undefined>;
  readonly ja: v.StringSchema<undefined>;
}, undefined>;
/**
 * Information pertaining to pronunciation audio for a vocabulary subject.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface VocabularyPronunciationAudio {
  /**
   * The content type of the audio. Currently the API delivers `audio/mpeg`, `audio/ogg`, and `audio/webm`.
   */
  content_type: "audio/mpeg" | "audio/ogg" | "audio/webm";
  /**
   * Details about the pronunciation audio.
   */
  metadata: {
    /**
     * The gender of the voice actor.
     */
    gender: "female" | "male";
    /**
     * Vocabulary being pronounced in kana.
     */
    pronunciation: string;
    /**
     * A unique ID shared between same source pronunciation audio.
     */
    source_id: number;
    /**
     * A unique ID belonging to the voice actor.
     */
    voice_actor_id: number;
    /**
     * Humanized name of the voice actor.
     */
    voice_actor_name: string;
    /**
     * Description of the voice.
     */
    voice_description: string;
  };
  /**
   * The location of the audio.
   */
  url: string;
}
declare const VocabularyPronunciationAudio: v.ObjectSchema<{
  readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
  readonly metadata: v.ObjectSchema<{
    readonly gender: v.PicklistSchema<["female", "male"], undefined>;
    readonly pronunciation: v.StringSchema<undefined>;
    readonly source_id: v.NumberSchema<undefined>;
    readonly voice_actor_id: v.NumberSchema<undefined>;
    readonly voice_actor_name: v.StringSchema<undefined>;
    readonly voice_description: v.StringSchema<undefined>;
  }, undefined>;
  readonly url: v.StringSchema<undefined>;
}, undefined>;
/**
 * Information pertaining to a reading of a vocabulary subject..
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface VocabularyReading {
  /**
   * Indicates if the reading is used to evaluate user input for correctness.
   */
  accepted_answer: boolean;
  /**
   * Indicates priority in the WaniKani system.
   */
  primary: boolean;
  /**
   * A singular subject reading.
   */
  reading: string;
}
declare const VocabularyReading: v.ObjectSchema<{
  readonly accepted_answer: v.BooleanSchema<undefined>;
  readonly primary: v.BooleanSchema<undefined>;
  readonly reading: v.StringSchema<undefined>;
}, undefined>;
/**
 * Data returned only for vocabulary subjects.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface VocabularyData extends SubjectBaseData {
  /**
   * The UTF-8 characters for the subject, including kanji and hiragana.
   */
  characters: string;
  /**
   * An array of numeric identifiers for the kanji that make up this vocabulary. Note that these are the subjects that
   * must be have passed assignments in order to unlock this subject's assignment.
   */
  component_subject_ids: number[];
  /**
   * A collection of context sentences.
   */
  context_sentences: VocabularyContextSentence[];
  /**
   * Parts of speech.
   */
  parts_of_speech: string[];
  /**
   * A collection of pronunciation audio.
   */
  pronunciation_audios: VocabularyPronunciationAudio[];
  /**
   * The vocabulary's reading mnemonic.
   */
  reading_mnemonic: string;
  /**
   * Selected readings for the vocabulary.
   */
  readings: VocabularyReading[];
}
declare const VocabularyData: v.ObjectSchema<{
  readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
  readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
    readonly meaning: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
  }, undefined>, undefined>;
  readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly meanings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly meaning: v.StringSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
  }, undefined>, undefined>;
  readonly document_url: v.StringSchema<undefined>;
  readonly lesson_position: v.NumberSchema<undefined>;
  readonly meaning_mnemonic: v.StringSchema<undefined>;
  readonly slug: v.StringSchema<undefined>;
  readonly characters: v.StringSchema<undefined>;
  readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
  readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
    readonly en: v.StringSchema<undefined>;
    readonly ja: v.StringSchema<undefined>;
  }, undefined>, undefined>;
  readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
  readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
    readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
    readonly metadata: v.ObjectSchema<{
      readonly gender: v.PicklistSchema<["female", "male"], undefined>;
      readonly pronunciation: v.StringSchema<undefined>;
      readonly source_id: v.NumberSchema<undefined>;
      readonly voice_actor_id: v.NumberSchema<undefined>;
      readonly voice_actor_name: v.StringSchema<undefined>;
      readonly voice_description: v.StringSchema<undefined>;
    }, undefined>;
    readonly url: v.StringSchema<undefined>;
  }, undefined>, undefined>;
  readonly reading_mnemonic: v.StringSchema<undefined>;
  readonly readings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
    readonly reading: v.StringSchema<undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * Data returned only for kana-only vocabulary subjects.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Subjects
 */
interface KanaVocabularyData extends SubjectBaseData {
  /**
   * The UTF-8 characters for the subject, including kanji and hiragana.
   */
  characters: string;
  /**
   * A collection of context sentences.
   */
  context_sentences: VocabularyContextSentence[];
  /**
   * Parts of speech.
   */
  parts_of_speech: string[];
  /**
   * A collection of pronunciation audio.
   */
  pronunciation_audios: VocabularyPronunciationAudio[];
}
declare const KanaVocabularyData: v.ObjectSchema<{
  readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
  readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
    readonly meaning: v.StringSchema<undefined>;
    readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
  }, undefined>, undefined>;
  readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly meanings: v.ArraySchema<v.ObjectSchema<{
    readonly accepted_answer: v.BooleanSchema<undefined>;
    readonly meaning: v.StringSchema<undefined>;
    readonly primary: v.BooleanSchema<undefined>;
  }, undefined>, undefined>;
  readonly document_url: v.StringSchema<undefined>;
  readonly lesson_position: v.NumberSchema<undefined>;
  readonly meaning_mnemonic: v.StringSchema<undefined>;
  readonly slug: v.StringSchema<undefined>;
  readonly characters: v.StringSchema<undefined>;
  readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
    readonly en: v.StringSchema<undefined>;
    readonly ja: v.StringSchema<undefined>;
  }, undefined>, undefined>;
  readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
  readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
    readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
    readonly metadata: v.ObjectSchema<{
      readonly gender: v.PicklistSchema<["female", "male"], undefined>;
      readonly pronunciation: v.StringSchema<undefined>;
      readonly source_id: v.NumberSchema<undefined>;
      readonly voice_actor_id: v.NumberSchema<undefined>;
      readonly voice_actor_name: v.StringSchema<undefined>;
      readonly voice_description: v.StringSchema<undefined>;
    }, undefined>;
    readonly url: v.StringSchema<undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * The exact structure of a subject depends on the subject type. The available subject types are `kana_vocabulary`,
 * `kanji`, `radical`, and `vocabulary`. Note that any attributes called out for the specific subject type behaves
 * differently than the common attribute of the same name.
 *
 * This type is for mixed or unknown subject types; it is a discriminated union based on the subject's `object` key.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#subjects}
 * @category Resources
 * @category Subjects
 */
type Subject = BaseResource & {
  /**
   * A unique number identifying the subject.
   */
  id: number;
} & ({
  /**
   * Data for the returned kana-only vocabulary.
   */
  data: KanaVocabularyData;
  /**
   * The kind of object returned.
   */
  object: "kana_vocabulary";
} | {
  /**
   * Data for the returned kanji.
   */
  data: KanjiData;
  /**
   * The kind of object returned.
   */
  object: "kanji";
} | {
  /**
   * Data for the returned radical.
   */
  data: RadicalData;
  /**
   * The kind of object returned.
   */
  object: "radical";
} | {
  /**
   * Data for the returned vocabulary.
   */
  data: VocabularyData;
  /**
   * The kind of object returned.
   */
  object: "vocabulary";
});
declare const Subject: v.IntersectSchema<[v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
}, undefined>, v.ObjectSchema<{
  readonly id: v.NumberSchema<undefined>;
}, undefined>, v.VariantSchema<"object", [v.ObjectSchema<{
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
      readonly meaning: v.StringSchema<undefined>;
      readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
    }, undefined>, undefined>;
    readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly meanings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly meaning: v.StringSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
    }, undefined>, undefined>;
    readonly document_url: v.StringSchema<undefined>;
    readonly lesson_position: v.NumberSchema<undefined>;
    readonly meaning_mnemonic: v.StringSchema<undefined>;
    readonly slug: v.StringSchema<undefined>;
    readonly characters: v.StringSchema<undefined>;
    readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
      readonly en: v.StringSchema<undefined>;
      readonly ja: v.StringSchema<undefined>;
    }, undefined>, undefined>;
    readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
    readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
      readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
      readonly metadata: v.ObjectSchema<{
        readonly gender: v.PicklistSchema<["female", "male"], undefined>;
        readonly pronunciation: v.StringSchema<undefined>;
        readonly source_id: v.NumberSchema<undefined>;
        readonly voice_actor_id: v.NumberSchema<undefined>;
        readonly voice_actor_name: v.StringSchema<undefined>;
        readonly voice_description: v.StringSchema<undefined>;
      }, undefined>;
      readonly url: v.StringSchema<undefined>;
    }, undefined>, undefined>;
  }, undefined>;
  readonly object: v.LiteralSchema<"kana_vocabulary", undefined>;
}, undefined>, v.ObjectSchema<{
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
      readonly meaning: v.StringSchema<undefined>;
      readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
    }, undefined>, undefined>;
    readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly meanings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly meaning: v.StringSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
    }, undefined>, undefined>;
    readonly document_url: v.StringSchema<undefined>;
    readonly lesson_position: v.NumberSchema<undefined>;
    readonly meaning_mnemonic: v.StringSchema<undefined>;
    readonly slug: v.StringSchema<undefined>;
    readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    readonly characters: v.StringSchema<undefined>;
    readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    readonly meaning_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly reading_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly reading_mnemonic: v.StringSchema<undefined>;
    readonly readings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
      readonly reading: v.StringSchema<undefined>;
      readonly type: v.PicklistSchema<["kunyomi", "nanori", "onyomi"], undefined>;
    }, undefined>, undefined>;
    readonly visually_similar_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
  }, undefined>;
  readonly object: v.LiteralSchema<"kanji", undefined>;
}, undefined>, v.ObjectSchema<{
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
      readonly meaning: v.StringSchema<undefined>;
      readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
    }, undefined>, undefined>;
    readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly meanings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly meaning: v.StringSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
    }, undefined>, undefined>;
    readonly document_url: v.StringSchema<undefined>;
    readonly lesson_position: v.NumberSchema<undefined>;
    readonly meaning_mnemonic: v.StringSchema<undefined>;
    readonly slug: v.StringSchema<undefined>;
    readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    readonly character_images: v.ArraySchema<v.IntersectSchema<[v.ObjectSchema<{
      readonly url: v.StringSchema<undefined>;
    }, undefined>, v.VariantSchema<"content_type", [v.ObjectSchema<{
      readonly content_type: v.LiteralSchema<"image/svg+xml", undefined>;
      readonly metadata: v.ObjectSchema<{
        readonly inline_styles: v.BooleanSchema<undefined>;
      }, undefined>;
    }, undefined>, v.ObjectSchema<{
      readonly content_type: v.LiteralSchema<"image/png", undefined>;
      readonly metadata: v.ObjectSchema<{
        readonly color: v.StringSchema<undefined>;
        readonly dimensions: v.StringSchema<undefined>;
        readonly style_name: v.StringSchema<undefined>;
      }, undefined>;
    }, undefined>], undefined>], undefined>, undefined>;
    readonly characters: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly object: v.LiteralSchema<"radical", undefined>;
}, undefined>, v.ObjectSchema<{
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
      readonly meaning: v.StringSchema<undefined>;
      readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
    }, undefined>, undefined>;
    readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly meanings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly meaning: v.StringSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
    }, undefined>, undefined>;
    readonly document_url: v.StringSchema<undefined>;
    readonly lesson_position: v.NumberSchema<undefined>;
    readonly meaning_mnemonic: v.StringSchema<undefined>;
    readonly slug: v.StringSchema<undefined>;
    readonly characters: v.StringSchema<undefined>;
    readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
      readonly en: v.StringSchema<undefined>;
      readonly ja: v.StringSchema<undefined>;
    }, undefined>, undefined>;
    readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
    readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
      readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
      readonly metadata: v.ObjectSchema<{
        readonly gender: v.PicklistSchema<["female", "male"], undefined>;
        readonly pronunciation: v.StringSchema<undefined>;
        readonly source_id: v.NumberSchema<undefined>;
        readonly voice_actor_id: v.NumberSchema<undefined>;
        readonly voice_actor_name: v.StringSchema<undefined>;
        readonly voice_description: v.StringSchema<undefined>;
      }, undefined>;
      readonly url: v.StringSchema<undefined>;
    }, undefined>, undefined>;
    readonly reading_mnemonic: v.StringSchema<undefined>;
    readonly readings: v.ArraySchema<v.ObjectSchema<{
      readonly accepted_answer: v.BooleanSchema<undefined>;
      readonly primary: v.BooleanSchema<undefined>;
      readonly reading: v.StringSchema<undefined>;
    }, undefined>, undefined>;
  }, undefined>;
  readonly object: v.LiteralSchema<"vocabulary", undefined>;
}, undefined>], undefined>], undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Subjects
 * @category Type Guards
 */
declare function isSubject(value: unknown): value is Subject;
/**
 * A collection of subjects of mixed or unknown types returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-subjects}
 * @category Collections
 * @category Subjects
 */
interface SubjectCollection extends BaseCollection {
  /**
   * An array of returned subjects of mixed or unknown type.
   */
  data: Subject[];
}
declare const SubjectCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.IntersectSchema<[v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly id: v.NumberSchema<undefined>;
  }, undefined>, v.VariantSchema<"object", [v.ObjectSchema<{
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
      readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
        readonly meaning: v.StringSchema<undefined>;
        readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
      }, undefined>, undefined>;
      readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly meanings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly meaning: v.StringSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
      }, undefined>, undefined>;
      readonly document_url: v.StringSchema<undefined>;
      readonly lesson_position: v.NumberSchema<undefined>;
      readonly meaning_mnemonic: v.StringSchema<undefined>;
      readonly slug: v.StringSchema<undefined>;
      readonly characters: v.StringSchema<undefined>;
      readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
        readonly en: v.StringSchema<undefined>;
        readonly ja: v.StringSchema<undefined>;
      }, undefined>, undefined>;
      readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
      readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
        readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
        readonly metadata: v.ObjectSchema<{
          readonly gender: v.PicklistSchema<["female", "male"], undefined>;
          readonly pronunciation: v.StringSchema<undefined>;
          readonly source_id: v.NumberSchema<undefined>;
          readonly voice_actor_id: v.NumberSchema<undefined>;
          readonly voice_actor_name: v.StringSchema<undefined>;
          readonly voice_description: v.StringSchema<undefined>;
        }, undefined>;
        readonly url: v.StringSchema<undefined>;
      }, undefined>, undefined>;
    }, undefined>;
    readonly object: v.LiteralSchema<"kana_vocabulary", undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
      readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
        readonly meaning: v.StringSchema<undefined>;
        readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
      }, undefined>, undefined>;
      readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly meanings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly meaning: v.StringSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
      }, undefined>, undefined>;
      readonly document_url: v.StringSchema<undefined>;
      readonly lesson_position: v.NumberSchema<undefined>;
      readonly meaning_mnemonic: v.StringSchema<undefined>;
      readonly slug: v.StringSchema<undefined>;
      readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
      readonly characters: v.StringSchema<undefined>;
      readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
      readonly meaning_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
      readonly reading_hint: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
      readonly reading_mnemonic: v.StringSchema<undefined>;
      readonly readings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
        readonly reading: v.StringSchema<undefined>;
        readonly type: v.PicklistSchema<["kunyomi", "nanori", "onyomi"], undefined>;
      }, undefined>, undefined>;
      readonly visually_similar_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    }, undefined>;
    readonly object: v.LiteralSchema<"kanji", undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
      readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
        readonly meaning: v.StringSchema<undefined>;
        readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
      }, undefined>, undefined>;
      readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly meanings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly meaning: v.StringSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
      }, undefined>, undefined>;
      readonly document_url: v.StringSchema<undefined>;
      readonly lesson_position: v.NumberSchema<undefined>;
      readonly meaning_mnemonic: v.StringSchema<undefined>;
      readonly slug: v.StringSchema<undefined>;
      readonly amalgamation_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
      readonly character_images: v.ArraySchema<v.IntersectSchema<[v.ObjectSchema<{
        readonly url: v.StringSchema<undefined>;
      }, undefined>, v.VariantSchema<"content_type", [v.ObjectSchema<{
        readonly content_type: v.LiteralSchema<"image/svg+xml", undefined>;
        readonly metadata: v.ObjectSchema<{
          readonly inline_styles: v.BooleanSchema<undefined>;
        }, undefined>;
      }, undefined>, v.ObjectSchema<{
        readonly content_type: v.LiteralSchema<"image/png", undefined>;
        readonly metadata: v.ObjectSchema<{
          readonly color: v.StringSchema<undefined>;
          readonly dimensions: v.StringSchema<undefined>;
          readonly style_name: v.StringSchema<undefined>;
        }, undefined>;
      }, undefined>], undefined>], undefined>, undefined>;
      readonly characters: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    }, undefined>;
    readonly object: v.LiteralSchema<"radical", undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
      readonly auxiliary_meanings: v.ArraySchema<v.ObjectSchema<{
        readonly meaning: v.StringSchema<undefined>;
        readonly type: v.PicklistSchema<["blacklist", "whitelist"], undefined>;
      }, undefined>, undefined>;
      readonly hidden_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly meanings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly meaning: v.StringSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
      }, undefined>, undefined>;
      readonly document_url: v.StringSchema<undefined>;
      readonly lesson_position: v.NumberSchema<undefined>;
      readonly meaning_mnemonic: v.StringSchema<undefined>;
      readonly slug: v.StringSchema<undefined>;
      readonly characters: v.StringSchema<undefined>;
      readonly component_subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
      readonly context_sentences: v.ArraySchema<v.ObjectSchema<{
        readonly en: v.StringSchema<undefined>;
        readonly ja: v.StringSchema<undefined>;
      }, undefined>, undefined>;
      readonly parts_of_speech: v.ArraySchema<v.StringSchema<undefined>, undefined>;
      readonly pronunciation_audios: v.ArraySchema<v.ObjectSchema<{
        readonly content_type: v.PicklistSchema<["audio/mpeg", "audio/ogg", "audio/webm"], undefined>;
        readonly metadata: v.ObjectSchema<{
          readonly gender: v.PicklistSchema<["female", "male"], undefined>;
          readonly pronunciation: v.StringSchema<undefined>;
          readonly source_id: v.NumberSchema<undefined>;
          readonly voice_actor_id: v.NumberSchema<undefined>;
          readonly voice_actor_name: v.StringSchema<undefined>;
          readonly voice_description: v.StringSchema<undefined>;
        }, undefined>;
        readonly url: v.StringSchema<undefined>;
      }, undefined>, undefined>;
      readonly reading_mnemonic: v.StringSchema<undefined>;
      readonly readings: v.ArraySchema<v.ObjectSchema<{
        readonly accepted_answer: v.BooleanSchema<undefined>;
        readonly primary: v.BooleanSchema<undefined>;
        readonly reading: v.StringSchema<undefined>;
      }, undefined>, undefined>;
    }, undefined>;
    readonly object: v.LiteralSchema<"vocabulary", undefined>;
  }, undefined>], undefined>], undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Subjects
 * @category Type Guards
 */
declare function isSubjectCollection(value: unknown): value is SubjectCollection;
/**
 * A regular expression that matches the markup found in WaniKani's subject mnemonics and hints. Both the tag and inner
 * text are captured for each match.
 *
 * @category Subjects
 */
declare const SUBJECT_MARKUP_MATCHER: RegExp;
/**
 * An object representing parsed subject markup.
 *
 * @category Subjects
 */
type ParsedSubjectMarkup = {
  /** Plain text, either on its own or within a markup tag. */text: string;
} | {
  /** The children underneath a given markup tag, can be either text or additional markup tags. */children: ParsedSubjectMarkup[]; /** The subject markup tag that encapsulates text or other markup tags. */
  tag: "ja" | "kanji" | "meaning" | "radical" | "reading" | "vocabulary";
};
/**
 * Parses WaniKani subject markup (mnemonics, hints, etc) for easier display/formatting.
 *
 * @param text The subject markup to parse
 * @returns A structured array of objects that can be traversed and displayed
 * @category Subjects
 */
declare function parseSubjectMarkup(text: string): ParsedSubjectMarkup[];
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Subject Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-subjects}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Subjects
 */
interface SubjectParameters extends CollectionParameters {
  /**
   * Return subjects which are or are not hidden from the user-facing application.
   */
  hidden?: boolean;
  /**
   * Return subjects at the specified levels.
   */
  levels?: Level[];
  /**
   * Return subjects of the specified slug.
   */
  slugs?: string[];
  /**
   * Return subjects of the specified types.
   */
  types?: SubjectTuple;
}
declare const SubjectParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly hidden: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly levels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>, undefined>, undefined>;
  readonly slugs: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
  readonly types: v.OptionalSchema<v.SchemaWithPipe<readonly [v.TupleWithRestSchema<[v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>], v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>, undefined>, v.NonEmptyAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], undefined>, v.CheckItemsAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], "Duplicate Subject Type detected in Subject Tuple">]>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/spaced-repetition-systems.d.ts
/**
 * The minimum SRS Stage Number used in WaniKani's SRS; exported for use in lieu of a Magic Number.
 *
 * @category Spaced Repetition Systems
 */
declare const MIN_SRS_STAGE = 0;
/**
 * The maximum SRS Stage Number used in WaniKani's reviews; exported for use in lieu of a Magic Number.
 *
 * @category Spaced Repetition Systems
 */
declare const MAX_SRS_REVIEW_STAGE = 8;
/**
 * The maximum SRS Stage Number used in WaniKani's SRS; exported for use in lieu of a Magic Number.
 *
 * @category Spaced Repetition Systems
 */
declare const MAX_SRS_STAGE = 9;
/**
 * A valid WaniKani Spaced Repetition System (SRS) Stage Number, based on the known SRS' on WaniKani and its API.
 *
 * @category Spaced Repetition Systems
 */
type SpacedRepetitionSystemStageNumber = number & {};
declare const SpacedRepetitionSystemStageNumber: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Spaced Repetition Systems
 * @category Type Guards
 */
declare function isSpacedRepetitionSystemStageNumber(value: unknown): value is SpacedRepetitionSystemStageNumber;
/**
 * An individual Spaced Repetition System (SRS) Stage.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#spaced-repetition-systems}
 * @category Spaced Repetition Systems
 */
interface SpacedRepetitionSystemStage {
  /**
   * The length of time added to the time of review registration, adjusted to the beginning of the hour.
   */
  interval: number | null;
  /**
   * Unit of time. Can be the following: `milliseconds`, `seconds`, `minutes`, `hours`, `days`, and `weeks`.
   */
  interval_unit: "days" | "hours" | "milliseconds" | "minutes" | "seconds" | "weeks" | null;
  /**
   * The position of the stage within the continuous order.
   */
  position: SpacedRepetitionSystemStageNumber;
}
declare const SpacedRepetitionSystemStage: v.ObjectSchema<{
  readonly interval: v.UnionSchema<[v.NumberSchema<undefined>, v.NullSchema<undefined>], undefined>;
  readonly interval_unit: v.UnionSchema<[v.PicklistSchema<["days", "hours", "milliseconds", "minutes", "seconds", "weeks"], undefined>, v.NullSchema<undefined>], undefined>;
  readonly position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
}, undefined>;
/**
 * Available spaced repetition systems used for calculating `srs_stage` changes to Assignments and Reviews. Has
 * relationship with Subjects.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#spaced-repetition-systems}
 * @category Resources
 * @category Spaced Repetition Systems
 */
interface SpacedRepetitionSystem extends BaseResource {
  /**
   * Data for the return Spaced Repetition System.
   */
  data: {
    /**
     * `position` of the burning stage.
     */
    burning_stage_position: SpacedRepetitionSystemStageNumber;
    /**
     * Timestamp when the `spaced_repetition_system` was created.
     */
    created_at: DatableString;
    /**
     * Details about the spaced repetition system.
     */
    description: string;
    /**
     * The name of the spaced repetition system.
     */
    name: string;
    /**
     * `position` of the passing stage.
     */
    passing_stage_position: SpacedRepetitionSystemStageNumber;
    /**
     * A collection of stages.
     */
    stages: SpacedRepetitionSystemStage[];
    /**
     * `position` of the starting stage.
     */
    starting_stage_position: SpacedRepetitionSystemStageNumber;
    /**
     * `position` of the unlocking stage.
     */
    unlocking_stage_position: SpacedRepetitionSystemStageNumber;
  };
  /**
   * A unique number identifying the Spaced Repetition System.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "spaced_repetition_system";
}
declare const SpacedRepetitionSystem: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly burning_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly description: v.StringSchema<undefined>;
    readonly name: v.StringSchema<undefined>;
    readonly passing_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly stages: v.ArraySchema<v.ObjectSchema<{
      readonly interval: v.UnionSchema<[v.NumberSchema<undefined>, v.NullSchema<undefined>], undefined>;
      readonly interval_unit: v.UnionSchema<[v.PicklistSchema<["days", "hours", "milliseconds", "minutes", "seconds", "weeks"], undefined>, v.NullSchema<undefined>], undefined>;
      readonly position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    }, undefined>, undefined>;
    readonly starting_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly unlocking_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"spaced_repetition_system", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Spaced Repetition Systems
 * @category Type Guards
 */
declare function isSpacedRepetitionSystem(value: unknown): value is SpacedRepetitionSystem;
/**
 * A collection of Spaced Repetition Systems returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-spaced-repetition-systems}
 * @category Collections
 * @category Spaced Repetition Systems
 */
interface SpacedRepetitionSystemCollection extends BaseCollection {
  /**
   * An array of returned Spaced Repetition Systems.
   */
  data: SpacedRepetitionSystem[];
}
declare const SpacedRepetitionSystemCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly burning_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly description: v.StringSchema<undefined>;
      readonly name: v.StringSchema<undefined>;
      readonly passing_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly stages: v.ArraySchema<v.ObjectSchema<{
        readonly interval: v.UnionSchema<[v.NumberSchema<undefined>, v.NullSchema<undefined>], undefined>;
        readonly interval_unit: v.UnionSchema<[v.PicklistSchema<["days", "hours", "milliseconds", "minutes", "seconds", "weeks"], undefined>, v.NullSchema<undefined>], undefined>;
        readonly position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      }, undefined>, undefined>;
      readonly starting_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly unlocking_stage_position: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"spaced_repetition_system", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Spaced Repetition Systems
 * @category Type Guards
 */
declare function isSpacedRepetitionSystemCollection(value: unknown): value is SpacedRepetitionSystemCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Spaced Repetition System Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-spaced-repetition-systems}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Spaced Repetition Systems
 */
type SpacedRepetitionSystemParameters = CollectionParameters;
declare const SpacedRepetitionSystemParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/assignments.d.ts
/**
 * Assignments contain information about a user's progress on a particular subject, including their current state and
 * timestamps for various progress milestones. Assignments are created when a user has passed all the components of the
 * given subject and the assignment is at or below their current level for the first time.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#assignments}
 * @category Assignments
 * @category Resources
 */
interface Assignment extends BaseResource {
  /**
   * Data for the returned assignment.
   */
  data: {
    /**
     * When the related subject will be available in the user's review queue.
     */
    available_at: DatableString | null;
    /**
     * When the user reaches SRS stage 9 the first time.
     */
    burned_at: DatableString | null;
    /**
     * When the assignment was created.
     */
    created_at: DatableString;
    /**
     * Indicates if the associated subject has been hidden, preventing it from appearing in lessons or reviews.
     */
    hidden: boolean;
    /**
     * When the user reaches SRS stage `5` for the first time.
     */
    passed_at: DatableString | null;
    /**
     * When the subject is resurrected and placed back in the user's review queue.
     */
    resurrected_at: DatableString | null;
    /**
     * The current SRS stage interval. The interval range is determined by the related subject's Spaced Repetition
     * System.
     */
    srs_stage: SpacedRepetitionSystemStageNumber;
    /**
     * When the user completes the lesson for the related subject.
     */
    started_at: DatableString | null;
    /**
     * Unique identifier of the associated subject.
     */
    subject_id: number;
    /**
     * The type of the associated subject.
     */
    subject_type: SubjectType;
    /**
     * When the related subjects has its prerequisites satisfied and is made available in lessons.
     *
     * Prerequisites are:
     * * The subject components have reached SRS stage 5 once (they have been “passed”).
     * * The user's level is equal to or greater than the level of the assignment’s subject.
     */
    unlocked_at: DatableString | null;
  };
  /**
   * A unique number identifying the assignment.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "assignment";
}
declare const Assignment: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly available_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly burned_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly hidden: v.BooleanSchema<undefined>;
    readonly passed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly resurrected_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly subject_id: v.NumberSchema<undefined>;
    readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
    readonly unlocked_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"assignment", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Assignments
 * @category Type Guards
 */
declare function isAssignment(value: unknown): value is Assignment;
/**
 * A collection of assignments returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-assignments}
 * @category Assignments
 * @category Collections
 */
interface AssignmentCollection extends BaseCollection {
  /**
   * An array of returned assignments.
   */
  data: Assignment[];
}
declare const AssignmentCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly available_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly burned_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly hidden: v.BooleanSchema<undefined>;
      readonly passed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly resurrected_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly subject_id: v.NumberSchema<undefined>;
      readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
      readonly unlocked_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"assignment", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Assignments
 * @category Type Guards
 */
declare function isAssignmentCollection(value: unknown): value is AssignmentCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for an
 * Assignment Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-assignments}
 * @see {@link stringifyParameters}
 * @category Assignments
 * @category Parameters
 */
interface AssignmentParameters extends CollectionParameters {
  /**
   * Only assignments available at or after this time are returned.
   */
  available_after?: DatableString | Date;
  /**
   * Only assignments available at or before this time are returned.
   */
  available_before?: DatableString | Date;
  /**
   * When set to `true`, returns assignments that have a value in `data.burned_at`. Returns assignments with a `null`
   * `data.burned_at` if `false`.
   */
  burned?: boolean;
  /**
   * Return assignments with a matching value in the `hidden` attribute.
   */
  hidden?: boolean;
  /**
   * When set to `true`, returns assignments which are immediately available for lessons.
   */
  immediately_available_for_lessons?: boolean;
  /**
   * When set to `true`, returns assignments which are immediately available for review.
   */
  immediately_available_for_review?: boolean;
  /**
   * When set to `true`, returns assignments which are in the review state.
   */
  in_review?: boolean;
  /**
   * Only assignments where the associated subject level matches one of the array values are returned. Valid values
   * range from `1` to `60`.
   */
  levels?: Level[];
  /**
   * Only assignments where `data.srs_stage` matches one of the array values are returned. Valid values range from `0`
   * to `9`.
   */
  srs_stages?: SpacedRepetitionSystemStageNumber[];
  /**
   * When set to `true`, returns assignments that have a value in `data.started_at`. Returns assignments with a `null`
   * `data.started_at` if `false`.
   */
  started?: boolean;
  /**
   * Only assignments where `data.subject_id` matches one of the array values are returned.
   */
  subject_ids?: SafeInteger[];
  /**
   * Only assignments where `data.subject_type` matches one of the array values are returned.
   */
  subject_types?: SubjectTuple;
  /**
   * When set to true, returns assignments that have a value in `data.unlocked_at`. Returns assignments with a `null`
   * `data.unlocked_at` if `false`.
   */
  unlocked?: boolean;
}
declare const AssignmentParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly available_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly available_before: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly burned: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly hidden: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly immediately_available_for_lessons: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly immediately_available_for_review: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly in_review: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly levels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>, undefined>, undefined>;
  readonly srs_stages: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>, undefined>, undefined>;
  readonly started: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly subject_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly subject_types: v.OptionalSchema<v.SchemaWithPipe<readonly [v.TupleWithRestSchema<[v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>], v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>, undefined>, v.NonEmptyAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], undefined>, v.CheckItemsAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], "Duplicate Subject Type detected in Subject Tuple">]>, undefined>;
  readonly unlocked: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
}, undefined>;
/**
 * The optional payload used in the request to start a new assignment via the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#start-an-assignment}
 * @category Assignments
 * @category Payloads
 */
interface AssignmentPayload {
  /**
   * Specify properties of the Assignment; currently only `started_at` is supported.
   */
  assignment: {
    /**
     * When the assignment was started. Must be greater than or equal to the assignment's `unlocked_at` date.
     */
    started_at?: DatableString | Date;
  };
}
declare const AssignmentPayload: v.ObjectSchema<{
  readonly assignment: v.ObjectSchema<{
    readonly started_at: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  }, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/level-progressions.d.ts
/**
 * Level progressions contain information about a user's progress through the WaniKani levels.
 *
 * A level progression is created when a user has met the prerequisites for leveling up, which are:
 *
 * * Reach a 90% passing rate on assignments for a user's current level with a `subject_type` of `kanji`. Passed
 * assignments have `data.passed` equal to `true` and a `data.passed_at` that's in the past.
 * * Have access to the level. Under `/user`, the `data.level` must be less than or equal to
 * `data.subscription.max_level_granted`.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#level-progressions}
 * @category Level Progressions
 * @category Resources
 */
interface LevelProgression extends BaseResource {
  /**
   * Data for the returned level progression.
   */
  data: {
    /**
     * Timestamp when the user abandons the level. This is primarily used when the user initiates a reset.
     */
    abandoned_at: DatableString | null;
    /**
     * Timestamp when the user burns 100% of the assignments belonging to the associated subject's level.
     */
    completed_at: DatableString | null;
    /**
     * Timestamp when the level progression is created.
     */
    created_at: DatableString;
    /**
     * The level of the progression, with possible values from `1` to `60`.
     */
    level: Level;
    /**
     * Timestamp, in ISO-8601 format, when the user passes at least 90% of the assignments with a type of `kanji`
     * belonging to the associated subject's level.
     */
    passed_at: DatableString | null;
    /**
     * Timestamp when the user starts their first lesson of a subject belonging to the level.
     */
    started_at: DatableString | null;
    /**
     * Timestamp when the user can access lessons and reviews for the `level`.
     */
    unlocked_at: DatableString | null;
  };
  /**
   * A unique number identifying the level progression.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "level_progression";
}
declare const LevelProgression: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly abandoned_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly completed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly passed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly unlocked_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"level_progression", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Level Progressions
 * @category Type Guards
 */
declare function isLevelProgression(value: unknown): value is LevelProgression;
/**
 * A collection of level progressions returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-level-progressions}
 * @category Collections
 * @category Level Progressions
 */
interface LevelProgressionCollection extends BaseCollection {
  /**
   * An array of returned level progressions.
   */
  data: LevelProgression[];
}
declare const LevelProgressionCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly abandoned_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly completed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly passed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly unlocked_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"level_progression", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Level Progressions
 * @category Type Guards
 */
declare function isLevelProgressionCollection(value: unknown): value is LevelProgressionCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Level Progression Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-level-progressions}
 * @see {@link stringifyParameters}
 * @category Level Progressions
 * @category Parameters
 */
type LevelProgressionParameters = CollectionParameters;
declare const LevelProgressionParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/review-statistics.d.ts
/**
 * Review statistics summarize the activity recorded in reviews. They contain sum the number of correct and incorrect
 * answers for both meaning and reading. They track current and maximum streaks of correct answers. They store the
 * overall percentage of correct answers versus total answers.
 *
 * A review statistic is created when the user has done their first review on the related subject.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#review-statistics}
 * @category Resources
 * @category Review Statistics
 */
interface ReviewStatistic extends BaseResource {
  /**
   * Data for the returned review statistic.
   */
  data: {
    /**
     * Timestamp when the review statistic was created.
     */
    created_at: DatableString;
    /**
     * Indicates if the associated subject has been hidden, preventing it from appearing in lessons or reviews.
     */
    hidden: boolean;
    /**
     * Total number of correct answers submitted for the meaning of the associated subject.
     */
    meaning_correct: number;
    /**
     * The current, uninterrupted series of correct answers given for the meaning of the associated subject.
     */
    meaning_current_streak: number;
    /**
     * Total number of incorrect answers submitted for the meaning of the associated subject.
     */
    meaning_incorrect: number;
    /**
     * The longest, uninterrupted series of correct answers ever given for the meaning of the associated subject.
     */
    meaning_max_streak: number;
    /**
     * The overall correct answer rate by the user for the subject, including both meaning and reading.
     */
    percentage_correct: number;
    /**
     * Total number of correct answers submitted for the reading of the associated subject.
     */
    reading_correct: number;
    /**
     * The current, uninterrupted series of correct answers given for the reading of the associated subject.
     */
    reading_current_streak: number;
    /**
     * Total number of incorrect answers submitted for the reading of the associated subject.
     */
    reading_incorrect: number;
    /**
     * The longest, uninterrupted series of correct answers ever given for the reading of the associated subject.
     */
    reading_max_streak: number;
    /**
     * Unique identifier of the associated subject.
     */
    subject_id: number;
    /**
     * The type of the associated subject.
     */
    subject_type: SubjectType;
  };
  /**
   * A unique number identifying the review statistic.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "review_statistic";
}
declare const ReviewStatistic: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly hidden: v.BooleanSchema<undefined>;
    readonly meaning_correct: v.NumberSchema<undefined>;
    readonly meaning_current_streak: v.NumberSchema<undefined>;
    readonly meaning_incorrect: v.NumberSchema<undefined>;
    readonly meaning_max_streak: v.NumberSchema<undefined>;
    readonly percentage_correct: v.NumberSchema<undefined>;
    readonly reading_correct: v.NumberSchema<undefined>;
    readonly reading_current_streak: v.NumberSchema<undefined>;
    readonly reading_incorrect: v.NumberSchema<undefined>;
    readonly reading_max_streak: v.NumberSchema<undefined>;
    readonly subject_id: v.NumberSchema<undefined>;
    readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"review_statistic", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Review Statistics
 * @category Type Guards
 */
declare function isReviewStatistic(value: unknown): value is ReviewStatistic;
/**
 * A collection of review statistics returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-review-statistics}
 * @category Collections
 * @category Review Statistics
 */
interface ReviewStatisticCollection extends BaseCollection {
  /**
   * An array of returned review statistics.
   */
  data: ReviewStatistic[];
}
declare const ReviewStatisticCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly hidden: v.BooleanSchema<undefined>;
      readonly meaning_correct: v.NumberSchema<undefined>;
      readonly meaning_current_streak: v.NumberSchema<undefined>;
      readonly meaning_incorrect: v.NumberSchema<undefined>;
      readonly meaning_max_streak: v.NumberSchema<undefined>;
      readonly percentage_correct: v.NumberSchema<undefined>;
      readonly reading_correct: v.NumberSchema<undefined>;
      readonly reading_current_streak: v.NumberSchema<undefined>;
      readonly reading_incorrect: v.NumberSchema<undefined>;
      readonly reading_max_streak: v.NumberSchema<undefined>;
      readonly subject_id: v.NumberSchema<undefined>;
      readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"review_statistic", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Review Statistics
 * @category Type Guards
 */
declare function isReviewStatisticCollection(value: unknown): value is ReviewStatisticCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Review Statistic Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-review-statistics}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Review Statistics
 */
interface ReviewStatisticParameters extends CollectionParameters {
  /**
   * Return review statistics with a matching value in the `hidden` attribute.
   */
  hidden?: boolean;
  /**
   * Return review statistics where the `percentage_correct` is greater than the value.
   */
  percentages_greater_than?: number;
  /**
   * Return review statistics where the `percentage_correct` is less than the value.
   */
  percentages_less_than?: number;
  /**
   * Only review statistics where `data.subject_id` matches one of the array values are returned.
   */
  subject_ids?: SafeInteger[];
  /**
   * Only review statistics where `data.subject_type` matches one of the array values are returned.
   */
  subject_types?: SubjectTuple;
}
declare const ReviewStatisticParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly hidden: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly percentages_greater_than: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
  readonly percentages_less_than: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
  readonly subject_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly subject_types: v.OptionalSchema<v.SchemaWithPipe<readonly [v.TupleWithRestSchema<[v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>], v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>, undefined>, v.NonEmptyAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], undefined>, v.CheckItemsAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], "Duplicate Subject Type detected in Subject Tuple">]>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/reviews.d.ts
/**
 * Reviews log all the correct and incorrect answers provided through the 'Reviews' section of WaniKani. Review records
 * are created when a user answers all the parts of a subject correctly once; some subjects have both meaning or reading
 * parts, and some only have one or the other. Note that reviews are not created for the quizzes in lessons.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#reviews}
 * @category Resources
 * @category Reviews
 */
interface Review extends BaseResource {
  /**
   * Data for the returned review.
   */
  data: {
    /**
     * Unique identifier of the associated assignment.
     */
    assignment_id: number;
    /**
     * Timestamp when the review was created.
     */
    created_at: DatableString;
    /**
     * The SRS stage interval calculated from the number of correct and incorrect answers, with valid values ranging
     * from `1` to `9`.
     */
    ending_srs_stage: SpacedRepetitionSystemStageNumber;
    /**
     * The number of times the user has answered the meaning incorrectly.
     */
    incorrect_meaning_answers: number;
    /**
     * The number of times the user has answered the reading incorrectly.
     */
    incorrect_reading_answers: number;
    /**
     * Unique identifier of the associated `spaced_repetition_system`.
     */
    spaced_repetition_system_id: number;
    /**
     * The starting SRS stage interval, with valid values ranging from `1` to `8`.
     */
    starting_srs_stage: SpacedRepetitionSystemStageNumber;
    /**
     * Unique identifier of the associated subject.
     */
    subject_id: number;
  };
  /**
   * A unique number identifying the review.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "review";
}
declare const Review: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly assignment_id: v.NumberSchema<undefined>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly ending_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly incorrect_meaning_answers: v.NumberSchema<undefined>;
    readonly incorrect_reading_answers: v.NumberSchema<undefined>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly starting_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly subject_id: v.NumberSchema<undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"review", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Reviews
 * @category Type Guards
 */
declare function isReview(value: unknown): value is Review;
/**
 * A collection of reviews returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-reviews}
 * @category Collections
 * @category Reviews
 */
interface ReviewCollection extends BaseCollection {
  /**
   * An array of returned reviews.
   */
  data: Review[];
}
declare const ReviewCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly assignment_id: v.NumberSchema<undefined>;
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly ending_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly incorrect_meaning_answers: v.NumberSchema<undefined>;
      readonly incorrect_reading_answers: v.NumberSchema<undefined>;
      readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
      readonly starting_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
      readonly subject_id: v.NumberSchema<undefined>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"review", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Reviews
 * @category Type Guards
 */
declare function isReviewCollection(value: unknown): value is ReviewCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Review Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-reviews}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Reviews
 */
interface ReviewParameters extends CollectionParameters {
  /**
   * Only reviews where `data.assignment_id` matches one of the array values are returned.
   */
  assignment_ids?: SafeInteger[];
  /**
   * Only reviews where `data.subject_id` matches one of the array values are returned.
   */
  subject_ids?: SafeInteger[];
}
declare const ReviewParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly assignment_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly subject_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
}, undefined>;
/**
 * The payload used in the request to create a new review via the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#create-a-review}
 * @category Payloads
 * @category Reviews
 */
interface ReviewPayload {
  /**
   * A review object with either the `assignment_id` or `subject_id` specified.
   */
  review: {
    /**
     * Must be zero or a positive number. This is the number of times the meaning was answered incorrectly.
     */
    incorrect_meaning_answers: SafeInteger;
    /**
     * Must be zero or a positive number. This is the number of times the reading was answered incorrectly. Note that
     * subjects with a type of `radical` do not quiz on readings. Thus, set this value to `0`.
     */
    incorrect_reading_answers: SafeInteger;
    /**
     * Timestamp when the review was completed. Defaults to the time of the request if omitted from the request body.
     * Must be in the past, but after `assignment.available_at`.
     */
    created_at?: DatableString | Date;
  } & ({
    /**
     * Unique identifier of the assignment. This or `subject_id` must be set.
     */
    assignment_id: SafeInteger;
    /**
     * The `subject_id` should not be set at the same time as `assignment_id`.
     */
    subject_id?: never;
  } | {
    /**
     * Unique identifier of the subject. This or `assignment_id` must be set.
     */
    subject_id: SafeInteger;
    /**
     * The `assignment_id` should never be set at the same time as `subject_id`.
     */
    assignment_id?: never;
  });
}
declare const ReviewPayload: v.ObjectSchema<{
  readonly review: v.IntersectSchema<[v.ObjectSchema<{
    readonly incorrect_meaning_answers: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
    readonly incorrect_reading_answers: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
    readonly created_at: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  }, undefined>, v.UnionSchema<[v.ObjectSchema<{
    readonly assignment_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
    readonly subject_id: v.OptionalSchema<v.NeverSchema<undefined>, undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly subject_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
    readonly assignment_id: v.OptionalSchema<v.NeverSchema<undefined>, undefined>;
  }, undefined>], string | ((issue: v.UnionIssue<v.ObjectIssue | v.NumberIssue | v.SafeIntegerIssue<number> | v.MinValueIssue<number, 0> | v.NeverIssue>) => string)>], string | ((issue: v.IntersectIssue) => string)>;
}, undefined>;
/**
 * A created review returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#create-a-review}
 * @category Resources
 * @category Reviews
 */
interface CreatedReview extends Review {
  /**
   * The resources updated alongside creating the review.
   */
  resources_updated: {
    /**
     * The updated assignment upon creating the review.
     * @see {@link https://docs.api.wanikani.com/20170710/#assignments}
     */
    assignment: Assignment;
    /**
     * The updated review statistic upon creating the review.
     * @see {@link https://docs.api.wanikani.com/20170710/#review-statistics}
     */
    review_statistic: ReviewStatistic;
  };
}
declare const CreatedReview: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"review", undefined>;
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly assignment_id: v.NumberSchema<undefined>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly ending_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly incorrect_meaning_answers: v.NumberSchema<undefined>;
    readonly incorrect_reading_answers: v.NumberSchema<undefined>;
    readonly spaced_repetition_system_id: v.NumberSchema<undefined>;
    readonly starting_srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
    readonly subject_id: v.NumberSchema<undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly resources_updated: v.ObjectSchema<{
    readonly assignment: v.ObjectSchema<{
      readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly url: v.StringSchema<undefined>;
      readonly data: v.ObjectSchema<{
        readonly available_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
        readonly burned_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
        readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
        readonly hidden: v.BooleanSchema<undefined>;
        readonly passed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
        readonly resurrected_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
        readonly srs_stage: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 9, undefined>]>;
        readonly started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
        readonly subject_id: v.NumberSchema<undefined>;
        readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
        readonly unlocked_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      }, undefined>;
      readonly id: v.NumberSchema<undefined>;
      readonly object: v.LiteralSchema<"assignment", undefined>;
    }, undefined>;
    readonly review_statistic: v.ObjectSchema<{
      readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly url: v.StringSchema<undefined>;
      readonly data: v.ObjectSchema<{
        readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
        readonly hidden: v.BooleanSchema<undefined>;
        readonly meaning_correct: v.NumberSchema<undefined>;
        readonly meaning_current_streak: v.NumberSchema<undefined>;
        readonly meaning_incorrect: v.NumberSchema<undefined>;
        readonly meaning_max_streak: v.NumberSchema<undefined>;
        readonly percentage_correct: v.NumberSchema<undefined>;
        readonly reading_correct: v.NumberSchema<undefined>;
        readonly reading_current_streak: v.NumberSchema<undefined>;
        readonly reading_incorrect: v.NumberSchema<undefined>;
        readonly reading_max_streak: v.NumberSchema<undefined>;
        readonly subject_id: v.NumberSchema<undefined>;
        readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
      }, undefined>;
      readonly id: v.NumberSchema<undefined>;
      readonly object: v.LiteralSchema<"review_statistic", undefined>;
    }, undefined>;
  }, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Reviews
 * @category Type Guards
 */
declare function isCreatedReview(value: unknown): value is CreatedReview;
//#endregion
//#region src/v20170710/study-materials.d.ts
/**
 * Data found in all study materials whether they are being created/updated, or received from the WaniKani API.
 *
 * @category Study Materials
 * @remarks For creating study materials, use {@link StudyMaterialCreatePayload}; for updating study materials, use
 * {@link StudyMaterialUpdatePayload}.
 */
interface StudyMaterialBaseData {
  /**
   * Free form note related to the meaning(s) of the associated subject.
   */
  meaning_note: string;
  /**
   * Synonyms for the meaning of the subject. These are used as additional correct answers during reviews.
   */
  meaning_synonyms: string[];
  /**
   * Free form note related to the reading(s) of the associated subject.
   */
  reading_note: string;
}
declare const StudyMaterialBaseData: v.ObjectSchema<{
  readonly meaning_note: v.StringSchema<undefined>;
  readonly meaning_synonyms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
  readonly reading_note: v.StringSchema<undefined>;
}, undefined>;
/**
 * Study materials store user-specific notes and synonyms for a given subject. The records are created as soon as the
 * user enters any study information.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#study-materials}
 * @category Resources
 * @category Study Materials
 */
interface StudyMaterial extends BaseResource {
  /**
   * Data for the returned study material.
   */
  data: StudyMaterialBaseData & {
    /**
     * Timestamp when the study material was created.
     */
    created_at: DatableString;
    /**
     * Indicates if the associated subject has been hidden, preventing it from appearing in lessons or reviews.
     */
    hidden: boolean;
    /**
     * Unique identifier of the associated subject.
     */
    subject_id: number;
    /**
     * The type of the associated subject.
     */
    subject_type: SubjectType;
  };
  /**
   * A unique number identifying the study material.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "study_material";
}
declare const StudyMaterial: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.IntersectSchema<[v.ObjectSchema<{
    readonly meaning_note: v.StringSchema<undefined>;
    readonly meaning_synonyms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
    readonly reading_note: v.StringSchema<undefined>;
  }, undefined>, v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly hidden: v.BooleanSchema<undefined>;
    readonly subject_id: v.NumberSchema<undefined>;
    readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
  }, undefined>], undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"study_material", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Study Materials
 * @category Type Guards
 */
declare function isStudyMaterial(value: unknown): value is StudyMaterial;
/**
 * A collection of study materials returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-study-materials}
 * @category Collections
 * @category Study Materials
 */
interface StudyMaterialCollection extends BaseCollection {
  /**
   * An array of returned study materials.
   */
  data: StudyMaterial[];
}
declare const StudyMaterialCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.IntersectSchema<[v.ObjectSchema<{
      readonly meaning_note: v.StringSchema<undefined>;
      readonly meaning_synonyms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
      readonly reading_note: v.StringSchema<undefined>;
    }, undefined>, v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly hidden: v.BooleanSchema<undefined>;
      readonly subject_id: v.NumberSchema<undefined>;
      readonly subject_type: v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>;
    }, undefined>], undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"study_material", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Study Materials
 * @category Type Guards
 */
declare function isStudyMaterialCollection(value: unknown): value is StudyMaterialCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Study Material Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-study-materials}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Study Materials
 */
interface StudyMaterialParameters extends CollectionParameters {
  /**
   * Return study materials with a matching value in the `hidden` attribute.
   */
  hidden?: boolean;
  /**
   * Only study material records where `data.subject_id` matches one of the array values are returned.
   */
  subject_ids?: SafeInteger[];
  /**
   * Only study material records where `data.subject_type` matches one of the array values are returned.
   */
  subject_types?: SubjectTuple;
}
declare const StudyMaterialParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
  readonly hidden: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
  readonly subject_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly subject_types: v.OptionalSchema<v.SchemaWithPipe<readonly [v.TupleWithRestSchema<[v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>], v.PicklistSchema<["kana_vocabulary", "kanji", "radical", "vocabulary"], undefined>, undefined>, v.NonEmptyAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], undefined>, v.CheckItemsAction<["kana_vocabulary" | "kanji" | "radical" | "vocabulary", ...("kana_vocabulary" | "kanji" | "radical" | "vocabulary")[]], "Duplicate Subject Type detected in Subject Tuple">]>, undefined>;
}, undefined>;
/**
 * The payload sent to the WaniKani API when updating study materials.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#update-a-study-material}
 * @category Payloads
 * @category Study Materials
 */
type StudyMaterialUpdatePayload = Partial<StudyMaterialBaseData>;
declare const StudyMaterialUpdatePayload: Omit<v.ObjectSchema<{
  readonly meaning_note: v.StringSchema<undefined>;
  readonly meaning_synonyms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
  readonly reading_note: v.StringSchema<undefined>;
}, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
  readonly entries: {
    readonly meaning_note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
    readonly meaning_synonyms: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
    readonly reading_note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
  };
  readonly "~standard": v.StandardProps<{
    meaning_note?: string | undefined;
    meaning_synonyms?: string[] | undefined;
    reading_note?: string | undefined;
  }, {
    meaning_note?: string | undefined;
    meaning_synonyms?: string[] | undefined;
    reading_note?: string | undefined;
  }>;
  readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
    meaning_note?: string | undefined;
    meaning_synonyms?: string[] | undefined;
    reading_note?: string | undefined;
  }, v.ObjectIssue | v.StringIssue | v.ArrayIssue>;
  readonly "~types"?: {
    readonly input: {
      meaning_note?: string | undefined;
      meaning_synonyms?: string[] | undefined;
      reading_note?: string | undefined;
    };
    readonly output: {
      meaning_note?: string | undefined;
      meaning_synonyms?: string[] | undefined;
      reading_note?: string | undefined;
    };
    readonly issue: v.ObjectIssue | v.StringIssue | v.ArrayIssue;
  } | undefined;
};
/**
 * The payload sent to the WaniKani API when creating new study materials.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#create-a-study-material}
 * @category Payloads
 * @category Study Materials
 */
interface StudyMaterialCreatePayload extends StudyMaterialUpdatePayload {
  /**
   * Unique identifier of the associated subject.
   */
  subject_id: SafeInteger;
}
declare const StudyMaterialCreatePayload: v.ObjectSchema<{
  readonly meaning_synonyms: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
  readonly meaning_note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
  readonly reading_note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
  readonly subject_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
}, undefined>;
//#endregion
//#region src/v20170710/resets.d.ts
/**
 * Users can reset their progress back to any level at or below their current level. When they reset to a particular
 * level, all of the assignments and review_statistics at that level or higher are set back to their default state.
 *
 * Resets contain information about when those resets happen, the starting level, and the target level.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#resets}
 * @category Resets
 * @category Resources
 */
interface Reset extends BaseResource {
  /**
   * Data for the returned reset.
   */
  data: {
    /**
     * Timestamp when the user confirmed the reset.
     */
    confirmed_at: DatableString | null;
    /**
     * Timestamp when the reset was created.
     */
    created_at: DatableString;
    /**
     * The user's level before the reset, from `1` to `60`.
     */
    original_level: Level;
    /**
     * The user's level after the reset, from `1` to `60`. It must be less than or equal to `original_level`.
     */
    target_level: Level;
  };
  /**
   * A unique number identifying the reset.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "reset";
}
declare const Reset: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly confirmed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly original_level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly target_level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"reset", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Resets
 * @category Type Guards
 */
declare function isReset(value: unknown): value is Reset;
/**
 * A collection of resets returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-resets}
 * @category Collections
 * @category Resets
 */
interface ResetCollection extends BaseCollection {
  /**
   * An array of returned resets.
   */
  data: Reset[];
}
declare const ResetCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly confirmed_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly original_level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly target_level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"reset", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Resets
 * @category Type Guards
 */
declare function isResetCollection(value: unknown): value is ResetCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Reset Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-resets}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Resets
 */
type ResetParameters = CollectionParameters;
declare const ResetParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/user.d.ts
/**
 * The minimum batch size for lessons in the WaniKani app; exported for use in lieu of a Magic Number.
 *
 * @category User
 */
declare const MIN_LESSON_BATCH_SIZE = 3;
/**
 * The maximum batch size for lessons in the WaniKani app; exported for use in lieu of a Magic Number.
 *
 * @category User
 */
declare const MAX_LESSON_BATCH_SIZE = 10;
/**
 * A number representing a valid lesson batch size in WaniKani, from `3` to `10`.
 *
 * @category User
 */
type LessonBatchSizeNumber = number & {};
declare const LessonBatchSizeNumber: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 3, undefined>, v.MaxValueAction<number, 10, undefined>]>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category User
 * @category Type Guards
 */
declare function isLessonBatchSizeNumber(value: unknown): value is LessonBatchSizeNumber;
/**
 * User settings specific to the WaniKani application.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#user}
 * @category User
 */
interface UserPreferences {
  /**
   * @deprecated This is a deprecated user preference. It will always return `1` and cannot be set. It exists only to
   * ensure existing consumers of this API don't break.
   */
  default_voice_actor_id: number;
  /**
   * Automatically play pronunciation audio for vocabulary during extra study.
   */
  extra_study_autoplay_audio: boolean;
  /**
   * Automatically play pronunciation audio for vocabulary during lessons.
   */
  lessons_autoplay_audio: boolean;
  /**
   * Number of subjects introduced to the user during lessons before quizzing.
   */
  lessons_batch_size: LessonBatchSizeNumber;
  /**
   * @deprecated This is a deprecated user preference. It always returns `ascending_level_then_subject`. Setting this
   * preference will do nothing. It exists only to ensure existing consumers of this API don't break.
   */
  lessons_presentation_order: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled";
  /**
   * Automatically play pronunciation audio for vocabulary during reviews.
   */
  reviews_autoplay_audio: boolean;
  /**
   * Toggle for display SRS change indicator after a subject has been completely answered during review.
   */
  reviews_display_srs_indicator: boolean;
  /**
   * The order in which reviews are presented. The options are `lower_levels_first` and `shuffled`.
   */
  reviews_presentation_order: "lower_levels_first" | "shuffled";
}
declare const UserPreferences: v.ObjectSchema<{
  readonly default_voice_actor_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
  readonly extra_study_autoplay_audio: v.BooleanSchema<undefined>;
  readonly lessons_autoplay_audio: v.BooleanSchema<undefined>;
  readonly lessons_batch_size: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 3, undefined>, v.MaxValueAction<number, 10, undefined>]>;
  readonly lessons_presentation_order: v.PicklistSchema<["ascending_level_then_shuffled", "ascending_level_then_subject", "shuffled"], undefined>;
  readonly reviews_autoplay_audio: v.BooleanSchema<undefined>;
  readonly reviews_display_srs_indicator: v.BooleanSchema<undefined>;
  readonly reviews_presentation_order: v.PicklistSchema<["lower_levels_first", "shuffled"], undefined>;
}, undefined>;
/**
 * A user and their status/information on WaniKani.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#user}
 * @category Resources
 * @category User
 */
interface User extends BaseResource {
  /**
   * Data for the returned user.
   */
  data: {
    /**
     * If the user is on vacation, this will be the timestamp of when that vacation started. If the user is not on
     * vacation, this is `null`.
     */
    current_vacation_started_at: DatableString | null;
    /**
     * A user's unique ID string.
     */
    id: string;
    /**
     * The current level of the user. This ignores subscription status.
     */
    level: Level;
    /**
     * User settings specific to the WaniKani application.
     */
    preferences: UserPreferences;
    /**
     * The URL to the user's public facing profile page.
     */
    profile_url: string;
    /**
     * The signup date for the user.
     */
    started_at: DatableString;
    /**
     * Details about the user's subscription state.
     */
    subscription: {
      /**
       * Whether or not the user currently has a paid subscription.
       */
      active: boolean;
      /**
       * The maximum level of content accessible to the user for lessons, reviews, and content review. For unsubscribed/free
       * users, the maximum level is `3`. For subscribed users, this is `60`.
       *
       * **Any application that uses data from the WaniKani API must respect these access limits.**
       */
      max_level_granted: Level;
      /**
       * The date when the user's subscription period ends. If the user has subscription type `lifetime` or `free` then the
       * value is `null`.
       */
      period_ends_at: DatableString | null;
      /**
       * The type of subscription the user has. Options are following: `free`, `recurring`, and `lifetime`. A type of
       * `unknown` means the user subscription state isn't exactly known. This is a weird state on WaniKani, should be
       * treated as `free`, and reported to the WaniKani developers.
       */
      type: "free" | "lifetime" | "recurring" | "unknown";
    };
    /**
     * The user's username.
     */
    username: string;
  };
  /**
   * The kind of object returned.
   */
  object: "user";
}
declare const User: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly current_vacation_started_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly id: v.StringSchema<undefined>;
    readonly level: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
    readonly preferences: v.ObjectSchema<{
      readonly default_voice_actor_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
      readonly extra_study_autoplay_audio: v.BooleanSchema<undefined>;
      readonly lessons_autoplay_audio: v.BooleanSchema<undefined>;
      readonly lessons_batch_size: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 3, undefined>, v.MaxValueAction<number, 10, undefined>]>;
      readonly lessons_presentation_order: v.PicklistSchema<["ascending_level_then_shuffled", "ascending_level_then_subject", "shuffled"], undefined>;
      readonly reviews_autoplay_audio: v.BooleanSchema<undefined>;
      readonly reviews_display_srs_indicator: v.BooleanSchema<undefined>;
      readonly reviews_presentation_order: v.PicklistSchema<["lower_levels_first", "shuffled"], undefined>;
    }, undefined>;
    readonly profile_url: v.StringSchema<undefined>;
    readonly started_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly subscription: v.ObjectSchema<{
      readonly active: v.BooleanSchema<undefined>;
      readonly max_level_granted: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60, undefined>]>;
      readonly period_ends_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
      readonly type: v.PicklistSchema<["free", "lifetime", "recurring", "unknown"], undefined>;
    }, undefined>;
    readonly username: v.StringSchema<undefined>;
  }, undefined>;
  readonly object: v.LiteralSchema<"user", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category User
 * @category Type Guards
 */
declare function isUser(value: unknown): value is User;
/**
 * The payload sent to the WaniKani API to update a user's preferences.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#update-user-information}
 * @category Payloads
 * @category User
 */
interface UserPreferencesPayload {
  /**
   * The user object, as part of the payload.
   */
  user: {
    /**
     * The user preferences to be updated; only those specified in the object will be updated.
     */
    preferences: Partial<UserPreferences>;
  };
}
declare const UserPreferencesPayload: v.ObjectSchema<{
  readonly user: v.ObjectSchema<{
    readonly preferences: Omit<v.ObjectSchema<{
      readonly default_voice_actor_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
      readonly extra_study_autoplay_audio: v.BooleanSchema<undefined>;
      readonly lessons_autoplay_audio: v.BooleanSchema<undefined>;
      readonly lessons_batch_size: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 3, undefined>, v.MaxValueAction<number, 10, undefined>]>;
      readonly lessons_presentation_order: v.PicklistSchema<["ascending_level_then_shuffled", "ascending_level_then_subject", "shuffled"], undefined>;
      readonly reviews_autoplay_audio: v.BooleanSchema<undefined>;
      readonly reviews_display_srs_indicator: v.BooleanSchema<undefined>;
      readonly reviews_presentation_order: v.PicklistSchema<["lower_levels_first", "shuffled"], undefined>;
    }, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
      readonly entries: {
        readonly default_voice_actor_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
        readonly extra_study_autoplay_audio: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
        readonly lessons_autoplay_audio: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
        readonly lessons_batch_size: v.OptionalSchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 3, undefined>, v.MaxValueAction<number, 10, undefined>]>, undefined>;
        readonly lessons_presentation_order: v.OptionalSchema<v.PicklistSchema<["ascending_level_then_shuffled", "ascending_level_then_subject", "shuffled"], undefined>, undefined>;
        readonly reviews_autoplay_audio: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
        readonly reviews_display_srs_indicator: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
        readonly reviews_presentation_order: v.OptionalSchema<v.PicklistSchema<["lower_levels_first", "shuffled"], undefined>, undefined>;
      };
      readonly "~standard": v.StandardProps<{
        default_voice_actor_id?: number | undefined;
        extra_study_autoplay_audio?: boolean | undefined;
        lessons_autoplay_audio?: boolean | undefined;
        lessons_batch_size?: number | undefined;
        lessons_presentation_order?: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled" | undefined;
        reviews_autoplay_audio?: boolean | undefined;
        reviews_display_srs_indicator?: boolean | undefined;
        reviews_presentation_order?: "shuffled" | "lower_levels_first" | undefined;
      }, {
        default_voice_actor_id?: number | undefined;
        extra_study_autoplay_audio?: boolean | undefined;
        lessons_autoplay_audio?: boolean | undefined;
        lessons_batch_size?: number | undefined;
        lessons_presentation_order?: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled" | undefined;
        reviews_autoplay_audio?: boolean | undefined;
        reviews_display_srs_indicator?: boolean | undefined;
        reviews_presentation_order?: "shuffled" | "lower_levels_first" | undefined;
      }>;
      readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
        default_voice_actor_id?: number | undefined;
        extra_study_autoplay_audio?: boolean | undefined;
        lessons_autoplay_audio?: boolean | undefined;
        lessons_batch_size?: number | undefined;
        lessons_presentation_order?: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled" | undefined;
        reviews_autoplay_audio?: boolean | undefined;
        reviews_display_srs_indicator?: boolean | undefined;
        reviews_presentation_order?: "shuffled" | "lower_levels_first" | undefined;
      }, v.ObjectIssue | v.PicklistIssue | v.NumberIssue | v.SafeIntegerIssue<number> | v.MinValueIssue<number, 0> | v.BooleanIssue | v.MinValueIssue<number, 3> | v.MaxValueIssue<number, 10>>;
      readonly "~types"?: {
        readonly input: {
          default_voice_actor_id?: number | undefined;
          extra_study_autoplay_audio?: boolean | undefined;
          lessons_autoplay_audio?: boolean | undefined;
          lessons_batch_size?: number | undefined;
          lessons_presentation_order?: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled" | undefined;
          reviews_autoplay_audio?: boolean | undefined;
          reviews_display_srs_indicator?: boolean | undefined;
          reviews_presentation_order?: "shuffled" | "lower_levels_first" | undefined;
        };
        readonly output: {
          default_voice_actor_id?: number | undefined;
          extra_study_autoplay_audio?: boolean | undefined;
          lessons_autoplay_audio?: boolean | undefined;
          lessons_batch_size?: number | undefined;
          lessons_presentation_order?: "ascending_level_then_shuffled" | "ascending_level_then_subject" | "shuffled" | undefined;
          reviews_autoplay_audio?: boolean | undefined;
          reviews_display_srs_indicator?: boolean | undefined;
          reviews_presentation_order?: "shuffled" | "lower_levels_first" | undefined;
        };
        readonly issue: v.ObjectIssue | v.PicklistIssue | v.NumberIssue | v.SafeIntegerIssue<number> | v.MinValueIssue<number, 0> | v.BooleanIssue | v.MinValueIssue<number, 3> | v.MaxValueIssue<number, 10>;
      } | undefined;
    };
  }, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/voice-actors.d.ts
/**
 * Available voice actors used for vocabulary reading pronunciation audio.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#voice-actors}
 * @category Resources
 * @category Voice Actors
 */
interface VoiceActor extends BaseResource {
  /**
   * Data for the returned voice actor.
   */
  data: {
    /**
     * Timestamp for when the voice actor was added to WaniKani.
     */
    created_at: DatableString;
    /**
     * Details about the voice actor.
     */
    description: string;
    /**
     * The voice actor's gender, either `male` or `female`.
     */
    gender: "female" | "male";
    /**
     * The voice actor's name.
     */
    name: string;
  };
  /**
   * A unique number identifying the voice actor.
   */
  id: number;
  /**
   * The kind of object returned.
   */
  object: "voice_actor";
}
declare const VoiceActor: v.ObjectSchema<{
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly description: v.StringSchema<undefined>;
    readonly gender: v.PicklistSchema<["female", "male"], undefined>;
    readonly name: v.StringSchema<undefined>;
  }, undefined>;
  readonly id: v.NumberSchema<undefined>;
  readonly object: v.LiteralSchema<"voice_actor", undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Voice Actors
 * @category Type Guards
 */
declare function isVoiceActor(value: unknown): value is VoiceActor;
/**
 * A collection of voice actors returned from the WaniKani API.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-voice-actors}
 * @category Collections
 * @category Voice Actors
 */
interface VoiceActorCollection extends BaseCollection {
  /**
   * An array of returned voice actors.
   */
  data: VoiceActor[];
}
declare const VoiceActorCollection: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"collection", undefined>;
  readonly data_updated_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
  readonly url: v.StringSchema<undefined>;
  readonly pages: v.ObjectSchema<{
    readonly next_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
    readonly per_page: v.NumberSchema<undefined>;
    readonly previous_url: v.UnionSchema<[v.StringSchema<undefined>, v.NullSchema<undefined>], undefined>;
  }, undefined>;
  readonly total_count: v.NumberSchema<undefined>;
  readonly data: v.ArraySchema<v.ObjectSchema<{
    readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
    readonly url: v.StringSchema<undefined>;
    readonly data: v.ObjectSchema<{
      readonly created_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly description: v.StringSchema<undefined>;
      readonly gender: v.PicklistSchema<["female", "male"], undefined>;
      readonly name: v.StringSchema<undefined>;
    }, undefined>;
    readonly id: v.NumberSchema<undefined>;
    readonly object: v.LiteralSchema<"voice_actor", undefined>;
  }, undefined>, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Voice Actors
 * @category Type Guards
 */
declare function isVoiceActorCollection(value: unknown): value is VoiceActorCollection;
/**
 * Parameters that can be passed to the WaniKani API to filter a request for a Voice Actor Collection.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#get-all-voice-actors}
 * @see {@link stringifyParameters}
 * @category Parameters
 * @category Voice Actors
 */
type VoiceActorParameters = CollectionParameters;
declare const VoiceActorParameters: v.ObjectSchema<{
  readonly ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>, undefined>;
  readonly page_after_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly page_before_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
  readonly updated_after: v.OptionalSchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.DateSchema<undefined>], string | ((issue: v.UnionIssue<v.StringIssue | v.IsoTimestampIssue<string> | v.DateIssue>) => string)>, undefined>;
}, undefined>;
//#endregion
//#region src/v20170710/requests.d.ts
/**
 * An object containing all information needed to make a request to the WaniKani API using any HTTP API/Library.
 *
 * @see {@link ApiRequestFactory}
 * @category Requests
 */
interface ApiRequest {
  /** The request body, either `null` for GET requests, or a `string` for POST and PUT requests. */
  body: string | null;
  /** The request headers, including both standard and user-set headers. */
  headers: ApiRequestHeaders;
  /** The request's HTTP method. */
  method: "GET" | "POST" | "PUT";
  /** The full URL where the request will be sent to. */
  url: string;
}
/**
 * A factory for preparing requests to the WaniKani API, with methods that return an {@link ApiRequest} that can be used
 * in any HTTP library/package to make the request.
 *
 * @category Requests
 */
declare class ApiRequestFactory {
  /**
   * Types of Assignment Requests available in the WaniKani API.
   */
  readonly assignments: {
    /**
     * Get an Assignment or Assignment Collection from the WaniKani API.
     * @param idOrParams The Assignment ID for individual Assignments, or parameters for Assignment Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Assignment(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: AssignmentParameters | SafeInteger, options?: ApiRequestOptions) => ApiRequest;
    /**
     * Start an Assignment (i.e. move from Lessons to Reviews) via the WaniKani API.
     * @param assignmentId The Assignment ID to start.
     * @param payload The payload to send when starting the Assignment.
     * @param options Options for making PUT requests to the API.
     * @returns A Start Assignment Request usable in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or payload is invalid.
     */
    start: (assignmentId: SafeInteger, payload: AssignmentPayload, options?: ApiRequestOptions) => ApiRequest;
  };
  /** The base URL of the WaniKani API */
  readonly baseUrl = "https://api.wanikani.com/v2";
  /**
   * Types of Level Progression Requests available in the WaniKani API.
   */
  readonly levelProgressions: {
    /**
     * Get a Level Progression or Level Progression Collection from the WaniKani API.
     * @param idOrParams The Level Progression ID for individual Level Progressions, or parameters for Level
     * Progression Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Level Progression(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: LevelProgressionParameters | SafeInteger, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Reset Requests available in the WaniKani API.
   */
  readonly resets: {
    /**
     * Get a Reset or Reset Collection from the WaniKani API.
     * @param idOrParams The Reset ID for individual Resets, or parameters for Reset Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Reset(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: ResetParameters | SafeInteger, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Review Statistic Requests available in the WaniKani API.
   */
  readonly reviewStatistics: {
    /**
     * Get a Review Statistic or Review Statistic Collection from the WaniKani API.
     * @param idOrParams The Review Statistic ID for individual Review Statistics, or parameters for Review Statistic
     * Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Review Statistic(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: ReviewStatisticParameters | SafeInteger, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Review Requests available in the WaniKani API.
   */
  readonly reviews: {
    /**
     * Create a new Review via the WaniKani API.
     * @param payload The payload to send when creating the Review.
     * @param options Options for making POST requests to the API.
     * @returns A Create Review Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if payload is invalid.
     */
    create: (payload: ReviewPayload, options?: ApiRequestOptions) => ApiRequest;
    /**
     * Get a Review or Review Collection from the WaniKani API.
     * @param idOrParams The Review ID for individual Reviews, or parameters for Review Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Review(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: ReviewParameters | SafeInteger, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Spaced Repetition System (SRS) Requests available in the WaniKani API.
   */
  readonly spacedRepetitionSystems: {
    /**
     * Get a Spaced Repetition System (SRS) or Spaced Repetition System (SRS) Collection from the WaniKani API.
     * @param idOrParams The Spaced Repetition System (SRS) ID for individual Spaced Repetition Systems (SRS), or
     * parameters for Spaced Repetition System (SRS) Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Spaced Repetition System(s) (SRS) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: SafeInteger | SpacedRepetitionSystemParameters, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * An alias for Spaced Repetition System requests.
   */
  readonly srs: {
    /**
     * Get a Spaced Repetition System (SRS) or Spaced Repetition System (SRS) Collection from the WaniKani API.
     * @param idOrParams The Spaced Repetition System (SRS) ID for individual Spaced Repetition Systems (SRS), or
     * parameters for Spaced Repetition System (SRS) Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Spaced Repetition System(s) (SRS) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: SafeInteger | SpacedRepetitionSystemParameters, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Study Material Requests available in the WaniKani API.
   */
  readonly studyMaterials: {
    /**
     * Get a Study Material or Study Material Collection from the WaniKani API.
     * @param idOrParams The Study Material ID for individual Study Materials, or parameters for Study Material
     * Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Study Material(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: SafeInteger | StudyMaterialParameters, options?: ApiRequestOptions) => ApiRequest;
    /**
     * Create a new Study Material for a given Subject via the WaniKani API.
     * @param payload The payload to send when creating the new Study Material.
     * @param options Options for making POST requests to the API.
     * @returns A Create Study Material Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if payload is invalid.
     */
    create: (payload: StudyMaterialCreatePayload, options?: ApiRequestOptions) => ApiRequest;
    /**
     * Update a Study Material for a given Subject.
     * @param studyMaterialId The Study Material ID to update.
     * @param payload The payload to send when updating the Study Material.
     * @param options Options for making PUT requests to the API.
     * @returns An Update Study Material Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or payload is invalid.
     */
    update: (studyMaterialId: SafeInteger, payload: StudyMaterialUpdatePayload, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Subject Requests available in the WaniKani API.
   */
  readonly subjects: {
    /**
     * Get a Subject or Subject Collection from the WaniKani API.
     * @param idOrParams The Subject ID for individual Subjects, or parameters for Subject Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Subject(s) Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: SafeInteger | SubjectParameters, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Summary Requests available in the WaniKani API.
   */
  readonly summary: {
    /**
     * Get a summary of a user's available and upcoming lessons/reviews from the WaniKani API.
     *
     * @param options Options for making GET requests to the API.
     * @returns A Get Summary Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     */
    get: (options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of User Requests available in the WaniKani API.
   */
  readonly user: {
    /**
     * Get a user's information from the WaniKani API.
     *
     * @param options Options for making GET requests to the API.
     * @returns A Get User Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     */
    get: (options?: ApiRequestOptions) => ApiRequest;
    /**
     * Update a User's Preferences via the WaniKani API.
     *
     * @param payload The payload containing changed Preferences to send for the update.
     * @param options Options for making PUT requests to the API.
     * @returns An Update User Preferences Request usabile in any HTTP API/Library.
     * @throws A `TypeError` if trying to set type-checked request headers.
     * @throws A {@link valibot!ValiError} if payload is invalid.
     */
    updatePreferences: (payload: UserPreferencesPayload, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * Types of Voice Actor Requests available in the WaniKani API.
   */
  readonly voiceActors: {
    /**
     * Get a Voice Actor or Voice Actor Collection from the WaniKani API.
     * @param idOrParams The Voice Actor ID for individual Voice Actors, or parameters for Voice Actor Collections.
     * @param options Options for making GET requests to the API.
     * @returns A Get Voice Actor(s) Request usabile in any HTTP API/Library.
     * @throws A {@link valibot!ValiError} if ID or parameters are invalid.
     */
    get: (idOrParams?: SafeInteger | VoiceActorParameters, options?: ApiRequestOptions) => ApiRequest;
  };
  /**
   * The headers set on factory initialization, excluding anything in the `customHeaders` property in
   * {@link ApiRequestFactoryInit}.
   */
  private readonly _initHeaders;
  /**
   * The headers that will be added to any GET requests returned by the factory.
   */
  private _getHeaders;
  /**
   * The headers that will be added to any POST and PUT requests returned by the factory.
   */
  private _postPutHeaders;
  /**
   * Initialize the Request Factory.
   * @param init Initialization options for the factory.
   * @throws A `TypeError` if trying to set type-checked request headers.
   */
  constructor(init: ApiRequestFactoryInit);
  /**
   * Validates custom-set headers to make sure type checking isn't circumvented.
   * @param key The header key, e.g. `Accpet` or `X-Forwarded-For`
   * @param value The header value, e.g. `application/json` or `192.168.1.1`
   * @throws A `TypeError` if trying to set type-checked request headers.
   * @internal
   */
  private static _validateHeader;
  /**
   * Add additional custom headers to be used in all requests generated by the factory.
   * @param headers An object containing HTTP headers and their values.
   * @returns The factory, with the added custom headers.
   * @throws A `TypeError` if trying to set type-checked request headers.
   */
  addCustomHeaders(headers: Record<string, string>): this;
  /**
   * Sets a new WaniKani API Revision to use in requests returned by the factory.
   * @param revision The WaniKani API Revision to use.
   * @returns The factory, with the newly set WaniKani API Revision.
   * @throws A {@link valibot!ValiError} if the WaniKani API Revision is invalid.
   */
  setApiRevision(revision: ApiRevision): this;
  /**
   * Sets a new WaniKani API Token to use in requests returned by the factory.
   * @param token The new WaniKani API Token to use.
   * @returns The factory, with the newly set WaniKani API Token.
   */
  setApiToken(token: string): this;
  /**
   * Sets the custom headers for all requests gerated by the factory to those passed to this function, removing any
   * previously set custom headers, and keeping API Revision and Token settings.
   * @param headers An object containing HTTP headers and their values.
   * @returns The factory, with the only custom headers being those passed to this function.
   * @throws A `TypeError` if trying to set type-checked request headers.
   */
  setCustomHeaders(headers: Record<string, string>): this;
}
/**
 * Initialization options for a {@link ApiRequestFactory}.
 *
 * @category Requests
 */
interface ApiRequestFactoryInit {
  /** The WaniKani API Token to use in the requests. */
  apiToken: string;
  /** Any additional headers to be added to all requests. */
  customHeaders?: Record<string, string>;
  /**
   * The WaniKani API Revision to use in the requests; if not set, the factory will default to the current API Revision.
   */
  revision?: ApiRevision;
}
/**
 * Options for making GET Requests to the WaniKani API.
 *
 * @category Requests
 */
interface ApiRequestOptions {
  /** Custom headers to add to this request only. */
  customHeaders?: Record<string, string>;
}
/**
 * Generally expected HTTP headers when making requests to the WaniKani API.
 *
 * @category Requests
 */
interface ApiRequestHeaders {
  /** HTTP Authorization header, using a Bearer Token. */
  authorization: `Bearer ${string}`;
  /** The WaniKani API Revision. */
  "wanikani-revision": ApiRevision;
  [customHeaders: string]: string | undefined;
  /** The client should accept JSON as that is how the WaniKani API's response bodies are formatted. */
  accept?: "application/json";
  /** When making a POST or PUT request, the client should indicate they are sending a JSON request body. */
  "content-type"?: "application/json";
  /** An HTTP Date can be sent to check for data changes, and expect an HTTP Status 304 if there are none. */
  "if-modified-since"?: string;
  /** An HTTP ETag can be sent to check for data changes, and expect an HTTP Status 304 if there are none. */
  "if-none-match"?: string;
  /** A User Agent to better identify who is making the request to the WaniKani API. */
  "user-agent"?: string;
}
//#endregion
//#region src/v20170710/summary.d.ts
/**
 * Details about subjects listed as available for lessons in the Summary report.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#summary}
 * @category Summary
 */
interface SummaryInterval {
  /**
   * When the paired `subject_ids` are available for lessons. Always beginning of the current hour when the API endpoint
   * is accessed.
   */
  available_at: DatableString;
  /**
   * Collection of unique identifiers for subjects.
   */
  subject_ids: number[];
}
declare const SummaryInterval: v.ObjectSchema<{
  readonly available_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
}, undefined>;
/**
 * The summary report contains currently available lessons and reviews and the reviews that will become available in the
 * next 24 hours, grouped by the hour.
 *
 * @see {@link https://docs.api.wanikani.com/20170710/#summary}
 * @category Reports
 * @category Summary
 */
interface Summary extends BaseReport {
  /**
   * Data for the Summary report.
   */
  data: {
    /**
     * Details about subjects available for lessons.
     */
    lessons: SummaryInterval[];
    /**
     * Earliest date when the reviews are available. Is `null` when the user has no reviews scheduled.
     */
    next_reviews_at: DatableString | null;
    /**
     * Details about subjects available for reviews now and in the next 24 hours by the hour (total of 25 objects).
     */
    reviews: SummaryInterval[];
  };
}
declare const Summary: v.ObjectSchema<{
  readonly object: v.LiteralSchema<"report", undefined>;
  readonly data_updated_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
  readonly url: v.StringSchema<undefined>;
  readonly data: v.ObjectSchema<{
    readonly lessons: v.ArraySchema<v.ObjectSchema<{
      readonly available_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    }, undefined>, undefined>;
    readonly next_reviews_at: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>, v.NullSchema<undefined>], undefined>;
    readonly reviews: v.ArraySchema<v.ObjectSchema<{
      readonly available_at: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.IsoTimestampAction<string, undefined>, v.BrandAction<string, "DatableString">]>;
      readonly subject_ids: v.ArraySchema<v.NumberSchema<undefined>, undefined>;
    }, undefined>, undefined>;
  }, undefined>;
}, undefined>;
/**
 * A type guard that checks if the given value matches the type predicate.
 *
 * @category Summary
 * @category Type Guards
 */
declare function isSummary(value: unknown): value is Summary;
//#endregion
export { API_REVISION, ApiError, ApiRequest, ApiRequestFactory, ApiRequestFactoryInit, ApiRequestHeaders, ApiRequestOptions, ApiRevision, Assignment, AssignmentCollection, AssignmentParameters, AssignmentPayload, BaseCollection, BaseReport, BaseResource, CollectionParameters, CreatedReview, DatableString, KanaVocabularyData, KanjiData, KanjiReading, LessonBatchSizeNumber, Level, LevelProgression, LevelProgressionCollection, LevelProgressionParameters, MAX_LESSON_BATCH_SIZE, MAX_LEVEL, MAX_SRS_REVIEW_STAGE, MAX_SRS_STAGE, MIN_LESSON_BATCH_SIZE, MIN_LEVEL, MIN_SRS_STAGE, ParsedSubjectMarkup, RadicalCharacterImage, RadicalData, Reset, ResetCollection, ResetParameters, Review, ReviewCollection, ReviewParameters, ReviewPayload, ReviewStatistic, ReviewStatisticCollection, ReviewStatisticParameters, SUBJECT_MARKUP_MATCHER, SafeInteger, SpacedRepetitionSystem, SpacedRepetitionSystemCollection, SpacedRepetitionSystemParameters, SpacedRepetitionSystemStage, SpacedRepetitionSystemStageNumber, StudyMaterial, StudyMaterialBaseData, StudyMaterialCollection, StudyMaterialCreatePayload, StudyMaterialParameters, StudyMaterialUpdatePayload, Subject, SubjectAuxiliaryMeaning, SubjectBaseData, SubjectCollection, SubjectMeaning, SubjectParameters, SubjectTuple, SubjectType, Summary, SummaryInterval, User, UserPreferences, UserPreferencesPayload, VocabularyContextSentence, VocabularyData, VocabularyPronunciationAudio, VocabularyReading, VoiceActor, VoiceActorCollection, VoiceActorParameters, isApiError, isApiRevision, isAssignment, isAssignmentCollection, isCreatedReview, isDatableString, isLessonBatchSizeNumber, isLevel, isLevelProgression, isLevelProgressionCollection, isReset, isResetCollection, isReview, isReviewCollection, isReviewStatistic, isReviewStatisticCollection, isSpacedRepetitionSystem, isSpacedRepetitionSystemCollection, isSpacedRepetitionSystemStageNumber, isStudyMaterial, isStudyMaterialCollection, isSubject, isSubjectCollection, isSubjectTuple, isSubjectType, isSummary, isUser, isVoiceActor, isVoiceActorCollection, parseSubjectMarkup, stringifyParameters };