import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js";
import { type NormalizedClientOptionsWithAuth } from "../../../../BaseClient.js";
import * as core from "../../../../core/index.js";
import * as Brevo from "../../../index.js";
export declare namespace CustomObjectsClient {
    type Options = BaseClientOptions;
    interface RequestOptions extends BaseRequestOptions {
    }
}
export declare class CustomObjectsClient {
    protected readonly _options: NormalizedClientOptionsWithAuth<CustomObjectsClient.Options>;
    constructor(options: CustomObjectsClient.Options);
    /**
     * <Note title="Enterprise access only">Custom objects are only available to Enterprise plans.
     * This feature is in beta. These are subject to change.</Note>
     * Performs bulk create or update (upsert) operations for object records in a single asynchronous request. This endpoint is optimized for high-volume data imports and synchronization scenarios.
     *
     * **How Upsert Works:**
     * - **Create**: Omit `identifiers`, or provide only `ext_id` (if it doesn't already exist). A new record is created with a Brevo-generated `id`.
     * - **Update**: Provide `id` (Brevo internal ID) or an `ext_id` that already exists. The matching record is updated with the new attribute values.
     * - **Important:** `id` is for **updates only**. Providing an `id` that does not belong to an existing record will fail during async processing (the HTTP response will still be 202, but the record will be rejected in the background). To create a new record with a stable external reference, use `ext_id` instead.
     *
     * **Request Structure:**
     * Each object record in the `records` array can include:
     * - `identifiers`: Either `id` (internal Brevo ID) or `ext_id` (your external system ID) — required for updates. **Note:** use `id` (singular), not `ids`.
     * - `attributes`: Key-value pairs where each key is the attribute **key** (e.g., `company_name`), not the attribute label (e.g., "Company Name").
     * - `associations`: Controls linking and unlinking of associated records (optional). Each entry specifies:
     *     - `object_type`: The type of the associated object
     *     - `action`: `link` (default) to create the association, or `unlink` to remove it
     *     - `records`: The associated records to link or unlink (each identified by `ext_id` or `id`)
     *     - **Unlink is idempotent** — unlinking a non-existing association is a no-op (no error returned)
     *     - `link` and `unlink` actions can be submitted for the same `object_type` in a single record entry
     *     - Both associated records must already exist before a link can be created
     *
     * > **Common mistake:** Passing the attribute **label** (the display name you see in the UI) instead of the attribute **key** will cause the attribute to be silently ignored and the record may not be created as expected.
     *
     * **Asynchronous Processing:**
     * - Returns immediately with a `processId` (HTTP 202 Accepted)
     * - Use the processId to track status via the Get process API
     *
     * **API and Schema Limitations:**
     * - Max 1000 object records per request
     * - Max request body size: 1 MB
     * - Max 500 attributes per object record (matches the schema limit of 500 attributes per object)
     * - Unknown attribute keys are silently ignored (no error, no attribute creation)
     * - Max 10 association records per associated object-type in each record of the request. If you need more, send multiple requests.
     *
     * **Important Behaviors:**
     * - The object schema must be created before upserting records
     * - Unknown attribute keys are silently ignored (no error, no creation)
     * - Both associated object records must already exist before creating a link association
     * - Unlink operations are idempotent: attempting to unlink a non-existing association returns success
     * - `link` and `unlink` actions can be submitted for the same `object_type` in a single record entry
     * - Contact objects cannot be created via this endpoint
     * - For `category` and `multiple_category` attributes, pass the option **key** as the value (not the option label or option ID).
     * - The `id` identifier (internal Brevo ID) can only be used for **updating** existing records. To create new records, either omit identifiers (Brevo auto-generates an ID) or provide an `ext_id`.
     *
     * **Errors:**
     * - Make sure both object records exist before associating them, else the API will return an error.
     * - This route does not create objects. The object where the object records are upserted by this API must be created already else the API will return an error "invalid object type".
     *
     * @param {Brevo.UpsertrecordsRequest} request
     * @param {CustomObjectsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Brevo.BadRequestError}
     * @throws {@link Brevo.ForbiddenError}
     * @throws {@link Brevo.NotFoundError}
     * @throws {@link Brevo.InternalServerError}
     * @throws {@link errors.BrevoError}
     * @throws {@link errors.BrevoTimeoutError}
     *
     * @example
     *     await client.customObjects.upsertrecords({
     *         object_type: "vehicle",
     *         records: [{
     *                 associations: [{
     *                         object_type: "garage",
     *                         action: "link",
     *                         records: [{
     *                                 identifiers: {
     *                                     id: 435435
     *                                 }
     *                             }]
     *                     }, {
     *                         object_type: "garage",
     *                         action: "unlink",
     *                         records: [{
     *                                 identifiers: {
     *                                     ext_id: "old-garage-001"
     *                                 }
     *                             }]
     *                     }],
     *                 attributes: {
     *                     "make": "Toyota",
     *                     "model": "Camry",
     *                     "year": 2020,
     *                     "engine_type": "hybrid"
     *                 },
     *                 identifiers: {
     *                     ext_id: "VIN123"
     *                 }
     *             }]
     *     })
     *
     * @example
     *     await client.customObjects.upsertrecords({
     *         object_type: "vehicle",
     *         records: [{
     *                 attributes: {
     *                     "make": "Honda",
     *                     "model": "Civic",
     *                     "year": 2023,
     *                     "engine_type": "petrol"
     *                 }
     *             }]
     *     })
     *
     * @example
     *     await client.customObjects.upsertrecords({
     *         object_type: "vehicle",
     *         records: [{
     *                 attributes: {
     *                     "color": "red",
     *                     "engine_type": "diesel"
     *                 },
     *                 identifiers: {
     *                     id: 42
     *                 }
     *             }]
     *     })
     */
    upsertrecords(request: Brevo.UpsertrecordsRequest, requestOptions?: CustomObjectsClient.RequestOptions): core.HttpResponsePromise<Brevo.UpsertrecordsResponse>;
    private __upsertrecords;
    /**
     * <Note title="Enterprise access only">Custom objects are only available to Enterprise plans.
     * This feature is in beta. These are subject to change.</Note>
     * This API retrieves a list of object records along with their associated records and provides the total count of records for the specified object. **Note**: Contact as object type is not supported in this endpoint.
     *
     * @param {Brevo.GetrecordsRequest} request
     * @param {CustomObjectsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Brevo.BadRequestError}
     * @throws {@link Brevo.ForbiddenError}
     * @throws {@link Brevo.FailedDependencyError}
     * @throws {@link Brevo.InternalServerError}
     * @throws {@link errors.BrevoError}
     * @throws {@link errors.BrevoTimeoutError}
     *
     * @example
     *     await client.customObjects.getrecords({
     *         object_type: "vehicle",
     *         limit: 1000000,
     *         page_num: 1000000
     *     })
     */
    getrecords(request: Brevo.GetrecordsRequest, requestOptions?: CustomObjectsClient.RequestOptions): core.HttpResponsePromise<Brevo.GetrecordsResponse>;
    private __getrecords;
    /**
     * Use this endpoint to delete multiple object records of the same object-type in one request.
     * The request is accepted and processed asynchronously. You can track the status of the deletion process using the returned **processId**.
     * **Limitations:** - Each request can contain up to **1000** object record identifiers - Either `ids` or `ext_ids` must be provided, but **not both** in the same request - Deletion of Brevo standard object records is not supported via this endpoint - If more records must be deleted, send multiple batch requests
     *
     * @param {Brevo.BatchDeleteObjectRecordsRequest} request
     * @param {CustomObjectsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Brevo.BadRequestError}
     * @throws {@link Brevo.ForbiddenError}
     * @throws {@link Brevo.InternalServerError}
     * @throws {@link errors.BrevoError}
     * @throws {@link errors.BrevoTimeoutError}
     *
     * @example
     *     await client.customObjects.batchDeleteObjectRecords({
     *         object_type: "vehicle",
     *         identifiers: {
     *             ext_ids: ["ext-001", "ext-002"]
     *         }
     *     })
     */
    batchDeleteObjectRecords(request: Brevo.BatchDeleteObjectRecordsRequest, requestOptions?: CustomObjectsClient.RequestOptions): core.HttpResponsePromise<Brevo.BatchDeleteObjectRecordsResponse>;
    private __batchDeleteObjectRecords;
    /**
     * <Note title="Enterprise access only">Custom objects are only available to Enterprise plans.
     * This feature is in beta. These are subject to change.</Note>
     * Returns the records associated with a single source record. Associations of every type are returned together in one paginated list, ordered by association creation time with the most recently created association first.
     *
     * **Identifying the source record**
     * Provide exactly one of `id`, `ext_id`, `email` or `sms`. Passing none of them, or more than one, returns `400`. `email` and `sms` are only accepted when `object_type` is `contact`; using either with any other object type returns `400`.
     *
     * **Object types**
     * Use the object type exactly as it is defined in your account, for example `vehicle` for a custom object of that name, or `contact` for contacts. An object type that does not exist in your account returns `400`.
     *
     * **Filtering by associated object type**
     * Use `type` to restrict the response to one or more associated object types, for example `?type=contact&type=garage`. Up to 5 types can be requested per call; more returns `400`. When `type` is omitted, associations of every type are returned.
     *
     * **Pagination**
     * Results are returned 20 per page. The page size is fixed and cannot be changed. Increase `offset` by 20 to walk through the pages until `has_more` is `false`. An `offset` beyond the last record returns an empty `items` array with `has_more` set to `false`.
     *
     * **Working with contacts**
     * - `contact` is supported both as the source `object_type` and as an associated object type.
     * - An `id`, `ext_id`, `email` or `sms` that matches no contact returns `404`.
     * - If several contacts share the same `ext_id`, `email` or `sms`, identify the contact by `id` to be sure of which one is used.
     * - Contacts returned in `items` carry all of the contact's attributes, with attribute keys in lowercase — `email`, `first_name`, `last_name`, `sms`, `ext_id`, and any other contact attribute lowercased.
     * - For contacts, `ext_id`, `created_at` and `updated_at` are not returned on `object`. A contact's external ID is available as `attributes.ext_id` when it is set.
     *
     * @param {Brevo.GetAssociatedRecordsRequest} request
     * @param {CustomObjectsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Brevo.BadRequestError}
     * @throws {@link Brevo.NotFoundError}
     * @throws {@link Brevo.InternalServerError}
     * @throws {@link errors.BrevoError}
     * @throws {@link errors.BrevoTimeoutError}
     *
     * @example
     *     await client.customObjects.getAssociatedRecords({
     *         object_type: "vehicle",
     *         id: 16789,
     *         ext_id: "507f1f77bc",
     *         email: "jane.doe@example.com",
     *         sms: "33612345678",
     *         offset: 0
     *     })
     */
    getAssociatedRecords(request: Brevo.GetAssociatedRecordsRequest, requestOptions?: CustomObjectsClient.RequestOptions): core.HttpResponsePromise<Brevo.GetAssociatedRecordsResponse>;
    private __getAssociatedRecords;
}
