> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.brevo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server.

# Create/Update object records in bulk

POST https://api.brevo.com/v3/objects/{object_type}/batch/upsert
Content-Type: application/json

Custom objects are only available to Enterprise plans.
This feature is in beta. These are subject to change.
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".

Reference: https://developers.brevo.com/reference/custom-objects/upsertrecords

## Authentication

- `api-key` header (required) — The API key should be passed in the request headers as `api-key` for authentication.

## Request

### Path parameters

- `object_type` (string, required) — Object type for the records to upsert. Must be a previously created custom object type. Only lowercase alphanumeric characters and underscores are allowed (max 32 characters).

### Body (application/json)

This endpoint expects an object.

- `records` (list of any, required) — List of object records to be upsert. Each record can have attributes, identifiers, and associations.

## Response

### 202

Batch request accepted for processing of upsert object records.

- `message` (string, optional)
- `processId` (long, optional) — Unique Id for the batch process used to track the status of the batch. **How to use this processId:** Refer to the [Get process status API](https://developers.brevo.com/reference/get-process) to check the execution status of this batch using the returned `processId`.

## Errors

### 400 Bad Request Error

Bad request (e.g., invalid organization ID, invalid object_type, records cannot be empty or more than 1000)

- `any`

### 403 Forbidden Error

Custom objects are not available on this account, or upsert of Brevo standard object records is not supported via this endpoint.

- `any`

### 404 Not Found Error

Object not found for the provided organization or object type

- `any`

### 500 Internal Server Error

Internal server error

- `any`

## Examples

### Create with ext_id, link association, and unlink another

**Request**

```json
{
  "records": [
    {
      "associations": [
        {
          "action": "link",
          "object_type": "garage",
          "records": [
            {
              "identifiers": {
                "id": 435435
              }
            }
          ]
        },
        {
          "action": "unlink",
          "object_type": "garage",
          "records": [
            {
              "identifiers": {
                "ext_id": "old-garage-001"
              }
            }
          ]
        }
      ],
      "attributes": {
        "engine_type": "hybrid",
        "make": "Toyota",
        "model": "Camry",
        "year": 2020
      },
      "identifiers": {
        "ext_id": "VIN123"
      }
    }
  ]
}
```

**Response**

```json
{
  "message": "Batch object records are being processed",
  "processId": 21
}
```

**SDK Code**

```typescript Create with ext_id, link association, and unlink another
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.customObjects.upsertrecords({
        objectType: "vehicle",
        records: [
            {
                associations: [
                    {
                        objectType: "garage",
                        action: "link",
                        records: [
                            {
                                identifiers: {
                                    id: 435435,
                                },
                            },
                        ],
                    },
                    {
                        objectType: "garage",
                        action: "unlink",
                        records: [
                            {
                                identifiers: {
                                    extId: "old-garage-001",
                                },
                            },
                        ],
                    },
                ],
                attributes: {
                    engine_type: "hybrid",
                    make: "Toyota",
                    model: "Camry",
                    year: 2020,
                },
                identifiers: {
                    extId: "VIN123",
                },
            },
        ],
    });
}
main();

```

```python Create with ext_id, link association, and unlink another
from brevo import Brevo
from brevo.custom_objects import UpsertrecordsRequestRecordsItem, UpsertrecordsRequestRecordsItemAssociationsItem, UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem, UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers, UpsertrecordsRequestRecordsItemIdentifiers

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.custom_objects.upsertrecords(
    object_type="vehicle",
    records=[
        UpsertrecordsRequestRecordsItem(
            associations=[
                UpsertrecordsRequestRecordsItemAssociationsItem(
                    object_type="garage",
                    action="link",
                    records=[
                        UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem(
                            identifiers=UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers(
                                id=435435,
                            ),
                        )
                    ],
                ),
                UpsertrecordsRequestRecordsItemAssociationsItem(
                    object_type="garage",
                    action="unlink",
                    records=[
                        UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem(
                            identifiers=UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers(
                                ext_id="old-garage-001",
                            ),
                        )
                    ],
                )
            ],
            attributes={
                "engine_type": "hybrid",
                "make": "Toyota",
                "model": "Camry",
                "year": 2020
            },
            identifiers=UpsertrecordsRequestRecordsItemIdentifiers(
                ext_id="VIN123",
            ),
        )
    ],
)

```

```php Create with ext_id, link association, and unlink another
<?php

namespace Example;

use Brevo\Brevo;
use Brevo\CustomObjects\Requests\UpsertrecordsRequest;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItem;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemAssociationsItem;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemAssociationsItemAction;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemIdentifiers;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->customObjects->upsertrecords(
    'vehicle',
    new UpsertrecordsRequest([
        'records' => [
            new UpsertrecordsRequestRecordsItem([
                'associations' => [
                    new UpsertrecordsRequestRecordsItemAssociationsItem([
                        'objectType' => 'garage',
                        'action' => UpsertrecordsRequestRecordsItemAssociationsItemAction::Link->value,
                        'records' => [
                            new UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem([
                                'identifiers' => new UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers([
                                    'id' => 435435,
                                ]),
                            ]),
                        ],
                    ]),
                    new UpsertrecordsRequestRecordsItemAssociationsItem([
                        'objectType' => 'garage',
                        'action' => UpsertrecordsRequestRecordsItemAssociationsItemAction::Unlink->value,
                        'records' => [
                            new UpsertrecordsRequestRecordsItemAssociationsItemRecordsItem([
                                'identifiers' => new UpsertrecordsRequestRecordsItemAssociationsItemRecordsItemIdentifiers([
                                    'extId' => 'old-garage-001',
                                ]),
                            ]),
                        ],
                    ]),
                ],
                'attributes' => [
                    'engine_type' => "hybrid",
                    'make' => "Toyota",
                    'model' => "Camry",
                    'year' => 2020,
                ],
                'identifiers' => new UpsertrecordsRequestRecordsItemIdentifiers([
                    'extId' => 'VIN123',
                ]),
            ]),
        ],
    ]),
);

```

```go Create with ext_id, link association, and unlink another
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.brevo.com/v3/objects/vehicle/batch/upsert"

	payload := strings.NewReader("{\n  \"records\": [\n    {\n      \"associations\": [\n        {\n          \"action\": \"link\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"id\": 435435\n              }\n            }\n          ]\n        },\n        {\n          \"action\": \"unlink\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"ext_id\": \"old-garage-001\"\n              }\n            }\n          ]\n        }\n      ],\n      \"attributes\": {\n        \"engine_type\": \"hybrid\",\n        \"make\": \"Toyota\",\n        \"model\": \"Camry\",\n        \"year\": 2020\n      },\n      \"identifiers\": {\n        \"ext_id\": \"VIN123\"\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Create with ext_id, link association, and unlink another
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/objects/vehicle/batch/upsert")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"records\": [\n    {\n      \"associations\": [\n        {\n          \"action\": \"link\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"id\": 435435\n              }\n            }\n          ]\n        },\n        {\n          \"action\": \"unlink\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"ext_id\": \"old-garage-001\"\n              }\n            }\n          ]\n        }\n      ],\n      \"attributes\": {\n        \"engine_type\": \"hybrid\",\n        \"make\": \"Toyota\",\n        \"model\": \"Camry\",\n        \"year\": 2020\n      },\n      \"identifiers\": {\n        \"ext_id\": \"VIN123\"\n      }\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Create with ext_id, link association, and unlink another
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.brevo.com/v3/objects/vehicle/batch/upsert")
  .header("api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"records\": [\n    {\n      \"associations\": [\n        {\n          \"action\": \"link\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"id\": 435435\n              }\n            }\n          ]\n        },\n        {\n          \"action\": \"unlink\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"ext_id\": \"old-garage-001\"\n              }\n            }\n          ]\n        }\n      ],\n      \"attributes\": {\n        \"engine_type\": \"hybrid\",\n        \"make\": \"Toyota\",\n        \"model\": \"Camry\",\n        \"year\": 2020\n      },\n      \"identifiers\": {\n        \"ext_id\": \"VIN123\"\n      }\n    }\n  ]\n}")
  .asString();
```

```csharp Create with ext_id, link association, and unlink another
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/objects/vehicle/batch/upsert");
var request = new RestRequest(Method.POST);
request.AddHeader("api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"records\": [\n    {\n      \"associations\": [\n        {\n          \"action\": \"link\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"id\": 435435\n              }\n            }\n          ]\n        },\n        {\n          \"action\": \"unlink\",\n          \"object_type\": \"garage\",\n          \"records\": [\n            {\n              \"identifiers\": {\n                \"ext_id\": \"old-garage-001\"\n              }\n            }\n          ]\n        }\n      ],\n      \"attributes\": {\n        \"engine_type\": \"hybrid\",\n        \"make\": \"Toyota\",\n        \"model\": \"Camry\",\n        \"year\": 2020\n      },\n      \"identifiers\": {\n        \"ext_id\": \"VIN123\"\n      }\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Create with ext_id, link association, and unlink another
import Foundation

let headers = [
  "api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = ["records": [
    [
      "associations": [
        [
          "action": "link",
          "object_type": "garage",
          "records": [["identifiers": ["id": 435435]]]
        ],
        [
          "action": "unlink",
          "object_type": "garage",
          "records": [["identifiers": ["ext_id": "old-garage-001"]]]
        ]
      ],
      "attributes": [
        "engine_type": "hybrid",
        "make": "Toyota",
        "model": "Camry",
        "year": 2020
      ],
      "identifiers": ["ext_id": "VIN123"]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/objects/vehicle/batch/upsert")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Create without identifiers (Brevo auto-generates id)

**Request**

```json
{
  "records": [
    {
      "attributes": {
        "engine_type": "petrol",
        "make": "Honda",
        "model": "Civic",
        "year": 2023
      }
    }
  ]
}
```

**Response**

```json
{
  "message": "Batch object records are being processed",
  "processId": 21
}
```

**SDK Code**

```typescript Create without identifiers (Brevo auto-generates id)
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.customObjects.upsertrecords({
        objectType: "vehicle",
        records: [
            {
                attributes: {
                    engine_type: "petrol",
                    make: "Honda",
                    model: "Civic",
                    year: 2023,
                },
            },
        ],
    });
}
main();

