export interface ExportAsyncJob {
    /**
     * @format GUID
     * @readonly
     */
    id?: string;
    data?: ExportAsyncJobData;
    status?: Status;
    /** @readonly */
    createDate?: Date | null;
    /** @readonly */
    updateDate?: Date | null;
}
export interface ExportAsyncJobData {
    /** original request data for the export */
    query?: ExportQueryV2;
    /** translated CSV headers */
    fields?: FieldDescriptor[];
    arrayFieldDelimiter?: ArrayFieldDelimiter;
    /** The target method to query data from */
    methodMetadata?: MethodMetadata;
    /** Custom spec for the target method's request/response */
    methodSpec?: MethodSpec;
    userId?: string;
    subDir?: string | null;
    format?: string;
    uploadId?: string;
    /** @maxLength 255 */
    saveAs?: string | null;
    /** the progress of fetching all data update during the process multiple times */
    pagingMetadata?: PagingMetadataV2;
    iterationsCount?: number;
    processedItemsCount?: number;
    completionStep?: string | null;
    /** how many times the export was reset */
    resetCount?: number;
    /** at final step update the signed_url to download the result from */
    signedUrl?: string;
    /** when failed during the process update the error details */
    error?: Details;
    testParams?: Record<string, any> | null;
}
export interface ExportQueryV2 extends ExportQueryV2PagingMethodOneOf {
    /** Paging options to limit and skip the number of items. */
    paging?: Paging;
    /** Cursor token pointing to a page of results. Not used in the first request. Following requests use the cursor token and not `filter` or `sort`. */
    cursorPaging?: ExportCursorPaging;
    /**
     * Filter object in the following format:
     * `"filter" : {
     * "fieldName1": "value1",
     * "fieldName2":{"$operator":"value2"}
     * }`
     * Example of operators: `$eq`, `$ne`, `$lt`, `$lte`, `$gt`, `$gte`, `$in`, `$hasSome`, `$hasAll`, `$startsWith`, `$contains`
     */
    filter?: Record<string, any> | null;
    /**
     * Sort object in the following format:
     * `[{"fieldName":"sortField1","order":"ASC"},{"fieldName":"sortField2","order":"DESC"}]`
     */
    sort?: Sorting[];
    /** Array of projected fields. A list of specific field names to return. If `fieldsets` are also specified, the union of `fieldsets` and `fields` is returned. */
    fields?: string[];
    /** Array of named, predefined sets of projected fields. A array of predefined named sets of fields to be returned. Specifying multiple `fieldsets` will return the union of fields from all sets. If `fields` are also specified, the union of `fieldsets` and `fields` is returned. */
    fieldsets?: string[];
}
/** @oneof */
export interface ExportQueryV2PagingMethodOneOf {
    /** Paging options to limit and skip the number of items. */
    paging?: Paging;
    /** Cursor token pointing to a page of results. Not used in the first request. Following requests use the cursor token and not `filter` or `sort`. */
    cursorPaging?: ExportCursorPaging;
}
export interface Sorting {
    /**
     * Name of the field to sort by.
     * @maxLength 512
     */
    fieldName?: string;
    /** Sort order. */
    order?: SortOrder;
    /**
     * When `field_name` is a property of repeated field that is marked as `MATCH_ITEMS` and sort should be done by
     * a specific element from a collection, filter can/should be provided to ensure correct sort value is picked.
     *
     * If multiple filters are provided, they are combined with AND operator.
     *
     * Example:
     * Given we have document like {"id": "1", "nestedField": [{"price": 10, "region": "EU"}, {"price": 20, "region": "US"}]}
     * and `nestedField` is marked as `MATCH_ITEMS`, to ensure that sorting is done by correct region, filter should be
     * { fieldName: "nestedField.price", "select_items_by": [{"nestedField.region": "US"}] }
     * @internal
     * @maxSize 10
     */
    selectItemsBy?: Record<string, any>[] | null;
}
export declare enum SortOrder {
    ASC = "ASC",
    DESC = "DESC"
}
export interface Paging {
    /** Number of items to load. */
    limit?: number | null;
    /** Number of items to skip in the current sort order. */
    offset?: number | null;
}
export interface ExportCursorPaging {
    /** @max 10000 */
    limit?: number | null;
    cursor?: string | null;
}
export interface FieldDescriptor {
    /** the path to the field out of the query response items */
    id?: string;
    /** how to present the filed in the CSV headers (translated) */
    header?: string;
}
export declare enum ArrayFieldDelimiter {
    SEMICOLON = "SEMICOLON",
    SEMICOLON_AND_SPACE = "SEMICOLON_AND_SPACE"
}
export interface MethodMetadata {
    artifact?: string;
    service?: string;
    method?: string;
}
export interface MethodSpec {
    requestQueryFieldNumber?: QueryFieldNumber;
    responseRepeatedFieldName?: string | null;
    responsePagingMetadataFieldName?: string | null;
}
export declare enum QueryFieldNumber {
    /** message QuerySomethingRequest { .wix.common.QueryV2 query = 1; } */
    DEFAULT = "DEFAULT",
    FIELD_2 = "FIELD_2",
    FIELD_3 = "FIELD_3",
    FIELD_4 = "FIELD_4",
    FIELD_5 = "FIELD_5",
    FIELD_6 = "FIELD_6",
    FIELD_7 = "FIELD_7",
    /** message QuerySomethingRequest { .wix.common.QueryV2 query = 8; } */
    FIELD_8 = "FIELD_8",
    FIELD_9 = "FIELD_9"
}
export interface PagingMetadataV2 {
    /** Number of items returned in the response. */
    count?: number | null;
    /** Offset that was requested. */
    offset?: number | null;
    /** Total number of items that match the query. Returned if offset paging is used and the `tooManyToCount` flag is not set. */
    total?: number | null;
    /** Flag that indicates the server failed to calculate the `total` field. */
    tooManyToCount?: boolean | null;
    /** Cursors to navigate through the result pages using `next` and `prev`. Returned if cursor paging is used. */
    cursors?: Cursors;
    /**
     * Indicates if there are more results after the current page.
     * If `true`, another page of results can be retrieved.
     * If `false`, this is the last page.
     * @internal
     */
    hasNext?: boolean | null;
}
export interface Cursors {
    /**
     * Cursor string pointing to the next page in the list of results.
     * @maxLength 16000
     */
    next?: string | null;
    /**
     * Cursor pointing to the previous page in the list of results.
     * @maxLength 16000
     */
    prev?: string | null;
}
export interface Details extends DetailsKindOneOf {
    applicationError?: ApplicationError;
    validationError?: ValidationError;
    systemError?: SystemError;
    /**
     * deprecated in API's - to enable migration from rendering arbitrary tracing to rest response
     * @deprecated
     */
    tracing?: Record<string, string>;
}
/** @oneof */
export interface DetailsKindOneOf {
    applicationError?: ApplicationError;
    validationError?: ValidationError;
    systemError?: SystemError;
}
export interface ApplicationError {
    /** Error code. */
    code?: string;
    /** Description of the error. */
    description?: string;
    /** Data related to the error. */
    data?: Record<string, any> | null;
}
/**
 * example result:
 * {
 * "fieldViolations": [
 * {
 * "field": "fieldA",
 * "description": "invalid music note. supported notes: [do,re,mi,fa,sol,la,ti]",
 * "violatedRule": "OTHER",
 * "ruleName": "INVALID_NOTE",
 * "data": {
 * "value": "FI"
 * }
 * },
 * {
 * "field": "fieldB",
 * "description": "field value out of range. supported range: [0-20]",
 * "violatedRule": "MAX",
 * "data": {
 * "threshold": 20
 * }
 * },
 * {
 * "field": "fieldC",
 * "description": "invalid phone number. provide a valid phone number of size: [7-12], supported characters: [0-9, +, -, (, )]",
 * "violatedRule": "FORMAT",
 * "data": {
 * "type": "PHONE"
 * }
 * }
 * ]
 * }
 */
