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.
curl https://api.postlyra.com/teams \
-H "Authorization: Bearer $POSTLYRA_TOKEN"{
"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.
| Field | Rules |
|---|---|
name | string, max 100 |
email | email, max 255, nullable |
phone | string, max 50, nullable |
address | string, max 255, nullable |
{ "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.
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.