```

```python Create without identifiers (Brevo auto-generates id)
from brevo import Brevo
from brevo.custom_objects import UpsertrecordsRequestRecordsItem

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.custom_objects.upsertrecords(
    object_type="vehicle",
    records=[
        UpsertrecordsRequestRecordsItem(
            attributes={
                "engine_type": "petrol",
                "make": "Honda",
                "model": "Civic",
                "year": 2023
            },
        )
    ],
)

```

```php Create without identifiers (Brevo auto-generates id)
<?php

namespace Example;

use Brevo\Brevo;
use Brevo\CustomObjects\Requests\UpsertrecordsRequest;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItem;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->customObjects->upsertrecords(
    'vehicle',
    new UpsertrecordsRequest([
        'records' => [
            new UpsertrecordsRequestRecordsItem([
                'attributes' => [
                    'engine_type' => "petrol",
                    'make' => "Honda",
                    'model' => "Civic",
                    'year' => 2023,
                ],
            ]),
        ],
    ]),
);

```

```go Create without identifiers (Brevo auto-generates id)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.brevo.com/v3/objects/vehicle/batch/upsert"

	payload := strings.NewReader("{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"engine_type\": \"petrol\",\n        \"make\": \"Honda\",\n        \"model\": \"Civic\",\n        \"year\": 2023\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Create without identifiers (Brevo auto-generates id)
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/objects/vehicle/batch/upsert")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"engine_type\": \"petrol\",\n        \"make\": \"Honda\",\n        \"model\": \"Civic\",\n        \"year\": 2023\n      }\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Create without identifiers (Brevo auto-generates id)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.brevo.com/v3/objects/vehicle/batch/upsert")
  .header("api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"engine_type\": \"petrol\",\n        \"make\": \"Honda\",\n        \"model\": \"Civic\",\n        \"year\": 2023\n      }\n    }\n  ]\n}")
  .asString();
