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

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

Retrieve all contact segments defined in your Brevo account with support for pagination and sorting. Results default to 10 segments per page (maximum 50) sorted in descending order of creation. Each segment includes its ID, name, category name, and last update timestamp.

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

## Authentication

- `api-key` header (required) — The API key should be passed in the request headers as `api-key` for authentication.
- `Authorization` header (bearer token, required) — OAuth 2.0 client_credentials (machine-to-machine) grant. Exchange your app's client_id/client_secret for a short-lived Bearer token.

## Request

### Query parameters

- `limit` (long, optional, default: 10) — Number of documents per page
- `offset` (long, optional, default: 0) — Index of the first document of the page
- `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`

## Response

### 200

Segments informations

- `count` (long, optional) — Number of Segments in your account
- `segments` (list of ContactsSegmentsGetResponsesContentApplicationJsonSchemaSegmentsItems, optional) — Listing of all the segments available in your account

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

## Types

### ContactsSegmentsGetResponsesContentApplicationJsonSchemaSegmentsItems

- `categoryName` (string, required) — Name of the Segment Category
- `id` (long, required) — ID of the segment
- `segmentName` (string, required) — Name of the Segment
- `updatedAt` (string, optional) — Last update UTC date-time of the segment (YYYY-MM-DDTHH:mm:ss.SSSZ)

## Examples

**Response**

```json
{
  "count": 2,
  "segments": [
    {
      "categoryName": "Name1",
      "id": 53,
      "segmentName": "Segment1",
      "updatedAt": "2017-03-12T12:30:00Z"
    },
    {
      "categoryName": "Name2",
      "id": 50,
      "segmentName": "Segment2",
      "updatedAt": "2017-03-12T12:30:00Z"
    }
  ]
}
```

**SDK Code**

```python response
import requests

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

headers = {"api-key": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript response
const url = 'https://api.brevo.com/v3/contacts/segments';
const options = {method: 'GET', headers: {'api-key': '<api-key>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go response
package main

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

func main() {

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

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

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

	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/segments")

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

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

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/segments")
  .header("api-key", "<api-key>")
  .asString();
```

```php response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.brevo.com/v3/contacts/segments', [
  'headers' => [
    'api-key' => '<api-key>',
  ],
]);

echo $response->getBody();
```

```csharp response
using RestSharp;

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

```swift response
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/contacts/segments")! 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()
```