Skip to content

Brands ​

In the API a brand is a team. The endpoints say /teams, the UI says "brand". Same object.

GET /teams ​

Every brand you belong to. This is how you discover the brand ids for X-Postlyra-Brand.

bash
curl https://api.postlyra.com/teams \
  -H "Authorization: Bearer $POSTLYRA_TOKEN"
json
{
  "teams": [
    {
      "id": 1,
      "name": "My Brand",
      "slug": "0f8fad5b-d9cb-469f-a165-70867728950e",
      "account": { "id": 1, "trial_ends_at": "2026-09-01T00:00:00.000000Z" }
    }
  ],
  "current_team": { "id": 1, "name": "My Brand" }
}

slug is the brand id. id is the numeric key, used only by PATCH /me/team.

GET /teams/{id} ​

One brand, by numeric id. Returns 404 if you are not a member.

PATCH /teams/{id} ​

Update a brand's details.

FieldRules
namestring, max 100
emailemail, max 255, nullable
phonestring, max 50, nullable
addressstring, max 255, nullable
json
{ "team": { "id": 1, "name": "Renamed" }, "message": "Team updated successfully." }

PATCH /me/team ​

Change which brand is selected for your user. This one persists, unlike the X-Postlyra-Brand header.

bash
curl -X PATCH https://api.postlyra.com/me/team \
  -H "Authorization: Bearer $POSTLYRA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"team_id": 2}'

Takes the numeric team_id. Returns 403 if you do not belong to it.

Media and every other brand-scoped endpoint honour X-Postlyra-Brand per request; you need this only for the one endpoint that does not, GET /me/entitlements. See Choosing a brand. For everything else prefer the header, which does not leave a side effect behind.

Creating a brand ​

POST /teams is routed but not implemented. Create brands in Studio, from the brand switcher.

How many you can create comes from the brands allowance on your plan. See Entitlements.

Postlyra, by MAVA Design