```

```csharp Create without identifiers (Brevo auto-generates id)
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/objects/vehicle/batch/upsert");
var request = new RestRequest(Method.POST);
request.AddHeader("api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"engine_type\": \"petrol\",\n        \"make\": \"Honda\",\n        \"model\": \"Civic\",\n        \"year\": 2023\n      }\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Create without identifiers (Brevo auto-generates id)
import Foundation

let headers = [
  "api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = ["records": [["attributes": [
        "engine_type": "petrol",
        "make": "Honda",
        "model": "Civic",
        "year": 2023
      ]]]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/objects/vehicle/batch/upsert")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Update existing record by Brevo internal id

**Request**

```json
{
  "records": [
    {
      "attributes": {
        "color": "red",
        "engine_type": "diesel"
      },
      "identifiers": {
        "id": 42
      }
    }
  ]
}
```

**Response**

```json
{
  "message": "Batch object records are being processed",
  "processId": 21
}
```

**SDK Code**

```typescript Update existing record by Brevo internal id
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.customObjects.upsertrecords({
        objectType: "vehicle",
        records: [
            {
                attributes: {
                    color: "red",
                    engine_type: "diesel",
                },
                identifiers: {
                    id: 42,
                },
            },
        ],
    });
}
main();

```

```python Update existing record by Brevo internal id
from brevo import Brevo
from brevo.custom_objects import UpsertrecordsRequestRecordsItem, UpsertrecordsRequestRecordsItemIdentifiers

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.custom_objects.upsertrecords(
    object_type="vehicle",
    records=[
        UpsertrecordsRequestRecordsItem(
            attributes={
                "color": "red",
                "engine_type": "diesel"
            },
            identifiers=UpsertrecordsRequestRecordsItemIdentifiers(
                id=42,
            ),
        )
    ],
)

```

