import { APIResource } from "../../core/resource.js";
import * as ClientSecretAPI from "./client-secret.js";
import { BaseClientSecret, ClientSecret, ClientSecretCreateParams, ClientSecretCreateResponse } from "./client-secret.js";
import * as EntitlementsAPI from "./entitlements.js";
import { BaseEntitlements, EntitlementListParams, EntitlementListResponse, EntitlementListResponsesSinglePage, Entitlements } from "./entitlements.js";
import * as InvoicesAPI from "./invoices.js";
import { BaseInvoices, InvoiceEditParams, InvoiceEditResponse, Invoices } from "./invoices.js";
import * as MembersAPI from "./members.js";
import { BaseMembers, MemberCreateParams, MemberDeleteParams, MemberDeleteResponse, MemberGetParams, MemberListParams, MemberUpdateParams, Members, Status } from "./members.js";
import * as PayBadDebtAPI from "./pay-bad-debt.js";
import { BasePayBadDebt, PayBadDebt, PayBadDebtCreateParams, PayBadDebtCreateResponse } from "./pay-bad-debt.js";
import * as PayInvoiceAPI from "./pay-invoice.js";
import { BasePayInvoice, PayInvoice, PayInvoiceCreateParams, PayInvoiceCreateResponse } from "./pay-invoice.js";
import * as PaymentMethodsAPI from "./payment-methods.js";
import { BasePaymentMethods, PaymentMethodCreateParams, PaymentMethodCreateResponse, PaymentMethodDeleteParams, PaymentMethodDeleteResponse, PaymentMethodGetParams, PaymentMethodGetResponse, PaymentMethodListParams, PaymentMethodListResponse, PaymentMethodListResponsesV4PagePaginationArray, PaymentMethodSetAsDefaultParams, PaymentMethodSetAsDefaultResponse, PaymentMethodUpdateParams, PaymentMethodUpdateResponse, PaymentMethods } from "./payment-methods.js";
import * as ReceiptsAPI from "./receipts.js";
import { BaseReceipts, ReceiptPDFParams, Receipts } from "./receipts.js";
import * as RolesAPI from "./roles.js";
import { BaseRoles, RoleGetParams, RoleListParams, Roles } from "./roles.js";
import * as LogsAPI from "./logs/logs.js";
import { BaseLogs, Logs } from "./logs/logs.js";
import * as SpeedSettingsAPI from "./speed-settings/speed-settings.js";
import { BaseSpeedSettings, SpeedSettings } from "./speed-settings/speed-settings.js";
import * as SubscriptionsAPI from "./subscriptions/subscriptions.js";
import { BaseSubscriptions, SubscriptionCancelDowngradeParams, SubscriptionCancelDowngradeResponse, SubscriptionCreateParams, SubscriptionDeleteParams, SubscriptionDeleteResponse, SubscriptionGetByIdentifierParams, SubscriptionGetParams, SubscriptionUpdateParams, Subscriptions } from "./subscriptions/subscriptions.js";
import * as TokensAPI from "./tokens/tokens.js";
import { BaseTokens, TokenCreateParams, TokenCreateResponse, TokenDeleteParams, TokenDeleteResponse, TokenGetParams, TokenListParams, TokenUpdateParams, TokenVerifyParams, TokenVerifyResponse, Tokens } from "./tokens/tokens.js";
import { APIPromise } from "../../core/api-promise.js";
import { PagePromise, V4PagePaginationArray, type V4PagePaginationArrayParams } from "../../core/pagination.js";
import { RequestOptions } from "../../internal/request-options.js";
export declare class BaseAccounts extends APIResource {
    static readonly _key: readonly ['accounts'];
    /**
     * Create an Account. To create the Account within an Organization, provide
     * `unit.id` and omit `standalone`. To create a standalone Free Account, provide
     * `standalone: true` and omit `unit`. Providing both fields is invalid. If you
     * omit both fields, Cloudflare can determine the destination only when the User is
     * an administrator of exactly one Organization. Cloudflare creates the Account in
     * that Organization; otherwise, the request returns an error.
     *
     * @example
     * ```ts
     * const account = await client.accounts.create({
     *   name: 'name',
     * });
     * ```
     */
    create(params: AccountCreateParams, options?: RequestOptions): APIPromise<Account>;
    /**
     * Update an existing account.
     *
     * @example
     * ```ts
     * const account = await client.accounts.update({
     *   account_id: '023e105f4ecef8ad9ca31a8372d0c353',
     *   id: '023e105f4ecef8ad9ca31a8372d0c353',
     *   name: 'Demo Account',
     *   type: 'standard',
     * });
     * ```
     */
    update(params: AccountUpdateParams, options?: RequestOptions): APIPromise<Account>;
    /**
     * List all accounts you have ownership or verified access to.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const account of client.accounts.list()) {
     *   // ...
     * }
     * ```
     */
    list(query?: AccountListParams | null | undefined, options?: RequestOptions): PagePromise<AccountsV4PagePaginationArray, Account>;
    /**
     * Delete a specific account (only available for tenant admins at this time). This
     * is a permanent operation that will delete any zones or other resources under the
     * account
     *
     * @example
     * ```ts
     * const account = await client.accounts.delete({
     *   account_id: 'account_id',
     * });
     * ```
     */
    delete(params: AccountDeleteParams, options?: RequestOptions): APIPromise<AccountDeleteResponse | null>;
    /**
     * Get information about a specific account that you are a member of.
     *
     * @example
     * ```ts
     * const account = await client.accounts.get({
     *   account_id: '023e105f4ecef8ad9ca31a8372d0c353',
     * });
     * ```
     */
    get(params: AccountGetParams, options?: RequestOptions): APIPromise<Account>;
}
export declare class Accounts extends BaseAccounts {
    members: MembersAPI.Members;
    roles: RolesAPI.Roles;
    subscriptions: SubscriptionsAPI.Subscriptions;
    tokens: TokensAPI.Tokens;
    logs: LogsAPI.Logs;
    entitlements: EntitlementsAPI.Entitlements;
    speedSettings: SpeedSettingsAPI.SpeedSettings;
    paymentMethods: PaymentMethodsAPI.PaymentMethods;
    payInvoice: PayInvoiceAPI.PayInvoice;
    payBadDebt: PayBadDebtAPI.PayBadDebt;
    receipts: ReceiptsAPI.Receipts;
    invoices: InvoicesAPI.Invoices;
    clientSecret: ClientSecretAPI.ClientSecret;
}
export type AccountsV4PagePaginationArray = V4PagePaginationArray<Account>;
export interface Account {
    /**
     * Identifier
     */
    id: string;
    /**
     * Account name
     */
    name: string;
    type: 'standard' | 'enterprise';
    /**
     * Timestamp for the creation of the account
     */
    created_on?: string;
    /**
     * Parent container details
     */
    managed_by?: Account.ManagedBy;
    /**
     * Account settings
     */
    settings?: Account.Settings;
}
export declare namespace Account {
    /**
     * Parent container details
     */
    interface ManagedBy {
        /**
         * ID of the parent Organization, if one exists
         */
        parent_org_id?: string;
        /**
         * Name of the parent Organization, if one exists
         */
        parent_org_name?: string;
    }
    /**
     * Account settings
     */
    interface Settings {
        /**
         * Sets an abuse contact email to notify for abuse reports.
         */
        abuse_contact_email?: string;
        /**
         * Indicates whether membership in this account requires that Two-Factor
         * Authentication is enabled
         */
        enforce_twofactor?: boolean;
    }
}
export interface AccountDeleteResponse {
    /**
     * Identifier
     */
    id: string;
}
export interface AccountCreateParams {
    /**
     * Body param: Account name
     */
    name: string;
    /**
     * Body param: Set to `true` and omit `unit` to create a standalone Free Account.
     * If provided, this field must be `true`.
     */
    standalone?: true;
    /**
     * Body param
     */
    type?: 'standard' | 'enterprise';
    /**
     * Body param: Information related to the tenant unit. Provide its ID and omit
     * `standalone` to create the Account within an Organization. See
     * https://developers.cloudflare.com/tenant/how-to/manage-accounts/.
     */
    unit?: AccountCreateParams.Unit;
    /**
     * Header param: Optional key that identifies an Account-creation request. Free
     * Account creation can require exactly one valid key, so API clients should send a
     * key with every Account-creation request. Reuse the same key when retrying the
     * same request.
     */
    'Idempotency-Key'?: string;
}
export declare namespace AccountCreateParams {
    /**
     * Information related to the tenant unit. Provide its ID and omit `standalone` to
     * create the Account within an Organization. See
     * https://developers.cloudflare.com/tenant/how-to/manage-accounts/.
     */
    interface Unit {
        /**
         * Tenant unit ID
         */
        id?: string;
    }
}
export interface AccountUpdateParams {
    /**
     * Path param: Account identifier tag.
     */
    account_id: string;
    /**
     * Body param: Identifier
     */
    id: string;
    /**
     * Body param: Account name
     */
    name: string;
    /**
     * Body param
     */
    type: 'standard' | 'enterprise';
    /**
     * Body param: Parent container details
     */
    managed_by?: AccountUpdateParams.ManagedBy;
    /**
     * Body param: Account settings
     */
    settings?: AccountUpdateParams.Settings;
}
export declare namespace AccountUpdateParams {
    /**
     * Parent container details
     */
    interface ManagedBy {
    }
    /**
     * Account settings
     */
    interface Settings {
        /**
         * Sets an abuse contact email to notify for abuse reports.
         */
        abuse_contact_email?: string;
        /**
         * Indicates whether membership in this account requires that Two-Factor
         * Authentication is enabled
         */
        enforce_twofactor?: boolean;
    }
}
export interface AccountListParams extends V4PagePaginationArrayParams {
    /**
     * Direction to order results.
     */
    direction?: 'asc' | 'desc';
    /**
     * Name of the account.
     */
    name?: string;
}
export interface AccountDeleteParams {
    /**
     * The account ID of the account to be deleted
     */
    account_id: string;
}
export interface AccountGetParams {
    /**
     * Account identifier tag.
     */
    account_id: string;
}
export declare namespace Accounts {
    export { type Account as Account, type AccountDeleteResponse as AccountDeleteResponse, type AccountsV4PagePaginationArray as AccountsV4PagePaginationArray, type AccountCreateParams as AccountCreateParams, type AccountUpdateParams as AccountUpdateParams, type AccountListParams as AccountListParams, type AccountDeleteParams as AccountDeleteParams, type AccountGetParams as AccountGetParams, };
    export { Members as Members, BaseMembers as BaseMembers, type Status as Status, type MemberDeleteResponse as MemberDeleteResponse, type MemberCreateParams as MemberCreateParams, type MemberUpdateParams as MemberUpdateParams, type MemberListParams as MemberListParams, type MemberDeleteParams as MemberDeleteParams, type MemberGetParams as MemberGetParams, };
    export { Roles as Roles, BaseRoles as BaseRoles, type RoleListParams as RoleListParams, type RoleGetParams as RoleGetParams, };
    export { Subscriptions as Subscriptions, BaseSubscriptions as BaseSubscriptions, 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 { Tokens as Tokens, BaseTokens as BaseTokens, type TokenCreateResponse as TokenCreateResponse, type TokenDeleteResponse as TokenDeleteResponse, type TokenVerifyResponse as TokenVerifyResponse, type TokenCreateParams as TokenCreateParams, type TokenUpdateParams as TokenUpdateParams, type TokenListParams as TokenListParams, type TokenDeleteParams as TokenDeleteParams, type TokenGetParams as TokenGetParams, type TokenVerifyParams as TokenVerifyParams, };
    export { Logs as Logs, BaseLogs as BaseLogs };
    export { Entitlements as Entitlements, BaseEntitlements as BaseEntitlements, type EntitlementListResponse as EntitlementListResponse, type EntitlementListResponsesSinglePage as EntitlementListResponsesSinglePage, type EntitlementListParams as EntitlementListParams, };
    export { SpeedSettings as SpeedSettings, BaseSpeedSettings as BaseSpeedSettings };
    export { PaymentMethods as PaymentMethods, BasePaymentMethods as BasePaymentMethods, type PaymentMethodCreateResponse as PaymentMethodCreateResponse, type PaymentMethodUpdateResponse as PaymentMethodUpdateResponse, type PaymentMethodListResponse as PaymentMethodListResponse, type PaymentMethodDeleteResponse as PaymentMethodDeleteResponse, type PaymentMethodGetResponse as PaymentMethodGetResponse, type PaymentMethodSetAsDefaultResponse as PaymentMethodSetAsDefaultResponse, type PaymentMethodListResponsesV4PagePaginationArray as PaymentMethodListResponsesV4PagePaginationArray, type PaymentMethodCreateParams as PaymentMethodCreateParams, type PaymentMethodUpdateParams as PaymentMethodUpdateParams, type PaymentMethodListParams as PaymentMethodListParams, type PaymentMethodDeleteParams as PaymentMethodDeleteParams, type PaymentMethodGetParams as PaymentMethodGetParams, type PaymentMethodSetAsDefaultParams as PaymentMethodSetAsDefaultParams, };
    export { PayInvoice as PayInvoice, BasePayInvoice as BasePayInvoice, type PayInvoiceCreateResponse as PayInvoiceCreateResponse, type PayInvoiceCreateParams as PayInvoiceCreateParams, };
    export { PayBadDebt as PayBadDebt, BasePayBadDebt as BasePayBadDebt, type PayBadDebtCreateResponse as PayBadDebtCreateResponse, type PayBadDebtCreateParams as PayBadDebtCreateParams, };
    export { Receipts as Receipts, BaseReceipts as BaseReceipts, type ReceiptPDFParams as ReceiptPDFParams };
    export { Invoices as Invoices, BaseInvoices as BaseInvoices, type InvoiceEditResponse as InvoiceEditResponse, type InvoiceEditParams as InvoiceEditParams, };
    export { ClientSecret as ClientSecret, BaseClientSecret as BaseClientSecret, type ClientSecretCreateResponse as ClientSecretCreateResponse, type ClientSecretCreateParams as ClientSecretCreateParams, };
}
//# sourceMappingURL=accounts.d.ts.map