API reference

Brands

Brands endpoints.

MethodPathSummary
GET/v1/account/brandsThe account’s brands and its communities’, the default brand and the settings
POST/v1/account/brandsMake a brand for the account, or for one community
DELETE/v1/account/brands/email-merge-notesDismiss the notice about the email brand moving into Brands (ADR 0130)
POST/v1/account/brands/mediaUpload a brand’s logo or cover photo (multipart: file, plus a kind of logo or photo). Returns its public URL
PUT/v1/account/brands/settingsSet the account’s default brand and whether communities may make their own
PATCH/v1/account/brands/{brandId}Rename a brand or change its look
DELETE/v1/account/brands/{brandId}Delete a brand nothing uses
PUT/v1/account/groups/{groupId}/brandChoose a community’s brand: an account brand or one of its own. Null: the default

The account’s brands and its communities’, the default brand and the settings#

GET /v1/account/brands

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/brands" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Make a brand for the account, or for one community#

POST /v1/account/brands

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Request body

application/json, required.

FieldTypeRequiredDescription
groupIdstring (grp_… ID) | nullNo—
lookobjectYes—
look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
look.backgroundstringNoPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
look.emailobjectNo—
look.email.logoPositionenumNoOne of: "left", "center". Default: "left".
look.fontenumNoOne of: "system", "serif_warm", "sans_modern". Default: "system".
look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
namestringYes1–60 characters.

Response 201

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/brands" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "look": {
    "primary": "string",
    "accent": "string"
  }
}'

Dismiss the notice about the email brand moving into Brands (ADR 0130)#

DELETE /v1/account/brands/email-merge-notes

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X DELETE "$ANSWERSTACK_API_URL/v1/account/brands/email-merge-notes" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Upload a brand’s logo or cover photo (multipart: file, plus a kind of logo or photo). Returns its public URL#

POST /v1/account/brands/media

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Response 201

FieldTypeRequiredDescription
assetIdstringYes—
contentTypestringYes—
kindenumYesOne of: "logo", "photo", "video", "captions".
sizeBytesintegerYes—
urlstring (uri)Yes—

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/brands/media" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Set the account’s default brand and whether communities may make their own#

PUT /v1/account/brands/settings

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Request body

application/json, required.

FieldTypeRequiredDescription
communitiesMayCreatebooleanNo—
defaultBrandIdstring (brd_… ID) | nullNo—

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X PUT "$ANSWERSTACK_API_URL/v1/account/brands/settings" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "communitiesMayCreate": true,
  "defaultBrandId": "brd_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
}'

Rename a brand or change its look#

PATCH /v1/account/brands/{brandId}

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
brandIdstring (brd_… ID)YesID (brd_…)

Request body

application/json, required.

FieldTypeRequiredDescription
lookobjectNo—
look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
look.backgroundstringNoPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
look.emailobjectNo—
look.email.logoPositionenumNoOne of: "left", "center". Default: "left".
look.fontenumNoOne of: "system", "serif_warm", "sans_modern". Default: "system".
look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
namestringNo1–60 characters.

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X PATCH "$ANSWERSTACK_API_URL/v1/account/brands/{brandId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "look": {
    "primary": "string",
    "accent": "string"
  },
  "name": "string"
}'

Delete a brand nothing uses#

DELETE /v1/account/brands/{brandId}

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
brandIdstring (brd_… ID)YesID (brd_…)

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X DELETE "$ANSWERSTACK_API_URL/v1/account/brands/{brandId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Choose a community’s brand: an account brand or one of its own. Null: the default#

PUT /v1/account/groups/{groupId}/brand

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
groupIdstring (grp_… ID)YesID (grp_…)

Request body

application/json, required.

FieldTypeRequiredDescription
brandIdstring (brd_… ID) | nullYes—

Response 200

FieldTypeRequiredDescription
brandsarray<Brand>Yes—
brands[].communitiesintegerYes—
brands[].groupIdstring | nullYes—
brands[].groupNamestring | nullYes—
brands[].idstringYes—
brands[].lookobjectYes—
brands[].look.accentstringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].look.backgroundstringYesPattern: ^#[0-9a-f]\{6\}$. Default: "#F7F3EC".
brands[].look.coverPhotostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.emailobjectNo—
brands[].look.email.logoPositionenumYesOne of: "left", "center". Default: "left".
brands[].look.fontenumYesOne of: "system", "serif_warm", "sans_modern". Default: "system".
brands[].look.logostring (uri) | string (uri)NoA https:// link to an uploaded file
brands[].look.primarystringYesPattern: ^#[0-9a-f]\{6\}$.
brands[].namestringYes—
brands[].updatedAtstring (date-time)Yes—
canManagebooleanYes—
emailMergearray<BrandEmailMergeNote>Yes—
emailMerge[].assignedbooleanYesDefault: true.
emailMerge[].brandIdstring | nullYes—
emailMerge[].brandNamestring | nullYes—
emailMerge[].droppedobjectYesDefault: \{\}.
emailMerge[].dropped.colorsmapNo—
emailMerge[].dropped.colors.{key}stringNoAny key.
emailMerge[].dropped.fontstringNo—
emailMerge[].dropped.logoAltstringNo—
emailMerge[].dropped.logoPositionstringNo—
emailMerge[].dropped.logoUrlstringNo—
emailMerge[].groupIdstring | nullYes—
emailMerge[].groupNamestring | nullYes—
emailMerge[].heldBecauseenum | nullYesOne of: "pages", "colours".
emailMerge[].logoMovedbooleanYes—
emailMerge[].outcomeenumYesOne of: "created", "merged", "kept".
groupsarray<object>Yes—
groups[].brandIdstring | nullYes—
groups[].idstringYes—
groups[].namestringYes—
settingsobjectYes—
settings.communitiesMayCreatebooleanYesDefault: true.
settings.defaultBrandIdstring (brd_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X PUT "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/brand" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "brandId": "brd_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
}'