# GET /distributor-portal/me

Read your profile, your distributor and its territory. Distributor contact account session, no API key scope.

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

---

You read your distributor-contact profile: the distributor you work for and
its contractual territory. This is the call to make at the start of your
integration: it tells you which distributor your session reaches FOR THE
SELECTED BRAND, and the list of every brand you are an active contact at.

The full address is `https://api.sealtrust.io/v1/distributor-portal/me`. The
same route exists without the `/v1` prefix, and the `/v1` form is the one
recommended for a new integration.

> [!INFO] Multi-brand: a selector, never a merge
> A distribution company often carries several brands at once: a distributor
> contact account may therefore be an ACTIVE contact at several brands at the
> same time (one row per brand, never two distributors of the SAME brand).
> This response's fields (`retailer_id`, `territory_countries`, etc.)
> describe the brand SELECTED by the `brand_id` parameter; the `brands` array
> lists every brand you can reach, to build a selector. Every other portal
> entry point (shipments, out-of-territory) also takes a `brand_id` and never
> answers for two brands at once in a single call: a distributor of a brand
> you are not an active contact at answers exactly like one that does not
> exist.

## Authorization

Session of a distributor contact account. No API key scope applies here.

The account must carry the `distributor` role. A client account, a partner
account (repairer, recycler) or a brand team account gets a 403, with the
message `Distributor contact account required`.

| Way | When to use it |
| --- | --- |
| `Authorization: Bearer <token>` header | Server-to-server call, script. |
| `access_token` session cookie | Browser, once signed in to the portal. |

You get a token by calling `POST /v1/auth/login` with `username` and
`password`, like any other account.

## Query parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `brand_id` | `integer` | Which brand to describe. Omitted: the only accessible brand when there is exactly one (historical behaviour, unchanged); otherwise the first one alphabetically — call [`GET /distributor-portal/brands`](/en/reference/get-distributor-portal-brands/) for the full list and let the person choose. |

## Rate limit

30 calls a minute, the same ceiling and the same human rhythm as the partner
portal: you browse your shipments then confirm a reception. It covers the
whole distributor portal; switching between entry points does not give you
more room. Beyond it, the API answers 429 with a `Retry-After` header.

## Example request

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

## Example response

```json
{
  "id": 214,
  "email": "contact@distributeur-exemple.test",
  "name": "Camille Exemple",
  "retailer_id": 9,
  "retailer_code": "DIST-DE",
  "retailer_name": "Distribution Exemple GmbH",
  "brand_id": 42,
  "brand_code": "7K3QXW9M2A",
  "brand_name": "Exemple SAS",
  "territory_countries": ["DE", "AT"],
  "brands": [
    {
      "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 |
| --- | --- | --- |
| `retailer_id` | `integer` | Your distributor's id FOR THE SELECTED BRAND (`brand_id`). |
| `retailer_code` | `string` | The distributor's code at that brand. |
| `territory_countries` | `array` or `null` | ISO2 codes of the exclusive contractual territory, for that brand. `null` or empty: your distributor has no territory of its own, the brand's authorized countries apply. |
| `brands` | `array` | Every brand you are an ACTIVE contact at — a selector, never a list to merge. A single entry: nothing to choose, this is the historical behaviour. `alerts_opt_in` says whether that brand turned on the out-of-territory view for you ([`GET /distributor-portal/out-of-territory`](/en/reference/get-distributor-portal-out-of-territory/)). |

## Errors

| Code | Condition | What to do |
| --- | --- | --- |
| 401 | Token missing, unreadable or expired. | Sign in again, then call with `Authorization: Bearer <token>`. |
| 403 | The account does not carry the `distributor` role. Message `Distributor contact account required`. | Ask the brand for a distributor contact account. |
| 403 | The contact was revoked everywhere: no active row remains for this account, at any brand. Message `No active distributor access`. | Ask a brand to invite you again. |
| 404 | `brand_id` given, but no active contact for that brand (including a brand that does not exist). Same answer either way. | Check the id, or call without `brand_id` / via [`GET /distributor-portal/brands`](/en/reference/get-distributor-portal-brands/) to see the brands you can actually reach. |
| 429 | Rate limit exceeded. | Wait the delay in `Retry-After`. |

## See also

- [`GET /distributor-portal/brands`](/en/reference/get-distributor-portal-brands/),
  the list of your brands, to build a selector.
- [`GET /distributor-portal/shipments`](/en/reference/get-distributor-portal-shipments/),
  list your own shipments.
- [`GET /distributor-portal/out-of-territory`](/en/reference/get-distributor-portal-out-of-territory/),
  your units seen outside your territory.