export interface ValidationError {
    fieldViolations?: FieldViolation[];
}
export declare enum RuleType {
    VALIDATION = "VALIDATION",
    OTHER = "OTHER",
    MAX = "MAX",
    MIN = "MIN",
    MAX_LENGTH = "MAX_LENGTH",
    MIN_LENGTH = "MIN_LENGTH",
    MAX_SIZE = "MAX_SIZE",
    MIN_SIZE = "MIN_SIZE",
    FORMAT = "FORMAT",
    DECIMAL_LTE = "DECIMAL_LTE",
    DECIMAL_GTE = "DECIMAL_GTE",
    DECIMAL_LT = "DECIMAL_LT",
    DECIMAL_GT = "DECIMAL_GT",
    DECIMAL_MAX_SCALE = "DECIMAL_MAX_SCALE",
    INVALID_ENUM_VALUE = "INVALID_ENUM_VALUE",
    REQUIRED_FIELD = "REQUIRED_FIELD",
    FIELD_NOT_ALLOWED = "FIELD_NOT_ALLOWED",
    ONE_OF_ALIGNMENT = "ONE_OF_ALIGNMENT",
    EXACT_LENGTH = "EXACT_LENGTH",
    EXACT_SIZE = "EXACT_SIZE",
    REQUIRED_ONE_OF_FIELD = "REQUIRED_ONE_OF_FIELD"
}
export interface FieldViolation {
    field?: string;
    description?: string;
    violatedRule?: RuleType;
    /** applicable when violated_rule=OTHER */
    ruleName?: string | null;
    data?: Record<string, any> | null;
}
export interface SystemError {
    /** Error code. */
    errorCode?: string | null;
}
export declare enum Status {
    UNKNOWN = "UNKNOWN",
    /** Job is created, but hasn't started yet. */
    INITIALIZED = "INITIALIZED",
    /** Job has started and is in progress. */
    PROCESSING = "PROCESSING",
    /** Job is finished. */
    FINISHED = "FINISHED",
    /** Job has failed. */
    FAILED = "FAILED"
}
export interface CreateExportAsyncJobRequest {
    /** WQL expression */
    query: ExportQueryV2;
    /** translated CSV headers */
    fields: FieldDescriptor[];
    arrayFieldDelimiter?: ArrayFieldDelimiter;
    /** The target method to query data from */
    methodMetadata: MethodMetadata;
    /** The target method to query data from */
    methodSpec?: MethodSpec;
    /** @maxLength 255 */
    saveAs?: string | null;
    /** Test params */
    testParams?: Record<string, any> | null;
}
export interface CreateExportAsyncJobResponse {
    /** The retrieved Exports */
    job?: ExportAsyncJob;
}
export interface GetExportAsyncJobRequest {
    /**
     * Id of the Export to retrieve
     * @format GUID
     */
    jobId: string;
}
export interface GetExportAsyncJobResponse {
    /** The retrieved ExportAsyncJob */
    job?: ExportAsyncJob;
}
export interface CancelExportAsyncJobRequest {
    /**
     * Id of the Export to retrieve
     * @format GUID
     */
    jobId: string;
}
export interface CancelExportAsyncJobResponse {
    /** The retrieved ExportAsyncJob */
    job?: ExportAsyncJob;
}
export interface GenerateExportAsyncJobDownloadUrlRequest {
    /**
     * Id of the Export to retrieve
     * @format GUID
     */
    jobId: string;
}
export interface GenerateExportAsyncJobDownloadUrlResponse {
    /** The retrieved ExportAsyncJob */
    job?: ExportAsyncJob;
}
export interface QueryRequestLoose {
    /** WQL expression */
    query?: ExportQueryV2;
}
export interface QueryVariantsExportSpiResponse {
    items?: ProductOrVariant[];
    pagingMetadata?: PagingMetadataV2;
}
export interface ProductOrVariant {
    kind?: string;
    product?: Product;
    variant?: StoreVariant;
}
export interface Product {
    /**
     * Product ID (generated automatically by the catalog).
     * @readonly
     */
    id?: string;
    /**
     * Product name.
     *
     * Min: 1 character
     * Max: 80 characters
     * @minLength 1
     * @maxLength 80
     */
    name?: string | null;
    /**
     * A friendly URL name (generated automatically by the catalog when a product is created), can be updated.
     * @maxLength 100
     */
    slug?: string;
    /** Whether the product is visible to site visitors. */
    visible?: boolean | null;
    /** Currently, only creating physical products ( `"productType": "physical"` ) is supported via the API. */
    productType?: ProductType;
    /**
     * Product description. Accepts [rich text](https://dev.wix.com/api/rest/wix-stores/rich-text).
     * @maxLength 8000
     */
    description?: string | null;
    /**
     * Stock keeping unit. If [variant management](https://support.wix.com/en/article/wix-stores-adding-and-customizing-product-options#setting-different-prices-for-variants) is enabled, SKUs will be set per variant, and this field will be empty.
     * @maxLength 40
     */
    sku?: string | null;
    /**
     * Product weight. If [variant management](https://support.wix.com/en/article/wix-stores-adding-and-customizing-product-options#setting-different-prices-for-variants) is enabled, weight will be set per variant, and this field will be empty.
     * @max 999999999.99
     */
    weight?: number | null;
    /**
     * Product weight range. The minimum and maximum weights of all the variants.
     * @readonly
     */
    weightRange?: NumericPropertyRange;
    /**
     * Product inventory status (in future this will be writable via Inventory API).
     * @readonly
     */
    stock?: Stock;
    /**
     * Deprecated (use `priceData` instead).
     * @readonly
     * @deprecated
     */
    price?: PriceData;
    /** Price data. */
    priceData?: PriceData;
    /**
     * Price data, converted to the currency specified in request header.
     * @readonly
     */
    convertedPriceData?: PriceData;
    /**
     * Product price range. The minimum and maximum prices of all the variants.
     * @readonly
     */
    priceRange?: NumericPropertyRange;
    /** Cost and profit data. */
    costAndProfitData?: CostAndProfitData;
    /**
     * Product cost range. The minimum and maximum costs of all the variants.
     * @readonly
     */
    costRange?: NumericPropertyRange;
    /** Price per unit data. */
    pricePerUnitData?: PricePerUnitData;
    /** Additional text that the store owner can assign to the product (e.g. shipping details, refund policy, etc.). */
    additionalInfoSections?: AdditionalInfoSection[];
    /**
     * Deprecated (use `ribbon` instead).
     * @readonly
     * @deprecated
     */
    ribbons?: Ribbon[];
    /**
     * Media items (images, videos etc) associated with this product (writable via [Add Product Media](https://dev.wix.com/api/rest/wix-stores/catalog/products/add-product-media) endpoint).
     * @readonly
     */
    media?: Media;
    /**
     * Text box for the customer to add a message to their order (e.g., customization request). Currently writable only from the UI.
     * @readonly
     */
    customTextFields?: CustomTextField[];
    /** Whether variants are being managed for this product - enables unique SKU, price and weight per variant. Also affects inventory data. */
    manageVariants?: boolean | null;
    /**
     * Options for this product.
     * @maxSize 6
     */
    productOptions?: ProductOption[];
    /**
     * Product page URL for this product (generated automatically by the server).
     * @readonly
     */
    productPageUrl?: PageUrl;
    /**
     * Product’s unique numeric ID (assigned in ascending order).
     * Primarily used for sorting and filtering when crawling all products.
     * @readonly
     */
    numericId?: string;
    /**
     * Inventory item ID - ID referencing the inventory system.
     * @readonly
     */
    inventoryItemId?: string;
    /** Discount deducted from the product's original price. */
    discount?: Discount;
    /**
     * A list of all collection IDs that this product is included in (writable via the Catalog > Collection APIs).
     * @readonly
     */
    collectionIds?: string[];
    /**
     * Product variants, will be provided if the request was sent with the `includeVariants: true`.
     *
     * Max: 1,000 variants
     * @readonly
     * @maxSize 1000
     */
    variants?: Variant[];
    /**
     * Date and time the product was last updated.
     * @readonly
     */
    lastUpdated?: Date | null;
    /**
     * Date and time the product was created.
     * @readonly
     */
    createdDate?: Date | null;
    /** Custom SEO data for the product. */
    seoData?: SeoSchema;
    /**
     * Product ribbon. Used to highlight relevant information about a product. For example, "Sale", "New Arrival", "Sold Out".
     * @maxLength 30
     */
    ribbon?: string | null;
    /**
     * Product brand. Including a brand name can help improve site and product [visibility on search engines](https://support.wix.com/en/article/adding-brand-names-to-boost-product-page-seo-in-wix-stores).
     * @minLength 1
     * @maxLength 50
     */
    brand?: string | null;
    /**
     * tax group id
     * @internal
     * @format GUID
     */
    taxGroupId?: string | null;
    /**
     * internal field used by import/export to know how to link products in csv file to product ids
     * @internal
     * @readonly
     * @maxLength 100
     */
    exportProductId?: string;
    /**
     * Digital file which will be downloaded by buyer after successful purchase.
     * @internal
     * @readonly
     */
    digitalFile?: SecuredMedia;
}
export declare enum ProductType {
    unspecified_product_type = "unspecified_product_type",
    physical = "physical",
    digital = "digital"
}
export interface NumericPropertyRange {
    /** Minimum value. */
    minValue?: number;
    /** Maximum value. */
    maxValue?: number;
}
export interface Stock {
    /** Whether inventory is being tracked */
    trackInventory?: boolean;
    /**
     * Quantity currently left in inventory
     * @max 99999
     */
    quantity?: number | null;
    /**
     * Whether the product is currently in stock (relevant only when tracking manually)
     * Deprecated (use `inventoryStatus` instead)
     * @deprecated
     */
    inStock?: boolean;
    /**
     * The current status of the inventory
     * + `IN_STOCK` - In stock
     * + `OUT_OF_STOCK` - Not in stock
     * + `PARTIALLY_OUT_OF_STOCK` - Some of the variants are not in stock
     */
    inventoryStatus?: InventoryStatus;
}
export declare enum InventoryStatus {
    /** In stock */
    IN_STOCK = "IN_STOCK",
    /** Not in stock */
    OUT_OF_STOCK = "OUT_OF_STOCK",
    /** Some of the variants are not in stock */
    PARTIALLY_OUT_OF_STOCK = "PARTIALLY_OUT_OF_STOCK"
}
export interface PriceData {
    /**
     * Product price currency
     * @readonly
     */
    currency?: string;
    /**
     * Product price
     * @max 999999999.99
     */
    price?: number | null;
    /**
     * Discounted product price (if no discounted price is set, the product price is returned)
     * @readonly
     */
    discountedPrice?: number;
    /**
     * The product price and discounted price, formatted with the currency
     * @readonly
     */
    formatted?: FormattedPrice;
    /**
     * Price per unit
     * @readonly
     */
    pricePerUnit?: number | null;
}
export interface FormattedPrice {
    /** Product price formatted with the currency */
    price?: string;
    /** Discounted product price formatted with the currency (if no discounted price is set, the product formatted price is returned) */
    discountedPrice?: string;
    /**
     * Price per unit
     * @readonly
     */
    pricePerUnit?: string | null;
}
export interface CostAndProfitData {
    /**
     * Item cost.
     * @max 999999999.99
     */
    itemCost?: number | null;
    /**
     * Item cost formatted with currency symbol.
     * @readonly
     */
    formattedItemCost?: string;
    /**
     * Profit. Calculated by reducing `cost` from `discounted_price`.
     * @readonly
     * @max 999999999.99
     */
    profit?: number;
    /**
     * Profit formatted with currency symbol.
     * @readonly
     */
    formattedProfit?: string;
    /**
     * Profit Margin. Calculated by dividing `profit` by `discounted_price`.
     * The result is rounded to 4 decimal places.
     * @readonly
     * @max 1
     */
    profitMargin?: number;
}
export interface PricePerUnitData {
    /**
     * Total quantity
     * @min 0.01
     * @max 999999999.99
     */
    totalQuantity?: number;
    /** Total measurement unit */
    totalMeasurementUnit?: MeasurementUnit;
    /**
     * Base quantity
     * @min 0.01
     * @max 999999999.99
     */
    baseQuantity?: number;
    /** Base measurement unit */
    baseMeasurementUnit?: MeasurementUnit;
}
export declare enum MeasurementUnit {
    UNSPECIFIED = "UNSPECIFIED",
    ML = "ML",
    CL = "CL",
    L = "L",
    CBM = "CBM",
    MG = "MG",
    G = "G",
    KG = "KG",
    MM = "MM",
    CM = "CM",
    M = "M",
    SQM = "SQM",
    OZ = "OZ",
    LB = "LB",
    FLOZ = "FLOZ",
    PT = "PT",
    QT = "QT",
    GAL = "GAL",
    IN = "IN",
    FT = "FT",
    YD = "YD",
    SQFT = "SQFT"
}
export interface AdditionalInfoSection {
    /**
     * Product info section title
     * @maxLength 50
     */
    title?: string;
    /**
     * Product info section description
     * @maxLength 16000
     */
    description?: string;
}
export interface Ribbon {
    /**
     * Ribbon text
     * @maxLength 30
     */
    text?: string;
}
export interface Media {
    /** Primary media (image, video etc) associated with this product. */
    mainMedia?: MediaItem;
    /** Media (images, videos etc) associated with this product. */
    items?: MediaItem[];
}
export interface MediaItem extends MediaItemItemOneOf {
    /** Image data (URL, size). */
    image?: MediaItemUrlAndSize;
    /** Video data (URL, size). */
    video?: MediaItemVideo;
    /** Media item thumbnail details. */
    thumbnail?: MediaItemUrlAndSize;
    /** Media item type (image, video, etc.). */
    mediaType?: MediaItemType;
    /** Media item title. */
    title?: string;
    /** Media ID (for example, `"nsplsh_306d666a123a4a74306459~mv2_d_4517_2992_s_4_2.jpg"`). */
    id?: string;
}
/** @oneof */
export interface MediaItemItemOneOf {
    /** Image data (URL, size). */
    image?: MediaItemUrlAndSize;
    /** Video data (URL, size). */
    video?: MediaItemVideo;
}
export interface MediaItemUrlAndSize {
    /**
     * Media item URL.
     * @format WEB_URL
     */
    url?: string;
    /** Media item width. */
    width?: number;
    /** Media item height. */
    height?: number;
    /** Media format (mp4, png, etc.). */
    format?: string | null;
    /** Alt text. This text will be shown in case the image is not available. */
    altText?: string | null;
}
export declare enum MediaItemType {
    unspecified_media_item_type = "unspecified_media_item_type",
    /** Image media type. */
    image = "image",
    /** Video media type. */
    video = "video",
    /** Audio media type. */
    audio = "audio",
    /** Document media type. */
    document = "document",
    /** Zip media type. */
    zip = "zip"
}
export interface MediaItemVideo {
    /** Data (URL, size) about each resolution for which this video is available. */
    files?: MediaItemUrlAndSize[];
    /** ID of an image taken from the video. Used primarily for Wix Search indexing. For example, `"nsplsh_306d666a123a4a74306459~mv2_d_4517_2992_s_4_2.jpg"`. */
    stillFrameMediaId?: string;
}
export interface CustomTextField {
    /**
     * Text box title
     * @maxLength 100
     */
    title?: string;
    /**
     * Text box input max length
     * @max 500
     */
    maxLength?: number;
    /** Whether this text box is mandatory */
    mandatory?: boolean;
}
export interface ProductOption {
    /**
     * Option type.
     * @readonly
     */
    optionType?: OptionType;
    /**
     * Option name.
     * @minLength 1
     * @maxLength 50
     */
    name?: string;
    /**
     * Choices available for this option.
     * @minSize 1
     * @maxSize 100
     */
    choices?: Choice[];
}
export declare enum OptionType {
    /** Unspecified option type. */
    unspecified_option_type = "unspecified_option_type",
    /** Drop down. */
    drop_down = "drop_down",
    /** Color. */
    color = "color"
}
export interface Choice {
    /**
     * Choice value.
     * @minLength 1
     * @maxLength 50
     */
    value?: string;
    /**
     * Choice description.
     * @minLength 1
     * @maxLength 50
     */
    description?: string;
    /**
     * Media items (images, videos) associated with this choice
     * @readonly
     */
    media?: Media;
    /**
     * Based on the customer’s choices, which (if any) variants that include the selected choices are in stock
     * @readonly
     */
    inStock?: boolean;
    /**
     * Based on the customer’s choices, which (if any) variants that include the selected choices are visible
     * @readonly
     */
    visible?: boolean;
}
export interface PageUrl {
    /** Base URL. For premium sites, this is the domain. For free sites, this is the site URL (e.g mysite.wixsite.com/mysite). */
    base?: string;
    /** Path to the product page - e.g /product-page/a-product. */
    path?: string;
}
export interface Discount {
    /**
     * Discount type:
     * + `"AMOUNT"`
     * + `"PERCENT"`
     */
    type?: DiscountType;
    /** Discount value */
    value?: number;
}
export declare enum DiscountType {
    UNDEFINED = "UNDEFINED",
    /** No discount */
    NONE = "NONE",
    /** Discount by a fixed amount */
    AMOUNT = "AMOUNT",
    /** Discount by a percentage */
    PERCENT = "PERCENT"
}
export interface Variant {
    /**
     * Requested Variant ID
     * @format GUID
     */
    id?: string;
    /** Specific choices within a selection, as option-choice key-value pairs */
    choices?: Record<string, string>;
    variant?: VariantDataWithNoStock;
    /**
     * Variant inventory status.
     * @readonly
     */
    stock?: VariantStock;
}
export interface VariantDataWithNoStock {
    /** Variant price. */
    priceData?: PriceData;
    /**
     * Variant price data, converted to currency requested in header.
     * @readonly
     */
    convertedPriceData?: PriceData;
    /** Cost and profit data. */
    costAndProfitData?: CostAndProfitData;
    /** Variant weight. */
    weight?: number;
    /** Variant SKU (stock keeping unit). */
    sku?: string;
    /** Whether the variant is visible to customers. */
    visible?: boolean;
}
export interface VariantStock {
    /** Whether inventory is being tracked. */
    trackQuantity?: boolean;
    /**
     * Quantity currently left in inventory.
     * @max 99999
     */
    quantity?: number | null;
    /** Whether the product is currently in stock (relevant only when tracking manually). */
    inStock?: boolean;
    /**
     * The location of the inventory in question. None indicates the online-store default location.
     * @internal
     * @format GUID
     */
    locationId?: string | null;
}
/**
 * The SEO schema object contains data about different types of meta tags. It makes sure that the information about your page is presented properly to search engines.
 * The search engines use this information for ranking purposes, or to display snippets in the search results.
 * This data will override other sources of tags (for example patterns) and will be included in the <head> section of the HTML document, while not being displayed on the page itself.
 */
