> ## Documentation Index
> Fetch the complete documentation index at: https://docs-provider.voucher.allride.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Provider profile and branding

> Your general information, how you look to consumers, and your dashboard theme.

## Provider profile

The provider profile is your consumer-visible **general information and general terms**: `GET /provider/v1/provider-profile`.

| Field | Notes |
| - | - |
| `displayName` | Required; 80 characters per locale |
| `tagline` | 160 characters |
| `description` | Restricted Markdown, 5,000 characters |
| `termsText`, `termsUrl` | Your general terms (Markdown up to 20,000 characters, and an https URL); they apply to all your voucher sets |
| `privacyUrl`, `websiteUrl`, `supportUrl` | https URLs |
| `appLinks` | `appStoreUrl`, `playStoreUrl`: your App Store and Google Play links |
| `defaultCategoryId` | An active category |
| `countries` | Where you operate; empty means all |

Your app links and your terms and privacy URLs live **only** in the profile, not on voucher sets. On a consumer's landing page, end customers first see every provider the link offers; your header shows your logo, name, tagline, App Store and Google Play buttons and your terms, privacy and website links, and each voucher set's details (with its own voucher terms, `termsText`) open in a dialog that can repeat those links.

The profile changes **only through approved change requests** (`POST /provider/v1/provider-profile/change-requests`, `manage-provider-profile`); `PUT` and `PATCH` on the profile answer 405. Before the first approval `live` is `null`. The changelog is `GET /provider/v1/provider-profile/changelog`.

## Listing branding

Listing branding is how you look inside consumer catalogs and on their landing pages: `GET /provider/v1/listing-branding`. It also changes **only through approved change requests** (`…/listing-branding/change-requests`).

* Colours: `primaryColor`, `secondaryColor`, `backgroundColor`, `surfaceColor`, `textColor`, `accentColor`, `buttonColor`, `buttonTextColor`, `buttonBorderColor`, each `#rrggbb` (field code `invalid-color`). A text-on-background contrast below 4.5:1 is a warning on the change request, not an error.
* Images: `logoAssetId`, `logoDarkAssetId`, `iconAssetId`, `heroImageAssetId`, ids of your own `ready` brand assets.
* `fontFamily`, `cornerRadius`, and `extensions` (keys `x-*` or `<consumerSlug>.*`).
* The response adds `assets` and `assetUrls` (URL, width and height of each image) for rendering.

**Brand assets** are uploaded in two steps; files never pass through the API:

1. `POST /provider/v1/brand-assets` with `kind` (`logo`, `logo-dark`, `icon`, `hero`), `contentType` (`image/png`, `image/jpeg`, `image/webp`; no SVG), `sizeBytes` (up to 2 MiB, hero 5 MiB) and `sha256`. The answer has an `uploadTarget`.
2. `PUT` the image to `uploadTarget.url` with its headers, then `POST /provider/v1/brand-assets/{brandAssetId}:complete`.
3. Poll the asset until `status` is `ready` (or `rejected` with `rejectionReason`: `image-too-large`, `unsupported-format`, `dimensions-out-of-range`, `checksum-mismatch`, `upload-expired`). Images are re-encoded and stripped of metadata; logos and icons up to 2048 × 2048 pixels, hero images up to 4096 × 4096, at least 32 × 32.

A partner can hold 500 assets (ready ones plus uploads younger than an hour). Delete unused assets with `DELETE`; an asset still in use → 409 `brand-asset-in-use` with `more.references` listing where. Voucher sets can override colours, logo and hero image with `brandingOverride`.

## Workspace branding

Workspace branding themes your own dashboards: `GET /partner/v1/branding/workspace` (readable by any member or API key) and `PUT /partner/v1/branding/workspace` (`manage-workspace-branding`, delegable).

* **No approval**: a `PUT` takes effect within 60 seconds. The first save answers 201, later ones 200.
* Same colour fields as listing branding, plus `faviconAssetId` and `emailLogoAssetId`; assets are managed under `/partner/v1/brand-assets` (kinds also `favicon` and `email-logo`).
* `textColor` on `backgroundColor` and `buttonTextColor` on `buttonColor` need a contrast of at least 4.5:1, otherwise 422 `insufficient-contrast`.
* Texts are checked on save; see [Content rules](https://docs-provider.voucher.allride.io/provider/content-rules.md#workspace-branding-saves) for 422 `content-blocked`.

## Related

* [Change requests and approval](https://docs-provider.voucher.allride.io/provider/change-requests.md)
* [Content rules](https://docs-provider.voucher.allride.io/provider/content-rules.md)
* [Voucher sets](https://docs-provider.voucher.allride.io/provider/voucher-sets.md#content-fields)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.