import * as z from "zod/v3";
import { ClosedEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
/**
 * Filter contacts by tags. Can be provided as JSON object {"tags": ["premium", "beta-user"]} or as query format "tags=premium,beta-user"
 */
export type QueryParamFilterBy = {
    tags?: Array<string> | undefined;
};
export type ListContactsRequest = {
    /**
     * A limit on the number of objects to be returned. Limit can range between 1 and 50, and the default is 10
     */
    limit?: number | undefined;
    /**
     * A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 20 objects, ending with `01JJ1HDHN79XAS7A01WB3HYSDB`, your subsequent call can include `after=01JJ1HDHN79XAS7A01WB3HYSDB` in order to fetch the next page of the list.
     */
    startingAfter?: string | undefined;
    /**
     * A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 20 objects, starting with `01JJ1HDHN79XAS7A01WB3HYSDB`, your subsequent call can include `before=01JJ1HDHN79XAS7A01WB3HYSDB` in order to fetch the previous page of the list.
     */
    endingBefore?: string | undefined;
    /**
     * Filter contacts by tags. Can be provided as JSON object {"tags": ["premium", "beta-user"]} or as query format "tags=premium,beta-user"
     */
    filterBy?: QueryParamFilterBy | undefined;
    /**
     * Include usage metrics of the last 30 days for each contact.
     */
    includeMetrics?: boolean | null | undefined;
};
export declare const ObjectT: {
    readonly List: "list";
};
export type ObjectT = ClosedEnum<typeof ObjectT>;
export type ListContactsMetrics = {
    /**
     * Total cost in dollars of the last 30 days
     */
    totalCost: number;
    /**
     * Total tokens of the last 30 days
     */
    totalTokens: number;
    /**
     * Total requests of the last 30 days
     */
    totalRequests: number;
    /**
     * P50 error rate of the last 30 days
     */
    errorRate: number;
};
export type Data = {
    /**
     * Unique ULID (Universally Unique Lexicographically Sortable Identifier) for the contact
     */
    id: string;
    /**
     * Unique string value to identify the contact user in the customer's system. This should be the same ID you use in your system to reference this user.
     */
    externalId: string;
    /**
     * Display name or nickname of the contact user. This is typically shown in user interfaces.
     */
    displayName?: string | null | undefined;
    /**
     * Email address of the contact user
     */
    email?: string | null | undefined;
    /**
     * URL linking to the contact user's avatar image
     */
    avatarUrl?: string | null | undefined;
    /**
     * Array of tags associated with the contact. Useful for organizing and filtering contacts by categories, departments, or custom classifications.
     */
    tags?: Array<string> | undefined;
    /**
     * Additional custom metadata associated with the contact as key-value pairs. Use this to store any extra information specific to your application.
     */
    metadata?: {
        [k: string]: any;
    } | undefined;
    /**
     * The date and time the resource was created
     */
    created?: Date | undefined;
    /**
     * The date and time the resource was last updated
     */
    updated?: Date | undefined;
    metrics: ListContactsMetrics;
};
/**
 * List of contacts
 */
export type ListContactsResponseBody = {
    object: ObjectT;
    data: Array<Data>;
    hasMore: boolean;
};
/** @internal */
export declare const QueryParamFilterBy$inboundSchema: z.ZodType<QueryParamFilterBy, z.ZodTypeDef, unknown>;
/** @internal */
export type QueryParamFilterBy$Outbound = {
    tags?: Array<string> | undefined;
};
/** @internal */
export declare const QueryParamFilterBy$outboundSchema: z.ZodType<QueryParamFilterBy$Outbound, z.ZodTypeDef, QueryParamFilterBy>;
export declare function queryParamFilterByToJSON(queryParamFilterBy: QueryParamFilterBy): string;
export declare function queryParamFilterByFromJSON(jsonString: string): SafeParseResult<QueryParamFilterBy, SDKValidationError>;
/** @internal */
export declare const ListContactsRequest$inboundSchema: z.ZodType<ListContactsRequest, z.ZodTypeDef, unknown>;
/** @internal */
export type ListContactsRequest$Outbound = {
    limit: number;
    starting_after?: string | undefined;
    ending_before?: string | undefined;
    filter_by?: QueryParamFilterBy$Outbound | undefined;
    include_metrics: boolean | null;
};
/** @internal */
export declare const ListContactsRequest$outboundSchema: z.ZodType<ListContactsRequest$Outbound, z.ZodTypeDef, ListContactsRequest>;
export declare function listContactsRequestToJSON(listContactsRequest: ListContactsRequest): string;
export declare function listContactsRequestFromJSON(jsonString: string): SafeParseResult<ListContactsRequest, SDKValidationError>;
/** @internal */
export declare const ObjectT$inboundSchema: z.ZodNativeEnum<typeof ObjectT>;
/** @internal */
export declare const ObjectT$outboundSchema: z.ZodNativeEnum<typeof ObjectT>;
/** @internal */
export declare const ListContactsMetrics$inboundSchema: z.ZodType<ListContactsMetrics, z.ZodTypeDef, unknown>;
/** @internal */
export type ListContactsMetrics$Outbound = {
    total_cost: number;
    total_tokens: number;
    total_requests: number;
    error_rate: number;
};
/** @internal */
export declare const ListContactsMetrics$outboundSchema: z.ZodType<ListContactsMetrics$Outbound, z.ZodTypeDef, ListContactsMetrics>;
export declare function listContactsMetricsToJSON(listContactsMetrics: ListContactsMetrics): string;
export declare function listContactsMetricsFromJSON(jsonString: string): SafeParseResult<ListContactsMetrics, SDKValidationError>;
/** @internal */
export declare const Data$inboundSchema: z.ZodType<Data, z.ZodTypeDef, unknown>;
/** @internal */
export type Data$Outbound = {
    _id: string;
    external_id: string;
    display_name?: string | null | undefined;
    email?: string | null | undefined;
    avatar_url?: string | null | undefined;
    tags?: Array<string> | undefined;
    metadata?: {
        [k: string]: any;
    } | undefined;
    created?: string | undefined;
    updated: string;
    metrics: ListContactsMetrics$Outbound;
};
/** @internal */
export declare const Data$outboundSchema: z.ZodType<Data$Outbound, z.ZodTypeDef, Data>;
export declare function dataToJSON(data: Data): string;
export declare function dataFromJSON(jsonString: string): SafeParseResult<Data, SDKValidationError>;
/** @internal */
export declare const ListContactsResponseBody$inboundSchema: z.ZodType<ListContactsResponseBody, z.ZodTypeDef, unknown>;
/** @internal */
export type ListContactsResponseBody$Outbound = {
    object: string;
    data: Array<Data$Outbound>;
    has_more: boolean;
};
/** @internal */
export declare const ListContactsResponseBody$outboundSchema: z.ZodType<ListContactsResponseBody$Outbound, z.ZodTypeDef, ListContactsResponseBody>;
export declare function listContactsResponseBodyToJSON(listContactsResponseBody: ListContactsResponseBody): string;
export declare function listContactsResponseBodyFromJSON(jsonString: string): SafeParseResult<ListContactsResponseBody, SDKValidationError>;
//# sourceMappingURL=listcontacts.d.ts.map