import { APIResource } from "../../../core/resource.js";
import * as Shared from "../../shared.js";
import { SubscriptionsSinglePage } from "../../shared.js";
import * as ActionsAPI from "./actions.js";
import { ActionAppendParams, Actions, BaseActions } from "./actions.js";
import * as BulkAPI from "./bulk.js";
import { BaseBulk, Bulk, BulkCreateParams, BulkCreateResponse } from "./bulk.js";
import * as CancelReasonAPI from "./cancel-reason.js";
import { BaseCancelReason, CancelReason, CancelReasonCreateParams, CancelReasonCreateResponse, CancelReasonGetParams, CancelReasonGetResponse } from "./cancel-reason.js";
import { APIPromise } from "../../../core/api-promise.js";
import { PagePromise } from "../../../core/pagination.js";
import { RequestOptions } from "../../../internal/request-options.js";
export declare class BaseSubscriptions extends APIResource {
    static readonly _key: readonly ['accounts', 'subscriptions'];
    /**
     * Creates an account or zone subscription.
     *
     * @example
     * ```ts
     * const subscription =
     *   await client.accounts.subscriptions.create({
     *     account_id: 'account_id',
     *   });
     * ```
     */
    create(params: SubscriptionCreateParams, options?: RequestOptions): APIPromise<Shared.Subscription>;
    /**
     * Updates an account subscription.
     *
     * @example
     * ```ts
     * const subscription =
     *   await client.accounts.subscriptions.update(
     *     '506e3185e9c882d175a2d0cb0093d9f2',
     *     { account_id: '023e105f4ecef8ad9ca31a8372d0c353' },
     *   );
     * ```
     */
    update(subscriptionIdentifier: string, params: SubscriptionUpdateParams, options?: RequestOptions): APIPromise<Shared.Subscription>;
    /**
     * Deletes an account's subscription.
     *
     * @example
     * ```ts
     * const subscription =
     *   await client.accounts.subscriptions.delete(
     *     '506e3185e9c882d175a2d0cb0093d9f2',
     *     { account_id: '023e105f4ecef8ad9ca31a8372d0c353' },
     *   );
     * ```
     */
    delete(subscriptionIdentifier: string, params: SubscriptionDeleteParams, options?: RequestOptions): APIPromise<SubscriptionDeleteResponse>;
    /**
     * Cancels pending delayed downgrades for the specified subscriptions.
     *
     * @example
     * ```ts
     * const response =
     *   await client.accounts.subscriptions.cancelDowngrade({
     *     account_id: '023e105f4ecef8ad9ca31a8372d0c353',
     *   });
     * ```
     */
    cancelDowngrade(params: SubscriptionCancelDowngradeParams, options?: RequestOptions): APIPromise<SubscriptionCancelDowngradeResponse>;
    /**
     * Lists all of an account or zone's subscriptions.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const subscription of client.accounts.subscriptions.get(
     *   { account_id: 'account_id' },
     * )) {
     *   // ...
     * }
     * ```
     */
    get(params?: SubscriptionGetParams | null | undefined, options?: RequestOptions): PagePromise<SubscriptionsSinglePage, Shared.Subscription>;
    /**
     * Gets an account subscription by identifier.
     *
     * @example
     * ```ts
     * const subscription =
     *   await client.accounts.subscriptions.getByIdentifier(
     *     '506e3185e9c882d175a2d0cb0093d9f2',
     *     { account_id: '023e105f4ecef8ad9ca31a8372d0c353' },
     *   );
     * ```
     */
    getByIdentifier(subscriptionIdentifier: string, params: SubscriptionGetByIdentifierParams, options?: RequestOptions): APIPromise<Shared.Subscription>;
}
export declare class Subscriptions extends BaseSubscriptions {
    cancelReason: CancelReasonAPI.CancelReason;
    actions: ActionsAPI.Actions;
    bulk: BulkAPI.Bulk;
}
export interface SubscriptionDeleteResponse {
    /**
     * Subscription identifier tag.
     */
    subscription_id?: string;
}
export type SubscriptionCancelDowngradeResponse = unknown | string | null;
export interface SubscriptionCreateParams {
    /**
     * Path param: The Account ID to use for this endpoint. Mutually exclusive with the
     * Zone ID.
     */
    account_id?: string;
    /**
     * Path param: The Zone ID to use for this endpoint. Mutually exclusive with the
     * Account ID.
     */
    zone_id?: string;
    /**
     * Body param: How often the subscription is renewed automatically.
     */
    frequency?: 'weekly' | 'monthly' | 'quarterly' | 'yearly';
    /**
     * Body param: The rate plan applied to the subscription.
     */
    rate_plan?: Shared.RatePlanParam;
}
export interface SubscriptionUpdateParams {
    /**
     * Path param: Identifier
     */
    account_id: string;
    /**
     * Body param: How often the subscription is renewed automatically.
     */
    frequency?: 'weekly' | 'monthly' | 'quarterly' | 'yearly';
    /**
     * Body param: The rate plan applied to the subscription.
     */
    rate_plan?: Shared.RatePlanParam;
}
export interface SubscriptionDeleteParams {
    /**
     * Identifier
     */
    account_id: string;
}
export interface SubscriptionCancelDowngradeParams {
    /**
     * Path param: Identifier
     */
    account_id: string;
    /**
     * Body param: List of subscription identifiers to cancel downgrades for.
     */
    subscription_ids?: Array<string>;
}
export interface SubscriptionGetParams {
    /**
     * The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
     */
    account_id?: string;
    /**
     * The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
     */
    zone_id?: string;
}
export interface SubscriptionGetByIdentifierParams {
    /**
     * Identifier
     */
    account_id: string;
}
export declare namespace Subscriptions {
    export { type SubscriptionDeleteResponse as SubscriptionDeleteResponse, type SubscriptionCancelDowngradeResponse as SubscriptionCancelDowngradeResponse, type SubscriptionCreateParams as SubscriptionCreateParams, type SubscriptionUpdateParams as SubscriptionUpdateParams, type SubscriptionDeleteParams as SubscriptionDeleteParams, type SubscriptionCancelDowngradeParams as SubscriptionCancelDowngradeParams, type SubscriptionGetParams as SubscriptionGetParams, type SubscriptionGetByIdentifierParams as SubscriptionGetByIdentifierParams, };
    export { CancelReason as CancelReason, BaseCancelReason as BaseCancelReason, type CancelReasonCreateResponse as CancelReasonCreateResponse, type CancelReasonGetResponse as CancelReasonGetResponse, type CancelReasonCreateParams as CancelReasonCreateParams, type CancelReasonGetParams as CancelReasonGetParams, };
    export { Actions as Actions, BaseActions as BaseActions, type ActionAppendParams as ActionAppendParams };
    export { Bulk as Bulk, BaseBulk as BaseBulk, type BulkCreateResponse as BulkCreateResponse, type BulkCreateParams as BulkCreateParams, };
}
export { type SubscriptionsSinglePage };
//# sourceMappingURL=subscriptions.d.ts.map