---
title: "Read one brand template"
method: POST
path: "/brand-templates/get"
tags: ["Brand Templates"]
---

# Read one brand template

`POST /brand-templates/get`

## Request

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

Returns every setting of one brand template: margins, the colour and the font of each part of the report, the palette of the charts, the footer, the front cover, the table of contents and the header of the client portal.

## Request body

- BrandTemplateGetRequest
  - `brand_template_key` string, required: The brand template to read. From /v1/brand-templates/list; the empty string is the brand of the platform.

## Response `200`

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

- BrandTemplateGetResponse
  - `status` 'ok', required
  - `data` BrandTemplateGetData, required: The brand template.
    - `brand_template` BrandTemplate, required: Every setting of one brand template. The two images are reported as present or absent and never carried.
      - `brand_template_key` string, required: The brand template. The empty string is the brand of the platform.
      - `is_system` boolean, required: Whether this is the brand of the platform rather than one of the account.
      - `name` string, nullable, required
      - `internal_notes` string, nullable: A note for the account's own staff.
      - `font_family` string, nullable: The font of the PDF.
      - `margin_top` integer, nullable: The top margin of the page, in points.
      - `margin_bottom` integer, nullable: The bottom margin of the page, in points.
      - `margin_left` integer, nullable: The left margin of the page, in points.
      - `margin_right` integer, nullable: The right margin of the page, in points.
      - `report_title_text_color` string, nullable: The colour of the title of the cover, as #RRGGBB.
      - `report_title_font_size` integer, nullable: The size of the title of the cover.
      - `report_title_font_weight` 'normal' | 'bold', nullable: The weight of the title of the cover.
      - `report_subtitle_text_color` string, nullable: The colour of the subtitle of the cover, as #RRGGBB.
      - `report_subtitle_font_size` integer, nullable: The size of the subtitle of the cover.
      - `report_subtitle_font_weight` 'normal' | 'bold', nullable: The weight of the subtitle of the cover.
      - `section_name_text_color` string, nullable: The colour of the name of a section, as #RRGGBB.
      - `section_name_font_size` integer, nullable: The size of the name of a section.
      - `section_name_font_weight` 'normal' | 'bold', nullable: The weight of the name of a section.
      - `date_range_text_color` string, nullable: The colour of the period line of a section, as #RRGGBB.
      - `date_range_font_size` integer, nullable: The size of the period line of a section.
      - `date_range_font_weight` 'normal' | 'bold', nullable: The weight of the period line of a section.
      - `component_name_text_color` string, nullable: The colour of the name of a widget, as #RRGGBB.
      - `component_name_font_size` integer, nullable: The size of the name of a widget.
      - `component_name_font_weight` 'normal' | 'bold', nullable: The weight of the name of a widget.
      - `footer_text_color` string, nullable: The colour of the footer, as #RRGGBB.
      - `footer_font_size` integer, nullable: The size of the footer.
      - `footer_font_weight` 'normal' | 'bold', nullable: The weight of the footer.
      - `include_logo` boolean: Whether the report prints the logo.
      - `include_section_line` boolean: Whether a line is drawn under the name of a section.
      - `section_line_color` string, nullable: The colour of that line, as #RRGGBB.
      - `component_name_background_color` string, nullable: The background behind the name of a widget, as #RRGGBB.
      - `component_content_text_color` string, nullable: The colour of the content of a widget, as #RRGGBB.
      - `component_content_font_size` integer, nullable: The size of the content of a widget.
      - `colors` string[], required: The palette the charts are drawn with, in order, as #RRGGBB.
      - `footer_content` string, nullable: The text of the footer.
      - `include_footer_line` boolean: Whether a line is drawn above the footer.
      - `footer_line_color` string, nullable: The colour of that line, as #RRGGBB.
      - `primary_color` string, nullable: The main colour of the brand, as #RRGGBB.
      - `cover_style` 'gradient' | 'plain' | 'aurora' | 'circles' | 'waves' | 'diagonal' | 'rings' | 'dots' | 'bubbles' | 'contours' | 'blocks' | 'image': The style the front cover is drawn with. A template that never picked one is read as plain, which is what it is drawn with.
      - `cover_tone` 'auto' | 'light' | 'dark' | 'custom': The tone of the text of the cover. auto takes it from the primary colour and is what a template that never picked one is read as.
      - `cover_text_color` string, nullable: The colour of the cover text when the tone is custom, as #RRGGBB.
      - `cover_inverted` boolean: Whether the cover is drawn on a coloured surface instead of white paper.
      - `prepared_by` string, nullable: The line naming who prepared the report.
      - `prepared_for` string, nullable: The line naming who it was prepared for.
      - `toc_style` 'cards' | 'rule' | 'band' | 'timeline': The style of the table of contents. A template that never picked one is read as timeline.
      - `portal_header_style` 'none' | 'letterhead' | 'card' | 'band': The header the client portal wears. none draws no header and is what a template that never picked one is read as.
      - `portal_header_logo` boolean: Whether that header carries the logo.
      - `web_font_family` string: The font of the client portal and of a public link. app_default is the font of the application.
      - `logo` BrandTemplateImage, required: An image the template carries. The file itself never travels in JSON and it is not read to be measured, so no size is published.
        - `present` boolean, required: Always true. The whole object is null when there is no image.
      - `cover_image` BrandTemplateImage, required: An image the template carries. The file itself never travels in JSON and it is not read to be measured, so no size is published.
        - `present` boolean, required: Always true. The whole object is null when there is no image.
  - `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.
- `404`: A key of the request does not name anything this account owns. NOT_FOUND covers reports, sections, widgets, schedules, portal views, brand templates, email templates and language files; TEMPLATE_NOT_FOUND covers a catalog slug, version or section position that stopped being published between the validation and the write. An entity of another account is reported the same way as one that does not exist.
- `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)