```php Update existing record by Brevo internal id
<?php

namespace Example;

use Brevo\Brevo;
use Brevo\CustomObjects\Requests\UpsertrecordsRequest;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItem;
use Brevo\CustomObjects\Types\UpsertrecordsRequestRecordsItemIdentifiers;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->customObjects->upsertrecords(
    'vehicle',
    new UpsertrecordsRequest([
        'records' => [
            new UpsertrecordsRequestRecordsItem([
                'attributes' => [
                    'color' => "red",
                    'engine_type' => "diesel",
                ],
                'identifiers' => new UpsertrecordsRequestRecordsItemIdentifiers([
                    'id' => 42,
                ]),
            ]),
        ],
    ]),
);

```

```go Update existing record by Brevo internal id
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.brevo.com/v3/objects/vehicle/batch/upsert"

	payload := strings.NewReader("{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"color\": \"red\",\n        \"engine_type\": \"diesel\"\n      },\n      \"identifiers\": {\n        \"id\": 42\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Update existing record by Brevo internal id
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/objects/vehicle/batch/upsert")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"color\": \"red\",\n        \"engine_type\": \"diesel\"\n      },\n      \"identifiers\": {\n        \"id\": 42\n      }\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Update existing record by Brevo internal id
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.brevo.com/v3/objects/vehicle/batch/upsert")
  .header("api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"color\": \"red\",\n        \"engine_type\": \"diesel\"\n      },\n      \"identifiers\": {\n        \"id\": 42\n      }\n    }\n  ]\n}")
  .asString();
```

```csharp Update existing record by Brevo internal id
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/objects/vehicle/batch/upsert");
var request = new RestRequest(Method.POST);
request.AddHeader("api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"records\": [\n    {\n      \"attributes\": {\n        \"color\": \"red\",\n        \"engine_type\": \"diesel\"\n      },\n      \"identifiers\": {\n        \"id\": 42\n      }\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Update existing record by Brevo internal id
import Foundation

let headers = [
  "api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = ["records": [
    [
      "attributes": [
        "color": "red",
        "engine_type": "diesel"
      ],
      "identifiers": ["id": 42]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/objects/vehicle/batch/upsert")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```