# GET /distributor-portal/brands

List the brands you are an active contact at, to build a selector. Distributor contact account session.

Source: https://docs.sealtrust.io/en/reference/get-distributor-portal-brands/

---

You list every brand your account is an ACTIVE distributor contact at
(neither pending nor revoked). This is the call that feeds a brand selector:
a distribution company often carries several brands at once, and every
other portal entry point answers for ONE SELECTED brand (`brand_id`), never
for all of them at once.

The full address is `https://api.sealtrust.io/v1/distributor-portal/brands`.
The same route exists without the `/v1` prefix.

> [!INFO] One brand: nothing to show
> Most distributor contact accounts serve only one brand. In that case this
> list carries a single entry and a UI has nothing to offer:
> [`GET /distributor-portal/me`](/en/reference/get-distributor-portal-me/)
> behaves exactly as it did before this multi-brand extension.

## Authorization

Session of a distributor contact account. See
[`GET /distributor-portal/me`](/en/reference/get-distributor-portal-me/) for
the session rules and the 401/403 refusals.

## Rate limit

30 calls a minute, shared with the rest of the distributor portal.

## Example request

```bash
curl -i https://api.sealtrust.io/v1/distributor-portal/brands \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.0000000000000000000000000000.0000000000000000000000000000"
```

## Example response

```json
[
  {
    "brand_id": 42,
    "brand_code": "7K3QXW9M2A",
    "brand_name": "Exemple SAS",
    "retailer_id": 9,
    "retailer_code": "DIST-DE",
    "retailer_name": "Distribution Exemple GmbH",
    "territory_countries": ["DE", "AT"],
    "alerts_opt_in": false
  },
  {
    "brand_id": 57,
    "brand_code": "9PQ2WZ4KXR",
    "brand_name": "Other Brand SAS",
    "retailer_id": 31,
    "retailer_code": "DIST-OM-DE",
    "retailer_name": "Distribution Exemple GmbH (Other Brand)",
    "territory_countries": ["DE"],
    "alerts_opt_in": true
  }
]
```

### Response fields

| Field | Type | Description |
| --- | --- | --- |
| `brand_id` | `integer` | The brand's id — pass it as `brand_id` to every other portal call. |
| `retailer_id` | `integer` | Your distributor at that brand. |
| `territory_countries` | `array` or `null` | Exclusive contractual territory at that brand. |
| `alerts_opt_in` | `boolean` | That brand turned on [`GET /distributor-portal/out-of-territory`](/en/reference/get-distributor-portal-out-of-territory/) for you. |

An empty list never happens for an authorized call that succeeds: an
account with no active contact at all gets a 403, not an empty list (see
below).

## Errors

| Code | Condition | What to do |
| --- | --- | --- |
| 401 | Token missing, unreadable or expired. | Sign in again. |
| 403 | No active contact row for this account, at any brand. Message `No active distributor access`. | Ask a brand to invite you. |
| 429 | Rate limit exceeded. | Wait the delay in `Retry-After`. |

## See also

- [`GET /distributor-portal/me`](/en/reference/get-distributor-portal-me/),
  the selected brand's profile.
- [`GET /distributor-portal/shipments`](/en/reference/get-distributor-portal-shipments/),
  the selected brand's shipments.
