import { APIResource } from "../../../../core/resource.js";
import { APIPromise } from "../../../../core/api-promise.js";
import { ConversationCursorPage, type ConversationCursorPageParams, PagePromise } from "../../../../core/pagination.js";
import { RequestOptions } from "../../../../internal/request-options.js";
export declare class APIKeys extends APIResource {
    /**
     * Retrieves an API key in the project.
     *
     * @example
     * ```ts
     * const projectAPIKey =
     *   await client.admin.organization.projects.apiKeys.retrieve(
     *     'api_key_id',
     *     { project_id: 'project_id' },
     *   );
     * ```
     */
    retrieve(apiKeyID: string, params: APIKeyRetrieveParams, options?: RequestOptions): APIPromise<ProjectAPIKey>;
    /**
     * Returns a list of API keys in the project.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const projectAPIKey of client.admin.organization.projects.apiKeys.list(
     *   'project_id',
     * )) {
     *   // ...
     * }
     * ```
     */
    list(projectID: string, query?: APIKeyListParams | null | undefined, options?: RequestOptions): PagePromise<ProjectAPIKeysPage, ProjectAPIKey>;
    /**
     * Deletes an API key from the project.
     *
     * Returns confirmation of the key deletion, or an error if the key belonged to a
     * service account.
     *
     * @example
     * ```ts
     * const apiKey =
     *   await client.admin.organization.projects.apiKeys.delete(
     *     'api_key_id',
     *     { project_id: 'project_id' },
     *   );
     * ```
     */
    delete(apiKeyID: string, params: APIKeyDeleteParams, options?: RequestOptions): APIPromise<APIKeyDeleteResponse>;
}
export type ProjectAPIKeysPage = ConversationCursorPage<ProjectAPIKey>;
/**
 * Represents an individual API key in a project.
 */
export interface ProjectAPIKey {
    /**
     * The identifier, which can be referenced in API endpoints
     */
    id: string;
    /**
     * The Unix timestamp (in seconds) of when the API key was created
     */
    created_at: number;
    /**
     * The Unix timestamp (in seconds) of when the API key was last used.
     */
    last_used_at: number | null;
    /**
     * The name of the API key
     */
    name: string;
    /**
     * The object type, which is always `organization.project.api_key`
     */
    object: 'organization.project.api_key';
    owner: ProjectAPIKey.Owner;
    /**
     * The redacted value of the API key
     */
    redacted_value: string;
}
export declare namespace ProjectAPIKey {
    interface Owner {
        /**
         * The service account that owns a project API key.
         */
        service_account?: Owner.ServiceAccount;
        /**
         * `user` or `service_account`
         */
        type?: 'user' | 'service_account';
        /**
         * The user that owns a project API key.
         */
        user?: Owner.User;
    }
    namespace Owner {
        /**
         * The service account that owns a project API key.
         */
        interface ServiceAccount {
            /**
             * The identifier, which can be referenced in API endpoints
             */
            id: string;
            /**
             * The Unix timestamp (in seconds) of when the service account was created.
             */
            created_at: number;
            /**
             * The name of the service account.
             */
            name: string;
            /**
             * The service account's project role.
             */
            role: string;
        }
        /**
         * The user that owns a project API key.
         */
        interface User {
            /**
             * The identifier, which can be referenced in API endpoints
             */
            id: string;
            /**
             * The Unix timestamp (in seconds) of when the user was created.
             */
            created_at: number;
            /**
             * The email address of the user.
             */
            email: string;
            /**
             * The name of the user.
             */
            name: string;
            /**
             * The user's project role.
             */
            role: string;
        }
    }
}
export interface APIKeyDeleteResponse {
    id: string;
    deleted: boolean;
    object: 'organization.project.api_key.deleted';
}
export interface APIKeyRetrieveParams {
    /**
     * The ID of the project.
     */
    project_id: string;
}
export interface APIKeyListParams extends ConversationCursorPageParams {
}
export interface APIKeyDeleteParams {
    /**
     * The ID of the project.
     */
    project_id: string;
}
export declare namespace APIKeys {
    export { type ProjectAPIKey as ProjectAPIKey, type APIKeyDeleteResponse as APIKeyDeleteResponse, type ProjectAPIKeysPage as ProjectAPIKeysPage, type APIKeyRetrieveParams as APIKeyRetrieveParams, type APIKeyListParams as APIKeyListParams, type APIKeyDeleteParams as APIKeyDeleteParams, };
}
//# sourceMappingURL=api-keys.d.ts.map