import * as v from 'valibot';

/**
 * 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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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;

/**
 * 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 = [SubjectType, ...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 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>;
    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 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>;
    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 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>;
    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 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>;
    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 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>;
        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 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>;
        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 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>;
        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 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>;
        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 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>;
    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 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>;
            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 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>;
            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 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>;
            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 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>;
            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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => string)>, undefined>;
}, undefined>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => string)>, undefined>;
    }, undefined>;
}, undefined>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => string)>, undefined>;
}, undefined>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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.MinValueIssue<number, 0> | v.NeverIssue | v.NumberIssue | v.ObjectIssue | v.SafeIntegerIssue<number>>) => 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 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>;
    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;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => 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>, "~types" | "~run" | "~standard" | "entries"> & {
    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.StringIssue | v.ObjectIssue | 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.StringIssue | v.ObjectIssue | 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_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 subject_id: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.SafeIntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
}, undefined>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => string)>, undefined>;
}, undefined>;

/**
 * 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>, "~types" | "~run" | "~standard" | "entries"> & {
            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.MinValueIssue<number, 0> | v.NumberIssue | v.ObjectIssue | v.SafeIntegerIssue<number> | v.PicklistIssue | 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.MinValueIssue<number, 0> | v.NumberIssue | v.ObjectIssue | v.SafeIntegerIssue<number> | v.PicklistIssue | v.BooleanIssue | v.MinValueIssue<number, 3> | v.MaxValueIssue<number, 10>;
            } | undefined;
        };
    }, undefined>;
}, undefined>;

/**
 * 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 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>;
    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.DateIssue | v.IsoTimestampIssue<string> | v.StringIssue>) => string)>, undefined>;
}, undefined>;

/**
 * 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;
}

/**
 * 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 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>;
    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;

export { API_REVISION, ApiError, type ApiRequest, ApiRequestFactory, type ApiRequestFactoryInit, type ApiRequestHeaders, type 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, type 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 };
