import * as z from "zod/v4-mini";
import { AttachedCustomFieldCreate, AttachedCustomFieldCreate$Outbound } from "./attachedcustomfieldcreate.js";
import { ProductPriceCustomCreate, ProductPriceCustomCreate$Outbound } from "./productpricecustomcreate.js";
import { ProductPriceFixedCreate, ProductPriceFixedCreate$Outbound } from "./productpricefixedcreate.js";
import { ProductPriceMeteredUnitCreate, ProductPriceMeteredUnitCreate$Outbound } from "./productpricemeteredunitcreate.js";
import { ProductPriceSeatBasedCreate, ProductPriceSeatBasedCreate$Outbound } from "./productpriceseatbasedcreate.js";
import { ProductVisibility } from "./productvisibility.js";
import { RecurringInterval } from "./recurringinterval.js";
import { TrialInterval } from "./trialinterval.js";
export type ProductCreateRecurringMetadata = string | number | number | boolean;
export type ProductCreateRecurringPrices = ProductPriceCustomCreate | ProductPriceFixedCreate | ProductPriceMeteredUnitCreate | ProductPriceSeatBasedCreate;
export type ProductCreateRecurring = {
    /**
     * Key-value object allowing you to store additional information.
     *
     * @remarks
     *
     * The key must be a string with a maximum length of **40 characters**.
     * The value must be either:
     *
     * * A string with a maximum length of **500 characters**
     * * An integer
     * * A floating-point number
     * * A boolean
     *
     * You can store up to **50 key-value pairs**.
     */
    metadata?: {
        [k: string]: string | number | number | boolean;
    } | undefined;
    /**
     * The name of the product.
     */
    name: string;
    /**
     * The description of the product.
     */
    description?: string | null | undefined;
    visibility?: ProductVisibility | undefined;
    /**
     * List of available prices for this product. It may combine at most one fixed price with one seat-based price (billed as `fixed + seat_charge`), or contain a single custom or free price, plus any number of metered prices. A free price cannot be combined with other prices, and a custom price cannot be combined with a fixed or seat-based price. Metered prices are not supported on one-time purchase products.
     */
    prices: Array<ProductPriceCustomCreate | ProductPriceFixedCreate | ProductPriceMeteredUnitCreate | ProductPriceSeatBasedCreate>;
    /**
     * List of file IDs. Each one must be on the same organization as the product, of type `product_media` and correctly uploaded.
     */
    medias?: Array<string> | null | undefined;
    /**
     * List of custom fields to attach.
     */
    attachedCustomFields?: Array<AttachedCustomFieldCreate> | undefined;
    /**
     * The ID of the organization owning the product. **Required unless you use an organization token.**
     */
    organizationId?: string | null | undefined;
    /**
     * The interval unit for the trial period.
     */
    trialInterval?: TrialInterval | null | undefined;
    /**
     * The number of interval units for the trial period.
     */
    trialIntervalCount?: number | null | undefined;
    recurringInterval: RecurringInterval;
    /**
     * Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on.
     */
    recurringIntervalCount?: number | undefined;
    /**
     * Optional meter cycle, independent of the billing interval. When set, overage settlement, meter resets and meter-credit grants run on this cadence rather than the billing interval — e.g. yearly billing with monthly credits. It must evenly divide the billing interval. If `None`, metered concerns follow the billing interval. **Once set, it can't be changed.**
     */
    meterInterval?: RecurringInterval | null | undefined;
    /**
     * Number of meter interval units. Defaults to 1 when `meter_interval` is set. Ignored when `meter_interval` is `None`.
     */
    meterIntervalCount?: number | null | undefined;
};
/** @internal */
export type ProductCreateRecurringMetadata$Outbound = string | number | number | boolean;
/** @internal */
export declare const ProductCreateRecurringMetadata$outboundSchema: z.ZodMiniType<ProductCreateRecurringMetadata$Outbound, ProductCreateRecurringMetadata>;
export declare function productCreateRecurringMetadataToJSON(productCreateRecurringMetadata: ProductCreateRecurringMetadata): string;
/** @internal */
export type ProductCreateRecurringPrices$Outbound = ProductPriceCustomCreate$Outbound | ProductPriceFixedCreate$Outbound | ProductPriceMeteredUnitCreate$Outbound | ProductPriceSeatBasedCreate$Outbound;
/** @internal */
export declare const ProductCreateRecurringPrices$outboundSchema: z.ZodMiniType<ProductCreateRecurringPrices$Outbound, ProductCreateRecurringPrices>;
export declare function productCreateRecurringPricesToJSON(productCreateRecurringPrices: ProductCreateRecurringPrices): string;
/** @internal */
export type ProductCreateRecurring$Outbound = {
    metadata?: {
        [k: string]: string | number | number | boolean;
    } | undefined;
    name: string;
    description?: string | null | undefined;
    visibility?: string | undefined;
    prices: Array<ProductPriceCustomCreate$Outbound | ProductPriceFixedCreate$Outbound | ProductPriceMeteredUnitCreate$Outbound | ProductPriceSeatBasedCreate$Outbound>;
    medias?: Array<string> | null | undefined;
    attached_custom_fields?: Array<AttachedCustomFieldCreate$Outbound> | undefined;
    organization_id?: string | null | undefined;
    trial_interval?: string | null | undefined;
    trial_interval_count?: number | null | undefined;
    recurring_interval: string;
    recurring_interval_count: number;
    meter_interval?: string | null | undefined;
    meter_interval_count?: number | null | undefined;
};
/** @internal */
export declare const ProductCreateRecurring$outboundSchema: z.ZodMiniType<ProductCreateRecurring$Outbound, ProductCreateRecurring>;
export declare function productCreateRecurringToJSON(productCreateRecurring: ProductCreateRecurring): string;
//# sourceMappingURL=productcreaterecurring.d.ts.map