---
title: "List the brand templates"
method: POST
path: "/brand-templates/list"
tags: ["Brand Templates"]
---

# List the brand templates

`POST /brand-templates/list`

## Request

- Base URL: `https://api.reportingninja.com/v1`
- URL: `https://api.reportingninja.com/v1/brand-templates/list`
- Auth: HTTP bearer

Returns the brands a report can be printed with: the one of the platform, under the empty key, and the ones of the account. The logo and the cover image are reported as present or absent and never carried.

## Request body

- BrandTemplatesListRequest: No parameters.

## Response `200`

The call succeeded. This endpoint reports its errors with a real HTTP status, so a 200 always carries status=ok.

- BrandTemplatesListResponse
  - `status` 'ok', required
  - `data` BrandTemplatesListData, required: The brand of the platform first, then the templates of the account ordered by name.
    - `brand_templates` BrandTemplateSummary[], required
      - `brand_template_key` string, required: The brand template. The empty string is the brand of the platform.
      - `name` string, nullable, required
      - `internal_notes` string, nullable: A note for the account's own staff.
      - `is_system` boolean, required: Whether this is the brand of the platform rather than one of the account.
      - `has_logo` boolean, required: Whether the template carries a logo.
      - `has_cover_image` boolean, required: Whether the template carries a cover image.
      - `primary_color` string, nullable: The main colour of the brand, as #RRGGBB.
      - `font_family` string, nullable: The font of the PDF.
    - `count` integer, required
  - `meta` Meta, required
    - `request_id` string, required: Id of this request, useful when reporting an incident.
    - `timestamp` string, date-time, required: When the answer was built, in UTC.

## Other responses

- `400`: The request was refused before anything was written. INVALID_REQUEST covers the framework refusals of every endpoint (the Content-Type is not application/json, the body could not be read, the body is not valid JSON). The report endpoints add their own: VALIDATION_FAILED with details.problems, UNKNOWN_PARAM with the path of the field the endpoint does not read, and the single-field refusals MISSING_REQUIRED_FIELD, INVALID_VALUE and APPEND_NOT_ALLOWED. The description of each operation lists the ones it emits. Everything else a body can get wrong arrives as an entry of details.problems rather than as the code of the envelope.
- `401`: Invalid or missing Bearer token.
- `413`: The request body is over 1 MB. The cap is applied before authentication, so this answer is refused without the key being read, and it carries the usual error envelope.
- `429`: A budget was spent. RATE_LIMITED is the per-key read budget (300/minute, 5000/day) or the per-account write budget (60/minute, 1000/day). EMAIL_QUOTA_REACHED is the separate budget of 50 calls per account per day that send email, and its Retry-After points at the next UTC midnight. The Retry-After header gives the seconds until the more restrictive window resets. The X-RateLimit-* headers report the read budget, except on the 429 of a write, where they report the write budget.
- `500`: Internal server error.

---

[API](https://skmtc.dev/reportingninja/apis/reporting-ninja-api.md) · [All operations](https://skmtc.dev/reportingninja/apis/reporting-ninja-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reportingninja/apis/reporting-ninja-api/revisions/13876c71be34?raw)
