---
title: "Update branding"
description: "Change branding with the same options Settings → Brand offers; only the fields you send change, and null restores a default. `PATCH /api/v1/branding`"
url: https://www.unitpost.com/docs/platform/patch-branding
section: "Platform API reference"
updated: 2026-10-13
---
# Update branding

`PATCH /api/v1/branding`

Change branding with the same options Settings → Brand offers; only the fields you send change, and `null` restores a default. The footer every marketing email carries is built from these at send (it always keeps the unsubscribe link and the postal address). Hiding the "Sent with Unitpost" mark needs a paid plan (`403 limit_reached`). No key preset includes this capability: tick it on the key. Requires the `branding:write` capability.

## Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `company_name` | string \| null | no | Shown in the footer (`{{company_name}}`). |
| `company_address` | string \| null | no | The postal address every marketing email carries (`{{company_address}}`). |
| `colors` | object | no | — |
| `font` | enum \| null | no | One of: System default, Arial, Helvetica, Verdana, Tahoma, Trebuchet MS, Georgia, Times New Roman, Courier New. |
| `hide_unitpost_branding` | boolean | no | Hide the "Sent with Unitpost" mark. Paid plans only (403 `limit_reached`). |
| `unsubscribe_page` | object | no | — |
| `footer` | object | no | — |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | — |
| `company_name` | string \| null | yes | The name the footer shows; the workspace's name unless one was set. |
| `company_address` | string \| null | yes | — |
| `logo_url` | string \| null | yes | The logo emails and the unsubscribe page show: the brand logo, else the workspace image, else none. |
| `has_brand_logo` | boolean | yes | — |
| `colors` | object | yes | — |
| `font` | string \| null | yes | — |
| `hide_unitpost_branding` | boolean | yes | The stored choice. |
| `unitpost_branding_hidden` | boolean | yes | Whether recipients see no mark now: the choice, the plan and the account together. |
| `can_hide_unitpost_branding` | boolean | yes | Whether the plan allows hiding the mark. |
| `unsubscribe_page` | object | yes | — |
| `footer` | object | yes | — |

## Responses

| Status | Description |
| --- | --- |
| 200 | The branding. |
| 400 | The body isn't JSON. |
| 401 | Missing or invalid API key. |
| 403 | Insufficient scope, or hiding the mark on a plan without it (`limit_reached`). |
| 422 | A bad color, font or length, no field to change, or an unknown key. |

## Example request

```bash
curl -X PATCH 'https://www.unitpost.com/api/v1/branding' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0' \
  -H 'Content-Type: application/json' \
  -d '{ }'
```

## Example response (200)

```json
{
  "object": "branding",
  "company_name": "string",
  "company_address": "string",
  "logo_url": "https://example.com",
  "has_brand_logo": false,
  "colors": {
    "background": "string",
    "footer_background": "string",
    "text": "string",
    "accent": "string",
    "button_text": "string"
  },
  "font": "string",
  "hide_unitpost_branding": false,
  "unitpost_branding_hidden": false,
  "can_hide_unitpost_branding": false,
  "unsubscribe_page": {
    "title": "string",
    "description": "string",
    "confirm": false,
    "collect_reason": false,
    "show_address": false,
    "show_topics": false,
    "save_label": "string",
    "global_label": "string",
    "global_note": "string",
    "topics_heading": "string"
  },
  "footer": {
    "intro_text": "string",
    "unsubscribe_label": "string"
  }
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/platform/patch-branding
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
