import { AxiosResponse } from "axios";
import { BulkEditDocumentsResult, BulkEditParameters, Correspondent, CustomField, Document, DocumentsResponse, DocumentType, GetCorrespondentsResponse, GetCustomFieldsResponse, GetDocumentTypesResponse, GetMailAccountsResponse, GetMailRulesResponse, MailAccount, MailRule, GetTagsResponse, Note, Tag } from "./types";
export declare class PaperlessAPI {
    private readonly baseUrl;
    private readonly token;
    private readonly apiVersion;
    constructor(baseUrl: string, token: string);
    request<T = any>(path: string, options?: RequestInit): Promise<T>;
    bulkEditDocuments(documents: number[], method: string, parameters?: BulkEditParameters): Promise<BulkEditDocumentsResult>;
    postDocument(document: Buffer, filename: string, metadata?: Record<string, string | string[] | number | number[]>): Promise<string>;
    getDocuments(query?: string): Promise<DocumentsResponse>;
    getDocument(id: number): Promise<Document>;
    updateDocument(id: number, data: Partial<Document>): Promise<Document>;
    downloadDocument(id: number, asOriginal?: boolean): Promise<AxiosResponse<ArrayBuffer>>;
    getThumbnail(id: number): Promise<AxiosResponse<ArrayBuffer>>;
    /**
     * Retrieve all notes attached to a document.
     * @param documentId - The document ID.
     * @returns The document's notes.
     */
    getDocumentNotes(documentId: number): Promise<Note[]>;
    /**
     * Create a note on a document.
     * @param documentId - The document ID.
     * @param note - The note text to add.
     * @returns The document's full notes list after creation.
     */
    createDocumentNote(documentId: number, note: string): Promise<Note[]>;
    /**
     * Delete a note from a document by its note ID.
     * @param documentId - The document ID.
     * @param noteId - The ID of the note to delete.
     * @returns The document's remaining notes after deletion.
     */
    deleteDocumentNote(documentId: number, noteId: number): Promise<Note[]>;
    getTags(): Promise<GetTagsResponse>;
    createTag(data: Partial<Tag>): Promise<Tag>;
    updateTag(id: number, data: Partial<Tag>): Promise<Tag>;
    deleteTag(id: number): Promise<void>;
    getCorrespondents(queryString?: string): Promise<GetCorrespondentsResponse>;
    getCorrespondent(id: number): Promise<Correspondent>;
    createCorrespondent(data: Partial<Correspondent>): Promise<Correspondent>;
    updateCorrespondent(id: number, data: Partial<Correspondent>): Promise<Correspondent>;
    deleteCorrespondent(id: number): Promise<void>;
    getDocumentTypes(): Promise<GetDocumentTypesResponse>;
    createDocumentType(data: Partial<DocumentType>): Promise<DocumentType>;
    updateDocumentType(id: number, data: Partial<DocumentType>): Promise<DocumentType>;
    deleteDocumentType(id: number): Promise<void>;
    getMailAccounts(queryString?: string): Promise<GetMailAccountsResponse>;
    getMailAccount(id: number): Promise<MailAccount>;
    processMailAccount(id: number): Promise<void>;
    getMailRules(queryString?: string): Promise<GetMailRulesResponse>;
    getMailRule(id: number): Promise<MailRule>;
    createMailRule(data: Partial<MailRule>): Promise<MailRule>;
    updateMailRule(id: number, data: Partial<MailRule>): Promise<MailRule>;
    deleteMailRule(id: number): Promise<void>;
    getCustomFields(): Promise<GetCustomFieldsResponse>;
    getCustomField(id: number): Promise<CustomField>;
    createCustomField(data: Partial<CustomField>): Promise<CustomField>;
    updateCustomField(id: number, data: Partial<CustomField>): Promise<CustomField>;
    deleteCustomField(id: number): Promise<void>;
    bulkEditObjects(objects: any, objectType: any, operation: any, parameters?: {}): Promise<any>;
}