export interface SeoSchema {
    /** SEO tag information. */
    tags?: Tag[];
    /** SEO general settings. */
    settings?: Settings;
}
export interface Keyword {
    /** Keyword value. */
    term?: string;
    /** Whether the keyword is the main focus keyword. */
    isMain?: boolean;
    /**
     * The source that added the keyword terms to the SEO settings.
     * @maxLength 1000
     */
    origin?: string | null;
}
export interface Tag {
    /**
     * SEO tag type.
     *
     *
     * Supported values: `title`, `meta`, `script`, `link`.
     */
    type?: string;
    /**
     * A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value.
     * For example: `{"name": "description", "content": "the description itself"}`.
     */
    props?: Record<string, any> | null;
    /** SEO tag metadata. For example, `{"height": 300, "width": 240}`. */
    meta?: Record<string, any> | null;
    /** SEO tag inner content. For example, `<title> inner content </title>`. */
    children?: string;
    /** Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages). */
    custom?: boolean;
    /** Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines. */
    disabled?: boolean;
}
export interface Settings {
    /**
     * Whether the [automatical redirect visits](https://support.wix.com/en/article/customizing-your-pages-seo-settings-in-the-seo-panel) from the old URL to the new one is enabled.
     *
     *
     * Default: `false` (automatical redirect is enabled).
     */
    preventAutoRedirect?: boolean;
    /**
     * User-selected keyword terms for a specific page.
     * @maxSize 5
     */
    keywords?: Keyword[];
}
export interface SecuredMedia {
    /**
     * Media ID in Wix Media Manager.
     * @minLength 1
     * @maxLength 100
     */
    id?: string;
    /**
     * Original filename.
     * @minLength 1
     * @maxLength 1000
     */
    fileName?: string;
    /** File type. */
    fileType?: FileType;
}
export declare enum FileType {
    UNSPECIFIED = "UNSPECIFIED",
    SECURE_PICTURE = "SECURE_PICTURE",
    SECURE_VIDEO = "SECURE_VIDEO",
    SECURE_DOCUMENT = "SECURE_DOCUMENT",
    SECURE_MUSIC = "SECURE_MUSIC",
    SECURE_ARCHIVE = "SECURE_ARCHIVE"
}
export interface StoreVariant {
    /** Store variant ID. Comprised of the `productId` and the `variantId`, separated by a hyphen: {productId}.{variantId}. */
    id?: string;
    /**
     * Variant ID.
     * @format GUID
     */
    variantId?: string;
    /** Product ID. */
    productId?: string;
    /**
     * Variant name.
     * @minLength 1
     * @maxLength 80
     */
    variantName?: string;
    /**
     * Product name.
     * @minLength 1
     * @maxLength 80
     */
    productName?: string;
    /** Whether the variant is managed or represents a product. */
    managedVariant?: boolean;
    /**
     * Variant SKU (stock keeping unit).
     * @maxLength 40
     */
    sku?: string;
    /** Variant inventory status. */
    stock?: VariantStock;
    /** The selected options of this variant. For example, `{"Color": "Blue", "Size": "Large"}`. */
    choices?: Record<string, string>;
    /**
     * Collections that include this variant.
     * @format GUID
     */
    collectionIds?: string[];
    /**
     * Media items (images, videos) associated with this variant.
     * @readonly
     */
    media?: PlatformMedia;
    /** @internal */
    customFields?: Record<string, any>;
    /** Preorder information. */
    preorderInfo?: PreorderInfo;
}
export interface PlatformMedia extends PlatformMediaMediaOneOf {
    image?: Image;
    video?: VideoV2;
}
/** @oneof */
export interface PlatformMediaMediaOneOf {
    image?: Image;
    video?: VideoV2;
}
export interface Image {
    /** WixMedia image ID. */
    id?: string;
    /** Image URL. */
    url?: string;
    /**
     * Original image height.
     * @readonly
     */
    height?: number;
    /**
     * Original image width.
     * @readonly
     */
    width?: number;
    /** Image alt text. */
    altText?: string | null;
    /**
     * Image URL expiration date (when relevant).
     * @internal
     * @readonly
     */
    urlExpirationDate?: Date | null;
    /**
     * Image filename.
     * @readonly
     */
    filename?: string | null;
    /**
     * Image size in bytes.
     * @internal
     * @readonly
     * @format DECIMAL_VALUE
     */
    sizeInBytes?: string | null;
    /**
     * Focal point of the image.
     * @internal
     */
    focalPoint?: FocalPoint;
}
export interface FocalPoint {
    /** X-coordinate of the focal point. */
    x?: number;
    /** Y-coordinate of the focal point. */
    y?: number;
    /** crop by height */
    height?: number | null;
    /** crop by width */
    width?: number | null;
}
export interface VideoV2 {
    /** WixMedia ID. */
    id?: string;
    /**
     * Original video URL.
     * @internal
     */
    url?: string;
    /**
     * Available resolutions for the video, starting with the optimal resolution.
     * @readonly
     * @maxSize 100
     */
    resolutions?: VideoResolution[];
    /**
     * Video filename.
     * @readonly
     */
    filename?: string | null;
    /**
     * Video posters.
     * @internal
     * @readonly
     */
    posters?: Image[];
    /**
     * Original video size in bytes.
     * @internal
     * @readonly
     * @format DECIMAL_VALUE
     */
    sizeInBytes?: string | null;
    /**
     * Video URL expiration date (when relevant).
     * @internal
     * @readonly
     */
    urlExpirationDate?: Date | null;
    /**
     * Original video duration in milliseconds.
     * @internal
     * @readonly
     */
    durationInMilliseconds?: number | null;
    /**
     * A short title for the video. will be used for SEO purposes.
     * @internal
     * @maxLength 300
     */
    title?: string | null;
    /**
     * A long description for the video. will be used for SEO purposes.
     * @internal
     * @maxLength 2000
     */
    description?: string | null;
    /**
     * Original video height.
     * @internal
     * @readonly
     */
    height?: number | null;
    /**
     * Original video width.
     * @internal
     * @readonly
     */
    width?: number | null;
}
export interface VideoResolution {
    /** Video URL. */
    url?: string;
    /** Video height. */
    height?: number;
    /** Video width. */
    width?: number;
    /**
     * Deprecated. Use the `posters` property in the parent entity instead.
     * @internal
     * @deprecated
     */
    poster?: Image;
    /** Video format for example, mp4, hls. */
    format?: string;
    /**
     * Deprecated. Use the `urlExpirationDate` property in the parent entity instead.
     * @internal
     * @deprecated
     */
    urlExpirationDate?: Date | null;
    /**
     * Deprecated. Use the `sizeInBytes` property in the parent entity instead. Size cannot be provided per resolution.
     * @internal
     * @format DECIMAL_VALUE
     * @deprecated
     */
    sizeInBytes?: string | null;
    /**
     * Video quality. For example: 480p, 720p.
     * @internal
     */
    quality?: string | null;
    /**
     * Video filename.
     * @internal
     */
    filename?: string | null;
    /**
     * Video duration in seconds.
     * @internal
     * @readonly
     * @deprecated Video duration in seconds.
     * @replacedBy duration_in_milliseconds
     * @targetRemovalDate 2024-08-01
     */
    durationInSeconds?: number | null;
    /**
     * Video duration in milliseconds.
     * @internal
     * @readonly
     */
    durationInMilliseconds?: number | null;
    /**
     * When true, this is a protected asset, and calling the URL will return a 403 error.
     * In order to access private assets, make a request to:
     * `GenerateFileDownloadUrl` with the WixMedia id and specify the asset_key in the request
     * @internal
     * @readonly
     */
    private?: boolean | null;
    /**
     * Key to identify the video resolution's relationship to the original media in WixMedia.
     * Can be used to request a download for the specific video resolution.
     * For example: 480p.mp4, 720p.mp4, 1080p.mp4, trailer-720p.mp4, clip-720p.mp4
     * @internal
     * @readonly
     */
    assetKey?: string | null;
}
export interface PreorderInfo {
    /** Whether the item is available for preorder. */
    enabled?: boolean;
    /**
     * A message the buyer will see when the item is out of stock and preorder is enabled.
     * @minLength 1
     * @maxLength 250
     */
    message?: string | null;
    /**
     * Number of products that can be preordered after stock reaches zero.
     * @max 100000
     */
    limit?: number | null;
}
export interface QueryProductsExportSpiResponse {
    items?: ProductOrVariantV2[];
    pagingMetadata?: PagingMetadataV2;
}
export interface ProductOrVariantV2 {
    kind?: string;
    product?: Product;
    variant?: Variant;
}
/** @docsIgnore */
export declare type CreateExportAsyncJobApplicationErrors = {
    code?: 'method_endpoint_not_found';
    description?: string;
    data?: Record<string, any>;
};
/** @docsIgnore */
export declare type GetExportAsyncJobApplicationErrors = {
    code?: 'job_not_found';
    description?: string;
    data?: Record<string, any>;
} | {
    code?: 'get_async_job_internal';
    description?: string;
    data?: Record<string, any>;
} | {
    code?: 'method_endpoint_permission_denied';
    description?: string;
    data?: Record<string, any>;
};
/** @docsIgnore */
export declare type QueryProductsExportSpiApplicationErrors = {
    code?: 'query_products_test_not_found';
    description?: string;
    data?: Record<string, any>;
} | {
    code?: 'query_products_test_internal';
    description?: string;
    data?: Record<string, any>;
};
