> 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.

# Get all the contacts

GET https://api.brevo.com/v3/contacts

Retrieve all contacts from your Brevo account with support for pagination, filtering, and sorting. Results default to 50 contacts per page (maximum 1000) sorted in descending order of creation, and can be filtered by modification date, creation date, contact IDs (up to 20), list IDs, segment ID, or contact attributes using the equals operator. Note that either listIds or segmentId can be passed but not both simultaneously.

Reference: https://developers.brevo.com/reference/get-contacts

## Authentication

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

## Request

### Query parameters

- `limit` (long, optional, default: 50) — Number of documents per page
- `offset` (long, optional, default: 0) — Index of the first document of the page
- `modifiedSince` (string, optional) — Filter (urlencoded) the contacts modified after a given UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ). **Prefer to pass your timezone in date-time format for accurate result.**
- `createdSince` (string, optional) — Filter (urlencoded) the contacts created after a given UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ). **Prefer to pass your timezone in date-time format for accurate result.**
- `sort` (enum, optional, default: desc) — Sort the results in the ascending/descending order of record creation. Default order is **descending** if `sort` is not passed
  - Allowed values: `asc`, `desc`
- `ids` (list of long, optional) — Filter by a list of contact IDs. You can pass a **maximum of 20 IDs**. All elements must be integers.
- `segmentId` (long, optional) — Id of the segment. **Either listIds or segmentId can be passed.** Must be a positive integer (minimum value of 1).
- `listIds` (list of long, optional) — Ids of the list. **Either listIds or segmentId can be passed.**
- `filter` (string, optional) — Filter the contacts on the basis of attributes. **Allowed operator: equals. For multiple-choice options, the filter will apply an AND condition between the options. For category attributes, the filter will work with both id and value. (e.g. filter=equals(FIRSTNAME,"Antoine"), filter=equals(B1, true), filter=equals(DOB, "1989-11-23"), filter=equals(GENDER, "1"), filter=equals(GENDER, "MALE"), filter=equals(COUNTRY,"USA, INDIA")**

## Response

### 200

All contacts listed

- `contacts` (list of object, required)
  - `attributes` (object, required) — Set of attributes of the contact
  - `createdAt` (string, required) — Creation UTC date-time of the contact (YYYY-MM-DDTHH:mm:ss.SSSZ)
  - `emailBlacklisted` (boolean, required) — Blacklist status for email campaigns (true=blacklisted, false=not blacklisted)
  - `id` (long, required) — ID of the contact for which you requested the details
  - `listIds` (list of long, required)
  - `modifiedAt` (string, required) — Last modification UTC date-time of the contact (YYYY-MM-DDTHH:mm:ss.SSSZ)
  - `smsBlacklisted` (boolean, required) — Blacklist status for SMS campaigns (true=blacklisted, false=not blacklisted)
  - `whatsappBlacklisted` (boolean, required) — Blacklist status for WhatsApp campaigns (true=blacklisted, false=not blacklisted)
  - `email` (string, optional) — Email address of the contact for which you requested the details
  - `listUnsubscribed` (list of long, optional)
  - `consentGroups` (list of object, optional) — Consent groups the contact belongs to, with their subscription status. Only present when the Consent Groups feature is enabled for your account.
    - `id` (long, required) — ID of the consent group
    - `status` (enum, required) — The contact's subscription status within this consent group
      - Allowed values: `subscribed`, `unsubscribed`
- `count` (long, required) — Number of contacts

## Errors

### 400 Bad Request Error

bad request

- `code` (enum, required) — Error code displayed in case of a failure
  - Allowed values: `invalid_parameter`, `missing_parameter`, `out_of_range`, `campaign_processing`, `campaign_sent`, `document_not_found`, `not_enough_credits`, `permission_denied`, `duplicate_parameter`, `duplicate_request`, `method_not_allowed`, `unauthorized`, `account_under_validation`, `not_acceptable`, `bad_request`, `unprocessable_entity`, `Domain does not exist`, `Contact email not found`, `Attribute not found`, `Category id not found`, `Invalid parameters passed`, `Record(s) for identifier not found`, `Returned when query params are invalid`, `Returned when invalid data posted`, `Feed not found`, `Campaign ID not found`, `api-key not found`, `DMARC policy requires domain authentication`, `DNS records not properly configured`, `Invalid OTP code provided`, `OTP code has expired`, `Domain already exists in your account`, `The sum of all IP weights must equal 100`, `Authentication failed`, `Insufficient credits`, `Request already processed`
- `message` (string, required) — Readable message associated to the failure

### 429 Too Many Requests Error

Too Many Requests

- `message` (string, required) — Readable message associated to the failure
- `code` (string, optional) — Error code displayed in case of a failure

## Examples

**Response**

```json
{
  "contacts": [
    {
      "attributes": {
        "ACTION_CODE": "17HH98CH",
        "ADDRESS": "1 5th avenue",
        "CITY": "New-York",
        "CIV": "MS",
        "DOB": "1986-05-02",
        "FIRST_NAME": "Meg",
        "IDENTIFICATION": "1-3RHQ-259",
        "LAST_NAME": "Brennon",
        "SMS": "33058407250",
        "ZIP_CODE": "44300"
      },
      "createdAt": "2017-05-01T17:05:03Z",
      "emailBlacklisted": true,
      "id": 247,
      "listIds": [
        43,
        58
      ],
      "modifiedAt": "2017-05-01T17:05:03Z",
      "smsBlacklisted": true,
      "whatsappBlacklisted": false,
      "email": "contact1@example.com"
    },
    {
      "attributes": {
        "ACTION_CODE": "17HU765",
        "ADDRESS": "5 Flower Street",
        "CITY": "Seattle",
        "CIV": "MS",
        "DOB": "1980-09-11",
        "FIRST_NAME": "Sophia",
        "IDENTIFICATION": "1-78JS-432",
        "LAST_NAME": "Press",
        "SMS": "33058407248",
        "ZIP_CODE": "44119"
      },
      "createdAt": "2017-05-01T17:05:03Z",
      "emailBlacklisted": true,
      "id": 245,
      "listIds": [
        43,
        61,
        58
      ],
      "modifiedAt": "2017-05-01T17:05:03Z",
      "smsBlacklisted": false,
      "whatsappBlacklisted": false,
      "email": "33058407248@mailin-sms.com"
    }
  ],
  "count": 3
}
```

**SDK Code**

```typescript response
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.contacts.getContacts({});
}
main();

```

```python response
from brevo import Brevo

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.contacts.get_contacts()

```

```php response
<?php

namespace Example;

use Brevo\Brevo;
use Brevo\Contacts\Requests\GetContactsRequest;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->contacts->getContacts(
    new GetContactsRequest([]),
);

```

```go response
package main

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

func main() {

	url := "https://api.brevo.com/v3/contacts"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("api-key", "<apiKey>")

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

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

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

}
```

```ruby response
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/contacts")

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

request = Net::HTTP::Get.new(url)
request["api-key"] = '<apiKey>'

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

```java response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.brevo.com/v3/contacts")
  .header("api-key", "<apiKey>")
  .asString();
```

```csharp response
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/contacts");
var request = new RestRequest(Method.GET);
request.AddHeader("api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift response
import Foundation

let headers = ["api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/contacts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

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()
```